void LinkNonRootPart(SceneObjectPart part, Vector3 oldGroupPosition, Quaternion oldGroupRotation,
int linkNum)
{
Quaternion WorldRot = oldGroupRotation*part.GetRotationOffset();
// first fix from old local to world
// position
Vector3 axPos = part.OffsetPosition;
axPos *= oldGroupRotation;
part.SetGroupPosition(oldGroupPosition + axPos);
//offset
part.SetRotationOffset(false, WorldRot, false);
// have it in world coords lets fix other things
m_scene.SceneGraph.LinkPartToSOG(this, part, linkNum);
part.CreateSelected = true;
// now lets move to the new parent frame
Quaternion rootRotation = m_rootPart.GetRotationOffset();
Vector3 pos = part.GroupPosition - AbsolutePosition;
pos *= Quaternion.Inverse(rootRotation);
part.SetOffsetPosition(pos);
Quaternion newRot = Quaternion.Inverse(rootRotation)*WorldRot;
part.SetRotationOffset(false, newRot, false);
// caller will tell the rest about this position changes..
}