Blender  V3.3
SkinInfo.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
7 #pragma once
8 
9 #include <map>
10 #include <vector>
11 
12 #include "COLLADAFWNode.h"
13 #include "COLLADAFWSkinController.h"
14 #include "COLLADAFWSkinControllerData.h"
15 #include "COLLADAFWTypes.h"
16 #include "COLLADAFWUniqueId.h"
17 
18 #include "BKE_context.h"
19 #include "DNA_object_types.h"
20 
21 #include "TransformReader.h"
22 #include "collada_internal.h"
23 
29 class SkinInfo {
30  private:
31  /* to build armature bones from inverse bind matrices */
32  struct JointData {
33  float inv_bind_mat[4][4]; /* joint inverse bind matrix */
34  COLLADAFW::UniqueId joint_uid; /* joint node UID */
35  // Object *ob_arm; /* armature object */
36  };
37 
38  float bind_shape_matrix[4][4];
39 
40  /* data from COLLADAFW::SkinControllerData, each array should be freed */
41  COLLADAFW::UIntValuesArray joints_per_vertex;
42  COLLADAFW::UIntValuesArray weight_indices;
43  COLLADAFW::IntValuesArray joint_indices;
44  /* COLLADAFW::FloatOrDoubleArray weights; */
45  std::vector<float> weights;
46 
47  std::vector<JointData> joint_data; /* index to this vector is joint index */
48 
49  UnitConverter *unit_converter;
50 
51  Object *ob_arm;
52  COLLADAFW::UniqueId controller_uid;
53  Object *parent;
54 
55  public:
57  SkinInfo(const SkinInfo &skin);
58  SkinInfo(UnitConverter *conv);
59 
61  template<typename T> void transfer_array_data(T &src, T &dest);
62 
64  void transfer_int_array_data_const(const COLLADAFW::IntValuesArray &src,
65  COLLADAFW::IntValuesArray &dest);
66 
67  void transfer_uint_array_data_const(const COLLADAFW::UIntValuesArray &src,
68  COLLADAFW::UIntValuesArray &dest);
69 
70  void borrow_skin_controller_data(const COLLADAFW::SkinControllerData *skin);
71 
72  void free();
73 
79  void add_joint(const COLLADABU::Math::Matrix4 &matrix);
80 
81  void set_controller(const COLLADAFW::SkinController *co);
82 
84  Object *create_armature(Main *bmain, Scene *scene, ViewLayer *view_layer);
85 
86  Object *set_armature(Object *ob_arm);
87 
88  bool get_joint_inv_bind_matrix(float inv_bind_mat[4][4], COLLADAFW::Node *node);
89 
91 
92  const COLLADAFW::UniqueId &get_controller_uid();
93 
101  bool uses_joint_or_descendant(COLLADAFW::Node *node);
102 
103  void link_armature(bContext *C,
104  Object *ob,
105  std::map<COLLADAFW::UniqueId, COLLADAFW::Node *> &joint_by_uid,
106  TransformReader *tm);
107 
108  bPoseChannel *get_pose_channel_from_node(COLLADAFW::Node *node);
109 
110  void set_parent(Object *_parent);
111 
112  Object *get_parent();
113 
114  void find_root_joints(const std::vector<COLLADAFW::Node *> &root_joints,
115  std::map<COLLADAFW::UniqueId, COLLADAFW::Node *> &joint_by_uid,
116  std::vector<COLLADAFW::Node *> &result);
117 
118  bool find_node_in_tree(COLLADAFW::Node *node, COLLADAFW::Node *tree_root);
119 };
Object is a sort of wrapper for general info.
#define C
Definition: RandGen.cpp:25
void find_root_joints(const std::vector< COLLADAFW::Node * > &root_joints, std::map< COLLADAFW::UniqueId, COLLADAFW::Node * > &joint_by_uid, std::vector< COLLADAFW::Node * > &result)
Definition: SkinInfo.cpp:289
const COLLADAFW::UniqueId & get_controller_uid()
Definition: SkinInfo.cpp:168
void transfer_int_array_data_const(const COLLADAFW::IntValuesArray &src, COLLADAFW::IntValuesArray &dest)
Definition: SkinInfo.cpp:70
void set_controller(const COLLADAFW::SkinController *co)
Definition: SkinInfo.cpp:115
void link_armature(bContext *C, Object *ob, std::map< COLLADAFW::UniqueId, COLLADAFW::Node * > &joint_by_uid, TransformReader *tm)
Definition: SkinInfo.cpp:193
Object * set_armature(Object *ob_arm)
Definition: SkinInfo.cpp:139
void borrow_skin_controller_data(const COLLADAFW::SkinControllerData *skin)
Definition: SkinInfo.cpp:84
bool uses_joint_or_descendant(COLLADAFW::Node *node)
Definition: SkinInfo.cpp:173
Object * BKE_armature_from_object()
Definition: SkinInfo.cpp:163
bool get_joint_inv_bind_matrix(float inv_bind_mat[4][4], COLLADAFW::Node *node)
Definition: SkinInfo.cpp:149
void add_joint(const COLLADABU::Math::Matrix4 &matrix)
Definition: SkinInfo.cpp:108
void transfer_uint_array_data_const(const COLLADAFW::UIntValuesArray &src, COLLADAFW::UIntValuesArray &dest)
Definition: SkinInfo.cpp:77
void set_parent(Object *_parent)
Definition: SkinInfo.cpp:279
Object * get_parent()
Definition: SkinInfo.cpp:284
bool find_node_in_tree(COLLADAFW::Node *node, COLLADAFW::Node *tree_root)
Definition: SkinInfo.cpp:315
void transfer_array_data(T &src, T &dest)
Definition: SkinInfo.cpp:63
bPoseChannel * get_pose_channel_from_node(COLLADAFW::Node *node)
Definition: SkinInfo.cpp:274
Object * create_armature(Main *bmain, Scene *scene, ViewLayer *view_layer)
Definition: SkinInfo.cpp:133
void free()
Definition: SkinInfo.cpp:100
OperationNode * node
Scene scene
SyclQueue void void * src
SyclQueue void * dest
#define T
Definition: BKE_main.h:121