56#define EBONE_PREV_FLAG_GET(ebone) ((void)0, (ebone)->temp.i)
57#define EBONE_PREV_FLAG_SET(ebone, val) ((ebone)->temp.i = val)
67 const uint hit_object = select_id & 0xFFFF;
71 for (
Base *base_iter : bases) {
72 if (base_iter->object->runtime->select_id == hit_object) {
77 if (base !=
nullptr) {
78 const uint hit_bone = (select_id & ~BONESEL_ANY) >> 16;
90 const uint hit_object = select_id & 0xFFFF;
94 for (
Object *object_iter : objects) {
95 if (object_iter->runtime->select_id == hit_object) {
101 const uint hit_bone = (select_id & ~BONESEL_ANY) >> 16;
110 const uint select_id,
113 const uint hit_object = select_id & 0xFFFF;
114 Base *base =
nullptr;
117 for (
Base *base_iter : bases) {
118 if (base_iter->object->runtime->select_id == hit_object) {
123 if (base !=
nullptr) {
125 const uint hit_bone = (select_id & ~BONESEL_ANY) >> 16;
135 const uint select_id,
140 *r_bone = pchan ? pchan->
bone :
nullptr;
166 void *firstunSel =
nullptr, *firstSel =
nullptr, *
data;
167 Base *firstunSel_base =
nullptr, *firstSel_base =
nullptr;
168 bool takeNext =
false;
169 int minsel = 0xffffffff, minunsel = 0xffffffff;
172 uint hit_id = hit_result.id;
175 Base *base =
nullptr;
178 hit_id &= ~BONESEL_ANY;
180 if (is_editmode ==
false) {
182 if (pchan !=
nullptr) {
218 if (minsel > hit_result.depth) {
220 firstSel_base = base;
221 minsel = hit_result.depth;
227 firstSel_base = base;
234 if (minunsel > hit_result.depth) {
236 firstunSel_base = base;
237 minunsel = hit_result.depth;
243 firstunSel_base = base;
256 *r_base = firstunSel_base;
259 *r_base = firstSel_base;
270 const bool is_editmode =
true;
272 is_editmode, bases, {hit_results, hits}, findunsel, do_nearest, r_base));
282 const bool is_editmode =
false;
284 is_editmode, bases, {hit_results, hits}, findunsel, do_nearest, r_base));
295 bases, hit_results, hits, findunsel, do_nearest, r_base);
296 return pchan ? pchan->
bone :
nullptr;
316 const bool is_editmode,
bContext *C,
const int xy[2],
bool findunsel,
Base **r_base)
329 const int select_id_ignore = -1;
339 if (vc.
obedit !=
nullptr) {
347 is_editmode, bases, buffer.
storage.
as_span().take_front(hits), findunsel,
true, r_base);
356 const bool is_editmode =
true;
363 const bool is_editmode =
false;
371 return pchan ? pchan->
bone :
nullptr;
391 bool changed =
false;
405#define CHECK_PARENT(ebone) \
407 (((ebone)->flag & BONE_CONNECTED) && \
408 ((ebone)->parent ? EBONE_SELECTABLE(arm, (ebone)->parent) : false))
416 if (ebone_iter->temp.i & TOUCH) {
419 if ((ebone_iter->flag &
BONE_DONE) == 0) {
423 ebone_iter->temp.i |= TOUCH | LINK;
426 for (
EditBone *ebone = ebone_iter; ebone;
433 ebone->temp.i |= (TOUCH | LINK);
436 ebone->temp.i |= TOUCH;
439 if (ebone->parent && ebone->parent->temp.i & LINK) {
451 if (ebone_iter->temp.i & TOUCH) {
456 EditBone *ebone_touched_parent =
nullptr;
457 for (
EditBone *ebone = ebone_iter; ebone;
460 if (ebone->temp.i & TOUCH) {
461 ebone_touched_parent = ebone;
464 ebone->
temp.
i |= TOUCH;
467 if ((ebone_touched_parent !=
nullptr) && (ebone_touched_parent->
temp.
i & LINK)) {
468 for (
EditBone *ebone = ebone_iter; ebone != ebone_touched_parent; ebone = ebone->
parent) {
469 if ((ebone->temp.i & LINK) == 0) {
470 ebone->temp.i |= LINK;
499 bool changed_multi =
false;
504 for (
Object *ob : objects) {
516 ebone->flag &= ~BONE_DONE;
522 changed_multi =
true;
536 ot->
name =
"Select Linked All";
537 ot->
idname =
"ARMATURE_OT_select_linked";
538 ot->
description =
"Select all bones linked by parent/child connections to the current selection";
565 Base *base =
nullptr;
568 if (ebone_active ==
nullptr) {
579 ebone->
flag &= ~BONE_DONE;
598 ot->
name =
"Select Linked";
599 ot->
idname =
"ARMATURE_OT_select_linked_pick";
600 ot->
description =
"(De)select bones linked by parent/child connections under the mouse cursor";
632 const int ofs = hits12;
641 ViewContext *vc,
bool findunsel,
bool use_cycle,
Base **r_base,
int *r_selmask)
649 Result *result =
nullptr;
650 Result result_cycle{};
651 result_cycle.hitresult = -1;
652 result_cycle.base =
nullptr;
653 result_cycle.
ebone =
nullptr;
654 Result result_bias{};
655 result_bias.hitresult = -1;
656 result_bias.base =
nullptr;
657 result_bias.
ebone =
nullptr;
663 if (ebone_active_orig ==
nullptr) {
676 const int select_id_ignore = -1;
696 else if (hits12 > 0) {
726 result_bias.hitresult = buffer.
storage[0].id;
728 bases, result_bias.hitresult, &result_bias.ebone);
731 int bias_max = INT_MIN;
750 } offset, test, best;
755 int ob_index = obedit_orig->
runtime->select_id & 0xFFFF;
758 cycle_order.offset.ob = ob_index;
759 cycle_order.offset.bone = bone_index;
761 cycle_order.best.as_u32 = 0;
764 int min_depth = INT_MAX;
765 for (
int i = 0; i < hits; i++) {
767 const uint hitresult = result.id;
769 Base *base =
nullptr;
815 if (bias > bias_max) {
818 result_bias.hitresult = hitresult;
819 result_bias.base = base;
820 result_bias.ebone = ebone;
822 else if (bias == bias_max && do_nearest) {
823 if (min_depth > result.depth) {
824 min_depth = result.depth;
825 result_bias.hitresult = hitresult;
826 result_bias.base = base;
827 result_bias.ebone = ebone;
834 cycle_order.test.ob = hitresult & 0xFFFF;
835 cycle_order.test.
bone = (hitresult & ~BONESEL_ANY) >> 16;
836 if (ebone == ebone_active_orig) {
837 BLI_assert(cycle_order.test.ob == cycle_order.offset.ob);
838 BLI_assert(cycle_order.test.bone == cycle_order.offset.bone);
844 cycle_order.test.as_u32 -= cycle_order.offset.as_u32;
850 if ((cycle_order.best.as_u32 == 0) ||
851 (cycle_order.test.as_u32 && (cycle_order.test.as_u32 < cycle_order.best.as_u32)))
853 cycle_order.best = cycle_order.test;
854 result_cycle.hitresult = hitresult;
855 result_cycle.base = base;
856 result_cycle.ebone = ebone;
862 result = (use_cycle && result_cycle.ebone) ? &result_cycle : &result_bias;
864 if (result->hitresult != -1) {
865 *r_base = result->base;
877 return result->ebone;
894 bool changed =
false;
907 bool changed =
false;
926 bool changed_multi =
false;
927 for (
Base *base : bases) {
928 Object *obedit = base->object;
931 return changed_multi;
936 bool changed_multi =
false;
937 for (
Base *base : bases) {
938 Object *obedit = base->object;
941 return changed_multi;
965 bool changed =
false;
976 if ((found &&
params->select_passthrough) &&
981 else if (found ||
params->deselect_all) {
984 scene, view_layer, v3d);
1001 switch (
params->sel_op) {
1047 switch (
params->sel_op) {
1078 switch (
params->sel_op) {
1080 ebone->
flag |= selmask;
1084 ebone->
flag &= ~selmask;
1088 if (ebone->
flag & selmask) {
1089 ebone->
flag &= ~selmask;
1092 ebone->
flag |= selmask;
1097 ebone->
flag |= selmask;
1128 return changed || found;
1137 Base *basact =
nullptr;
1140 vc.
mval[0] = mval[0];
1141 vc.
mval[1] = mval[1];
1164 bool changed =
false;
1165 bool is_point_done =
false;
1166 int points_proj_tot = 0;
1168 const int ebone_flag_prev = ebone->
flag;
1175 if (sel_op_result != -1) {
1188 if (sel_op_result != -1) {
1197 if ((is_point_done ==
false) && (points_proj_tot == 2)) {
1202 if (sel_op_result != -1) {
1212 changed |= is_point_done;
1214 if (ebone_flag_prev != ebone->
flag) {
1216 ebone->
flag = ebone_flag_prev;
1226 bool changed =
false;
1239 ebone->flag &= ~BONE_ROOTSEL;
1247 ebone->flag &= ~BONE_DONE;
1253 if (ebone->temp.i != 0) {
1258 ebone->temp.i = ebone->flag;
1264 is_inside_flag &= ~BONESEL_BONE;
1268 arm, ebone,
eSelectOp(sel_op), is_ignore_flag, is_inside_flag);
1276 std::swap(ebone->temp.i, ebone->flag);
1279 if ((ebone->parent->flag &
BONE_DONE) == 0) {
1281 ebone->parent->temp.i = ebone->parent->flag;
1290 bool is_parent_tip_changed = (ebone->parent->flag &
BONE_TIPSEL) !=
1299 ebone->parent->flag &= ~BONE_TIPSEL;
1303 if (is_parent_tip_changed ==
false) {
1310 ebone->flag &= ~BONE_DONE;
1389 ot->
name =
"(De)select All";
1390 ot->
idname =
"ARMATURE_OT_select_all";
1481 if (more ==
false) {
1487 ebone->temp.p =
nullptr;
1505 for (
Object *ob : objects) {
1518 ot->
name =
"Select More";
1519 ot->
idname =
"ARMATURE_OT_select_more";
1520 ot->
description =
"Select those bones connected to the initial selection";
1542 for (
Object *ob : objects) {
1555 ot->
name =
"Select Less";
1556 ot->
idname =
"ARMATURE_OT_select_less";
1557 ot->
description =
"Deselect those bones at the boundary of each selection region";
1597 {0,
nullptr, 0,
nullptr,
nullptr},
1617 const float len_min =
len / (1.0f + (thresh - FLT_EPSILON));
1618 const float len_max =
len * (1.0f + (thresh + FLT_EPSILON));
1622 for (
Object *ob : objects) {
1624 bool changed =
false;
1629 if ((len_iter > len_min) && (len_iter < len_max)) {
1649 mul_m4_v3(ob->object_to_world().ptr(), v1);
1668 for (
Object *ob : objects) {
1670 bool changed =
false;
1677 if (
angle_v3v3(dir_act, dir) /
float(
M_PI) < (thresh + FLT_EPSILON)) {
1701 collection_names.
add(bcoll_ref->bcoll->name);
1706 for (
Object *ob : objects) {
1708 bool changed =
false;
1716 if (!collection_names.
contains(bcoll_ref->bcoll->name)) {
1742 for (
Object *ob : objects) {
1744 bool changed =
false;
1752 if (bone_color != active_bone_color) {
1778 if (prefix_act[0] ==
'\0') {
1784 for (
Object *ob : objects) {
1786 bool changed =
false;
1793 if (
STREQ(prefix_act, prefix_other)) {
1818 if (suffix_act[0] ==
'\0') {
1824 for (
Object *ob : objects) {
1826 bool changed =
false;
1833 if (
STREQ(suffix_act, suffix_other)) {
1858 if (pchan_active ==
nullptr) {
1862 const char *data_active = (
const char *)
POINTER_OFFSET(pchan_active, offset);
1867 const char *data_test = (
const char *)
POINTER_OFFSET(pchan, offset);
1868 if (memcmp(data_active, data_test, bytes_size) == 0) {
1899 ebone_iter->temp.ebone = ebone_iter->parent;
1905 if (ebone_iter->temp.ebone == ebone_act &&
EBONE_SELECTABLE(arm, ebone_iter)) {
1921 if (ebone_iter->parent == ebone_act &&
EBONE_SELECTABLE(arm, ebone_iter)) {
1936 if (ebone_act->
parent ==
nullptr) {
1962#define STRUCT_SIZE_AND_OFFSET(_struct, _member) \
1963 sizeof(_struct::_member), offsetof(_struct, _member)
1998#undef STRUCT_SIZE_AND_OFFSET
2008 ot->
name =
"Select Similar";
2009 ot->
idname =
"ARMATURE_OT_select_similar";
2039 bool changed =
false;
2043 if (ebone_active ==
nullptr) {
2048 if (ebone_active->
parent) {
2051 ebone_parent = ebone_active->
parent;
2070 for (pass = 0; pass < 2 && (ebone_child ==
nullptr); pass++) {
2074 if (ebone_iter->parent == ebone_active) {
2076 ebone_child = ebone_iter;
2096 if (changed ==
false) {
2115 {0,
nullptr, 0,
nullptr,
nullptr},
2119 ot->
name =
"Select Hierarchy";
2120 ot->
idname =
"ARMATURE_OT_select_hierarchy";
2121 ot->
description =
"Select immediate parent/children of selected bones";
2153 for (
Object *ob : objects) {
2156 EditBone *ebone_mirror_act =
nullptr;
2172 flag_new |= flag_mirror;
2175 ebone_mirror_act = ebone_mirror;
2179 if (active_only && !
ELEM(arm->
act_edbone, ebone, ebone_mirror)) {
2188 if (ebone_mirror_act) {
2206 ot->
name =
"Select Mirror";
2207 ot->
idname =
"ARMATURE_OT_select_mirror";
2219 ot->
srna,
"only_active",
false,
"Active Only",
"Only operate on the active bone");
2234 if (!use_parent && (ebone_child == ebone_parent)) {
2247 if (ebone_child == ebone_parent) {
2251 ebone_child = ebone_child->
parent;
2262 EditBone *ebone_isect_parent =
nullptr;
2265 Base *base_dst =
nullptr;
2274 if (
ELEM(
nullptr, ebone_src, ebone_dst) || (ebone_src == ebone_dst)) {
2278 if (base_dst && base_dst->
object != obedit) {
2283 ebone_isect_child[0] = ebone_src;
2284 ebone_isect_child[1] = ebone_dst;
2291 std::swap(ebone_src, ebone_dst);
2301 if (ebone_isect_parent) {
2342 ot->
name =
"Pick Shortest Path";
2343 ot->
idname =
"ARMATURE_OT_shortest_path_pick";
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()
#define LISTBASE_FOREACH(type, var, list)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
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 EBONE_VISIBLE(arm, ebone)
#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_opengl_select_cache_begin()
ViewContext ED_view3d_viewcontext_init(bContext *C, Depsgraph *depsgraph)
void view3d_operator_needs_opengl(const bContext *C)
@ VIEW3D_SELECT_PICK_NEAREST
int view3d_opengl_select_with_id_filter(const ViewContext *vc, GPUSelectBuffer *buffer, const rcti *input, eV3DSelectMode select_mode, eV3DSelectObjectFilter select_filter, uint select_id)
void view3d_opengl_select_cache_end()
@ VIEW3D_SELECT_FILTER_NOP
Read Guarded memory(de)allocation.
#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)
static int armature_select_similar_exec(bContext *C, wmOperator *op)
#define EBONE_PREV_FLAG_GET(ebone)
static bool armature_select_linked_pick_poll(bContext *C)
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)
static int armature_de_select_less_exec(bContext *C, wmOperator *)
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)
bool ED_armature_edit_select_pick_bone(bContext *C, Base *basact, EditBone *ebone, const int selmask, const SelectPick_Params *params)
static int armature_de_select_all_exec(bContext *C, wmOperator *op)
static int armature_de_select_more_exec(bContext *C, wmOperator *)
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)
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 int armature_select_mirror_exec(bContext *C, wmOperator *op)
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 int armature_shortest_path_pick_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void * ed_armature_pick_bone_impl(const bool is_editmode, bContext *C, const int xy[2], bool findunsel, Base **r_base)
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 int 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 int armature_select_hierarchy_exec(bContext *C, wmOperator *op)
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)
void ARMATURE_OT_select_linked(wmOperatorType *ot)
@ SIMEDBONE_CHILDREN_IMMEDIATE
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)
bool ED_armature_edit_select_pick(bContext *C, const int mval[2], const SelectPick_Params *params)
static int armature_select_linked_pick_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void select_similar_direction(bContext *C, const float thresh)
void ARMATURE_OT_select_linked_pick(wmOperatorType *ot)
static void select_similar_bone_color(bContext *C)
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)
ATTR_WARN_UNUSED_RESULT const BMVert * v2
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
const Depsgraph * depsgraph
static bool is_inside(int x, int y, int cols, int rows)
ccl_device_inline float4 select(const int4 mask, const float4 a, const float4 b)
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)
ListBase bone_collections
ObjectRuntimeHandle * runtime
struct EditBone * act_edbone
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
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)
int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *)