Hi Johannes,

It's not that hard. The clipping planes are defined by the z coordinate (in the viewing matrix). So you can get the atoms for a selection, transform to get the new z coordinate only, and check whether it's in between the planes:

m = cmd.get_model(selection).atom
v = cmd.get_view()
m = [ i for i in m if clipped(i,v) ]

So clipped should do the transform and check whether the atom is clipped. The trick then is to turn m back into a selection.

Hope it helps,


On Feb 25, 2011 5:18 PM, "Johannes Wollbold" <jwollbold@gmx.de> wrote:

Jason Vertrees wrote: > Having said this, you can however, can get the clipping information > from P...

Hi Jason,

thank you again for the hint. First I looked if I can select atoms
according to their coordinates, or store new coordinates after a
rotation / shift. But implicitly you already said that such
functionalities are not yet implemented. If clipping is performed with
the original camera view, the task is simple. get_view gives the output
(see above link to the help page):

set_view (\
    1.000000000,    0.000000000,    0.000000000,\
    0.000000000,    1.000000000,    0.000000000,\
    0.000000000,    0.000000000,    1.000000000,\
    0.000000000,    0.000000000, -320.337890625,\
   74.147140503,   74.174217224,   74.123344421,\
  317.145324707,  323.530487061,  -20.000000000 )

According to (4,3), the camera is shifted by -320 A in z direction only.
Since (6,1) and (6,2) indicate the camera distances of the slab planes,
I can select, in the pdb file, the atoms with (74 - 320 + 317 ) <= z <=
(74 - 320 + 323).

For different views, coordinate transformations with the rotation matrix
of the first 3 lines are needed. This should not be very difficult, but
perhaps somebody has already a solution?

Best regards

> On Thu, Feb 24, 2011 at 3:50 AM, Johannes Wollbold <jwollbold@gmx.de> wrote: > >> Hello, >> >>...