+#include <msp/datafile/collection.h>
#include "keyframe.h"
+#include "pose.h"
+
+using namespace std;
namespace Msp {
namespace GL {
+// Avoid synthesizing RefPtr c'tor and d'tor in files including keyframe.h
+KeyFrame::KeyFrame()
+{ }
+
+KeyFrame::~KeyFrame()
+{ }
+
+void KeyFrame::set_matrix(const Matrix &m)
+{
+ matrix = m;
+}
+
+void KeyFrame::set_pose(const Pose &p)
+{
+ pose = &p;
+ pose.keep();
+}
+
+
KeyFrame::Loader::Loader(KeyFrame &k):
- DataFile::ObjectLoader<KeyFrame>(k)
+ DataFile::CollectionObjectLoader<KeyFrame>(k, 0)
+{
+ init();
+}
+
+KeyFrame::Loader::Loader(KeyFrame &k, Collection &c):
+ DataFile::CollectionObjectLoader<KeyFrame>(k, &c)
+{
+ init();
+}
+
+void KeyFrame::Loader::init()
{
+ add("pose", &Loader::pose);
+ add("pose", &Loader::pose_inline);
add("position", &Loader::position);
add("rotation", &Loader::rotation);
add("scaling", &Loader::scaling_uniform);
add("scaling", &Loader::scaling);
}
+void KeyFrame::Loader::pose(const string &n)
+{
+ obj.pose = &get_collection().get<Pose>(n);
+ obj.pose.keep();
+}
+
+void KeyFrame::Loader::pose_inline()
+{
+ RefPtr<Pose> p = new Pose;
+ load_sub(*p, get_collection());
+ obj.pose = p;
+}
+
void KeyFrame::Loader::position(float x, float y, float z)
{
obj.matrix.translate(x, y, z);