Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_view3d/view3d_select.cc
| Show First 20 Lines • Show All 568 Lines • ▼ Show 20 Lines | static bool do_lasso_select_objects(ViewContext *vc, | ||||
| bool changed = false; | bool changed = false; | ||||
| if (SEL_OP_USE_PRE_DESELECT(sel_op)) { | if (SEL_OP_USE_PRE_DESELECT(sel_op)) { | ||||
| changed |= object_deselect_all_visible(vc->scene, vc->view_layer, vc->v3d); | changed |= object_deselect_all_visible(vc->scene, vc->view_layer, vc->v3d); | ||||
| } | } | ||||
| BKE_view_layer_synced_ensure(vc->scene, vc->view_layer); | BKE_view_layer_synced_ensure(vc->scene, vc->view_layer); | ||||
| LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(vc->view_layer)) { | LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(vc->view_layer)) { | ||||
| if (BASE_SELECTABLE(v3d, base)) { /* Use this to avoid unnecessary lasso look-ups. */ | if (BASE_SELECTABLE(v3d, base)) { /* Use this to avoid unnecessary lasso look-ups. */ | ||||
| short region_co[2]; | |||||
| const bool is_select = base->flag & BASE_SELECTED; | const bool is_select = base->flag & BASE_SELECTED; | ||||
| const bool is_inside = ((ED_view3d_project_base(vc->region, base) == V3D_PROJ_RET_OK) && | const bool is_inside = | ||||
| BLI_lasso_is_point_inside( | (ED_view3d_project_base(vc->region, base, region_co) == V3D_PROJ_RET_OK) && | ||||
| mcoords, mcoords_len, base->sx, base->sy, IS_CLIPPED)); | BLI_lasso_is_point_inside(mcoords, mcoords_len, region_co[0], region_co[1], IS_CLIPPED); | ||||
| const int sel_op_result = ED_select_op_action_deselected(sel_op, is_select, is_inside); | const int sel_op_result = ED_select_op_action_deselected(sel_op, is_select, is_inside); | ||||
| if (sel_op_result != -1) { | if (sel_op_result != -1) { | ||||
| ED_object_base_select(base, sel_op_result ? BA_SELECT : BA_DESELECT); | ED_object_base_select(base, sel_op_result ? BA_SELECT : BA_DESELECT); | ||||
| changed = true; | changed = true; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 1,014 Lines • ▼ Show 20 Lines | if (buffer) { | ||||
| if (base->object->runtime.select_id == (buffer[a].id & ~0xFFFF0000)) { | if (base->object->runtime.select_id == (buffer[a].id & ~0xFFFF0000)) { | ||||
| ok = true; | ok = true; | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| const int dist = 15 * U.pixelsize; | const int dist = 15 * U.pixelsize; | ||||
| if (ED_view3d_project_base(vc->region, base) == V3D_PROJ_RET_OK) { | short region_co[2]; | ||||
| const int delta_px[2] = {base->sx - mval[0], base->sy - mval[1]}; | if (ED_view3d_project_base(vc->region, base, region_co) == V3D_PROJ_RET_OK) { | ||||
| const int delta_px[2] = {region_co[0] - mval[0], region_co[1] - mval[1]}; | |||||
| if (len_manhattan_v2_int(delta_px) < dist) { | if (len_manhattan_v2_int(delta_px) < dist) { | ||||
| ok = true; | ok = true; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (ok) { | if (ok) { | ||||
| base_count++; | base_count++; | ||||
| ▲ Show 20 Lines • Show All 3,225 Lines • Show Last 20 Lines | |||||