From: Thomas H. <sp...@us...> - 2012-07-15 09:35:20
|
Hi Michael, you need to reset the camera view. def writeSurfaceValue(objname, wrlname='/tmp/tmp.wrl', ptsname='/tmp/tmp.pts', pdbname='/tmp/tmp.pdb'): cmd.hide('everything') cmd.show('surface',objname) 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]) cmd.save(wrlname) points = getIndexedFaceSet(wrlname) f = file(ptsname,'w') f.writelines(points) f.close() pts2pdb(ptsname,pdbname) cmd.set_view(view) Cheers, Thomas 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: > break > else: > print "Could not find IndexedFaceSet" > return None > assert 'coord Coordinate' in f.next() > assert 'point' in f.next() > points = [] > for line in f: > if not line.strip(): continue > line = line.strip() > if ']' in line: > break > 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 > f.close() > > def > writeSurfaceValue(objname,wrlname='/tmp/tmp.wrl',ptsname='/tmp/tmp.pts',pdbname='/tmp/tmp.pdb'): > cmd.hide('everything') > cmd.show('surface',objname) > cmd.save(wrlname) > points = getIndexedFaceSet(wrlname) > f = file(ptsname,'w') > f.writelines(points) > f.close() > pts2pdb(ptsname,pdbname) > cmd.extend('write_surface_value',writeSurfaceValue) > > 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. > > Thanks, > > -Michael > > On Mon, Jun 11, 2012 at 10:47 PM, Michael Lerner <mgl...@gm... > <mailto:mgl...@gm...>> 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" :-|. > (http://www.pymolwiki.org/index.php/Surface#Exporting_Surface.2FMesh_Coordinates_to_File). > I don't know anything about VRML, but I found some documentation > online at http://www.c3.hu/cryptogram/vrmltut/part5.html 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. > > Cheers, > -Michael > > On Mon, Jun 11, 2012 at 8:57 PM, Takanori Nakane > <t.n...@ma... > <mailto:t.n...@ma...>> wrote: > > Hi, > > 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. > http://www.mail-archive.com/pym...@li.../msg10012.html > > Best regards, > > Takanori Nakane -- Thomas Holder MPI for Developmental Biology Spemannstr. 35 D-72076 Tübingen |