// Update the skeleton transforms based on the dragger. void IvObjectDragger::UpdateSkeleton() { ItemPtr selectedItem = GetSelectedItem(); if( !selectedItem ) { return; } RaveTransform<float> tbox; const float* q = _transformBox->rotation.getValue().getValue(); tbox.rot = Vector(q[3], q[0], q[1], q[2]); SbVec3f v = _transformBox->translation.getValue(); tbox.trans = Vector(v[0], v[1], v[2]); Transform told; told.trans = -_ab.pos; RaveTransform<float> tnew = tbox*told*_toffset; SetSoTransform(selectedItem->GetIvTransform(), tnew); KinBodyItemPtr pbody = boost::dynamic_pointer_cast<KinBodyItem>(selectedItem); if( !!pbody ) { pbody->UpdateFromIv(); CheckCollision(_checkCollision); } // other motion handler calls _viewer.lock()->_UpdateCameraTransform(0); }