This is a read-only mirror of pymolwiki.org

Difference between revisions of "Dump2CGO"

From PyMOL Wiki
Jump to navigation Jump to search
m (2 revisions)
 
m (1 revision)
 
(One intermediate revision by one other user not shown)
Line 72: Line 72:
 
         cgo = dump2surfaceCGO()
 
         cgo = dump2surfaceCGO()
 
     else:
 
     else:
         print "Unknown type"
+
         print("Unknown type")
 
         return
 
         return
  

Latest revision as of 03:14, 5 March 2018

Overview

Dumps a PyMOL object to a CGO object.

The Code

from pymol import cmd
from pymol.cgo import *

def dump2surfaceCGO():
    CGOobj = []
    dumpedFile = open("dump.tmp").read()
    for block in dumpedFile.split('\n\n'):
        CGOobj.append(BEGIN)
        CGOobj.append(TRIANGLES)

        for line in block.split('\n'):
            if line == '':
                continue

            vals = line.split()
            CGOobj.append(NORMAL)
            CGOobj.append(float(vals[3]))
            CGOobj.append(float(vals[4]))
            CGOobj.append(float(vals[5]))
            CGOobj.append(VERTEX)
            CGOobj.append(float(vals[0]))
            CGOobj.append(float(vals[1]))
            CGOobj.append(float(vals[2]))

        CGOobj.append(END)
    return CGOobj

def dump2meshCGO():
    CGOobj = []
    dumpedFile = open("dump.tmp").read()
    for block in dumpedFile.split('\n\n'):
        CGOobj.append(BEGIN)
        CGOobj.append(LINE_STRIP)

        for line in block.split('\n'):
            if line == '':
                continue

            CGOobj.append(VERTEX)
            vals = line.split()

            CGOobj.append(float(vals[0]))
            CGOobj.append(float(vals[1]))
            CGOobj.append(float(vals[2]))

        CGOobj.append(END)
    return CGOobj

def getType(objname):
    session = cmd.get_session()['names']
    for obj in session:
        if obj == None:
            continue
        if obj[0] != objname:
            continue
        return obj[4]
    return -1


def dump2CGO(obj):
    cmd.dump("dump.tmp", obj)
    type = getType(obj)
    cgo = []
    if (type == 3): # Mesh
        cgo = dump2meshCGO()
    elif (type == 7): #Surface
        cgo = dump2surfaceCGO()
    else:
        print("Unknown type")
        return

    cmd.load_cgo(cgo, "CGO " + obj)

cmd.extend('dump2CGO', dump2CGO)
cmd.auto_arg[0]['dump2CGO'] = [cmd.object_sc, 'object', '']