52 float leaf_bone_length;
58 struct ArmatureJoints {
60 std::vector<COLLADAFW::Node *> root_joints;
62 std::vector<ArmatureJoints> armature_joints;
67 std::map<COLLADAFW::UniqueId, COLLADAFW::UniqueId> geom_uid_by_controller_uid;
68 std::map<COLLADAFW::UniqueId, COLLADAFW::Node *> joint_by_uid;
69 std::vector<COLLADAFW::Node *> root_joints;
70 std::vector<COLLADAFW::Node *> finished_joints;
71 std::vector<COLLADAFW::MorphController *> morph_controllers;
72 std::map<COLLADAFW::UniqueId, Object *> joint_parent_map;
73 std::map<COLLADAFW::UniqueId, Object *> unskinned_armature_map;
81 std::map<COLLADAFW::UniqueId, SkinInfo>
84 JointData *get_joint_data(COLLADAFW::Node *node);
88 COLLADAFW::Node *node,
91 float parent_mat[4][4],
93 std::vector<std::string> &layer_labels);
96 COLLADAFW::Node *node,
98 std::vector<std::string> &layer_labels,
107 void fix_leaf_bone_hierarchy(
bArmature *armature,
Bone *bone,
bool fix_orientation);
110 void connect_bone_chains(
bArmature *armature,
Bone *bone,
int max_chain_length);
112 void set_pose(
Object *ob_arm,
113 COLLADAFW::Node *root_node,
114 const char *parentname,
115 float parent_mat[4][4]);
117 void set_bone_transformation_type(
const COLLADAFW::Node *node,
Object *ob_arm);
118 bool node_is_decomposed(
const COLLADAFW::Node *node);
120 void set_leaf_bone_shapes(
Object *ob_arm);
121 void set_euler_rotmode();
124 Object *get_empty_for_leaves();
127 Object *find_armature(COLLADAFW::Node *node);
129 ArmatureJoints &get_armature_joints(
Object *ob_arm);
133 void create_armature_bones(
Main *bmain, std::vector<Object *> &arm_objs);
136 using TagsMap = std::map<std::string, ExtraTags *>;
137 TagsMap uid_tags_map;
162 void link_armature(
Object *ob_arm,
163 const COLLADAFW::UniqueId &geom_id,
164 const COLLADAFW::UniqueId &controller_data_id);
171 COLLADAFW::UniqueId *
get_geometry_uid(
const COLLADAFW::UniqueId &controller_uid);