// 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); } }
// Save/Load to XML void ArTrackSpiral::_writeXML(ArRef<XmlNode> node) const { ArKeyFrameTrack::_writeXML(node); node->setName("TrackSpiral"); node->setPropertyReal("vx",_axis.x()); node->setPropertyReal("vy",_axis.y()); node->setPropertyReal("vz",_axis.z()); node->setPropertyReal("ox",_offset.x()); node->setPropertyReal("oy",_offset.y()); node->setPropertyReal("oz",_offset.z()); }