Blender V4.3
BKE_armature.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
11#include "BLI_bounds_types.hh"
12#include "BLI_function_ref.hh"
13#include "BLI_listbase.h"
16#include "BLI_set.hh"
17
18#include "DNA_armature_types.h"
19
20struct BMEditMesh;
21struct Bone;
22struct Depsgraph;
23struct IDProperty;
24struct ListBase;
25struct Main;
26struct Mesh;
27struct Object;
28struct PoseTree;
29struct Scene;
30struct bArmature;
31struct bConstraint;
32struct bGPDstroke;
33struct bPose;
34struct bPoseChannel;
35struct MDeformVert;
36
37struct EditBone {
48 char name[64];
55 float roll;
56
58 float head[3];
59 float tail[3];
65 int flag;
66 int layer;
68
69 /* Envelope distance & weight */
70 float dist, weight;
74
75 /* Bendy-Bone parameters */
76 short segments;
77 float roll1, roll2;
80 float ease1, ease2;
81 float scale_in[3], scale_out[3];
82
84 float oldlength;
85
98
99 /* Used for display */
101 float disp_mat[4][4];
103 float disp_tail_mat[4][4];
105 float disp_bbone_mat[32][4][4];
106
109
110 ::BoneColor color; /* MUST be named the same as in bPoseChannel and Bone structs. */
111 ListBase /*BoneCollectionReference*/ bone_collections;
112
113 /* Used to store temporary data */
114 union {
117 void *p;
118 int i;
120};
121
124
125 bConstraint *con; /* the constraint of this target */
126 int tip; /* index of tip pchan in PoseTree */
127};
128
129struct PoseTree {
131
132 int type; /* type of IK that this serves (CONSTRAINT_TYPE_KINEMATIC or ..._SPLINEIK) */
133 int totchannel; /* number of pose channels */
134
135 ListBase targets; /* list of targets of the tree */
136 bPoseChannel **pchan; /* array of pose channels */
137 int *parent; /* and their parents */
138
139 float (*basis_change)[3][3]; /* basis change result from solver */
140 int iterations; /* iterations from the constraint */
141 int stretch; /* disable stretching */
142};
143
144/* Core armature functionality. */
145
146bArmature *BKE_armature_add(Main *bmain, const char *name);
149void BKE_armature_bonelist_free(ListBase *lb, bool do_id_user);
150void BKE_armature_editbonelist_free(ListBase *lb, bool do_id_user);
151
152void BKE_armature_copy_bone_transforms(bArmature *armature_dst, const bArmature *armature_src);
153
154void BKE_armature_transform(bArmature *arm, const float mat[4][4], bool do_props);
155
159std::optional<blender::Bounds<blender::float3>> BKE_armature_min_max(const Object *ob);
160
176void BKE_pchan_minmax(const Object *ob,
177 const bPoseChannel *pchan,
178 const bool use_empty_drawtype,
179 float r_min[3],
180 float r_max[3]);
193std::optional<blender::Bounds<blender::float3>> BKE_pose_minmax(const Object *ob, bool use_select);
194
203bool bone_autoside_name(char name[64], int strip_number, short axis, float head, float tail);
204
212Bone *BKE_armature_find_bone_name(bArmature *arm, const char *name);
213
216
217bool BKE_armature_bone_flag_test_recursive(const Bone *bone, int flag);
218
223 const float vec[3], const float b1[3], const float b2[3], float rad1, float rad2, float rdist);
224
234void BKE_armature_where_is_bone(Bone *bone, const Bone *bone_parent, bool use_recursion);
240void BKE_pose_remap_bone_pointers(bArmature *armature, bPose *pose);
245void BKE_pose_channels_clear_with_null_bone(bPose *pose, bool do_id_user);
253void BKE_pose_rebuild(Main *bmain, Object *ob, bArmature *arm, bool do_id_user);
259void BKE_pose_ensure(Main *bmain, Object *ob, bArmature *arm, bool do_id_user);
264void BKE_pose_where_is(Depsgraph *depsgraph, Scene *scene, Object *ob);
271void BKE_pose_where_is_bone(Depsgraph *depsgraph,
272 Scene *scene,
273 Object *ob,
274 bPoseChannel *pchan,
275 float ctime,
276 bool do_extra);
281
282void vec_roll_to_mat3(const float vec[3], float roll, float r_mat[3][3]);
283
287void vec_roll_to_mat3_normalized(const float nor[3], float roll, float r_mat[3][3]);
292void mat3_to_vec_roll(const float mat[3][3], float r_vec[3], float *r_roll);
297void mat3_vec_to_roll(const float mat[3][3], const float vec[3], float *r_roll);
298
299/* Common Conversions Between Co-ordinate Spaces */
300
304void BKE_armature_mat_world_to_pose(Object *ob, const float inmat[4][4], float outmat[4][4]);
310void BKE_armature_loc_world_to_pose(Object *ob, const float inloc[3], float outloc[3]);
317 const float inmat[4][4],
318 float outmat[4][4]);
324void BKE_armature_loc_pose_to_bone(bPoseChannel *pchan, const float inloc[3], float outloc[3]);
329 const float inmat[4][4],
330 float outmat[4][4]);
336void BKE_armature_mat_pose_to_delta(float delta_mat[4][4],
337 float pose_mat[4][4],
338 float arm_mat[4][4]);
339
341 Object *ob,
342 bPoseChannel *pchan,
343 const float inmat[4][4],
344 float outmat[4][4]);
345
349void BKE_pchan_mat3_to_rot(bPoseChannel *pchan, const float mat[3][3], bool use_compat);
353void BKE_pchan_rot_to_mat3(const bPoseChannel *pchan, float r_mat[3][3]);
358void BKE_pchan_apply_mat4(bPoseChannel *pchan, const float mat[4][4], bool use_compat);
362void BKE_pchan_to_mat4(const bPoseChannel *pchan, float r_chanmat[4][4]);
363
369
374void BKE_bone_offset_matrix_get(const Bone *bone, float offs_bone[4][4]);
375
376/* Transformation inherited from the parent bone. These matrices apply the effects of
377 * HINGE/NO_SCALE/NO_LOCAL_LOCATION options over the pchan loc/rot/scale transformations. */
379 float rotscale_mat[4][4]; /* parent effect on rotation & scale pose channels */
380 float loc_mat[4][4]; /* parent effect on location pose channel */
381 float post_scale[3]; /* additional scale to apply with post-multiply */
382};
383
384/* Matrix-like algebra operations on the transform */
388 const BoneParentTransform *in2,
389 BoneParentTransform *result);
390
392 const float inmat[4][4],
393 float outmat[4][4]);
394
417 BoneParentTransform *r_bpt);
428 int inherit_scale_mode,
429 const float offs_bone[4][4],
430 const float parent_arm_mat[4][4],
431 const float parent_pose_mat[4][4],
432 BoneParentTransform *r_bpt);
433
442 float quat[4], float eul[3], float axis[3], float *angle, short oldMode, short newMode);
443
444/* B-Bone support */
445#define MAX_BBONE_SUBDIV 32
446
447struct Mat4 {
448 float mat[4][4];
449};
450
453 float length;
454
455 /* Non-uniform scale correction. */
457 float scale[3];
458
459 /* Handle control bone data. */
462
463 float prev_h[3], next_h[3];
464 float prev_mat[4][4], next_mat[4][4];
465
466 /* Control values. */
467 float ease1, ease2;
468 float roll1, roll2;
469 float scale_in[3], scale_out[3];
471};
472
477 bPoseChannel **r_prev,
478 bPoseChannel **r_next);
483 bool rest,
484 BBoneSplineParameters *param);
485
491 bool rest,
492 bool for_deform,
493 Mat4 *result_array);
494
499 float h1[3],
500 float *r_roll1,
501 float h2[3],
502 float *r_roll2,
503 bool ease,
504 bool offsets);
510 bool for_deform,
511 Mat4 *result_array);
512
521
532 float head_tail,
533 int *r_index,
534 float *r_blend_next);
535
546 const float *co,
547 int *r_index,
548 float *r_blend_next);
549
550/* like EBONE_VISIBLE, be sure to #include "ANIM_bone_collections.hh". */
551#define PBONE_VISIBLE(arm, bone) ANIM_bone_is_visible(arm, bone)
552
553#define PBONE_SELECTABLE(arm, bone) \
554 (PBONE_VISIBLE(arm, bone) && !((bone)->flag & BONE_UNSELECTABLE))
555
556#define PBONE_SELECTED(arm, bone) (((bone)->flag & BONE_SELECTED) & PBONE_VISIBLE(arm, bone))
557
558/* context.selected_pose_bones */
559#define FOREACH_PCHAN_SELECTED_IN_OBJECT_BEGIN(_ob, _pchan) \
560 for (bPoseChannel *_pchan = (bPoseChannel *)(_ob)->pose->chanbase.first; _pchan; \
561 _pchan = _pchan->next) \
562 { \
563 if (PBONE_VISIBLE(((bArmature *)(_ob)->data), (_pchan)->bone) && \
564 ((_pchan)->bone->flag & BONE_SELECTED)) \
565 {
566#define FOREACH_PCHAN_SELECTED_IN_OBJECT_END \
567 } \
568 } \
569 ((void)0)
570/* context.visible_pose_bones */
571#define FOREACH_PCHAN_VISIBLE_IN_OBJECT_BEGIN(_ob, _pchan) \
572 for (bPoseChannel *_pchan = (bPoseChannel *)(_ob)->pose->chanbase.first; _pchan; \
573 _pchan = _pchan->next) \
574 { \
575 if (PBONE_VISIBLE(((bArmature *)(_ob)->data), (_pchan)->bone)) {
576#define FOREACH_PCHAN_VISIBLE_IN_OBJECT_END \
577 } \
578 } \
579 ((void)0)
580
581/* Evaluation helpers */
583struct bPose;
585
588 bSplineIKConstraint *data);
589
590void BKE_pose_splineik_init_tree(Scene *scene, Object *ob, float ctime);
592 Depsgraph *depsgraph, Scene *scene, Object *ob, bPoseChannel *pchan_root, float ctime);
593
595
596void BKE_pose_eval_init(Depsgraph *depsgraph, Scene *scene, Object *object);
597
598void BKE_pose_eval_init_ik(Depsgraph *depsgraph, Scene *scene, Object *object);
599
600void BKE_pose_eval_bone(Depsgraph *depsgraph, Scene *scene, Object *object, int pchan_index);
601
603 Scene *scene,
604 Object *object,
605 int pchan_index);
606
607void BKE_pose_bone_done(Depsgraph *depsgraph, Object *object, int pchan_index);
608
609void BKE_pose_eval_bbone_segments(Depsgraph *depsgraph, Object *object, int pchan_index);
610
611void BKE_pose_iktree_evaluate(Depsgraph *depsgraph,
612 Scene *scene,
613 Object *object,
614 int rootchan_index);
615
617 Scene *scene,
618 Object *object,
619 int rootchan_index);
620
621void BKE_pose_eval_done(Depsgraph *depsgraph, Object *object);
622
623void BKE_pose_eval_cleanup(Depsgraph *depsgraph, Scene *scene, Object *object);
624
625/* -------------------------------------------------------------------- */
629/* Note that we could have a 'BKE_armature_deform_coords' that doesn't take object data
630 * currently there are no callers for this though. */
631
633 const Object *ob_target,
634 float (*vert_coords)[3],
635 float (*vert_deform_mats)[3][3],
636 int vert_coords_len,
637 int deformflag,
638 float (*vert_coords_prev)[3],
639 const char *defgrp_name,
640 bGPDstroke *gps_target);
641
643 const Object &ob_arm,
644 const Object &ob_target,
645 const ListBase *defbase,
647 std::optional<blender::MutableSpan<blender::float3>> vert_coords_prev,
648 std::optional<blender::MutableSpan<blender::float3x3>> vert_deform_mats,
650 int deformflag,
651 blender::StringRefNull defgrp_name);
652
654 const Object *ob_target,
655 float (*vert_coords)[3],
656 float (*vert_deform_mats)[3][3],
657 int vert_coords_len,
658 int deformflag,
659 float (*vert_coords_prev)[3],
660 const char *defgrp_name,
661 const Mesh *me_target);
662
664 const Object *ob_target,
665 float (*vert_coords)[3],
666 float (*vert_deform_mats)[3][3],
667 int vert_coords_len,
668 int deformflag,
669 float (*vert_coords_prev)[3],
670 const char *defgrp_name,
671 const BMEditMesh *em_target);
672
675namespace blender::bke {
676
679 bool no_bones_selected = true;
680};
681
685
692
693}; // namespace blender::bke
void BKE_pchan_rot_to_mat3(const bPoseChannel *pchan, float r_mat[3][3])
Definition armature.cc:2334
void BKE_splineik_execute_tree(Depsgraph *depsgraph, Scene *scene, Object *ob, bPoseChannel *pchan_root, float ctime)
void BKE_pose_eval_init_ik(Depsgraph *depsgraph, Scene *scene, Object *object)
void BKE_pose_splineik_evaluate(Depsgraph *depsgraph, Scene *scene, Object *object, int rootchan_index)
void BKE_armature_bone_hash_make(bArmature *arm)
Definition armature.cc:814
void BKE_pchan_bbone_spline_setup(bPoseChannel *pchan, bool rest, bool for_deform, Mat4 *result_array)
Definition armature.cc:1334
void BKE_pose_rebuild(Main *bmain, Object *ob, bArmature *arm, bool do_id_user)
Definition armature.cc:2767
bArmature * BKE_armature_from_object(Object *ob)
Definition armature.cc:522
bPoseChannel * BKE_armature_ik_solver_find_root(bPoseChannel *pchan, bKinematicConstraint *data)
Definition armature.cc:3132
void BKE_pose_pchan_index_rebuild(bPose *pose)
void BKE_bone_parent_transform_clear(BoneParentTransform *bpt)
Definition armature.cc:2213
void BKE_armature_deform_coords_with_editmesh(const Object *ob_arm, const Object *ob_target, float(*vert_coords)[3], float(*vert_deform_mats)[3][3], int vert_coords_len, int deformflag, float(*vert_coords_prev)[3], const char *defgrp_name, const BMEditMesh *em_target)
void BKE_pchan_bbone_deform_segment_index(const bPoseChannel *pchan, const float *co, int *r_index, float *r_blend_next)
Definition armature.cc:1970
void BKE_bone_parent_transform_combine(const BoneParentTransform *in1, const BoneParentTransform *in2, BoneParentTransform *result)
Definition armature.cc:2227
void BKE_pchan_bbone_spline_params_get(bPoseChannel *pchan, bool rest, BBoneSplineParameters *param)
Definition armature.cc:1087
void BKE_pose_where_is_bone(Depsgraph *depsgraph, Scene *scene, Object *ob, bPoseChannel *pchan, float ctime, bool do_extra)
Definition armature.cc:2877
int BKE_armature_bonelist_count(const ListBase *lb)
Definition armature.cc:530
void BKE_armature_loc_pose_to_bone(bPoseChannel *pchan, const float inloc[3], float outloc[3])
Definition armature.cc:2270
void BKE_pose_splineik_init_tree(Scene *scene, Object *ob, float ctime)
void BKE_bone_parent_transform_invert(BoneParentTransform *bpt)
Definition armature.cc:2220
void mat3_vec_to_roll(const float mat[3][3], const float vec[3], float *r_roll)
Definition armature.cc:2467
void BKE_armature_mat_bone_to_pose(bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4])
Definition armature.cc:2260
void BKE_pchan_calc_mat(bPoseChannel *pchan)
Definition armature.cc:2860
void BKE_armature_bonelist_free(ListBase *lb, bool do_id_user)
Definition armature.cc:540
void BKE_pose_where_is_bone_tail(bPoseChannel *pchan)
Definition armature.cc:2868
void BKE_pchan_apply_mat4(bPoseChannel *pchan, const float mat[4][4], bool use_compat)
Definition armature.cc:2358
void BKE_pchan_minmax(const Object *ob, const bPoseChannel *pchan, const bool use_empty_drawtype, float r_min[3], float r_max[3])
Definition armature.cc:3040
void BKE_pose_iktree_evaluate(Depsgraph *depsgraph, Scene *scene, Object *object, int rootchan_index)
void BKE_pose_eval_cleanup(Depsgraph *depsgraph, Scene *scene, Object *object)
float distfactor_to_bone(const float vec[3], const float b1[3], const float b2[3], float rad1, float rad2, float rdist)
void BKE_armature_mat_pose_to_bone(bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4])
Definition armature.cc:2249
void BKE_pose_eval_init(Depsgraph *depsgraph, Scene *scene, Object *object)
void BKE_armature_where_is_bone(Bone *bone, const Bone *bone_parent, bool use_recursion)
Definition armature.cc:2625
void BKE_pchan_rebuild_bbone_handles(bPose *pose, bPoseChannel *pchan)
Definition armature.cc:2750
void BKE_armature_deform_coords_with_mesh(const Object *ob_arm, const Object *ob_target, float(*vert_coords)[3], float(*vert_deform_mats)[3][3], int vert_coords_len, int deformflag, float(*vert_coords_prev)[3], const char *defgrp_name, const Mesh *me_target)
void BKE_pose_clear_pointers(bPose *pose)
Definition armature.cc:2729
bool BKE_armature_bone_flag_test_recursive(const Bone *bone, int flag)
Definition armature.cc:835
void BKE_pchan_to_mat4(const bPoseChannel *pchan, float r_chanmat[4][4])
Definition armature.cc:2837
void BKE_armature_copy_bone_transforms(bArmature *armature_dst, const bArmature *armature_src)
Definition armature.cc:640
void BKE_rotMode_change_values(float quat[4], float eul[3], float axis[3], float *angle, short oldMode, short newMode)
Definition armature.cc:2383
void BKE_armature_transform(bArmature *arm, const float mat[4][4], bool do_props)
Definition armature.cc:743
void BKE_bone_parent_transform_apply(const BoneParentTransform *bpt, const float inmat[4][4], float outmat[4][4])
Definition armature.cc:2236
void BKE_pchan_bbone_segments_cache_copy(bPoseChannel *pchan, bPoseChannel *pchan_from)
Definition armature.cc:1764
void BKE_armature_deform_coords_with_gpencil_stroke(const Object *ob_arm, const Object *ob_target, float(*vert_coords)[3], float(*vert_deform_mats)[3][3], int vert_coords_len, int deformflag, float(*vert_coords_prev)[3], const char *defgrp_name, bGPDstroke *gps_target)
void BKE_armature_mat_pose_to_delta(float delta_mat[4][4], float pose_mat[4][4], float arm_mat[4][4])
Definition armature.cc:2365
void vec_roll_to_mat3(const float vec[3], float roll, float r_mat[3][3])
Definition armature.cc:2611
void BKE_pose_eval_bbone_segments(Depsgraph *depsgraph, Object *object, int pchan_index)
void BKE_pose_ensure(Main *bmain, Object *ob, bArmature *arm, bool do_id_user)
Definition armature.cc:2822
void BKE_pose_where_is(Depsgraph *depsgraph, Scene *scene, Object *ob)
Definition armature.cc:2941
void BKE_armature_mat_pose_to_bone_ex(Depsgraph *depsgraph, Object *ob, bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4])
Definition armature.cc:2292
void BKE_bone_parent_transform_calc_from_pchan(const bPoseChannel *pchan, BoneParentTransform *r_bpt)
Definition armature.cc:2039
void BKE_armature_editbonelist_free(ListBase *lb, bool do_id_user)
Definition armature.cc:553
void BKE_pchan_mat3_to_rot(bPoseChannel *pchan, const float mat[3][3], bool use_compat)
Definition armature.cc:2312
void mat3_to_vec_roll(const float mat[3][3], float r_vec[3], float *r_roll)
Definition armature.cc:2456
void BKE_armature_deform_coords_with_curves(const Object &ob_arm, const Object &ob_target, const ListBase *defbase, blender::MutableSpan< blender::float3 > vert_coords, std::optional< blender::MutableSpan< blender::float3 > > vert_coords_prev, std::optional< blender::MutableSpan< blender::float3x3 > > vert_deform_mats, blender::Span< MDeformVert > dverts, int deformflag, blender::StringRefNull defgrp_name)
void BKE_pchan_bbone_segments_cache_compute(bPoseChannel *pchan)
Definition armature.cc:1705
void BKE_bone_parent_transform_calc_from_matrices(int bone_flag, int inherit_scale_mode, const float offs_bone[4][4], const float parent_arm_mat[4][4], const float parent_pose_mat[4][4], BoneParentTransform *r_bpt)
Definition armature.cc:2068
void BKE_pchan_bbone_handles_get(bPoseChannel *pchan, bPoseChannel **r_prev, bPoseChannel **r_next)
Definition armature.cc:1061
void BKE_bone_offset_matrix_get(const Bone *bone, float offs_bone[4][4])
Definition armature.cc:2025
std::optional< blender::Bounds< blender::float3 > > BKE_armature_min_max(const Object *ob)
Definition armature.cc:3024
Bone * BKE_armature_find_bone_name(bArmature *arm, const char *name)
Definition armature.cc:779
void BKE_armature_bone_hash_free(bArmature *arm)
Definition armature.cc:821
void BKE_armature_where_is(bArmature *arm)
Definition armature.cc:2663
void BKE_pose_bone_done(Depsgraph *depsgraph, Object *object, int pchan_index)
void BKE_pchan_bbone_deform_clamp_segment_index(const bPoseChannel *pchan, float head_tail, int *r_index, float *r_blend_next)
Definition armature.cc:1800
void BKE_armature_mat_world_to_pose(Object *ob, const float inmat[4][4], float outmat[4][4])
Definition armature.cc:1989
void BKE_pose_constraints_evaluate(Depsgraph *depsgraph, Scene *scene, Object *object, int pchan_index)
void BKE_pose_eval_done(Depsgraph *depsgraph, Object *object)
void vec_roll_to_mat3_normalized(const float nor[3], float roll, float r_mat[3][3])
Definition armature.cc:2482
int BKE_pchan_bbone_spline_compute(BBoneSplineParameters *param, bool for_deform, Mat4 *result_array)
Definition armature.cc:1506
bPoseChannel * BKE_armature_splineik_solver_find_root(bPoseChannel *pchan, bSplineIKConstraint *data)
Definition armature.cc:3153
bool bone_autoside_name(char name[64], int strip_number, short axis, float head, float tail)
void BKE_pose_channels_clear_with_null_bone(bPose *pose, bool do_id_user)
Definition armature.cc:2756
void BKE_pose_remap_bone_pointers(bArmature *armature, bPose *pose)
Definition armature.cc:2737
void BKE_pose_eval_bone(Depsgraph *depsgraph, Scene *scene, Object *object, int pchan_index)
void BKE_armature_loc_world_to_pose(Object *ob, const float inloc[3], float outloc[3])
Definition armature.cc:2005
std::optional< blender::Bounds< blender::float3 > > BKE_pose_minmax(const Object *ob, bool use_select)
Definition armature.cc:3088
void BKE_pchan_bbone_handles_compute(const BBoneSplineParameters *param, float h1[3], float *r_roll1, float h2[3], float *r_roll2, bool ease, bool offsets)
Definition armature.cc:1346
bArmature * BKE_armature_add(Main *bmain, const char *name)
Definition armature.cc:514
eBone_BBoneMappingMode
const Depsgraph * depsgraph
DEGForeachIDComponentCallback callback
draw_view in_light_buf[] float
SelectedBonesResult BKE_armature_find_selected_bones(const bArmature *armature, SelectedBoneCallback callback)
BoneNameSet BKE_armature_find_selected_bone_names(const bArmature *armature)
Frequency::GEOMETRY nor[]
float rotscale_mat[4][4]
float curve_out_z
float scale_in[3]
short bbone_prev_flag
float ease2
float weight
float oldlength
float roll1
::BoneColor color
short segments
float tail[3]
IDProperty * prop
char bbone_prev_type
EditBone * parent
float roll2
ListBase bone_collections
float disp_bbone_mat[32][4][4]
float curve_in_x
float disp_mat[4][4]
float zwidth
short bbone_next_flag
float curve_in_z
float length
Bone * bone
float xwidth
float disp_tail_mat[4][4]
EditBone * next
EditBone * prev
EditBone * bbone_prev
char bbone_next_type
union EditBone::@4 temp
float rad_tail
EditBone * bbone_next
EditBone * ebone
EditBone * bbone_child
float ease1
eBone_BBoneMappingMode bbone_mapping_mode
float rad_head
float scale_out[3]
char inherit_scale_mode
float curve_out_x
float head[3]
float mat[4][4]
PoseTarget * next
bConstraint * con
PoseTarget * prev
float(* basis_change)[3][3]
bPoseChannel ** pchan
PoseTree * prev
ListBase targets
PoseTree * next
uint8_t flag
Definition wm_window.cc:138