**THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED**

*On 22/09/2005 at 06:17, ***xxxxxxxx** wrote:

The default transformation for all objects is at the origin (0,0,0) with no rotations (0d,0d,0d) and unity scale (1,1,1). When you move/rotate/scale (transform), the object's matrix stores the necessary values to take the object from the default transformation to the new one.

Sorrily, you're idea does not take into account scale or the 'p' angle rotation. With these, the maths get more complex. This is why matrices are far better to work with.

I think that the best approach is to get the Global matrix for the bone (to avoid object hierarchy traversal) and multiply it to this temporary 'End Point' vector:

var endPt = vector(0,0,length) * obj->GetMg();

What this does is 'apply the matrix' to the Vector 'endPt' causing the point to move/rotate/scale from default to current transform with respect to the bone object. It should then contain the Global X,Y,Z values for the end point for the bone's current location/rotation/scale.