X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fpose.cpp;h=99fa6bb3dfe812265a8e2372ddd9c1daad5f887a;hp=b5c5781b630be2365c5dcb06841acd3060291180;hb=4e4a3514961d130045619ea74d0bbab71580838c;hpb=9abfb801dbceb59272f6561731d066ed516340e5 diff --git a/source/pose.cpp b/source/pose.cpp index b5c5781b..99fa6bb3 100644 --- a/source/pose.cpp +++ b/source/pose.cpp @@ -37,7 +37,7 @@ void Pose::rotate_link(unsigned i, float angle, const Vector3 &axis) // Keep the base point stationary Vector3 base = arm_link.get_base(); Vector3 new_base = links[i].local_matrix*base; - links[i].local_matrix.translate(base.x-new_base.x, base.y-new_base.y, base.z-new_base.z); + links[i].local_matrix = Matrix::translation(base-new_base)*links[i].local_matrix; if(const Armature::Link *parent = arm_link.get_parent()) links[i].matrix = links[parent->get_index()].matrix*links[i].local_matrix; @@ -56,14 +56,19 @@ const Matrix &Pose::get_link_matrix(unsigned i) const Pose::Loader::Loader(Pose &p, Collection &c): DataFile::CollectionObjectLoader(p, &c) { - add("armature", &Pose::armature); + add("armature", &Loader::armature); add("link", &Loader::link); } +void Pose::Loader::armature(const string &n) +{ + obj.set_armature(get_collection().get(n)); +} + void Pose::Loader::link(const string &n) { if(!obj.armature) - error("Armature must be specified first"); + throw logic_error("Armature must be specified first"); LinkLoader ldr(obj, obj.armature->get_link(n).get_index()); load_sub_with(ldr); }