Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/uvedit/uvedit_select.c
| Show First 20 Lines • Show All 2,872 Lines • ▼ Show 20 Lines | static int uv_box_select_exec(bContext *C, wmOperator *op) | ||||
| rctf rectf; | rctf rectf; | ||||
| bool pinned; | bool pinned; | ||||
| const bool use_face_center = ((ts->uv_flag & UV_SYNC_SELECTION) ? | const bool use_face_center = ((ts->uv_flag & UV_SYNC_SELECTION) ? | ||||
| (ts->selectmode == SCE_SELECT_FACE) : | (ts->selectmode == SCE_SELECT_FACE) : | ||||
| (ts->uv_selectmode == UV_SELECT_FACE)); | (ts->uv_selectmode == UV_SELECT_FACE)); | ||||
| const bool use_edge = ((ts->uv_flag & UV_SYNC_SELECTION) ? | const bool use_edge = ((ts->uv_flag & UV_SYNC_SELECTION) ? | ||||
| (ts->selectmode == SCE_SELECT_EDGE) : | (ts->selectmode == SCE_SELECT_EDGE) : | ||||
| (ts->uv_selectmode == UV_SELECT_EDGE)); | (ts->uv_selectmode == UV_SELECT_EDGE)); | ||||
| const bool use_select_linked = !(ts->uv_flag & UV_SYNC_SELECTION) && | |||||
| (ts->uv_selectmode == UV_SELECT_ISLAND); | |||||
| /* get rectangle from operator */ | /* get rectangle from operator */ | ||||
| WM_operator_properties_border_to_rctf(op, &rectf); | WM_operator_properties_border_to_rctf(op, &rectf); | ||||
| UI_view2d_region_to_view_rctf(®ion->v2d, &rectf, &rectf); | UI_view2d_region_to_view_rctf(®ion->v2d, &rectf, &rectf); | ||||
| const eSelectOp sel_op = RNA_enum_get(op->ptr, "mode"); | const eSelectOp sel_op = RNA_enum_get(op->ptr, "mode"); | ||||
| const bool select = (sel_op != SEL_OP_SUB); | const bool select = (sel_op != SEL_OP_SUB); | ||||
| const bool use_pre_deselect = SEL_OP_USE_PRE_DESELECT(sel_op); | const bool use_pre_deselect = SEL_OP_USE_PRE_DESELECT(sel_op); | ||||
| ▲ Show 20 Lines • Show All 87 Lines • ▼ Show 20 Lines | else { | ||||
| else if (pinned) { | else if (pinned) { | ||||
| if ((luv->flag & MLOOPUV_PINNED) && BLI_rctf_isect_pt_v(&rectf, luv->uv)) { | if ((luv->flag & MLOOPUV_PINNED) && BLI_rctf_isect_pt_v(&rectf, luv->uv)) { | ||||
| uvedit_uv_select_set(scene, em, l, select, false, cd_loop_uv_offset); | uvedit_uv_select_set(scene, em, l, select, false, cd_loop_uv_offset); | ||||
| BM_elem_flag_enable(l->v, BM_ELEM_TAG); | BM_elem_flag_enable(l->v, BM_ELEM_TAG); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (has_selected && ts->uv_selectmode == UV_SELECT_ISLAND) { | if (has_selected && use_select_linked) { | ||||
| UvNearestHit hit = { | UvNearestHit hit = { | ||||
| .ob = obedit, | .ob = obedit, | ||||
| .efa = efa, | .efa = efa, | ||||
| }; | }; | ||||
| uv_select_linked_multi(scene, objects, objects_len, &hit, true, !select, false, false); | uv_select_linked_multi(scene, objects, objects_len, &hit, true, !select, false, false); | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | static int uv_circle_select_exec(bContext *C, wmOperator *op) | ||||
| float offset[2], ellipse[2]; | float offset[2], ellipse[2]; | ||||
| const bool use_face_center = ((ts->uv_flag & UV_SYNC_SELECTION) ? | const bool use_face_center = ((ts->uv_flag & UV_SYNC_SELECTION) ? | ||||
| (ts->selectmode == SCE_SELECT_FACE) : | (ts->selectmode == SCE_SELECT_FACE) : | ||||
| (ts->uv_selectmode == UV_SELECT_FACE)); | (ts->uv_selectmode == UV_SELECT_FACE)); | ||||
| const bool use_edge = ((ts->uv_flag & UV_SYNC_SELECTION) ? | const bool use_edge = ((ts->uv_flag & UV_SYNC_SELECTION) ? | ||||
| (ts->selectmode == SCE_SELECT_EDGE) : | (ts->selectmode == SCE_SELECT_EDGE) : | ||||
| (ts->uv_selectmode == UV_SELECT_EDGE)); | (ts->uv_selectmode == UV_SELECT_EDGE)); | ||||
| const bool use_select_linked = !(ts->uv_flag & UV_SYNC_SELECTION) && | |||||
| (ts->uv_selectmode == UV_SELECT_ISLAND); | |||||
| /* get operator properties */ | /* get operator properties */ | ||||
| x = RNA_int_get(op->ptr, "x"); | x = RNA_int_get(op->ptr, "x"); | ||||
| y = RNA_int_get(op->ptr, "y"); | y = RNA_int_get(op->ptr, "y"); | ||||
| radius = RNA_int_get(op->ptr, "radius"); | radius = RNA_int_get(op->ptr, "radius"); | ||||
| /* compute ellipse size and location, not a circle since we deal | /* compute ellipse size and location, not a circle since we deal | ||||
| * with non square image. ellipse is normalized, r = 1.0. */ | * with non square image. ellipse is normalized, r = 1.0. */ | ||||
| ▲ Show 20 Lines • Show All 83 Lines • ▼ Show 20 Lines | else { | ||||
| if (uv_circle_select_is_point_inside(luv->uv, offset, ellipse)) { | if (uv_circle_select_is_point_inside(luv->uv, offset, ellipse)) { | ||||
| changed = true; | changed = true; | ||||
| uvedit_uv_select_set(scene, em, l, select, false, cd_loop_uv_offset); | uvedit_uv_select_set(scene, em, l, select, false, cd_loop_uv_offset); | ||||
| BM_elem_flag_enable(l->v, BM_ELEM_TAG); | BM_elem_flag_enable(l->v, BM_ELEM_TAG); | ||||
| has_selected = true; | has_selected = true; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (has_selected && ts->uv_selectmode == UV_SELECT_ISLAND) { | if (has_selected && use_select_linked) { | ||||
| UvNearestHit hit = { | UvNearestHit hit = { | ||||
| .ob = obedit, | .ob = obedit, | ||||
| .efa = efa, | .efa = efa, | ||||
| }; | }; | ||||
| uv_select_linked_multi(scene, objects, objects_len, &hit, true, !select, false, false); | uv_select_linked_multi(scene, objects, objects_len, &hit, true, !select, false, false); | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | static bool do_lasso_select_mesh_uv(bContext *C, | ||||
| const ToolSettings *ts = scene->toolsettings; | const ToolSettings *ts = scene->toolsettings; | ||||
| ViewLayer *view_layer = CTX_data_view_layer(C); | ViewLayer *view_layer = CTX_data_view_layer(C); | ||||
| const bool use_face_center = ((ts->uv_flag & UV_SYNC_SELECTION) ? | const bool use_face_center = ((ts->uv_flag & UV_SYNC_SELECTION) ? | ||||
| (ts->selectmode == SCE_SELECT_FACE) : | (ts->selectmode == SCE_SELECT_FACE) : | ||||
| (ts->uv_selectmode == UV_SELECT_FACE)); | (ts->uv_selectmode == UV_SELECT_FACE)); | ||||
| const bool use_edge = ((ts->uv_flag & UV_SYNC_SELECTION) ? | const bool use_edge = ((ts->uv_flag & UV_SYNC_SELECTION) ? | ||||
| (ts->selectmode == SCE_SELECT_EDGE) : | (ts->selectmode == SCE_SELECT_EDGE) : | ||||
| (ts->uv_selectmode == UV_SELECT_EDGE)); | (ts->uv_selectmode == UV_SELECT_EDGE)); | ||||
| const bool use_select_linked = !(ts->uv_flag & UV_SYNC_SELECTION) && | |||||
| (ts->uv_selectmode == UV_SELECT_ISLAND); | |||||
| const bool select = (sel_op != SEL_OP_SUB); | const bool select = (sel_op != SEL_OP_SUB); | ||||
| const bool use_pre_deselect = SEL_OP_USE_PRE_DESELECT(sel_op); | const bool use_pre_deselect = SEL_OP_USE_PRE_DESELECT(sel_op); | ||||
| BMIter iter, liter; | BMIter iter, liter; | ||||
| BMFace *efa; | BMFace *efa; | ||||
| BMLoop *l; | BMLoop *l; | ||||
| ▲ Show 20 Lines • Show All 78 Lines • ▼ Show 20 Lines | else { /* Vert Sel */ | ||||
| region, &rect, mcoords, mcoords_len, luv->uv)) { | region, &rect, mcoords, mcoords_len, luv->uv)) { | ||||
| uvedit_uv_select_set(scene, em, l, select, false, cd_loop_uv_offset); | uvedit_uv_select_set(scene, em, l, select, false, cd_loop_uv_offset); | ||||
| changed = true; | changed = true; | ||||
| BM_elem_flag_enable(l->v, BM_ELEM_TAG); | BM_elem_flag_enable(l->v, BM_ELEM_TAG); | ||||
| has_selected = true; | has_selected = true; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (has_selected && ts->uv_selectmode == UV_SELECT_ISLAND) { | if (has_selected && use_select_linked) { | ||||
| UvNearestHit hit = { | UvNearestHit hit = { | ||||
| .ob = obedit, | .ob = obedit, | ||||
| .efa = efa, | .efa = efa, | ||||
| }; | }; | ||||
| uv_select_linked_multi(scene, objects, objects_len, &hit, true, !select, false, false); | uv_select_linked_multi(scene, objects, objects_len, &hit, true, !select, false, false); | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 511 Lines • Show Last 20 Lines | |||||