Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_view3d/view3d_cursor_snap.c
| Show First 20 Lines • Show All 591 Lines • ▼ Show 20 Lines | static void v3d_cursor_snap_update(V3DSnapCursorState *state, | ||||
| const float mval_fl[2] = {x, y}; | const float mval_fl[2] = {x, y}; | ||||
| zero_v3(no); | zero_v3(no); | ||||
| zero_v3(face_nor); | zero_v3(face_nor); | ||||
| unit_m3(omat); | unit_m3(omat); | ||||
| eSnapMode snap_elements = v3d_cursor_snap_elements(state, scene); | eSnapMode snap_elements = v3d_cursor_snap_elements(state, scene); | ||||
| data_intern->snap_elem_hidden = SCE_SNAP_MODE_NONE; | data_intern->snap_elem_hidden = SCE_SNAP_MODE_NONE; | ||||
| const bool calc_plane_omat = v3d_cursor_snap_calc_plane(); | const bool calc_plane_omat = v3d_cursor_snap_calc_plane(); | ||||
| if (calc_plane_omat && !(snap_elements & SCE_SNAP_MODE_FACE)) { | if (calc_plane_omat && !(snap_elements & SCE_SNAP_MODE_FACE_RAYCAST)) { | ||||
| data_intern->snap_elem_hidden = SCE_SNAP_MODE_FACE; | data_intern->snap_elem_hidden = SCE_SNAP_MODE_FACE_RAYCAST; | ||||
| snap_elements |= SCE_SNAP_MODE_FACE; | snap_elements |= SCE_SNAP_MODE_FACE_RAYCAST; | ||||
| } | } | ||||
| snap_data->is_enabled = true; | snap_data->is_enabled = true; | ||||
| #ifdef USE_SNAP_DETECT_FROM_KEYMAP_HACK | #ifdef USE_SNAP_DETECT_FROM_KEYMAP_HACK | ||||
| if (!(state->flag & V3D_SNAPCURSOR_TOGGLE_ALWAYS_TRUE)) { | if (!(state->flag & V3D_SNAPCURSOR_TOGGLE_ALWAYS_TRUE)) { | ||||
| snap_data->is_snap_invert = v3d_cursor_is_snap_invert(data_intern, wm); | snap_data->is_snap_invert = v3d_cursor_is_snap_invert(data_intern, wm); | ||||
| const ToolSettings *ts = scene->toolsettings; | const ToolSettings *ts = scene->toolsettings; | ||||
| if (snap_data->is_snap_invert != !(ts->snap_flag & SCE_SNAP)) { | if (snap_data->is_snap_invert != !(ts->snap_flag & SCE_SNAP)) { | ||||
| snap_data->is_enabled = false; | snap_data->is_enabled = false; | ||||
| if (!calc_plane_omat) { | if (!calc_plane_omat) { | ||||
| snap_data->snap_elem = SCE_SNAP_MODE_NONE; | snap_data->snap_elem = SCE_SNAP_MODE_NONE; | ||||
| return; | return; | ||||
| } | } | ||||
| snap_elements = data_intern->snap_elem_hidden = SCE_SNAP_MODE_FACE; | snap_elements = data_intern->snap_elem_hidden = SCE_SNAP_MODE_FACE_RAYCAST; | ||||
| } | } | ||||
| } | } | ||||
| #endif | #endif | ||||
| if (snap_elements & SCE_SNAP_MODE_GEOM) { | if (snap_elements & SCE_SNAP_MODE_GEOM) { | ||||
| float prev_co[3] = {0.0f}; | float prev_co[3] = {0.0f}; | ||||
| if (state->prevpoint) { | if (state->prevpoint) { | ||||
| copy_v3_v3(prev_co, state->prevpoint); | copy_v3_v3(prev_co, state->prevpoint); | ||||
| } | } | ||||
| else { | else { | ||||
| snap_elements &= ~SCE_SNAP_MODE_EDGE_PERPENDICULAR; | snap_elements &= ~SCE_SNAP_MODE_EDGE_PERPENDICULAR; | ||||
| } | } | ||||
| eSnapEditType edit_mode_type = (state->flag & V3D_SNAPCURSOR_SNAP_EDIT_GEOM_FINAL) ? | eSnapEditType edit_mode_type = (state->flag & V3D_SNAPCURSOR_SNAP_EDIT_GEOM_FINAL) ? | ||||
mano-wii: For debug? | |||||
Done Inline Actionsgood catch. gfxcoder: good catch. | |||||
| SNAP_GEOM_FINAL : | SNAP_GEOM_FINAL : | ||||
| (state->flag & V3D_SNAPCURSOR_SNAP_EDIT_GEOM_CAGE) ? | (state->flag & V3D_SNAPCURSOR_SNAP_EDIT_GEOM_CAGE) ? | ||||
| SNAP_GEOM_CAGE : | SNAP_GEOM_CAGE : | ||||
| SNAP_GEOM_EDIT; | SNAP_GEOM_EDIT; | ||||
| bool use_occlusion_test = (state->flag & V3D_SNAPCURSOR_OCCLUSION_ALWAYS_TRUE) ? false : true; | bool use_occlusion_test = (state->flag & V3D_SNAPCURSOR_OCCLUSION_ALWAYS_TRUE) ? false : true; | ||||
| float dist_px = 12.0f * U.pixelsize; | float dist_px = 12.0f * U.pixelsize; | ||||
| snap_elem = ED_transform_snap_object_project_view3d_ex( | snap_elem = ED_transform_snap_object_project_view3d_ex( | ||||
| data_intern->snap_context_v3d, | data_intern->snap_context_v3d, | ||||
| depsgraph, | depsgraph, | ||||
| region, | region, | ||||
| v3d, | v3d, | ||||
| snap_elements, | snap_elements, | ||||
| &(const struct SnapObjectParams){ | &(const struct SnapObjectParams){ | ||||
| .snap_target_select = SCE_SNAP_TARGET_ALL, | .snap_target_select = SCE_SNAP_TARGET_ALL, | ||||
| .edit_mode_type = edit_mode_type, | .edit_mode_type = edit_mode_type, | ||||
| .use_occlusion_test = use_occlusion_test, | .use_occlusion_test = use_occlusion_test, | ||||
| }, | }, | ||||
| NULL, | |||||
| mval_fl, | mval_fl, | ||||
| prev_co, | prev_co, | ||||
| &dist_px, | &dist_px, | ||||
| co, | co, | ||||
| no, | no, | ||||
| &index, | &index, | ||||
| NULL, | NULL, | ||||
| obmat, | obmat, | ||||
| ▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | #endif | ||||
| } | } | ||||
| else if (snap_elem == SCE_SNAP_MODE_VERTEX) { | else if (snap_elem == SCE_SNAP_MODE_VERTEX) { | ||||
| snap_elem_index[0] = index; | snap_elem_index[0] = index; | ||||
| } | } | ||||
| else if (snap_elem & | else if (snap_elem & | ||||
| (SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) { | (SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) { | ||||
| snap_elem_index[1] = index; | snap_elem_index[1] = index; | ||||
| } | } | ||||
| else if (snap_elem == SCE_SNAP_MODE_FACE) { | else if (snap_elem == SCE_SNAP_MODE_FACE_RAYCAST) { | ||||
| snap_elem_index[2] = index; | snap_elem_index[2] = index; | ||||
| } | } | ||||
| snap_data->snap_elem = snap_elem; | snap_data->snap_elem = snap_elem; | ||||
| copy_v3_v3(snap_data->loc, co); | copy_v3_v3(snap_data->loc, co); | ||||
| copy_v3_v3(snap_data->nor, no); | copy_v3_v3(snap_data->nor, no); | ||||
| copy_m4_m4(snap_data->obmat, obmat); | copy_m4_m4(snap_data->obmat, obmat); | ||||
| copy_v3_v3_int(snap_data->elem_index, snap_elem_index); | copy_v3_v3_int(snap_data->elem_index, snap_elem_index); | ||||
| ▲ Show 20 Lines • Show All 261 Lines • Show Last 20 Lines | |||||
For debug?