79 const uint objects_len,
113 if (ese && ese->
prev) {
135 if (ese && ese->
prev) {
182 return uv_selectmode;
207 int cd_loop_uv_offset)
263 const int cd_loop_uv_offset)
276 }
while ((l_iter = l_iter->
next) != l_first);
284 const int cd_loop_uv_offset)
298 const int cd_loop_uv_offset)
323 const int cd_loop_uv_offset)
373 const uint cd_loop_uv_offset)
391 const int cd_loop_uv_offset)
406 const int cd_loop_uv_offset)
441 const int cd_loop_uv_offset)
492 const uint cd_loop_uv_offset)
500 const int sticky = sima->
sticky;
510 e_first = e_iter =
l->
e;
513 BMLoop *l_radial_iter = e_iter->
l;
515 if (l_radial_iter->
v ==
l->
v) {
517 bool do_select =
false;
535 }
while ((l_radial_iter = l_radial_iter->
radial_next) != e_iter->
l);
547 const int cd_loop_uv_offset)
561 const int cd_loop_uv_offset)
586 const int cd_loop_uv_offset)
606 const int cd_loop_uv_offset)
610 if (l_iter != l_src) {
615 if (l_other ==
NULL) {
632 const int cd_loop_uv_offset)
635 scene, l_edge, cd_loop_uv_offset) ==
NULL);
638 l_step = (l_step->
v == v_pivot) ? l_step->
prev : l_step->
next;
642 l_step_last = l_step;
644 scene, l_step, cd_loop_uv_offset);
646 l_step = (l_step->
v == v_pivot) ? l_step->
prev : l_step->
next;
648 }
while (l_step !=
NULL);
650 if (l_step_last !=
NULL) {
652 scene, l_step_last, cd_loop_uv_offset) ==
NULL);
695 if (dist_test_sq < hit->dist_sq) {
713 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
714 Object *obedit = objects[ob_index];
757 if (dist_test_sq < hit->dist_sq) {
781 const uint objects_len,
784 const bool only_in_face)
787 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
788 Object *obedit = objects[ob_index];
848 if (dist_test_sq <= hit->dist_sq) {
849 if (dist_test_sq == hit->
dist_sq) {
870 const uint objects_len,
872 const float penalty_dist,
876 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
877 Object *obedit = objects[ob_index];
886 const Scene *
scene,
Object *obedit,
const float co[2],
float *dist_sq,
float r_uv[2])
891 const float *uv_best =
NULL;
892 float dist_best = *dist_sq;
903 if (dist_best > dist_test) {
904 dist_best = dist_test;
907 }
while ((l_iter = l_iter->
next) != l_first);
910 if (uv_best !=
NULL) {
912 *dist_sq = dist_best;
920 const uint objects_len,
926 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
927 Object *obedit = objects[ob_index];
956 float dist_best_sq = FLT_MAX;
965 if (dist_test_sq < dist_best_sq) {
966 dist_best_sq = dist_test_sq;
984 float dist_best_sq = FLT_MAX;
993 if (dist_test_sq < dist_best_sq) {
994 dist_best_sq = dist_test_sq;
1018 const int cd_loop_uv_offset)
1020 if (l_step->
f->
len == 4) {
1022 BMLoop *l_step_over = (v_from == l_step->
v) ? l_step->
next : l_step->
prev;
1024 scene, l_step_over, cd_loop_uv_offset);
1026 return (l_step_over->
v == v_from_next) ? l_step_over->
prev : l_step_over->
next;
1035 const int cd_loop_uv_offset)
1039 scene, l_step, v_from_next, cd_loop_uv_offset);
1062 const int cd_loop_uv_offset)
1066 for (
int side = 0; side < 2; side++) {
1067 BMLoop *l_step_pair[2] = {l_init_pair[0], l_init_pair[1]};
1068 BMVert *v_from = side ? l_step_pair[0]->
e->
v1 : l_step_pair[0]->
e->
v2;
1072 while ((l_step_pair[0] !=
NULL) && (l_step_pair[1] !=
NULL)) {
1077 scene, l_step_pair[0], cd_loop_uv_offset) != l_step_pair[1])) {
1088 for (
int i = 0; i <
ARRAY_SIZE(l_step_pair); i++) {
1090 scene, l_step_pair[i], v_from, cd_loop_uv_offset);
1097 v_from = v_from_next;
1111 const int cd_loop_uv_offset,
1113 int r_count_by_select[2])
1115 if (r_count_by_select) {
1116 r_count_by_select[0] = r_count_by_select[1] = 0;
1121 for (
int side = 0; side < 2; side++) {
1126 while (l_step !=
NULL) {
1131 scene, l_step, cd_loop_uv_offset) !=
NULL)) {
1135 if (r_count_by_select !=
NULL) {
1138 if (r_count_by_select[0] && r_count_by_select[1]) {
1139 r_count_by_select[0] = r_count_by_select[1] = -1;
1147 BMFace *f_step_prev = l_step->
f;
1156 if (f_step_prev == l_step->
f) {
1160 v_from = v_from_next;
1180 BMLoop *l_init_pair[2] = {
1190 if (l_init_pair[1] ==
NULL) {
1191 int count_by_select[2];
1194 scene, em, l_init_pair[0], cd_loop_uv_offset, boundary_mode, count_by_select);
1195 if (count_by_select[!
select] == 0) {
1200 scene, em, l_init_pair[0], cd_loop_uv_offset, boundary_mode, count_by_select);
1201 if (count_by_select[!
select] == 0) {
1207 if (l_init_pair[1] ==
NULL) {
1209 scene, em, l_init_pair[0], cd_loop_uv_offset, boundary_mode,
NULL);
1230 sima,
scene, em, l_iter,
select,
false, cd_loop_uv_offset);
1236 return (
select) ? 1 : -1;
1275 for (
int side = 0; side < 2; side++) {
1276 BMLoop *l_step = l_pair[side];
1284 if (use_face_select) {
1286 sima,
scene, em, l_step->
f,
select,
false, cd_loop_uv_offset);
1290 sima,
scene, em, l_step,
select,
false, cd_loop_uv_offset);
1294 if (l_step->
f->
len == 4) {
1297 scene, l_step_opposite, cd_loop_uv_offset);
1298 if (l_step ==
NULL) {
1300 l_step = l_step_opposite;
1313 return (
select) ? 1 : -1;
1324 const uint objects_len,
1329 const bool select_faces)
1334 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
1335 if (hit && ob_index != 0) {
1338 Object *obedit = hit ? hit->
ob : objects[ob_index];
1345 int i, stacksize = 0, *stack;
1375 stack[stacksize] =
a;
1383 bool add_to_stack =
true;
1384 if (uv_sync_select && !select_faces) {
1402 if ((
l != l_other) &&
1405 add_to_stack =
false;
1413 stack[stacksize] =
a;
1426 if (efa == hit->
efa) {
1427 stack[stacksize] =
a;
1435 while (stacksize > 0) {
1438 a = stack[stacksize];
1449 for (iterv = vlist; iterv; iterv = iterv->
next) {
1458 for (iterv = startv; iterv; iterv = iterv->
next) {
1459 if ((startv != iterv) && (iterv->
separate)) {
1472 if ((toggle ==
true) && (extend ==
false) && (deselect ==
false)) {
1474 bool found_selected =
false;
1481 found_selected =
true;
1487 found_selected =
true;
1492 if (found_selected) {
1500 #define SET_SELECTION(value) \
1501 if (select_faces) { \
1502 BM_face_select_set(em->bm, efa, value); \
1505 uvedit_face_select_set(scene, em, efa, value, false, cd_loop_uv_offset); \
1511 if (!extend && !deselect && !toggle) {
1525 #undef SET_SELECTION
1531 if (uv_sync_select) {
1536 if (!select_faces) {
1550 const int cd_loop_uv_offset)
1586 uint objects_len = 0;
1592 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
1593 Object *obedit = objects[ob_index];
1596 bool changed =
false;
1613 if (is_uv_face_selectmode) {
1676 if (is_uv_face_selectmode) {
1701 ot->
name =
"Select More";
1702 ot->
description =
"Select more UV vertices connected to initial selection";
1719 ot->
name =
"Select Less";
1720 ot->
description =
"Deselect UV vertices at the boundary of each selection region";
1766 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
1767 Object *obedit = objects[ob_index];
1841 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
1842 Object *obedit = objects[ob_index];
1843 if (ob_exclude && (obedit == ob_exclude)) {
1852 const uint objects_len,
1867 uint objects_len = 0;
1873 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
1874 Object *obedit = objects[ob_index];
1886 ot->
name =
"(De)select All";
1909 const bool deselect_all)
1917 int selectmode, sticky;
1918 bool found_item =
false;
1924 const float penalty_dist = 3.0f *
U.pixelsize;
1998 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
1999 Object *obedit = objects[ob_index];
2056 const bool select =
true;
2084 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
2085 Object *obiter = objects[ob_index];
2094 const bool deselect_all)
2097 uint objects_len = 0;
2146 "Extend selection rather than clearing the existing selection");
2150 "Deselect On Nothing",
2151 "Deselect all when nothing under the cursor");
2162 "Mouse location in normalized coordinates, 0.0 to 1.0 is within the image bounds",
2191 bool found_item =
false;
2223 else if (flush == -1) {
2228 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
2229 Object *obiter = objects[ob_index];
2241 uint objects_len = 0;
2287 ot->
name =
"Loop Select";
2302 "Extend selection rather than clearing the existing selection");
2311 "Mouse location in normalized coordinates, 0.0 to 1.0 is within the image bounds",
2344 ot->
name =
"Edge Ring Select";
2345 ot->
description =
"Select an edge ring of connected UV vertices";
2346 ot->
idname =
"UV_OT_select_edge_ring";
2359 "Extend selection rather than clearing the existing selection");
2368 "Mouse location in normalized coordinates, 0.0 to 1.0 is within the image bounds",
2386 bool deselect =
false;
2396 uint objects_len = 0;
2419 if (!extend && !deselect) {
2424 scene, objects, objects_len, pick ? &hit :
NULL, extend, deselect,
false, select_faces);
2427 Object **objects_free = objects;
2433 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
2434 Object *obedit = objects[ob_index];
2452 ot->
name =
"Select Linked";
2453 ot->
description =
"Select all UV vertices linked to the active UV map";
2454 ot->
idname =
"UV_OT_select_linked";
2483 ot->
name =
"Select Linked Pick";
2484 ot->
description =
"Select all UV vertices linked under the mouse";
2485 ot->
idname =
"UV_OT_select_linked_pick";
2500 "Extend selection rather than clearing the existing selection");
2505 "Deselect linked UV vertices rather than selecting them");
2514 "Mouse location in normalized coordinates, 0.0 to 1.0 is within the image bounds",
2548 bool changed_multi =
false;
2550 uint objects_len = 0;
2554 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
2555 Object *obedit = objects[ob_index];
2558 bool changed =
false;
2563 bool is_sel =
false;
2564 bool is_unsel =
false;
2582 if (is_sel && is_unsel) {
2587 if (is_sel && is_unsel) {
2598 changed_multi =
true;
2611 ot->
name =
"Select Split";
2651 const uint efa_index,
2654 const int cd_loop_uv_offset)
2663 while (vlist_iter) {
2664 if (vlist_iter->separate) {
2665 start_vlist = vlist_iter;
2668 if (efa_index == vlist_iter->poly_index) {
2672 vlist_iter = vlist_iter->
next;
2675 vlist_iter = start_vlist;
2676 while (vlist_iter) {
2678 if (vlist_iter != start_vlist && vlist_iter->
separate) {
2682 if (efa_index != vlist_iter->poly_index) {
2692 vlist_iter = vlist_iter->next;
2764 scene, em, vmap, efa_index,
l,
select, cd_loop_uv_offset);
2848 scene, em, vmap, efa_index,
l,
select, cd_loop_uv_offset);
2904 bool changed_multi =
false;
2906 uint objects_len = 0;
2910 if (use_pre_deselect) {
2915 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
2916 Object *obedit = objects[ob_index];
2919 bool changed =
false;
2924 if (use_face_center && !pinned) {
2946 else if (use_edge && !pinned) {
2959 sima,
scene, em, l_prev,
select,
false, cd_loop_uv_offset);
2976 bool has_selected =
false;
2985 has_selected =
true;
2996 if (has_selected && use_select_linked) {
3010 if (changed || use_pre_deselect) {
3011 changed_multi =
true;
3054 const float offset[2],
3055 const float ellipse[2])
3058 const float co[2] = {
3059 (uv[0] - offset[0]) * ellipse[0],
3060 (uv[1] - offset[1]) * ellipse[1],
3066 const float uv_b[2],
3067 const float offset[2],
3068 const float ellipse[2])
3071 const float co_a[2] = {
3072 (uv_a[0] - offset[0]) * ellipse[0],
3073 (uv_a[1] - offset[1]) * ellipse[1],
3075 const float co_b[2] = {
3076 (uv_b[0] - offset[0]) * ellipse[0],
3077 (uv_b[1] - offset[1]) * ellipse[1],
3096 float offset[2], ellipse[2];
3117 ellipse[0] =
width * zoomx / radius;
3118 ellipse[1] =
height * zoomy / radius;
3122 bool changed_multi =
false;
3124 uint objects_len = 0;
3133 if (use_pre_deselect) {
3137 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
3138 Object *obedit = objects[ob_index];
3141 bool changed =
false;
3146 if (use_face_center) {
3165 else if (use_edge) {
3178 sima,
scene, em, l_prev,
select,
false, cd_loop_uv_offset);
3193 bool has_selected =
false;
3201 has_selected =
true;
3205 if (has_selected && use_select_linked) {
3219 if (changed || use_pre_deselect) {
3220 changed_multi =
true;
3234 ot->
name =
"Circle Select";
3235 ot->
description =
"Select UV vertices using circle selection";
3236 ot->
idname =
"UV_OT_select_circle";
3260 const rcti *clip_rect,
3261 const int mcoords[][2],
3262 const int mcoords_len,
3263 const float co_test[2])
3267 ®ion->
v2d, co_test[0], co_test[1], &co_screen[0], &co_screen[1]) &&
3270 mcoords, mcoords_len, co_screen[0], co_screen[1],
V2D_IS_CLIPPED)) {
3277 const int mcoords[][2],
3278 const int mcoords_len,
3303 bool changed_multi =
false;
3308 uint objects_len = 0;
3312 if (use_pre_deselect) {
3316 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
3317 Object *obedit = objects[ob_index];
3319 bool changed =
false;
3325 if (use_face_center) {
3344 else if (use_edge) {
3356 region, &rect, mcoords, mcoords_len, luv->
uv) &&
3358 region, &rect, mcoords, mcoords_len, luv_prev->
uv)) {
3360 sima,
scene, em, l_prev,
select,
false, cd_loop_uv_offset);
3375 bool has_selected =
false;
3380 region, &rect, mcoords, mcoords_len, luv->
uv)) {
3384 has_selected =
true;
3388 if (has_selected && use_select_linked) {
3402 if (changed || use_pre_deselect) {
3403 changed_multi =
true;
3411 return changed_multi;
3432 ot->
name =
"Lasso Select UV";
3467 uint objects_len = 0;
3471 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
3472 Object *obedit = objects[ob_index];
3476 bool changed =
false;
3505 ot->
name =
"Selected Pinned";
3507 ot->
idname =
"UV_OT_select_pinned";
3556 const float t2[3][2],
3557 const float endpoint_bias)
3599 uint objects_len = 0;
3604 uint uv_tri_len = 0;
3605 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
3606 Object *obedit = objects[ob_index];
3622 uv_tri_len += efa->
len - 2;
3633 int face_len_alloc = 3;
3634 float(*uv_verts)[2] =
MEM_mallocN(
sizeof(*uv_verts) * face_len_alloc,
"UvOverlapCoords");
3654 const uint face_len = efa->
len;
3655 const uint tri_len = face_len - 2;
3657 if (face_len_alloc < face_len) {
3660 uv_verts =
MEM_mallocN(
sizeof(*uv_verts) * face_len,
"UvOverlapCoords");
3662 face_len_alloc = face_len;
3673 for (
int t = 0;
t < tri_len;
t++) {
3678 const float tri[3][3] = {
3700 uint tree_overlap_len;
3703 if (overlap !=
NULL) {
3706 for (
int i = 0; i < tree_overlap_len; i++) {
3708 if (overlap[i].indexA == overlap[i].indexB) {
3718 const struct UVOverlapData *o_b = &overlap_data[overlap[i].indexB];
3735 const float endpoint_bias = -1e-4f;
3767 ot->
name =
"Select Overlap";
3768 ot->
description =
"Select all UV faces which overlap each other";
3769 ot->
idname =
"UV_OT_select_overlap";
3781 "Extend selection rather than clearing the existing selection");
3805 faces[faces_len++] = f;
3806 if (faces_len == len_max) {
3814 *r_faces_len = faces_len;
3815 if (faces_len != len_max) {
3851 edges[edges_len++] = l_iter;
3852 if (edges_len == len_max) {
3863 }
while ((l_radial_iter = l_radial_iter->
radial_next) != l_iter);
3872 *r_edges_len = edges_len;
3873 if (edges_len != len_max) {
3874 edges =
MEM_reallocN(edges,
sizeof(*edges) * edges_len);
3908 verts[verts_len++] = l_iter;
3909 if (verts_len == len_max) {
3928 *r_verts_len = verts_len;
3929 if (verts_len != len_max) {
typedef float(TangentPoint)[2]
struct Scene * CTX_data_scene(const bContext *C)
struct ViewLayer * CTX_data_view_layer(const bContext *C)
struct Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
struct ARegion * CTX_wm_region(const bContext *C)
struct SpaceImage * CTX_wm_space_image(const bContext *C)
CustomData interface, see also DNA_customdata_types.h.
int CustomData_get_offset(const struct CustomData *data, int type)
BMEditMesh * BKE_editmesh_from_object(struct Object *ob)
Return the BMEditMesh for a given object.
#define BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, v3d, r_len)
void BKE_mesh_batch_cache_dirty_tag(struct Mesh *me, eMeshBatchDirtyMode mode)
@ BKE_MESH_BATCH_DIRTY_UVEDIT_SELECT
void BKE_report(ReportList *reports, ReportType type, const char *message)
#define BLI_assert_unreachable()
GSet * BLI_gset_new_ex(GSetHashFP hashfp, GSetCmpFP cmpfp, const char *info, const unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
bool BLI_gset_add(GSet *gs, void *key)
BLI_INLINE unsigned int BLI_hash_int_2d(unsigned int kx, unsigned int ky)
BVHTreeOverlap * BLI_bvhtree_overlap(const BVHTree *tree1, const BVHTree *tree2, unsigned int *r_overlap_tot, BVHTree_OverlapCallback callback, void *userdata)
void BLI_bvhtree_balance(BVHTree *tree)
BVHTree * BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis)
void BLI_bvhtree_free(BVHTree *tree)
void BLI_bvhtree_insert(BVHTree *tree, int index, const float co[3], int numpoints)
void BLI_lasso_boundbox(struct rcti *rect, const int mcoords[][2], const unsigned int mcoords_len)
bool BLI_lasso_is_point_inside(const int mcoords[][2], const unsigned int mcoords_len, const int sx, const int sy, const int error_value)
MINLINE float square_f(float a)
void closest_to_line_segment_v2(float r_close[2], const float p[2], const float l1[2], const float l2[2])
int isect_seg_seg_v2_point_ex(const float v0[2], const float v1[2], const float v2[2], const float v3[2], const float endpoint_bias, float vi[2])
int isect_point_tri_v2(const float pt[2], const float v1[2], const float v2[2], const float v3[2])
float dist_squared_to_line_segment_v2(const float p[2], const float l1[2], const float l2[2])
MINLINE float len_squared_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE float len_squared_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v2_v2(float r[2], const float a[2])
MINLINE void mul_v2_v2(float r[2], const float a[2])
void mid_v2_v2v2v2(float v[2], const float v1[2], const float v2[2], const float v3[2])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE bool equals_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE float line_point_side_v2(const float l1[2], const float l2[2], const float pt[2]) ATTR_WARN_UNUSED_RESULT
void BLI_polyfill_calc(const float(*coords)[2], const unsigned int coords_tot, const int coords_sign, unsigned int(*r_tris)[3])
bool BLI_rcti_isect_pt_v(const struct rcti *rect, const int xy[2])
bool BLI_rctf_isect_pt_v(const struct rctf *rect, const float xy[2])
struct Depsgraph Depsgraph
void DEG_id_tag_update(struct ID *id, int flag)
struct Object * DEG_get_evaluated_object(const struct Depsgraph *depsgraph, struct Object *object)
@ ID_RECALC_COPY_ON_WRITE
Object is a sort of wrapper for general info.
#define UV_SYNC_SELECTION
#define SCE_SELECT_VERTEX
void ED_space_image_get_zoom(struct SpaceImage *sima, const struct ARegion *region, float *r_zoomx, float *r_zoomy)
void ED_space_image_get_size(struct SpaceImage *sima, int *r_width, int *r_height)
void EDBM_select_more(struct BMEditMesh *em, const bool use_face_step)
struct UvMapVert * BM_uv_vert_map_at_index(struct UvVertMap *vmap, unsigned int v)
void EDBM_flag_enable_all(struct BMEditMesh *em, const char hflag)
void EDBM_select_flush(struct BMEditMesh *em)
void EDBM_select_less(struct BMEditMesh *em, const bool use_face_step)
struct UvVertMap * BM_uv_vert_map_create(struct BMesh *bm, const bool use_select, const bool use_winding)
void EDBM_select_toggle_all(struct BMEditMesh *em)
void EDBM_deselect_flush(struct BMEditMesh *em)
void EDBM_select_swap(struct BMEditMesh *em)
void EDBM_flag_disable_all(struct BMEditMesh *em, const char hflag)
void EDBM_selectmode_flush(struct BMEditMesh *em)
void BM_uv_vert_map_free(struct UvVertMap *vmap)
bool ED_operator_uvedit_space_image(struct bContext *C)
bool ED_operator_uvedit(struct bContext *C)
#define SEL_OP_USE_PRE_DESELECT(sel_op)
eSelectOp ED_select_op_modal(const eSelectOp sel_op, const bool is_first)
_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 width
_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 height
_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 y
_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 GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
Read Guarded memory(de)allocation.
#define MEM_reallocN(vmemh, len)
void UI_view2d_region_to_view_rctf(const struct View2D *v2d, const struct rctf *rect_src, struct rctf *rect_dst) ATTR_NONNULL()
bool UI_view2d_view_to_region_clip(const struct View2D *v2d, float x, float y, int *r_region_x, int *r_region_y) ATTR_NONNULL()
void UI_view2d_region_to_view(const struct View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
#define BM_DISK_EDGE_NEXT(e, v)
#define BM_FACE_FIRST_LOOP(p)
#define BM_ELEM_CD_GET_VOID_P(ele, offset)
#define BM_elem_index_get(ele)
#define BM_elem_flag_disable(ele, hflag)
#define BM_elem_flag_test(ele, hflag)
#define BM_elem_flag_test_bool(ele, hflag)
#define BM_elem_flag_enable(ele, hflag)
void * BM_iter_at_index(BMesh *bm, const char itype, void *data, int index)
#define BM_ITER_ELEM(ele, iter, data, itype)
#define BM_ITER_MESH(ele, iter, bm, itype)
#define BM_ITER_MESH_INDEX(ele, iter, bm, itype, indexvar)
#define BM_ITER_ELEM_INDEX(ele, iter, data, itype, indexvar)
ATTR_WARN_UNUSED_RESULT BMesh * bm
void BM_select_history_clear(BMesh *bm)
void BM_face_select_set(BMesh *bm, BMFace *f, const bool select)
Select Face.
void BM_vert_select_set(BMesh *bm, BMVert *v, const bool select)
Select Vert.
void BM_edge_select_set(BMesh *bm, BMEdge *e, const bool select)
Select Edge.
void BM_select_history_validate(BMesh *bm)
void BM_mesh_elem_hflag_disable_all(BMesh *bm, const char htype, const char hflag, const bool respecthide)
void BM_mesh_active_face_set(BMesh *bm, BMFace *f)
#define BM_select_history_store_notest(bm, ele)
#define BM_select_history_store(bm, ele)
#define BM_select_history_remove(bm, ele)
void BM_mesh_elem_table_ensure(BMesh *bm, const char htype)
void BM_mesh_elem_index_ensure(BMesh *bm, const char htype)
BLI_INLINE BMFace * BM_face_at_index(BMesh *bm, const int index)
BMLoop * BM_face_edge_share_loop(BMFace *f, BMEdge *e)
Return the Loop Shared by Face and Edge.
BMLoop * BM_face_vert_share_loop(BMFace *f, BMVert *v)
Return the Loop Shared by Face and Vertex.
BLI_INLINE BMVert * BM_edge_other_vert(BMEdge *e, const BMVert *v) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
BLI_INLINE bool BM_vert_in_edge(const BMEdge *e, const BMVert *v) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
bool BM_loop_uv_share_vert_check(BMLoop *l_a, BMLoop *l_b, const int cd_loop_uv_offset)
bool BM_loop_uv_share_edge_check(BMLoop *l_a, BMLoop *l_b, const int cd_loop_uv_offset)
void BM_face_uv_calc_center_median(const BMFace *f, const int cd_loop_uv_offset, float r_cent[2])
bool BM_face_uv_point_inside_test(const BMFace *f, const float co[2], const int cd_loop_uv_offset)
const Depsgraph * depsgraph
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
void RNA_float_get_array(PointerRNA *ptr, const char *name, float *values)
int RNA_int_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
void RNA_float_set_array(PointerRNA *ptr, const char *name, const float *values)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_float_vector(StructOrFunctionRNA *cont_, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
struct BMEditSelection * prev
struct BMLoop * radial_next
struct ToolSettings * toolsettings
int(* invoke)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
int(* modal)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
void(* cancel)(struct bContext *, struct wmOperator *)
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
__forceinline const avxb select(const avxb &m, const avxb &t, const avxb &f)
#define UV_NEAREST_HIT_INIT_MAX(v2d)
#define UV_NEAREST_HIT_INIT_DIST_PX(v2d, dist_px)
void UV_OT_select_all(wmOperatorType *ot)
bool uv_find_nearest_vert_multi(Scene *scene, Object **objects, const uint objects_len, float const co[2], const float penalty_dist, UvNearestHit *hit)
void UV_OT_select_edge_ring(wmOperatorType *ot)
bool uvedit_face_select_test_ex(const ToolSettings *ts, BMFace *efa, const int cd_loop_uv_offset)
static int uv_circle_select_is_edge_inside(const float uv_a[2], const float uv_b[2], const float offset[2], const float ellipse[2])
static void uv_select_all_perform_multi_ex(Scene *scene, Object **objects, const uint objects_len, int action, const Object *ob_exclude)
static BMLoop * uvedit_loop_find_other_radial_loop_with_visible_face(const Scene *scene, BMLoop *l_src, const int cd_loop_uv_offset)
void uvedit_face_select_enable(const Scene *scene, BMEditMesh *em, BMFace *efa, const bool do_history, const int cd_loop_uv_offset)
#define SET_SELECTION(value)
bool uv_find_nearest_face_multi(Scene *scene, Object **objects, const uint objects_len, const float co[2], UvNearestHit *hit)
bool uv_find_nearest_edge(Scene *scene, Object *obedit, const float co[2], UvNearestHit *hit)
static int uv_select_edge_ring_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void uv_select_tag_update_for_object(Depsgraph *depsgraph, const ToolSettings *ts, Object *obedit)
static int uv_select_linked_internal(bContext *C, wmOperator *op, const wmEvent *event, bool pick)
void uvedit_edge_select_disable(const Scene *scene, BMEditMesh *em, BMLoop *l, const int cd_loop_uv_offset)
static int uv_circle_select_exec(bContext *C, wmOperator *op)
bool uv_find_nearest_face_multi_ex(Scene *scene, Object **objects, const uint objects_len, const float co[2], UvNearestHit *hit, const bool only_in_face)
static int uv_select_less_exec(bContext *C, wmOperator *UNUSED(op))
static int uv_select_loop_exec(bContext *C, wmOperator *op)
BMLoop * uv_find_nearest_loop_from_vert(struct Scene *scene, struct Object *obedit, struct BMVert *v, const float co[2])
static void bm_loop_tags_clear(BMesh *bm)
void UV_OT_select(wmOperatorType *ot)
void ED_uvedit_active_edge_loop_set(BMesh *bm, BMLoop *l)
void UV_OT_select_split(wmOperatorType *ot)
static int uv_select_overlap(bContext *C, const bool extend)
static bool uv_nearest_between(const BMLoop *l, const float co[2], const int cd_loop_uv_offset)
void UV_OT_select_linked(wmOperatorType *ot)
static int uv_select_linked_pick_exec(bContext *C, wmOperator *op)
bool uvedit_uv_select_test(const Scene *scene, BMLoop *l, const int cd_loop_uv_offset)
static int uv_mouse_select(bContext *C, const float co[2], const bool extend, const bool deselect_all)
BMLoop * uv_find_nearest_loop_from_edge(struct Scene *scene, struct Object *obedit, struct BMEdge *e, const float co[2])
bool ED_uvedit_nearest_uv(const Scene *scene, Object *obedit, const float co[2], float *dist_sq, float r_uv[2])
BMLoop ** ED_uvedit_selected_verts(Scene *scene, BMesh *bm, int len_max, int *r_verts_len)
@ UV_EDGE_LOOP_BOUNDARY_ALL
@ UV_EDGE_LOOP_BOUNDARY_LOOP
void uvedit_uv_select_disable(const Scene *scene, BMEditMesh *em, BMLoop *l, const int cd_loop_uv_offset)
static int uv_circle_select_is_point_inside(const float uv[2], const float offset[2], const float ellipse[2])
bool uvedit_select_is_any_selected_multi(Scene *scene, Object **objects, const uint objects_len)
BLI_INLINE bool overlap_cmp(const void *a_v, const void *b_v)
static int uv_box_select_exec(bContext *C, wmOperator *op)
char ED_uvedit_select_mode_get(const Scene *scene)
static int uv_mouse_select_multi(bContext *C, Object **objects, uint objects_len, const float co[2], const bool extend, const bool deselect_all)
static int uv_select_loop_invoke(bContext *C, wmOperator *op, const wmEvent *event)
bool uvedit_select_is_any_selected(Scene *scene, Object *obedit)
static int uv_select_edgering(const SpaceImage *sima, Scene *scene, Object *obedit, UvNearestHit *hit, const bool extend)
void uvedit_uv_select_enable(const Scene *scene, BMEditMesh *em, BMLoop *l, const bool do_history, const int cd_loop_uv_offset)
static int uv_select_overlap_exec(bContext *C, wmOperator *op)
static void uv_select_edgeloop_double_side_tag(const Scene *scene, BMEditMesh *em, BMLoop *l_init_pair[2], const int cd_loop_uv_offset)
static void uv_select_edgeloop_single_side_tag(const Scene *scene, BMEditMesh *em, BMLoop *l_init, const int cd_loop_uv_offset, enum eUVEdgeLoopBoundaryMode boundary_mode, int r_count_by_select[2])
void UV_OT_select_circle(wmOperatorType *ot)
bool ED_uvedit_nearest_uv_multi(const Scene *scene, Object **objects, const uint objects_len, const float co[2], float *dist_sq, float r_uv[2])
static int uv_select_linked_exec(bContext *C, wmOperator *op)
bool uv_find_nearest_vert(Scene *scene, Object *obedit, float const co[2], const float penalty_dist, UvNearestHit *hit)
static int uv_select_all_exec(bContext *C, wmOperator *op)
bool uvedit_face_visible_test_ex(const ToolSettings *ts, BMFace *efa)
void UV_OT_select_linked_pick(wmOperatorType *ot)
void UV_OT_select_more(wmOperatorType *ot)
void UV_OT_select_pinned(wmOperatorType *ot)
static int uv_select_linked_pick_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void uv_select_flush_from_tag_loop(SpaceImage *sima, Scene *scene, Object *obedit, const bool select)
void UV_OT_select_loop(wmOperatorType *ot)
void uvedit_face_select_set(const struct Scene *scene, struct BMEditMesh *em, struct BMFace *efa, const bool select, const bool do_history, const int cd_loop_uv_offset)
BLI_INLINE uint overlap_hash(const void *overlap_v)
bool uvedit_face_visible_test(const Scene *scene, BMFace *efa)
static BMLoop * bm_select_edgeloop_double_side_next(const Scene *scene, BMLoop *l_step, BMVert *v_from, const int cd_loop_uv_offset)
static bool do_lasso_select_mesh_uv(bContext *C, const int mcoords[][2], const int mcoords_len, const eSelectOp sel_op)
bool uv_find_nearest_face(Scene *scene, Object *obedit, const float co[2], UvNearestHit *hit)
bool uvedit_uv_select_test_ex(const ToolSettings *ts, BMLoop *l, const int cd_loop_uv_offset)
BMLoop ** ED_uvedit_selected_edges(Scene *scene, BMesh *bm, int len_max, int *r_edges_len)
void uvedit_edge_select_set_with_sticky(const struct SpaceImage *sima, const Scene *scene, BMEditMesh *em, BMLoop *l, const bool select, const bool do_history, const uint cd_loop_uv_offset)
bool uvedit_face_select_test(const Scene *scene, BMFace *efa, const int cd_loop_uv_offset)
static int uv_select_pinned_exec(bContext *C, wmOperator *UNUSED(op))
BMLoop * ED_uvedit_active_edge_loop_get(BMesh *bm)
static bool overlap_tri_tri_uv_test(const float t1[3][2], const float t2[3][2], const float endpoint_bias)
static BMLoop * bm_select_edgeloop_single_side_next(const Scene *scene, BMLoop *l_step, BMVert *v_from, const int cd_loop_uv_offset)
static bool do_lasso_select_mesh_uv_is_point_inside(const ARegion *region, const rcti *clip_rect, const int mcoords[][2], const int mcoords_len, const float co_test[2])
static int uv_select_edge_ring_exec(bContext *C, wmOperator *op)
static void uvedit_vertex_select_tagged(BMEditMesh *em, Scene *scene, bool select, int cd_loop_uv_offset)
static int uv_select_split_exec(bContext *C, wmOperator *op)
bool uvedit_edge_select_test_ex(const ToolSettings *ts, BMLoop *l, const int cd_loop_uv_offset)
static int uv_select_more_less(bContext *C, const bool select)
static void uv_select_all_perform_multi(Scene *scene, Object **objects, const uint objects_len, int action)
static int uv_select_invoke(bContext *C, wmOperator *op, const wmEvent *event)
bool uvedit_edge_select_test(const Scene *scene, BMLoop *l, const int cd_loop_uv_offset)
const float * uvedit_first_selected_uv_from_vertex(Scene *scene, BMVert *eve, const int cd_loop_uv_offset)
static int uv_mouse_select_loop_generic(bContext *C, const float co[2], const bool extend, enum eUVLoopGenericType loop_type)
BMFace ** ED_uvedit_selected_faces(Scene *scene, BMesh *bm, int len_max, int *r_faces_len)
bool uv_find_nearest_face_ex(Scene *scene, Object *obedit, const float co[2], UvNearestHit *hit, const bool only_in_face)
static int uv_select_exec(bContext *C, wmOperator *op)
static void uv_select_all_perform(Scene *scene, Object *obedit, int action)
void UV_OT_select_overlap(wmOperatorType *ot)
void UV_OT_select_lasso(wmOperatorType *ot)
static BMLoop * uvedit_loop_find_other_boundary_loop_with_visible_face(const Scene *scene, BMLoop *l_edge, BMVert *v_pivot, const int cd_loop_uv_offset)
void uvedit_edge_select_set(const Scene *scene, BMEditMesh *em, BMLoop *l, const bool select, const bool do_history, const int cd_loop_uv_offset)
static void uv_select_linked_multi(Scene *scene, Object **objects, const uint objects_len, UvNearestHit *hit, const bool extend, bool deselect, const bool toggle, const bool select_faces)
static void uv_select_flush_from_tag_face(SpaceImage *sima, Scene *scene, Object *obedit, const bool select)
BMLoop * ED_uvedit_active_vert_loop_get(BMesh *bm)
void uvedit_edge_select_enable(const Scene *scene, BMEditMesh *em, BMLoop *l, const bool do_history, const int cd_loop_uv_offset)
static int uv_select_edgeloop(SpaceImage *sima, Scene *scene, Object *obedit, UvNearestHit *hit, const bool extend)
static void uv_select_flush_from_tag_sticky_loc_internal(Scene *scene, BMEditMesh *em, UvVertMap *vmap, const uint efa_index, BMLoop *l, const bool select, const int cd_loop_uv_offset)
bool uv_find_nearest_edge_multi(Scene *scene, Object **objects, const uint objects_len, const float co[2], UvNearestHit *hit)
void uvedit_face_select_set_with_sticky(const SpaceImage *sima, const Scene *scene, BMEditMesh *em, BMFace *efa, const bool select, const bool do_history, const int cd_loop_uv_offset)
void uvedit_face_select_disable(const Scene *scene, BMEditMesh *em, BMFace *efa, const int cd_loop_uv_offset)
static int uv_lasso_select_exec(bContext *C, wmOperator *op)
void ED_uvedit_select_sync_flush(const ToolSettings *ts, BMEditMesh *em, const bool select)
void uvedit_uv_select_set_with_sticky(const struct SpaceImage *sima, const Scene *scene, BMEditMesh *em, BMLoop *l, const bool select, const bool do_history, const uint cd_loop_uv_offset)
static int uv_select_more_exec(bContext *C, wmOperator *UNUSED(op))
void uvedit_uv_select_set(const Scene *scene, BMEditMesh *em, BMLoop *l, const bool select, const bool do_history, const int cd_loop_uv_offset)
void UV_OT_select_less(wmOperatorType *ot)
void ED_uvedit_active_vert_loop_set(BMesh *bm, BMLoop *l)
static int uv_mouse_select_loop_generic_multi(bContext *C, Object **objects, uint objects_len, const float co[2], const bool extend, enum eUVLoopGenericType loop_type)
void UV_OT_select_box(wmOperatorType *ot)
void WM_main_add_notifier(unsigned int type, void *reference)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
bool WM_gesture_is_modal_first(const wmGesture *gesture)
void WM_gesture_box_cancel(bContext *C, wmOperator *op)
int WM_gesture_box_invoke(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_circle_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void WM_gesture_circle_cancel(bContext *C, wmOperator *op)
int WM_gesture_box_modal(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_circle_modal(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_lasso_modal(bContext *C, wmOperator *op, const wmEvent *event)
void WM_gesture_lasso_cancel(bContext *C, wmOperator *op)
int WM_gesture_lasso_invoke(bContext *C, wmOperator *op, const wmEvent *event)
const int(* WM_gesture_lasso_path_to_array(bContext *UNUSED(C), wmOperator *op, int *r_mcoords_len))[2]
void WM_operator_properties_gesture_box(wmOperatorType *ot)
void WM_operator_properties_select_operation_simple(wmOperatorType *ot)
void WM_operator_properties_gesture_lasso(wmOperatorType *ot)
void WM_operator_properties_gesture_circle(wmOperatorType *ot)
void WM_operator_properties_select_all(wmOperatorType *ot)
void WM_operator_properties_border_to_rctf(struct wmOperator *op, rctf *rect)
static bool do_history(const char *name, ReportList *reports)