Dear James,

> I wonder if anyone can point me in the right direction for converting an
> isomesh (eg representing electron density at a particular sigma level)
> to a cgo?  I have looked around, but can't seem to find an example of
> this.

Undocumented function "dump" can dump coordinates of
isomesh/isosurface to a file, which can be easily parsed into CGO.

I wrote a small script for this. Use as

  dump2CGO object_name_to_convert

Converting isosurface may take a while.

The script uses undocumented functions (dump, get_session) so that
there might be a compatibility issue. Please let me know
if it doesn't work.

Takanori Nakane

================ SCRIPT ===============

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', '']

------------------------------------------------------------------------------
Write once. Port to many.
Get the SDK and tools to simplify cross-platform app development. Create 
new or port existing apps to sell to consumers worldwide. Explore the 
Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join
http://p.sf.net/sfu/intel-appdev
_______________________________________________
PyMOL-users mailing list ([email protected])
Info Page: https://lists.sourceforge.net/lists/listinfo/pymol-users
Archives: http://www.mail-archive.com/[email protected]

Reply via email to