// Save/Load to XML void ArTrackOrientation::_writeXML(ArRef<XmlNode> node) const { node->setName("TrackOrientation"); node->setPropertyReal("duration",_track->getDuration()); node->setPropertyInteger("degree",_track->getDegree()); node->setPropertyInteger("dimension",4); ArTrackOrientationInterpolator *track=(ArTrackOrientationInterpolator *)_track; StlVector<unsigned> keysPositions; track->getKeysPositions(keysPositions); VectorN<double,4> key; for (unsigned i=0;i<keysPositions.size();i++) { track->getKeyFrame(keysPositions[i],key ); ArRef<XmlNode> keyFrame=node->addChild("KeyFrameOrientation"); keyFrame->setPropertyInteger("frame",keysPositions[i]); Quaterniond q(key[0],key[1],key[2],key[3]); Vector3d axis; double angle; q.getAxisAngle(axis,angle); keyFrame->setPropertyReal("vx",axis.x()); keyFrame->setPropertyReal("vy",axis.y()); keyFrame->setPropertyReal("vz",axis.z()); keyFrame->setPropertyReal("angle",angle); } }