// 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());

}
// 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);
  
  }
}