class cogs::Armature

#include <Armature.h>

class Armature: public cogs::Skeleton {
public:
    // construction

    Armature();

    // methods

    void ConvertSkinDataFromNodeToBoneIds(std::unordered_map<int, cogs::Bone*> bone_for_nodeid);
    void SetMesh(const Mesh& mesh, const SkinningData& skindata);
    const Mesh* GetMesh() const;
    const SkinningData* GetSkinningData() const;
};

Inherited Members

public:
    // structs

    struct BaseProperty;

    template <class T>
    struct Property;

    // fields

    cogs::Transform transform;

    // methods

    Skeleton& operator=(const Skeleton& skeleton);
    std::string GetName() const;
    void SetName(const std::string& new_name);
    std::vector<Bone*> GetAllBones() const;
    std::vector<std::string> GetAllBoneCaptions() const;
    std::vector<Bone*> GetBones(const std::vector<std::string>& bone_captions) const;
    Bone* GetBone(const uint32_t id) const;
    Bone* GetBone(const std::string& bone_caption) const;
    std::vector<Bone*> GetRootBones() const;
    void Clear();
    unsigned GetBoneCount() const;
    Bone* AddBone(const std::string& name, const std::string& parent_name, const glm::vec3& tail_position);
    Bone* AddBone(const std::string& name, const std::string& parent_name, const BoneTransform& transform);
    Bone* AddBoneToRoot(const std::string& name, const glm::vec3& tail_position);
    Bone* AddBoneToRoot(const std::string& name, const BoneTransform& transform);
    void RollBasis(const std::string& bone_name, const float roll_angle);
    void ApplyBoneLengths(const std::vector<float>& bone_lengths);
    void SortBySkeleton(const cogs::Skeleton& ref_skeleton);
    void InterpolateTo(const cogs::Skeleton& target_skel, float target_weight, cogs::Skeleton* out_skeleton) const;
    SkeletonPose GetCurrentPose() const;
    SkeletonPose GetCurrentPose(const std::vector<std::string>& bone_order) const;
    void ApplyPose(const SkeletonPose& pose, bool ignore_root_transform = false);
    void ApplyBindpose();
    void ApplyCurrentPoseAsBindpose();
    BaseProperty* GetProperty(const std::string& prop) const;

    template <class T>
    T GetProperty(const std::string& prop) const;

    template <class T>
    void SetProperty(const std::string& prop, const T& value);

    bool HasProperty(const std::string& prop) const;

protected:
    // fields

    std::string name_;
    cogs::Transform bind_transform;
    std::unordered_map<std::string, BaseProperty*> properties_;
    std::map<std::string, Bone*> bone_for_name_;
    std::vector<Bone*> bones_;
    std::vector<Bone*> root_bones_;
    unsigned bone_count_ = 0;

    // methods

    Bone* CreateNewBone(const std::string& caption);
    Bone* CreateBoneClone(const cogs::Bone* bone);
    void MakeCloneOf(const Skeleton& skeleton);
    void OnTransformChange();