Apparently I'd forgotten that fetch defaults to doing a zoom (which it obviously has to do to make things look reasonable), so I thought I didn't need to play with the view. Too much non-PyMOL work rots the brain, it seems.


On Sun, Jul 15, 2012 at 5:35 AM, Thomas Holder <> wrote:
Hi Michael,

you need to reset the camera view.

def writeSurfaceValue(objname, wrlname='/tmp/tmp.wrl',
        ptsname='/tmp/tmp.pts', pdbname='/tmp/tmp.pdb'):

    view = cmd.get_view()
    cmd.set_view([1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0,
        0.0, 0.0, -50.0, 0.0, 0.0, 0.0, 40.0, 100.0, -20.0])
    points = getIndexedFaceSet(wrlname)
    f = file(ptsname,'w')


Michael Lerner wrote, On 07/15/12 04:05:
I finally got back to this, and I'm still having some trouble. The surface I write out seems to be offset from what I'm viewing in PyMOL. I define the following functions:

def getIndexedFaceSet(wrlname):
    f = file(wrlname)
    for line in f:
        if 'geometry IndexedFaceSet {' in line:
        print "Could not find IndexedFaceSet"
        return None
    assert 'coord Coordinate' in
    assert 'point' in
    points = []
    for line in f:
        if not line.strip(): continue
        line = line.strip()
        if ']' in line:
        if line.endswith(','):
            line = line[:-1]
        points.append(','.join(line.split()) + '\n')
    return points

def pts2pdb(ptsname,pdbname):
    f = file(pdbname,'w')
    atomid,resi = 1,1
    for line in open(ptsname):
        line = line.strip()
        if not line: continue
        c = [float(x) for x in line.split(',')]
        f.write('ATOM %06s %4s PHO  %04s    %8.3f%8.3f%8.3f\n'%(atomid,resi,'C',c[0],c[1],c[2]))
        atomid += 1
        def writeSurfaceValue(objname,wrlname='/tmp/tmp.wrl',ptsname='/tmp/tmp.pts',pdbname='/tmp/tmp.pdb'):
    points = getIndexedFaceSet(wrlname)
    f = file(ptsname,'w')

and then do

fetch 1rx1
set surface_solvent, 1
show surface
run <whatever file defines the above functions>
write_surface_value 1rx1
load /tmp/tmp.pdb
show spheres, tmp

and the tmp object looks like it has the right shape, but is clearly offset from 1rx1.

I have a feeling I'm doing something simple and obvious wrong, but I'm not sure what.



On Mon, Jun 11, 2012 at 10:47 PM, Michael Lerner < <>> wrote:

    Hi all,

    Tsjerk- Thanks. I'm not sure how I missed that, given that it's even
    mentioned on the wiki on the surface page under the clear heading
    "Exporting Surface/Mesh Coordinates to File" :-|.
    I don't know anything about VRML, but I found some documentation
    online at and it
    looks really straightforward. The surface will show up in the VRML
    file as an IndexedFaceSet, and the points are just XYZ triples, and
    I can safely ignore everything else.

    Darrell- Thanks. I'll build that in as an option.

    Takanori- Thanks. That's really cool. I happen to want solvent
    accessible surfaces rather than isosurfaces, but "dump" is
    definitely going into my bag of tricks.


    On Mon, Jun 11, 2012 at 8:57 PM, Takanori Nakane
    <>> wrote:


        Another way:
        There is an undocumented API called 'dump', which can
        dump coordinates of isomesh/isosurface to a file.

        For mesh, it dumps a list of vertex coordinates, which
        can be rendered as GL_LINE_STRIP.
        For surface, it dumps a list of pairs of a vertex coordinate
        and its vertex normal vector, which can be rendered as GL_TRIANGLES.

        Please examine my old post for a script example.

        Best regards,

        Takanori Nakane

Thomas Holder
MPI for Developmental Biology
Spemannstr. 35
D-72076 Tübingen

Michael Lerner
Department of Physics and Astronomy
Earlham College - Drawer 111
801 National Road West
Richmond, IN   47374-4095