Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_view3d/view3d_select.c
| Show First 20 Lines • Show All 583 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->view_layer, vc->v3d); | changed |= object_deselect_all_visible(vc->view_layer, vc->v3d); | ||||
| } | } | ||||
| for (base = vc->view_layer->object_bases.first; base; base = base->next) { | for (base = vc->view_layer->object_bases.first; base; base = base->next) { | ||||
| if (BASE_SELECTABLE(v3d, base)) { /* use this to avoid un-needed lasso lookups */ | if (BASE_SELECTABLE(v3d, base)) { /* use this to avoid un-needed lasso lookups */ | ||||
| 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->ar, base) == V3D_PROJ_RET_OK) && | const bool is_inside = ((ED_view3d_project_base(vc, base) == V3D_PROJ_RET_OK) && | ||||
| BLI_lasso_is_point_inside( | BLI_lasso_is_point_inside( | ||||
| mcords, moves, base->sx, base->sy, IS_CLIPPED)); | mcords, moves, base->sx, base->sy, 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 960 Lines • ▼ Show 20 Lines | if (buffer) { | ||||
| if (base->object->runtime.select_id == (buffer[(4 * a) + 3] & ~0xFFFF0000)) { | if (base->object->runtime.select_id == (buffer[(4 * a) + 3] & ~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->ar, base) == V3D_PROJ_RET_OK) { | if (ED_view3d_project_base(vc, base) == V3D_PROJ_RET_OK) { | ||||
| const int delta_px[2] = {base->sx - mval[0], base->sy - mval[1]}; | const int delta_px[2] = {base->sx - mval[0], base->sy - 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) { | ||||
| ▲ Show 20 Lines • Show All 2,539 Lines • Show Last 20 Lines | |||||