47 #define EBONE_PREV_FLAG_GET(ebone) ((void)0, (ebone)->temp.i)
48 #define EBONE_PREV_FLAG_SET(ebone, val) ((ebone)->temp.i = val)
59 const uint hit_object = select_id & 0xFFFF;
63 for (
uint base_index = 0; base_index < bases_len; base_index++) {
64 if (bases[base_index]->object->runtime.select_id == hit_object) {
65 base = bases[base_index];
83 const uint hit_object = select_id & 0xFFFF;
87 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
88 if (objects[ob_index]->runtime.select_id == hit_object) {
89 ob = objects[ob_index];
104 const uint select_id,
107 const uint hit_object = select_id & 0xFFFF;
111 for (
uint base_index = 0; base_index < bases_len; base_index++) {
112 if (bases[base_index]->object->runtime.select_id == hit_object) {
113 base = bases[base_index];
130 const uint select_id,
135 *r_bone = pchan ? pchan->
bone :
NULL;
166 bool takeNext =
false;
167 int minsel = 0xffffffff, minunsel = 0xffffffff;
169 for (
short i = 0; i < hits; i++) {
178 if (is_editmode ==
false) {
210 if (minsel >
buffer[i].depth) {
212 firstSel_base = base;
219 firstSel_base = base;
226 if (minunsel >
buffer[i].depth) {
228 firstunSel_base = base;
229 minunsel =
buffer[i].depth;
235 firstunSel_base = base;
248 *r_base = firstunSel_base;
251 *r_base = firstSel_base;
263 const bool is_editmode =
true;
265 is_editmode, bases, bases_len,
buffer, hits, findunsel, do_nearest, r_base);
276 const bool is_editmode =
false;
278 is_editmode, bases, bases_len,
buffer, hits, findunsel, do_nearest, r_base);
290 bases, bases_len,
buffer, hits, findunsel, do_nearest, r_base);
311 const bool is_editmode,
bContext *
C,
const int xy[2],
bool findunsel,
Base **r_base)
325 const int select_id_ignore = -1;
346 .object_mode = OB_MODE_EDIT,
354 is_editmode, bases, bases_len,
buffer, hits, findunsel,
true, r_base);
365 const bool is_editmode =
true;
371 const bool is_editmode =
false;
398 bool changed =
false;
412 #define CHECK_PARENT(ebone) \
413 (((ebone)->flag & BONE_CONNECTED) && \
414 ((ebone)->parent ? EBONE_SELECTABLE(arm, (ebone)->parent) : false))
422 if (ebone_iter->temp.i & TOUCH) {
425 if ((ebone_iter->flag &
BONE_DONE) == 0) {
429 ebone_iter->temp.i |= TOUCH | LINK;
437 ebone->temp.i |= (TOUCH | LINK);
440 ebone->temp.i |= TOUCH;
443 if (ebone->parent && ebone->parent->temp.i & LINK) {
455 if (ebone_iter->temp.i & TOUCH) {
462 if (ebone->temp.i & TOUCH) {
463 ebone_touched_parent = ebone;
466 ebone->
temp.
i |= TOUCH;
469 if ((ebone_touched_parent !=
NULL) && (ebone_touched_parent->
temp.
i & LINK)) {
470 for (
EditBone *ebone = ebone_iter; ebone != ebone_touched_parent; ebone = ebone->
parent) {
471 if ((ebone->temp.i & LINK) == 0) {
472 ebone->temp.i |= LINK;
501 bool changed_multi =
false;
503 uint objects_len = 0;
506 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
507 Object *ob = objects[ob_index];
524 changed_multi =
true;
539 ot->
name =
"Select Linked All";
540 ot->
idname =
"ARMATURE_OT_select_linked";
541 ot->
description =
"Select all bones linked by parent/child connections to the current selection";
571 if (ebone_active ==
NULL) {
601 ot->
name =
"Select Linked";
602 ot->
idname =
"ARMATURE_OT_select_linked_pick";
603 ot->
description =
"(De)select bones linked by parent/child connections under the mouse cursor";
632 const int ofs = hits12;
640 ViewContext *vc,
bool findunsel,
bool use_cycle,
Base **r_base,
int *r_selmask)
649 result_cycle = {.hitresult = -1, .base =
NULL, .ebone =
NULL},
650 result_bias = {.hitresult = -1, .base =
NULL, .ebone =
NULL};
656 if (ebone_active_orig ==
NULL) {
669 const int select_id_ignore = -1;
687 else if (hits12 > 0) {
726 result_bias.hitresult =
buffer->id;
728 bases, bases_len, result_bias.hitresult, &result_bias.ebone);
731 int bias_max = INT_MIN;
742 #ifdef __BIG_ENDIAN__
758 cycle_order.offset.ob = ob_index;
759 cycle_order.offset.bone = bone_index;
761 cycle_order.best.as_u32 = 0;
764 for (
int i = 0; i < hits; i++) {
809 if (bias > bias_max) {
812 result_bias.hitresult = hitresult;
813 result_bias.base = base;
814 result_bias.ebone = ebone;
820 cycle_order.test.ob = hitresult & 0xFFFF;
822 if (ebone == ebone_active_orig) {
823 BLI_assert(cycle_order.test.ob == cycle_order.offset.ob);
824 BLI_assert(cycle_order.test.bone == cycle_order.offset.bone);
830 cycle_order.test.as_u32 -= cycle_order.offset.as_u32;
836 if ((cycle_order.best.as_u32 == 0) ||
837 (cycle_order.test.as_u32 && (cycle_order.test.as_u32 < cycle_order.best.as_u32))) {
838 cycle_order.best = cycle_order.test;
839 result_cycle.hitresult = hitresult;
840 result_cycle.base = base;
841 result_cycle.ebone = ebone;
847 result = (use_cycle && result_cycle.ebone) ? &result_cycle : &result_bias;
849 if (
result->hitresult != -1) {
881 bool changed =
false;
894 bool changed =
false;
913 bool changed_multi =
false;
914 for (
uint base_index = 0; base_index < bases_len; base_index++) {
918 return changed_multi;
923 bool changed_multi =
false;
924 for (
uint base_index = 0; base_index < bases_len; base_index++) {
928 return changed_multi;
941 return changed_multi;
958 bool changed =
false;
969 if ((found &&
params->select_passthrough) &&
973 else if (found ||
params->deselect_all) {
977 view_layer, v3d, &bases_len);
1041 switch (
params->sel_op) {
1072 switch (
params->sel_op) {
1074 ebone->
flag |= selmask;
1078 ebone->
flag &= ~selmask;
1082 if (ebone->
flag & selmask) {
1083 ebone->
flag &= ~selmask;
1086 ebone->
flag |= selmask;
1091 ebone->
flag |= selmask;
1108 if (view_layer->
basact != basact) {
1121 return changed || found;
1136 vc.
mval[0] = mval[0];
1137 vc.
mval[1] = mval[1];
1160 bool changed =
false;
1161 bool is_point_done =
false;
1162 int points_proj_tot = 0;
1164 const int ebone_flag_prev = ebone->
flag;
1171 if (sel_op_result != -1) {
1184 if (sel_op_result != -1) {
1193 if ((is_point_done ==
false) && (points_proj_tot == 2)) {
1198 if (sel_op_result != -1) {
1208 changed |= is_point_done;
1210 if (ebone_flag_prev != ebone->
flag) {
1212 ebone->
flag = ebone_flag_prev;
1222 bool changed =
false;
1249 if (ebone->temp.i != 0) {
1254 ebone->temp.i = ebone->flag;
1270 SWAP(
int, ebone->temp.i, ebone->flag);
1273 if ((ebone->parent->flag &
BONE_DONE) == 0) {
1275 ebone->parent->temp.i = ebone->parent->flag;
1284 bool is_parent_tip_changed = (ebone->parent->flag &
BONE_TIPSEL) !=
1297 if (is_parent_tip_changed ==
false) {
1345 if (ebone->parent) {
1360 if (ebone->parent) {
1384 ot->
name =
"(De)select All";
1385 ot->
idname =
"ARMATURE_OT_select_all";
1459 for (ebone = arm->
edbo->
first; ebone; ebone = ebone->next) {
1464 for (ebone = arm->
edbo->
first; ebone; ebone = ebone->next) {
1475 for (ebone = arm->
edbo->
first; ebone; ebone = ebone->next) {
1477 if (more ==
false) {
1483 ebone->temp.p =
NULL;
1498 uint objects_len = 0;
1501 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
1502 Object *ob = objects[ob_index];
1516 ot->
name =
"Select More";
1517 ot->
idname =
"ARMATURE_OT_select_more";
1518 ot->
description =
"Select those bones connected to the initial selection";
1537 uint objects_len = 0;
1540 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
1541 Object *ob = objects[ob_index];
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";
1616 const float len_min =
len / (1.0f + (thresh - FLT_EPSILON));
1617 const float len_max =
len * (1.0f + (thresh + FLT_EPSILON));
1619 uint objects_len = 0;
1622 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
1623 Object *ob = objects[ob_index];
1625 bool changed =
false;
1630 if ((len_iter > len_min) && (len_iter < len_max)) {
1667 uint objects_len = 0;
1670 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
1671 Object *ob = objects[ob_index];
1673 bool changed =
false;
1680 if (
angle_v3v3(dir_act, dir) / (
float)
M_PI < (thresh + FLT_EPSILON)) {
1701 uint objects_len = 0;
1704 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
1705 Object *ob = objects[ob_index];
1707 bool changed =
false;
1711 if (ebone->layer & ebone_act->
layer) {
1736 if (prefix_act[0] ==
'\0') {
1740 uint objects_len = 0;
1743 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
1744 Object *ob = objects[ob_index];
1746 bool changed =
false;
1753 if (
STREQ(prefix_act, prefix_other)) {
1778 if (suffix_act[0] ==
'\0') {
1782 uint objects_len = 0;
1785 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
1786 Object *ob = objects[ob_index];
1788 bool changed =
false;
1795 if (
STREQ(suffix_act, suffix_other)) {
1821 if (pchan_active ==
NULL) {
1831 if (memcmp(data_active, data_test, bytes_size) == 0) {
1862 ebone_iter->temp.ebone = ebone_iter->parent;
1868 if (ebone_iter->temp.ebone == ebone_act &&
EBONE_SELECTABLE(arm, ebone_iter)) {
1884 if (ebone_iter->parent == ebone_act &&
EBONE_SELECTABLE(arm, ebone_iter)) {
1925 #define STRUCT_SIZE_AND_OFFSET(_struct, _member) \
1926 sizeof(((_struct *)NULL)->_member), offsetof(_struct, _member)
1961 #undef STRUCT_SIZE_AND_OFFSET
1971 ot->
name =
"Select Similar";
1972 ot->
idname =
"ARMATURE_OT_select_similar";
2002 bool changed =
false;
2006 if (ebone_active ==
NULL) {
2011 if (ebone_active->
parent) {
2014 ebone_parent = ebone_active->
parent;
2033 for (pass = 0; pass < 2 && (ebone_child ==
NULL); pass++) {
2034 for (ebone_iter = arm->
edbo->
first; ebone_iter; ebone_iter = ebone_iter->
next) {
2037 if (ebone_iter->
parent == ebone_active) {
2039 ebone_child = ebone_iter;
2059 if (changed ==
false) {
2082 ot->
name =
"Select Hierarchy";
2083 ot->
idname =
"ARMATURE_OT_select_hierarchy";
2084 ot->
description =
"Select immediate parent/children of selected bones";
2113 uint objects_len = 0;
2116 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
2117 Object *ob = objects[ob_index];
2122 for (ebone = arm->
edbo->
first; ebone; ebone = ebone->
next) {
2127 for (ebone = arm->
edbo->
first; ebone; ebone = ebone->
next) {
2135 flag_new |= flag_mirror;
2138 ebone_mirror_act = ebone_mirror;
2142 if (active_only && !
ELEM(arm->
act_edbone, ebone, ebone_mirror)) {
2151 if (ebone_mirror_act) {
2170 ot->
name =
"Select Mirror";
2171 ot->
idname =
"ARMATURE_OT_select_mirror";
2183 ot->
srna,
"only_active",
false,
"Active Only",
"Only operate on the active bone");
2198 if (!use_parent && (ebone_child == ebone_parent)) {
2211 if (ebone_child == ebone_parent) {
2215 ebone_child = ebone_child->
parent;
2238 if (
ELEM(
NULL, ebone_src, ebone_dst) || (ebone_src == ebone_dst)) {
2242 if (base_dst && base_dst->
object != obedit) {
2247 ebone_isect_child[0] = ebone_src;
2248 ebone_isect_child[1] = ebone_dst;
2265 if (ebone_isect_parent) {
2305 ot->
name =
"Pick Shortest Path";
2306 ot->
idname =
"ARMATURE_OT_shortest_path_pick";
Blender kernel action and pose functionality.
struct bPoseChannel * BKE_pose_channel_find_name(const struct bPose *pose, const char *name)
struct Object * CTX_data_edit_object(const bContext *C)
#define CTX_DATA_BEGIN(C, Type, instance, member)
struct ViewLayer * CTX_data_view_layer(const bContext *C)
struct Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
struct View3D * CTX_wm_view3d(const bContext *C)
struct EditBone * CTX_data_active_bone(const bContext *C)
struct Main * CTX_data_main(const bContext *C)
#define BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, v3d, r_len)
#define BKE_view_layer_array_from_bases_in_edit_mode_unique_data(view_layer, v3d, r_len)
#define BKE_view_layer_array_from_bases_in_mode(view_layer, v3d, r_len,...)
General operations, lookup, etc. for blender objects.
struct Base ** BKE_object_pose_base_array_get(struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_bases_len)
void BKE_object_update_select_id(struct Main *bmain)
bool BKE_object_is_in_editmode(const struct Object *ob)
void BKE_report(ReportList *reports, eReportType type, const char *message)
#define BLI_assert_unreachable()
#define LISTBASE_FOREACH(type, var, list)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findlink(const struct ListBase *listbase, int number) 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 M[4][4], const float v[3])
float angle_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v3(float r[3])
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])
void BLI_rcti_init_pt_radius(struct rcti *rect, const int xy[2], int size)
void BLI_string_split_prefix(const char *string, char *r_pre, char *r_body, size_t str_len)
void BLI_string_split_suffix(const char *string, char *r_body, char *r_suf, size_t str_len)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define POINTER_OFFSET(v, ofs)
struct Depsgraph Depsgraph
void DEG_id_tag_update(struct ID *id, int flag)
@ ID_RECALC_COPY_ON_WRITE
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_object_base_activate(struct bContext *C, struct Base *base)
void ED_outliner_select_sync_from_edit_bone_tag(struct bContext *C)
bool ED_operator_editarmature(struct bContext *C)
bool ED_operator_view3d_active(struct bContext *C)
int ED_select_op_action_deselected(eSelectOp sel_op, bool is_select, bool is_inside)
void view3d_opengl_select_cache_end(void)
void ED_view3d_viewcontext_init(struct bContext *C, struct ViewContext *vc, struct Depsgraph *depsgraph)
int view3d_opengl_select_with_id_filter(struct ViewContext *vc, struct GPUSelectResult *buffer, unsigned int buffer_len, const struct rcti *input, eV3DSelectMode select_mode, eV3DSelectObjectFilter select_filter, uint select_id)
void view3d_opengl_select_cache_begin(void)
@ VIEW3D_SELECT_PICK_NEAREST
void view3d_operator_needs_opengl(const struct bContext *C)
@ VIEW3D_SELECT_FILTER_NOP
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
Read Guarded memory(de)allocation.
#define CHECK_PARENT(ebone)
bool ED_armature_edit_select_pick_bone(bContext *C, Base *basact, EditBone *ebone, const int selmask, const struct SelectPick_Params *params)
void ARMATURE_OT_select_similar(wmOperatorType *ot)
static void armature_select_less(bArmature *UNUSED(arm), EditBone *ebone)
void ARMATURE_OT_select_all(wmOperatorType *ot)
void ARMATURE_OT_select_hierarchy(wmOperatorType *ot)
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)
bool ED_armature_edit_select_pick(bContext *C, const int mval[2], const struct SelectPick_Params *params)
Base * ED_armature_base_and_bone_from_select_buffer(Base **bases, uint bases_len, const uint select_id, Bone **r_bone)
static EditBone * get_nearest_editbonepoint(ViewContext *vc, bool findunsel, bool use_cycle, Base **r_base, int *r_selmask)
void ARMATURE_OT_select_mirror(wmOperatorType *ot)
static int armature_de_select_all_exec(bContext *C, wmOperator *op)
static void * ed_armature_pick_bone_from_selectbuffer_impl(const bool is_editmode, Base **bases, uint bases_len, const GPUSelectResult *buffer, const short hits, bool findunsel, bool do_nearest, Base **r_base)
static const EnumPropertyItem prop_similar_types[]
Bone * ED_armature_pick_bone(bContext *C, const int xy[2], bool findunsel, Base **r_base)
static int selectbuffer_ret_hits_12(GPUSelectResult *UNUSED(buffer), const int hits12)
static void select_similar_suffix(bContext *C)
static void bone_direction_worldspace_get(Object *ob, EditBone *ebone, float *r_dir)
bPoseChannel * ED_armature_pick_pchan(bContext *C, const int xy[2], bool findunsel, Base **r_base)
bool ED_armature_edit_deselect_all(Object *obedit)
static bool armature_select_linked_impl(Object *ob, const bool select, const bool all_forks)
EditBone * ED_armature_pick_ebone(bContext *C, const int xy[2], bool findunsel, Base **r_base)
void ARMATURE_OT_select_less(wmOperatorType *ot)
Base * ED_armature_base_and_pchan_from_select_buffer(Base **bases, uint bases_len, const uint select_id, bPoseChannel **r_pchan)
bPoseChannel * ED_armature_pick_pchan_from_selectbuffer(Base **bases, uint bases_len, const GPUSelectResult *buffer, const short hits, bool findunsel, bool do_nearest, Base **r_base)
static int armature_select_mirror_exec(bContext *C, wmOperator *op)
static void select_similar_prefix(bContext *C)
EditBone * ED_armature_pick_ebone_from_selectbuffer(Base **bases, uint bases_len, const GPUSelectResult *buffer, const short hits, bool findunsel, bool do_nearest, Base **r_base)
bool ED_armature_edit_deselect_all_multi_ex(struct Base **bases, uint bases_len)
static void is_ancestor(EditBone *bone, EditBone *ancestor)
static int armature_shortest_path_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 int armature_select_linked_exec(bContext *C, wmOperator *op)
Object * ED_armature_object_and_ebone_from_select_buffer(Object **objects, uint objects_len, const uint select_id, EditBone **r_ebone)
static void select_similar_children(bContext *C)
static float bone_length_squared_worldspace_get(Object *ob, EditBone *ebone)
static void armature_select_more_less(Object *ob, bool more)
#define EBONE_PREV_FLAG_SET(ebone, val)
#define STRUCT_SIZE_AND_OFFSET(_struct, _member)
static void * ed_armature_pick_bone_impl(const bool is_editmode, bContext *C, const int xy[2], bool findunsel, Base **r_base)
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)
void ARMATURE_OT_select_linked(wmOperatorType *ot)
static void select_similar_layer(bContext *C)
static int selectbuffer_ret_hits_5(GPUSelectResult *buffer, const int hits12, const int hits5)
Base * ED_armature_base_and_ebone_from_select_buffer(Base **bases, uint bases_len, const uint select_id, EditBone **r_ebone)
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)
bool ED_armature_edit_select_op_from_tagged(bArmature *arm, const int sel_op)
@ SIMEDBONE_CHILDREN_IMMEDIATE
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)
Bone * ED_armature_pick_bone_from_selectbuffer(Base **bases, uint bases_len, const GPUSelectResult *buffer, const short hits, bool findunsel, bool do_nearest, Base **r_base)
static int armature_de_select_less_exec(bContext *C, wmOperator *UNUSED(op))
static int armature_de_select_more_exec(bContext *C, wmOperator *UNUSED(op))
void ARMATURE_OT_select_more(wmOperatorType *ot)
bool ED_armature_edit_deselect_all_visible_multi_ex(struct Base **bases, uint bases_len)
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_edit_validate_active(struct bArmature *arm)
void ED_armature_ebone_selectflag_enable(EditBone *ebone, int flag)
EditBone * ED_armature_ebone_get_mirrored(const ListBase *edbo, EditBone *ebo)
__forceinline const avxb select(const avxb &m, const avxb &t, const avxb &f)
ATTR_WARN_UNUSED_RESULT const BMVert * v2
const Depsgraph * depsgraph
static bool is_inside(int x, int y, int cols, int rows)
ccl_global float * buffer
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
void(* MEM_freeN)(void *vmemh)
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, float default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, int default_value, const char *ui_name, const char *ui_description)
struct ViewLayer * view_layer
struct EditBone * act_edbone
int(* invoke)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
bool WM_cursor_test_motion_and_update(const int mval[2])
void WM_main_add_notifier(unsigned int 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 *UNUSED(event))