Blender V4.3
ED_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
9#pragma once
10
11#include "BLI_compiler_attrs.h"
12#include "BLI_listbase.h"
13#include "BLI_span.hh"
14
15struct Base;
16struct Bone;
17struct Depsgraph;
18struct EditBone;
19struct GPUSelectResult;
20struct ListBase;
21struct Main;
22struct Mesh;
24struct Object;
25struct ReportList;
26struct Scene;
28struct UndoType;
29struct View3D;
30struct ViewLayer;
31struct bArmature;
32struct bContext;
33struct bPoseChannel;
34struct wmKeyConfig;
35struct wmOperator;
36
37#define BONESEL_ROOT (1u << 29)
38#define BONESEL_TIP (1u << 30)
39#define BONESEL_BONE (1u << 31)
40#define BONESEL_ANY (BONESEL_TIP | BONESEL_ROOT | BONESEL_BONE)
41
42/* useful macros, be sure to #include "ANIM_bone_collections.hh". */
43#define EBONE_VISIBLE(arm, ebone) ANIM_bone_is_visible_editbone(arm, ebone)
44
45#define EBONE_SELECTABLE(arm, ebone) \
46 (EBONE_VISIBLE(arm, ebone) && !((ebone)->flag & BONE_UNSELECTABLE))
47
48#define EBONE_EDITABLE(ebone) \
49 (CHECK_TYPE_INLINE(ebone, EditBone *), \
50 (((ebone)->flag & BONE_SELECTED) && !((ebone)->flag & BONE_EDITMODE_LOCKED)))
51
52/* Used in `armature_select.cc` and `pose_select.cc`. */
53
54#define BONE_SELECT_PARENT 0
55#define BONE_SELECT_CHILD 1
56
57/* `armature_add.cc` */
58
64EditBone *ED_armature_ebone_add(bArmature *arm, const char *name);
65EditBone *ED_armature_ebone_add_primitive(Object *obedit_arm, float length, bool view_aligned);
66
67void ED_armature_ebone_copy(EditBone *dest, const EditBone *source);
68
73
78 const float align_axis[3],
79 bool axis_only);
86 Main *bmain, Object *ob, const float cursor[3], int centermode, int around);
90void ED_armature_edit_transform(bArmature *arm, const float mat[4][4], bool do_props);
91void ED_armature_transform(bArmature *arm, const float mat[4][4], bool do_props);
92
93/* `armature_naming.cc` */
94
99void ED_armature_ebone_unique_name(ListBase *ebones, char *name, EditBone *bone);
100
106void ED_armature_bone_rename(Main *bmain,
107 bArmature *arm,
108 const char *oldnamep,
109 const char *newnamep);
121 bArmature *arm,
122 ListBase *bones_names,
123 bool do_strip_numbers);
124
125/* `armature_ops.cc` */
126
129void ED_keymap_armature(wmKeyConfig *keyconf);
130
131/* `armature_relations.cc` */
132
137
138/* `armature_select.cc` */
139
141 unsigned int select_id,
142 EditBone **r_ebone);
144 unsigned int select_id,
145 EditBone **r_ebone);
147 unsigned int select_id,
148 bPoseChannel **r_pchan);
153 unsigned int select_id,
154 Bone **r_bone);
164 bContext *C, Base *basact, EditBone *ebone, int selmask, const SelectPick_Params *params);
168bool ED_armature_edit_select_pick(bContext *C, const int mval[2], const SelectPick_Params *params);
182
183/* `armature_skinning.cc` */
184
185#define ARM_GROUPS_NAME 1
186#define ARM_GROUPS_ENVELOPE 2
187#define ARM_GROUPS_AUTO 3
189 Depsgraph *depsgraph,
190 Scene *scene,
191 Object *ob,
192 Object *par,
193 int mode,
194 bool mirror);
195
196/* `editarmature_undo.cc` */
197
200
201/* `armature_utils.cc` */
202
208void ED_armature_ebone_remove_ex(bArmature *arm, EditBone *exBone, bool clear_connected);
210bool ED_armature_ebone_is_child_recursive(EditBone *ebone_parent, EditBone *ebone_child);
219 unsigned int ebone_child_tot);
220void ED_armature_ebone_to_mat3(EditBone *ebone, float r_mat[3][3]);
221void ED_armature_ebone_to_mat4(EditBone *ebone, float r_mat[4][4]);
222void ED_armature_ebone_from_mat3(EditBone *ebone, const float mat[3][3]);
223void ED_armature_ebone_from_mat4(EditBone *ebone, const float mat[4][4]);
227EditBone *ED_armature_ebone_find_name(const ListBase *edbo, const char *name);
232void ED_armature_ebone_transform_mirror_update(bArmature *arm, EditBone *ebo, bool check_select);
239void ED_armature_from_edit(Main *bmain, bArmature *arm);
244
248void ED_armature_ebone_listbase_free(ListBase *lb, bool do_id_user);
249void ED_armature_ebone_listbase_copy(ListBase *lb_dst, ListBase *lb_src, bool do_id_user);
250
256
257/* `pose_edit.cc` */
258
260bool ED_object_posemode_exit_ex(Main *bmain, Object *ob);
263bool ED_object_posemode_enter_ex(Main *bmain, Object *ob);
265
279
280/* `pose_select.cc` */
281
286 ViewLayer *view_layer,
287 View3D *v3d,
288 Object *ob,
289 Bone *bone,
291 ATTR_NONNULL(1, 2, 3, 4, 6);
299 ViewLayer *view_layer,
300 View3D *v3d,
301 Base *base,
302 const GPUSelectResult *hit_results,
303 int hits,
305 bool do_nearest) ATTR_NONNULL(1, 2, 3, 4, 5, 7);
315 ViewLayer *view_layer,
316 Base *base_select);
318 int select_mode,
319 bool ignore_visibility);
320bool ED_pose_deselect_all_multi(bContext *C, int select_mode, bool ignore_visibility);
326bool ED_pose_deselect_all(Object *ob, int select_mode, bool ignore_visibility);
333void ED_pose_bone_select(Object *ob, bPoseChannel *pchan, bool select, bool change_active);
334
335/* `meshlaplacian.cc` */
336
339 Mesh *cagemesh,
340 float *vertexcos,
341 int verts_num,
342 float cagemat[4][4]);
343
344EditBone *ED_armature_pick_ebone(bContext *C, const int xy[2], bool findunsel, Base **r_base);
345bPoseChannel *ED_armature_pick_pchan(bContext *C, const int xy[2], bool findunsel, Base **r_base);
346Bone *ED_armature_pick_bone(bContext *C, const int xy[2], bool findunsel, Base **r_base);
#define ATTR_NONNULL(...)
bool ED_armature_ebone_is_child_recursive(EditBone *ebone_parent, EditBone *ebone_child)
Bone * ED_armature_pick_bone(bContext *C, const int xy[2], bool findunsel, Base **r_base)
void ED_armature_ebone_selectflag_disable(EditBone *ebone, int flag)
bool ED_armature_pose_select_pick_bone(const Scene *scene, ViewLayer *view_layer, View3D *v3d, Object *ob, Bone *bone, const SelectPick_Params *params) ATTR_NONNULL(1
void ED_pose_recalculate_paths(bContext *C, Scene *scene, Object *ob, ePosePathCalcRange range)
Definition pose_edit.cc:152
EditBone * ED_armature_ebone_add(bArmature *arm, const char *name)
bool ED_armature_edit_select_pick_bone(bContext *C, Base *basact, EditBone *ebone, int selmask, const SelectPick_Params *params)
void ED_armature_ebone_listbase_copy(ListBase *lb_dst, ListBase *lb_src, bool do_id_user)
bool ED_object_posemode_enter_ex(Main *bmain, Object *ob)
Definition pose_edit.cc:78
void ED_armature_edit_transform_mirror_update(Object *obedit)
bool ED_armature_edit_deselect_all_visible(Object *obedit)
ePosePathCalcRange
@ POSE_PATH_CALC_RANGE_CURRENT_FRAME
@ POSE_PATH_CALC_RANGE_CHANGED
@ POSE_PATH_CALC_RANGE_FULL
void ED_armature_ebone_transform_mirror_update(bArmature *arm, EditBone *ebo, bool check_select)
EditBone * ED_armature_ebone_find_name(const ListBase *edbo, const char *name)
void ED_armature_ebone_listbase_temp_clear(ListBase *lb)
EditBone * ED_armature_ebone_add_primitive(Object *obedit_arm, float length, bool view_aligned)
void ED_armature_ebone_from_mat3(EditBone *ebone, const float mat[3][3])
void ED_armature_ebone_to_mat4(EditBone *ebone, float r_mat[4][4])
void ED_armature_bone_rename(Main *bmain, bArmature *arm, const char *oldnamep, const char *newnamep)
Base * ED_armature_base_and_ebone_from_select_buffer(blender::Span< Base * > bases, unsigned int select_id, EditBone **r_ebone)
void ED_armature_ebone_copy(EditBone *dest, const EditBone *source)
void ED_armature_ebone_remove_ex(bArmature *arm, EditBone *exBone, bool clear_connected)
void ED_object_vgroup_calc_from_armature(ReportList *reports, Depsgraph *depsgraph, Scene *scene, Object *ob, Object *par, int mode, bool mirror)
float ED_armature_ebone_roll_to_vector(const EditBone *bone, const float align_axis[3], bool axis_only)
void ED_armature_edit_sync_selection(ListBase *edbo)
bool ED_object_posemode_enter(bContext *C, Object *ob)
Definition pose_edit.cc:98
bool ED_pose_deselect_all_multi_ex(blender::Span< Base * > bases, int select_mode, bool ignore_visibility)
bArmature * ED_armature_context(const bContext *C)
bool ED_armature_edit_deselect_all(Object *obedit)
bool ED_pose_deselect_all_multi(bContext *C, int select_mode, bool ignore_visibility)
EditBone * ED_armature_pick_ebone(bContext *C, const int xy[2], bool findunsel, Base **r_base)
void ED_mesh_deform_bind_callback(Object *object, MeshDeformModifierData *mmd, Mesh *cagemesh, float *vertexcos, int verts_num, float cagemat[4][4])
EditBone * ED_armature_ebone_find_shared_parent(EditBone *ebone_child[], unsigned int ebone_child_tot)
int ED_armature_ebone_selectflag_get(const EditBone *ebone)
void ED_armature_ebone_listbase_free(ListBase *lb, bool do_id_user)
bPoseChannel * ED_armature_pick_pchan(bContext *C, const int xy[2], bool findunsel, Base **r_base)
void ED_armature_ebone_selectflag_set(EditBone *ebone, int flag)
bool bool void ED_armature_pose_select_in_wpaint_mode(const Scene *scene, ViewLayer *view_layer, Base *base_select)
Object * ED_pose_object_from_context(bContext *C)
Definition pose_edit.cc:59
bool ED_armature_edit_deselect_all_multi_ex(blender::Span< Base * > bases)
void ED_armature_ebone_select_set(EditBone *ebone, bool select)
void ED_armature_bones_flip_names(Main *bmain, bArmature *arm, ListBase *bones_names, bool do_strip_numbers)
Base * ED_armature_base_and_bone_from_select_buffer(blender::Span< Base * > bases, unsigned int select_id, Bone **r_bone)
void ED_armature_edit_transform(bArmature *arm, const float mat[4][4], bool do_props)
void ED_keymap_armature(wmKeyConfig *keyconf)
void ED_armature_edit_free(bArmature *arm)
bool ED_armature_edit_select_op_from_tagged(bArmature *arm, int sel_op)
bool bool ED_armature_pose_select_pick_with_buffer(const Scene *scene, ViewLayer *view_layer, View3D *v3d, Base *base, const GPUSelectResult *hit_results, int hits, const SelectPick_Params *params, bool do_nearest) ATTR_NONNULL(1
bool ED_armature_edit_deselect_all_visible_multi(bContext *C)
void ED_armature_undosys_type(UndoType *ut)
void ED_pose_bone_select_tag_update(Object *ob)
Base * ED_armature_base_and_pchan_from_select_buffer(blender::Span< Base * > bases, unsigned int select_id, bPoseChannel **r_pchan)
int ED_armature_join_objects_exec(bContext *C, wmOperator *op)
void ED_operatortypes_armature()
void ED_armature_origin_set(Main *bmain, Object *ob, const float cursor[3], int centermode, int around)
void ED_armature_ebone_unique_name(ListBase *ebones, char *name, EditBone *bone)
void ED_armature_transform(bArmature *arm, const float mat[4][4], bool do_props)
void ED_armature_ebone_to_mat3(EditBone *ebone, float r_mat[3][3])
bool ED_armature_edit_select_pick(bContext *C, const int mval[2], const SelectPick_Params *params)
void ED_armature_from_edit(Main *bmain, bArmature *arm)
void ED_armature_ebone_selectflag_enable(EditBone *ebone, int flag)
void ED_operatormacros_armature()
void ED_armature_ebone_remove(bArmature *arm, EditBone *exBone)
Object * ED_armature_object_and_ebone_from_select_buffer(blender::Span< Object * > objects, unsigned int select_id, EditBone **r_ebone)
bool ED_object_posemode_exit_ex(Main *bmain, Object *ob)
Definition pose_edit.cc:113
void ED_armature_ebone_from_mat4(EditBone *ebone, const float mat[4][4])
bool ED_pose_deselect_all(Object *ob, int select_mode, bool ignore_visibility)
void ED_pose_bone_select(Object *ob, bPoseChannel *pchan, bool select, bool change_active)
void ED_armature_to_edit(bArmature *arm)
bool ED_armature_edit_deselect_all_visible_multi_ex(blender::Span< Base * > bases)
EditBone * ED_armature_ebone_get_mirrored(const ListBase *edbo, EditBone *ebo)
bool ED_object_posemode_exit(bContext *C, Object *ob)
Definition pose_edit.cc:126
const Depsgraph * depsgraph
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
ccl_device_inline float4 select(const int4 mask, const float4 a, const float4 b)
struct ReportList * reports
int xy[2]
Definition wm_draw.cc:170
uint8_t flag
Definition wm_window.cc:138