diff options
Diffstat (limited to 'dev/a4-dance/skeleton.h')
-rw-r--r-- | dev/a4-dance/skeleton.h | 136 |
1 files changed, 0 insertions, 136 deletions
diff --git a/dev/a4-dance/skeleton.h b/dev/a4-dance/skeleton.h deleted file mode 100644 index 7a30b33..0000000 --- a/dev/a4-dance/skeleton.h +++ /dev/null @@ -1,136 +0,0 @@ -#ifndef SKELETON_H_ -#define SKELETON_H_ - -#include <mingfx.h> -using namespace mingfx; - -#include "simple_parser.h" - - -/** This data structure describes a rigid body skeleton used to record and play - back motion capture data. Each skelton has a root node, which may have one or - more child bones. Each bone, may have zero or more child bones. - - */ -class Skeleton { -public: - - /// Creates an empty skeleton - Skeleton(); - virtual ~Skeleton(); - - /// Loads a skeleton from the Acclaim ASF file format. - void LoadFromASF(const std::string &asf_filename); - - /// The number of bones attached to the root node - int num_root_bones() const; - - /// The name of the i-th bone attached to the root node - std::string root_bone(int i) const; - - /// The number of children of the named bone - int num_children(const std::string &bone_name) const; - - /// The name of the i-th child of the named bone - std::string child_bone(const std::string &bone_name, int i) const; - - - /** The joint angle rotations that produce the animation are applied around - a set of x,y,z axes that make sense for the joint (e.g., a joint with - only 1 degree-of-freedom might setup a coordinate system where the X-axis - is aligned along the hinge of that joint). The following transform - rotates the bone's local coordinate system into the joint angle coordinate - system. This must be done before the joint angles can be applied. Then, - after the joint angles are applied, we must rotate back before applying - the to_parent transform. - */ - Matrix4 BoneSpaceToRotAxesSpace(const std::string &bone_name) const; - - /** The inverse of BoneSpaceToRotAxesSpace(). Use this matrix to rotate - back to the bone's local coordinate system after applying joint angle - rotations. */ - Matrix4 RotAxesSpaceToBoneSpace(const std::string &bone_name) const; - - /** This matrix transforms from the bone's local coordinate system to the - coordinate system of its children, which is the same as translating from - the bone's origin by the BoneDirectionAndLength() */ - Matrix4 BoneSpaceToChildrenSpace(const std::string &bone_name) const; - - /** Returns the direction and length of the bone. If you translate from the - bone's origin along this vector, you will reach the point that should be - used as the origin for the bone's children. */ - Vector3 BoneDirectionAndLength(const std::string &bone_name) const; - - - - /* Most users will not need to access the routines below this line because - all of these properties are taken into account when calculating the - matrices above. */ - - /// True if the joint used to rotate bone_name can rotate around the X axis. - bool rx_dof(const std::string &bone_name) const; - - /// Returns the valid range of X-axis joint angles for the joint used to rotate bone_name. - Vector2 rx_limits(const std::string &bone_name) const; - - /// True if the joint used to rotate bone_name can rotate around the Y axis. - bool ry_dof(const std::string &bone_name) const; - - /// Returns the valid range of Y-axis joint angles for the joint used to rotate bone_name. - Vector2 ry_limits(const std::string &bone_name) const; - - /// True if the joint used to rotate bone_name can rotate around the Z axis. - bool rz_dof(const std::string &bone_name) const; - - /// Returns the valid range of Z-axis joint angles for the joint used to rotate bone_name. - Vector2 rz_limits(const std::string &bone_name) const; - - /// Returns 0,1,2 or 3 for the number of degrees of freedom of the joint - /// used to rotate the named bone. - int degrees_of_freedom(const std::string &bone_name) const; - - - /// Typically zero, and we can ignore this. - Vector3 skeleton_root_position() const; - - /// Typically zero, and we can ignore this. - Vector3 skeleton_root_orientation() const; - - -private: - bool using_degrees_; - - std::vector<std::string> root_bones_; - Vector3 root_position_; - Vector3 root_orientation_; - - std::map<std::string, int> ids_; - - std::map<std::string, std::vector<std::string> > children_; - std::map<std::string, Vector3> directions_; - - std::map<std::string, float> lengths_; - - std::map<std::string, bool> rx_dof_; - std::map<std::string, Vector2> rx_limits_; - - std::map<std::string, bool> ry_dof_; - std::map<std::string, Vector2> ry_limits_; - - std::map<std::string, bool> rz_dof_; - std::map<std::string, Vector2> rz_limits_; - - std::map<std::string, Matrix4> bone_to_rot_axes_; - std::map<std::string, Matrix4> rot_axes_to_bone_; - std::map<std::string, Matrix4> bone_to_children_; - - - // Helpers for parsing skeleton data from file - void ParseUnits(SimpleParser *parser); - void ParseRoot(SimpleParser *parser); - void ParseBonedata(SimpleParser *parser); - void ParseBone(SimpleParser *parser, bool dg); - void ParseHierarchy(SimpleParser *parser); -}; - -#endif |