@cjthompson said:
is there any reason (transformation * transformation) won't work?
The doc says *() is Transformation * Point3d => Transformation. I'm in need of Transformation * Transformation => Transformation.
My application is animation. I may be turning 180 degrees by, for example, turning 0.5 degrees over each of 360 frames. If you have xform, a "turn 0.5 degrees" transformation, and you call instance.transform!( xform ) the transform!() method multiplies the existing transformation by the new xform matrix.
It also pushes undo info onto the undo stack, which you don't want. instance.move!( xform ) is supposed to be the same as instance.transform!() minus the undo stack. Unfortunately, it's buggy. It forgets to multiply, and just replaces the old transformation matrix with the new one (losing all existing scales, rotations and location). Bad bug.
So I'm getting xform via API calls, then multiplying (in Ruby) the existing and new transformations and giving the result to move!(). It works, but using the matrix multiplication code that's there already would be a lot faster. (The matrix multiplication is so fundamental to 3d geometry that it may be hand-tooled assembler.)


