+}
+
+void Animation::create_curves()
+{
+ for(vector<Curve *>::iterator i=curves.begin(); i!=curves.end(); ++i)
+ delete *i;
+ curves.clear();
+
+ typedef ValueCurve<3>::Knot Knot;
+ vector<Knot> positions;
+ vector<Knot> eulers;
+ vector<Knot> scales;
+ for(vector<TimedKeyFrame>::const_iterator i=keyframes.begin(); i!=keyframes.end(); ++i)
+ {
+ positions.push_back(Knot(i->time/Time::sec, i->keyframe->get_transform().get_position()));
+ const Transform::AngleVector3 &euler = i->keyframe->get_transform().get_euler();
+ eulers.push_back(Knot(i->time/Time::sec, Vector3(euler.x.radians(), euler.y.radians(), euler.z.radians())));
+ scales.push_back(Knot(i->time/Time::sec, i->keyframe->get_transform().get_scale()));
+ }
+
+ curves.reserve(3+uniforms.size());
+ curves.push_back(new ValueCurve<3>(POSITION, positions));
+ curves.push_back(new ValueCurve<3>(EULER, eulers));
+ curves.push_back(new ValueCurve<3>(SCALE, scales));
+
+ for(vector<UniformInfo>::const_iterator i=uniforms.begin(); i!=uniforms.end(); ++i)
+ {
+ if(i->size==1)
+ create_uniform_curve<1>(i->name);
+ else if(i->size==2)
+ create_uniform_curve<2>(i->name);
+ else if(i->size==3)
+ create_uniform_curve<3>(i->name);
+ else if(i->size==4)
+ create_uniform_curve<4>(i->name);
+ }
+}
+
+template<unsigned N>
+void Animation::create_uniform_curve(const string &name)
+{
+ typedef typename ValueCurve<N>::Knot Knot;