
Think of globalXform() as happening in the global (world/lab) coordinate space and localXform() as happening the the model's coordinate space. The point of having globalXform and localXform is to avoid having to know if the coordinates are a row vector or a column vector with the corresponding opposite orders of multiplication for the global/local effect. You don't know and you don't care :-) -- you just pick where you want the transformation to take place. That said, chimera's transformations are for a right-handed coordinate system with coordinates written as column vectors. Greg On Thu, 18 Jul 2002, Thomas Goddard wrote:
I forgot to mention that the difference between the OpenState localXform(xform) and globalXform(xform) routines. These routines change the current openState.xform by multiplying the xform argument on the right or left respectively. If c = atom.coord() and orig_xf is the current openState.xform then the displayed position is orig_xf * c. After calling openState.localXform(xform) the displayed position is
orig_xf * xform * c,
while after openState.globalXform(xform) the displayed position is
xform * orig_xf * c.
Tom