Hi Jeff, There isn't yet a Chimera command for per-model clipping. Below is some Python code that can do it. Open a density map and then open this Python code in Chimera to clip it. Some more code can make it loop through different depths. There is some trickiness to making it update the graphics window in such a loop. Ask for details if you want that. Tom
From: Jeff To: <goddard@cgl.ucsf.edu> Subject: per-model clipping plane question (or similar) Date: Thu, 2 Nov 2006 10:54:26 -0800
hi Tom,
was wondering if I can control the per-model clipping plane orientation/parameters/etc via command line or shortcuts -
would like to be able to methodically push a clipping plane in 'slab mode' through my model to compare it w/ other 2D/projection tools I use - I know I can click 'orient' on the model and it will orient to a default position/rotation (and I can click orient on the per-model clipping plane and therefore register them both), but is there then a way that I can specify (say, along one axis, like z) where the slab/clipping plane is positioned, like in pixels?
can I control the angular position of the clipping plane via command line, too?
thanks,
Jeff
----- Python code clip.py. # ----------------------------------------------------------------------------- # Python function to control per-model clipping (like menu entry # Tools / Depiction / Per-Model Clipping). The clip plane rotates with # the model (PDB structure, density map, ...). # # Parameters: # model is a Chimera Model # origin is (x,y,z) of point on clip plane. # normal is (nx,ny,nz) pointing towards clipped (invisible) half of plane. # slab_thickness is in data length units (usually Angstroms). # # Origin and normal are relative to the data coordinate system, for example, # the x,y,z coordinates of a PDB atoms or axes of a density map. The clip # def set_clipping(model, origin, normal, slab_thickness = None): p = model.clipPlane from chimera import Point, Vector p.origin = Point(*origin) p.normal = Vector(*normal) model.clipPlane = p model.useClipPlane = True if slab_thickness == None: model.useClipThickness = False else: model.clipThickness = slab_thickness model.useClipThickness = True # ----------------------------------------------------------------------------- # Cap holes left when clipping a surface. Controls graphical interface # shown by menu entry Tools / Depiction / Surface Capping. # # Parameters: # cap_color is (r,g,b) or (r,g,b,a) where values in range 0-1 # cap_mesh is True or False for mesh or solid cap appearance # cap_subdivision of 2 makes cap mesh twice as fine for detailed coloring. # cap_offset in data length units (usually Angstroms) for large models # sometimes needs to be larger to avoid cap itself being clipped due to # finite floating point precision in OpenGL. # def show_surface_caps(show, cap_color = None, cap_mesh = False, cap_subdivision = 1, cap_offset = 0.001): from SurfaceCap.gui import capper_dialog d = capper_dialog(create = True) d.Close() use_color = (cap_color != None) if use_color: d.use_cap_color.set(use_color) d.cap_color.showColor(cap_color) if cap_mesh: d.cap_style.set('mesh') else: d.cap_style.set('solid') d.subdivision_factor.set(cap_subdivision) d.cap_offset.set(cap_offset) d.show_caps.set(show) # ----------------------------------------------------------------------------- # Example using set_clipping(). # from chimera import openModels mlist = openModels.list() m = mlist[0] set_clipping(m, (.5,0,1), (0,1,1), 8) show_surface_caps(True, (1,0,0), True) # Red mesh caps
participants (1)
-
Thomas Goddard