55#define EBONE_PREV_FLAG_GET(ebone) ((void)0, (ebone)->temp.i)
56#define EBONE_PREV_FLAG_SET(ebone, val) ((ebone)->temp.i = val)
66 const uint hit_object = select_id & 0xFFFF;
70 for (
Base *base_iter : bases) {
71 if (base_iter->object->runtime->select_id == hit_object) {
76 if (base !=
nullptr) {
89 const uint hit_object = select_id & 0xFFFF;
93 for (
Object *object_iter : objects) {
94 if (object_iter->runtime->select_id == hit_object) {
109 const uint select_id,
112 const uint hit_object = select_id & 0xFFFF;
113 Base *base =
nullptr;
116 for (
Base *base_iter : bases) {
117 if (base_iter->object->runtime->select_id == hit_object) {
122 if (base !=
nullptr) {
134 const uint select_id,
139 *r_bone = pchan ? pchan->
bone :
nullptr;
165 void *firstunSel =
nullptr, *firstSel =
nullptr, *
data;
166 Base *firstunSel_base =
nullptr, *firstSel_base =
nullptr;
167 bool takeNext =
false;
168 int minsel = 0xffffffff, minunsel = 0xffffffff;
171 uint hit_id = hit_result.id;
174 Base *base =
nullptr;
179 if (is_editmode ==
false) {
181 if (pchan !=
nullptr) {
217 if (minsel > hit_result.depth) {
219 firstSel_base = base;
220 minsel = hit_result.depth;
226 firstSel_base = base;
233 if (minunsel > hit_result.depth) {
235 firstunSel_base = base;
236 minunsel = hit_result.depth;
242 firstunSel_base = base;
255 *r_base = firstunSel_base;
258 *r_base = firstSel_base;
269 const bool is_editmode =
true;
271 is_editmode, bases, {hit_results, hits}, findunsel, do_nearest, r_base));
281 const bool is_editmode =
false;
283 is_editmode, bases, {hit_results, hits}, findunsel, do_nearest, r_base));
294 bases, hit_results, hits, findunsel, do_nearest, r_base);
295 return pchan ? pchan->
bone :
nullptr;
315 const bool is_editmode,
bContext *
C,
const int xy[2],
bool findunsel,
Base **r_base)
328 const int select_id_ignore = -1;
338 if (vc.
obedit !=
nullptr) {
346 is_editmode, bases, buffer.
storage.
as_span().take_front(hits), findunsel,
true, r_base);
355 const bool is_editmode =
true;
362 const bool is_editmode =
false;
370 return pchan ? pchan->
bone :
nullptr;
390 bool changed =
false;
404#define CHECK_PARENT(ebone) \
406 (((ebone)->flag & BONE_CONNECTED) && \
407 ((ebone)->parent ? EBONE_SELECTABLE(arm, (ebone)->parent) : false))
415 if (ebone_iter->temp.i & TOUCH) {
418 if ((ebone_iter->flag &
BONE_DONE) == 0) {
422 ebone_iter->temp.i |= TOUCH | LINK;
425 for (
EditBone *ebone = ebone_iter; ebone;
432 ebone->temp.i |= (TOUCH | LINK);
435 ebone->temp.i |= TOUCH;
438 if (ebone->parent && ebone->parent->temp.i & LINK) {
450 if (ebone_iter->temp.i & TOUCH) {
455 EditBone *ebone_touched_parent =
nullptr;
456 for (
EditBone *ebone = ebone_iter; ebone;
459 if (ebone->temp.i & TOUCH) {
460 ebone_touched_parent = ebone;
463 ebone->temp.i |= TOUCH;
466 if ((ebone_touched_parent !=
nullptr) && (ebone_touched_parent->
temp.
i & LINK)) {
467 for (
EditBone *ebone = ebone_iter; ebone != ebone_touched_parent; ebone = ebone->
parent) {
468 if ((ebone->temp.i & LINK) == 0) {
469 ebone->temp.i |= LINK;
498 bool changed_multi =
false;
503 for (
Object *ob : objects) {
521 changed_multi =
true;
535 ot->name =
"Select Linked All";
536 ot->idname =
"ARMATURE_OT_select_linked";
537 ot->description =
"Select all bones linked by parent/child connections to the current selection";
547 RNA_def_boolean(
ot->srna,
"all_forks",
false,
"All Forks",
"Follow forks in the parents chain");
566 Base *base =
nullptr;
569 if (ebone_active ==
nullptr) {
599 ot->name =
"Select Linked";
600 ot->idname =
"ARMATURE_OT_select_linked_pick";
601 ot->description =
"(De)select bones linked by parent/child connections under the mouse cursor";
613 RNA_def_boolean(
ot->srna,
"all_forks",
false,
"All Forks",
"Follow forks in the parents chain");
633 const int ofs = hits12;
642 ViewContext *vc,
bool findunsel,
bool use_cycle,
Base **r_base,
int *r_selmask)
651 Result result_cycle{};
652 result_cycle.select_id = -1;
653 result_cycle.base =
nullptr;
654 result_cycle.ebone =
nullptr;
655 Result result_bias{};
656 result_bias.select_id = -1;
657 result_bias.base =
nullptr;
658 result_bias.ebone =
nullptr;
664 if (ebone_active_orig &&
667 ebone_active_orig =
nullptr;
670 if (ebone_active_orig ==
nullptr) {
683 const int select_id_ignore = -1;
703 else if (hits12 > 0) {
733 result_bias.select_id = buffer.
storage[0].id;
735 bases, result_bias.select_id, &result_bias.ebone);
738 int bias_max = INT_MIN;
754 } offset, test, best;
759 int ob_index = obedit_orig->
runtime->select_id & 0xFFFF;
762 cycle_order.offset.ob = ob_index;
763 cycle_order.offset.bone = bone_index;
765 cycle_order.best.as_u32 = 0;
768 int min_depth = INT_MAX;
769 for (
int i = 0;
i < hits;
i++) {
771 const uint select_id = hit_result.
id;
773 Base *base =
nullptr;
819 if (bias > bias_max) {
822 min_depth = hit_result.
depth;
823 result_bias.select_id = select_id;
824 result_bias.base = base;
825 result_bias.ebone = ebone;
827 else if (bias == bias_max && do_nearest) {
828 if (min_depth > hit_result.
depth) {
829 min_depth = hit_result.
depth;
830 result_bias.select_id = select_id;
831 result_bias.base = base;
832 result_bias.ebone = ebone;
839 cycle_order.test.ob = select_id & 0xFFFF;
840 cycle_order.test.bone = (select_id &
~BONESEL_ANY) >> 16;
841 if (ebone == ebone_active_orig) {
842 BLI_assert(cycle_order.test.ob == cycle_order.offset.ob);
843 BLI_assert(cycle_order.test.bone == cycle_order.offset.bone);
849 cycle_order.test.as_u32 -= cycle_order.offset.as_u32;
855 if ((cycle_order.best.as_u32 == 0) ||
856 (cycle_order.test.as_u32 && (cycle_order.test.as_u32 < cycle_order.best.as_u32)))
858 cycle_order.best = cycle_order.test;
859 result_cycle.select_id = select_id;
860 result_cycle.base = base;
861 result_cycle.ebone = ebone;
867 result = (use_cycle && result_cycle.ebone) ? &result_cycle : &result_bias;
869 if (
result->select_id != -1) {
899 bool changed =
false;
912 bool changed =
false;
931 bool changed_multi =
false;
932 for (
Base *base : bases) {
933 Object *obedit = base->object;
936 return changed_multi;
941 bool changed_multi =
false;
942 for (
Base *base : bases) {
943 Object *obedit = base->object;
946 return changed_multi;
970 bool changed =
false;
981 if ((found &&
params.select_passthrough) &&
986 else if (found ||
params.deselect_all) {
989 scene, view_layer, v3d);
1085 ebone->
flag |= selmask;
1089 ebone->
flag &= ~selmask;
1093 if (ebone->
flag & selmask) {
1094 ebone->
flag &= ~selmask;
1097 ebone->
flag |= selmask;
1102 ebone->
flag |= selmask;
1133 return changed || found;
1142 Base *basact =
nullptr;
1145 vc.
mval[0] = mval[0];
1146 vc.
mval[1] = mval[1];
1169 bool changed =
false;
1170 bool is_point_done =
false;
1171 int points_proj_tot = 0;
1173 const int ebone_flag_prev = ebone->
flag;
1180 if (sel_op_result != -1) {
1193 if (sel_op_result != -1) {
1202 if ((is_point_done ==
false) && (points_proj_tot == 2)) {
1207 if (sel_op_result != -1) {
1217 changed |= is_point_done;
1219 if (ebone_flag_prev != ebone->
flag) {
1221 ebone->
flag = ebone_flag_prev;
1231 bool changed =
false;
1258 if (ebone->temp.i != 0) {
1263 ebone->temp.i = ebone->flag;
1273 arm, ebone,
eSelectOp(sel_op), is_ignore_flag, is_inside_flag);
1281 std::swap(ebone->temp.i, ebone->flag);
1284 if ((ebone->parent->flag &
BONE_DONE) == 0) {
1286 ebone->parent->temp.i = ebone->parent->flag;
1295 bool is_parent_tip_changed = (ebone->parent->flag &
BONE_TIPSEL) !=
1308 if (is_parent_tip_changed ==
false) {
1394 ot->name =
"(De)select All";
1395 ot->idname =
"ARMATURE_OT_select_all";
1396 ot->description =
"Toggle selection status of all bones";
1486 if (more ==
false) {
1492 ebone->temp.p =
nullptr;
1510 for (
Object *ob : objects) {
1523 ot->name =
"Select More";
1524 ot->idname =
"ARMATURE_OT_select_more";
1525 ot->description =
"Select those bones connected to the initial selection";
1547 for (
Object *ob : objects) {
1560 ot->name =
"Select Less";
1561 ot->idname =
"ARMATURE_OT_select_less";
1562 ot->description =
"Deselect those bones at the boundary of each selection region";
1602 {0,
nullptr, 0,
nullptr,
nullptr},
1622 const float len_min =
len / (1.0f + (thresh - FLT_EPSILON));
1623 const float len_max =
len * (1.0f + (thresh + FLT_EPSILON));
1627 for (
Object *ob : objects) {
1629 bool changed =
false;
1634 if ((len_iter > len_min) && (len_iter < len_max)) {
1654 mul_m4_v3(ob->object_to_world().ptr(), v1);
1673 for (
Object *ob : objects) {
1675 bool changed =
false;
1682 if (
angle_v3v3(dir_act, dir) /
float(
M_PI) < (thresh + FLT_EPSILON)) {
1706 collection_names.
add(bcoll_ref->bcoll->name);
1711 for (
Object *ob : objects) {
1713 bool changed =
false;
1721 if (!collection_names.
contains(bcoll_ref->bcoll->name)) {
1747 for (
Object *ob : objects) {
1749 bool changed =
false;
1757 if (bone_color != active_bone_color) {
1783 if (prefix_act[0] ==
'\0') {
1789 for (
Object *ob : objects) {
1791 bool changed =
false;
1798 if (
STREQ(prefix_act, prefix_other)) {
1823 if (suffix_act[0] ==
'\0') {
1829 for (
Object *ob : objects) {
1831 bool changed =
false;
1838 if (
STREQ(suffix_act, suffix_other)) {
1863 if (pchan_active ==
nullptr) {
1867 const char *data_active = (
const char *)
POINTER_OFFSET(pchan_active, offset);
1872 const char *data_test = (
const char *)
POINTER_OFFSET(pchan, offset);
1873 if (memcmp(data_active, data_test, bytes_size) == 0) {
1904 ebone_iter->temp.ebone = ebone_iter->parent;
1910 if (ebone_iter->temp.ebone == ebone_act &&
EBONE_SELECTABLE(arm, ebone_iter)) {
1926 if (ebone_iter->parent == ebone_act &&
EBONE_SELECTABLE(arm, ebone_iter)) {
1941 if (ebone_act->
parent ==
nullptr) {
1967#define STRUCT_SIZE_AND_OFFSET(_struct, _member) \
1968 sizeof(_struct::_member), offsetof(_struct, _member)
2003#undef STRUCT_SIZE_AND_OFFSET
2013 ot->name =
"Select Similar";
2014 ot->idname =
"ARMATURE_OT_select_similar";
2020 ot->description =
"Select similar bones by property types";
2027 RNA_def_float(
ot->srna,
"threshold", 0.1f, 0.0f, 1.0f,
"Threshold",
"", 0.0f, 1.0f);
2044 bool changed =
false;
2048 if (ebone_active ==
nullptr) {
2053 if (ebone_active->
parent) {
2056 ebone_parent = ebone_active->
parent;
2075 for (pass = 0; pass < 2 && (ebone_child ==
nullptr); pass++) {
2079 if (ebone_iter->parent == ebone_active) {
2081 ebone_child = ebone_iter;
2101 if (changed ==
false) {
2120 {0,
nullptr, 0,
nullptr,
nullptr},
2124 ot->name =
"Select Hierarchy";
2125 ot->idname =
"ARMATURE_OT_select_hierarchy";
2126 ot->description =
"Select immediate parent/children of selected bones";
2158 for (
Object *ob : objects) {
2161 EditBone *ebone_mirror_act =
nullptr;
2177 flag_new |= flag_mirror;
2180 ebone_mirror_act = ebone_mirror;
2184 if (active_only && !
ELEM(arm->
act_edbone, ebone, ebone_mirror)) {
2193 if (ebone_mirror_act) {
2211 ot->name =
"Select Mirror";
2212 ot->idname =
"ARMATURE_OT_select_mirror";
2213 ot->description =
"Mirror the bone selection";
2224 ot->srna,
"only_active",
false,
"Active Only",
"Only operate on the active bone");
2239 if (!use_parent && (ebone_child == ebone_parent)) {
2252 if (ebone_child == ebone_parent) {
2256 ebone_child = ebone_child->
parent;
2269 EditBone *ebone_isect_parent =
nullptr;
2272 Base *base_dst =
nullptr;
2281 if (
ELEM(
nullptr, ebone_src, ebone_dst) || (ebone_src == ebone_dst)) {
2285 if (base_dst && base_dst->
object != obedit) {
2290 ebone_isect_child[0] = ebone_src;
2291 ebone_isect_child[1] = ebone_dst;
2298 std::swap(ebone_src, ebone_dst);
2308 if (ebone_isect_parent) {
2349 ot->name =
"Pick Shortest Path";
2350 ot->idname =
"ARMATURE_OT_shortest_path_pick";
2351 ot->description =
"Select shortest path between two bones";
Functions to deal with Armatures.
C++ functions to deal with Armature collections (i.e. the successor of bone layers).
C++ part of the BoneColor DNA struct.
Blender kernel action and pose functionality.
bPoseChannel * BKE_pose_channel_find_name(const bPose *pose, const char *name)
#define CTX_DATA_BEGIN(C, Type, instance, member)
Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Object * CTX_data_edit_object(const bContext *C)
Main * CTX_data_main(const bContext *C)
EditBone * CTX_data_active_bone(const bContext *C)
View3D * CTX_wm_view3d(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
blender::Vector< Base * > BKE_view_layer_array_from_bases_in_edit_mode(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
Base * BKE_view_layer_active_base_get(ViewLayer *view_layer)
blender::Vector< Base * > BKE_view_layer_array_from_bases_in_edit_mode_unique_data(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
blender::Vector< Object * > BKE_view_layer_array_from_objects_in_edit_mode_unique_data(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
General operations, lookup, etc. for blender objects.
bool BKE_object_is_in_editmode(const Object *ob)
void BKE_object_update_select_id(Main *bmain)
blender::Vector< Base * > BKE_object_pose_base_array_get(const Scene *scene, ViewLayer *view_layer, View3D *v3d)
void BKE_report(ReportList *reports, eReportType type, const char *message)
#define BLI_assert_unreachable()
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void mul_m4_v3(const float M[4][4], float r[3])
void mul_v3_mat3_m4v3(float r[3], const float mat[4][4], const float vec[3])
float angle_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float len_squared_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE float normalize_v3(float n[3])
void BLI_rcti_init_pt_radius(struct rcti *rect, const int xy[2], int size)
void void BLI_string_split_prefix(const char *string, size_t string_maxlen, char *r_pre, char *r_body) ATTR_NONNULL(1
void BLI_string_split_suffix(const char *string, size_t string_maxlen, char *r_body, char *r_suf) ATTR_NONNULL(1
#define SET_FLAG_FROM_TEST(value, test, flag)
#define POINTER_OFFSET(v, ofs)
void DEG_id_tag_update(ID *id, unsigned int flags)
Object is a sort of wrapper for general info.
#define BONE_SELECT_CHILD
#define BONE_SELECT_PARENT
#define EBONE_SELECTABLE(arm, ebone)
void ED_outliner_select_sync_from_edit_bone_tag(bContext *C)
bool ED_operator_editarmature(bContext *C)
bool ED_operator_view3d_active(bContext *C)
int ED_select_op_action_deselected(eSelectOp sel_op, bool is_select, bool is_inside)
void view3d_gpu_select_cache_end()
ViewContext ED_view3d_viewcontext_init(bContext *C, Depsgraph *depsgraph)
int view3d_gpu_select_with_id_filter(const ViewContext *vc, GPUSelectBuffer *buffer, const rcti *input, eV3DSelectMode select_mode, eV3DSelectObjectFilter select_filter, uint select_id)
void view3d_gpu_select_cache_begin()
@ VIEW3D_SELECT_PICK_NEAREST
void view3d_operator_needs_gpu(const bContext *C)
@ VIEW3D_SELECT_FILTER_NOP
blender::Vector< GPUSelectResult, 2500 > GPUSelectStorage
#define CHECK_PARENT(ebone)
Bone * ED_armature_pick_bone(bContext *C, const int xy[2], bool findunsel, Base **r_base)
void ARMATURE_OT_select_similar(wmOperatorType *ot)
void ARMATURE_OT_select_all(wmOperatorType *ot)
void ARMATURE_OT_select_hierarchy(wmOperatorType *ot)
bool ED_armature_edit_deselect_all_visible_multi_ex(const Span< Base * > bases)
EditBone * ED_armature_pick_ebone_from_selectbuffer(const Span< Base * > bases, const GPUSelectResult *hit_results, const int hits, bool findunsel, bool do_nearest, Base **r_base)
bool ED_armature_edit_deselect_all_visible(Object *obedit)
#define EBONE_PREV_FLAG_GET(ebone)
static bool armature_select_linked_pick_poll(bContext *C)
static wmOperatorStatus armature_shortest_path_pick_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static bool armature_edit_select_op_apply(bArmature *arm, EditBone *ebone, const eSelectOp sel_op, int is_ignore_flag, int is_inside_flag)
static void select_similar_length(bContext *C, const float thresh)
Base * ED_armature_base_and_bone_from_select_buffer(const Span< Base * > bases, const uint select_id, Bone **r_bone)
Bone * ED_armature_pick_bone_from_selectbuffer(const Span< Base * > bases, const GPUSelectResult *hit_results, const int hits, bool findunsel, bool do_nearest, Base **r_base)
void ARMATURE_OT_select_mirror(wmOperatorType *ot)
static wmOperatorStatus armature_select_similar_exec(bContext *C, wmOperator *op)
static const EnumPropertyItem prop_similar_types[]
static void select_similar_suffix(bContext *C)
bPoseChannel * ED_armature_pick_pchan_from_selectbuffer(const Span< Base * > bases, const GPUSelectResult *hit_results, const int hits, bool findunsel, bool do_nearest, Base **r_base)
Base * ED_armature_base_and_pchan_from_select_buffer(const Span< Base * > bases, const uint select_id, bPoseChannel **r_pchan)
static void bone_direction_worldspace_get(Object *ob, EditBone *ebone, float *r_dir)
@ SIMEDBONE_CHILDREN_IMMEDIATE
static EditBone * get_nearest_editbonepoint(ViewContext *vc, bool findunsel, bool use_cycle, Base **r_base, int *r_selmask)
bool ED_armature_edit_deselect_all(Object *obedit)
EditBone * ED_armature_pick_ebone(bContext *C, const int xy[2], bool findunsel, Base **r_base)
static bool armature_select_linked_impl(Object *ob, const bool select, const bool all_forks)
void ARMATURE_OT_select_less(wmOperatorType *ot)
bPoseChannel * ED_armature_pick_pchan(bContext *C, const int xy[2], bool findunsel, Base **r_base)
Base * ED_armature_base_and_ebone_from_select_buffer(const Span< Base * > bases, const uint select_id, EditBone **r_ebone)
static void select_similar_prefix(bContext *C)
static void is_ancestor(EditBone *bone, EditBone *ancestor)
static int selectbuffer_ret_hits_5(blender::MutableSpan< GPUSelectResult > hit_results, const int hits12, const int hits5)
static wmOperatorStatus armature_select_hierarchy_exec(bContext *C, wmOperator *op)
static wmOperatorStatus armature_de_select_all_exec(bContext *C, wmOperator *op)
static void * ed_armature_pick_bone_impl(const bool is_editmode, bContext *C, const int xy[2], bool findunsel, Base **r_base)
static wmOperatorStatus armature_select_linked_pick_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void select_similar_siblings(bContext *C)
bool ED_armature_edit_deselect_all_visible_multi(bContext *C)
static void select_similar_children_immediate(bContext *C)
static wmOperatorStatus armature_select_linked_exec(bContext *C, wmOperator *op)
static int selectbuffer_ret_hits_12(blender::MutableSpan< GPUSelectResult >, const int hits12)
static void select_similar_children(bContext *C)
static float bone_length_squared_worldspace_get(Object *ob, EditBone *ebone)
Object * ED_armature_object_and_ebone_from_select_buffer(const Span< Object * > objects, const uint select_id, EditBone **r_ebone)
static void armature_select_more_less(Object *ob, bool more)
static void * ed_armature_pick_bone_from_selectbuffer_impl(const bool is_editmode, const Span< Base * > bases, const Span< GPUSelectResult > hit_results, bool findunsel, bool do_nearest, Base **r_base)
#define EBONE_PREV_FLAG_SET(ebone, val)
#define STRUCT_SIZE_AND_OFFSET(_struct, _member)
static wmOperatorStatus armature_de_select_less_exec(bContext *C, wmOperator *)
static void select_similar_data_pchan(bContext *C, const size_t bytes_size, const int offset)
bool ED_armature_edit_deselect_all_multi_ex(const Span< Base * > bases)
bool ED_armature_edit_select_pick_bone(bContext *C, Base *basact, EditBone *ebone, const int selmask, const SelectPick_Params ¶ms)
void ARMATURE_OT_select_linked(wmOperatorType *ot)
static bool armature_shortest_path_select(bArmature *arm, EditBone *ebone_parent, EditBone *ebone_child, bool use_parent, bool is_test)
static void armature_select_more(bArmature *arm, EditBone *ebone)
static void armature_select_less(bArmature *, EditBone *ebone)
bool ED_armature_edit_select_op_from_tagged(bArmature *arm, const int sel_op)
static void select_similar_direction(bContext *C, const float thresh)
void ARMATURE_OT_select_linked_pick(wmOperatorType *ot)
bool ED_armature_edit_select_pick(bContext *C, const int mval[2], const SelectPick_Params ¶ms)
static wmOperatorStatus armature_de_select_more_exec(bContext *C, wmOperator *)
static void select_similar_bone_color(bContext *C)
static wmOperatorStatus armature_select_mirror_exec(bContext *C, wmOperator *op)
void ARMATURE_OT_select_more(wmOperatorType *ot)
static void select_similar_bone_collection(bContext *C)
void ARMATURE_OT_shortest_path_pick(wmOperatorType *ot)
bool ED_armature_ebone_is_child_recursive(EditBone *ebone_parent, EditBone *ebone_child)
void ED_armature_ebone_selectflag_disable(EditBone *ebone, int flag)
void ED_armature_edit_sync_selection(ListBase *edbo)
int ED_armature_ebone_selectflag_get(const EditBone *ebone)
void ED_armature_ebone_selectflag_set(EditBone *ebone, int flag)
void ED_armature_ebone_select_set(EditBone *ebone, bool select)
EditBone * ED_armature_ebone_find_shared_parent(EditBone *ebone_child[], const uint ebone_child_tot)
void ED_armature_ebone_selectflag_enable(EditBone *ebone, int flag)
EditBone * ED_armature_ebone_get_mirrored(const ListBase *edbo, EditBone *ebo)
BMesh const char void * data
ATTR_WARN_UNUSED_RESULT const BMVert * v2
BPy_StructRNA * depsgraph
constexpr MutableSpan slice(const int64_t start, const int64_t size) const
constexpr void copy_from(Span< T > values) const
bool contains(const Key &key) const
MutableSpan< T > as_mutable_span()
Span< T > as_span() const
static bool is_inside(int x, int y, int cols, int rows)
bool bone_is_visible(const bArmature *armature, const Bone *bone)
void base_activate(bContext *C, Base *base)
float RNA_float_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
union EditBone::@275371335250266324235150226366250166246037204077 temp
ListBase bone_collections
ObjectRuntimeHandle * runtime
struct EditBone * act_edbone
struct ReportList * reports
bool WM_cursor_test_motion_and_update(const int mval[2])
void WM_main_add_notifier(uint type, void *reference)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_operator_properties_select_all(wmOperatorType *ot)
wmOperatorStatus WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *)