X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fkeyframe.cpp;h=8e0d79044483f0fac6ba52c64476adb344e5b090;hb=78328c5f6e4dcbe883a3f5e4fe0974ab490be3f7;hp=429d893c1afa513fd351913d66833cfd7c9ccc3f;hpb=8cbb77df13c4a0e6d6ae0f8b32913cf7e5b2f59c;p=libs%2Fgl.git diff --git a/source/keyframe.cpp b/source/keyframe.cpp index 429d893c..8e0d7904 100644 --- a/source/keyframe.cpp +++ b/source/keyframe.cpp @@ -1,22 +1,66 @@ +#include #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(k) + DataFile::CollectionObjectLoader(k, 0) +{ + init(); +} + +KeyFrame::Loader::Loader(KeyFrame &k, Collection &c): + DataFile::CollectionObjectLoader(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(n); + obj.pose.keep(); +} + +void KeyFrame::Loader::pose_inline() +{ + RefPtr 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);