Fix #109454: Snapping from Tools doesn't work if Depth option is not 'Surface' #111226

Closed
Germano Cavalcante wants to merge 1 commits from mano-wii/blender:fix_109454 into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
2 changed files with 20 additions and 23 deletions

View File

@ -604,13 +604,30 @@ static void v3d_cursor_snap_update(V3DSnapCursorState *state,
V3DSnapCursorData *snap_data = &data_intern->snap_data;
ToolSettings *tool_settings = scene->toolsettings;
const bool use_surface_nor = tool_settings->plane_orient == V3D_PLACE_ORIENT_SURFACE;
const bool use_surface_co = tool_settings->plane_depth == V3D_PLACE_DEPTH_SURFACE;
eSnapMode snap_elements = v3d_cursor_snap_elements(tool_settings);
const bool calc_plane_omat = v3d_cursor_snap_calc_plane();
snap_data->is_enabled = true;
if (!(state->flag & V3D_SNAPCURSOR_TOGGLE_ALWAYS_TRUE)) {
#ifdef USE_SNAP_DETECT_FROM_KEYMAP_HACK
snap_data->is_snap_invert = v3d_cursor_is_snap_invert(data_intern, wm);
#endif
if (snap_data->is_snap_invert != !(tool_settings->snap_flag & SCE_SNAP)) {
snap_data->is_enabled = false;
if (!calc_plane_omat) {
snap_data->snap_elem = SCE_SNAP_TO_NONE;
return;
}
snap_elements = SCE_SNAP_TO_NONE;
}
}
const bool use_surface_nor = tool_settings->plane_orient == V3D_PLACE_ORIENT_SURFACE;
const bool use_surface_co = snap_data->is_enabled || tool_settings->plane_depth == V3D_PLACE_DEPTH_SURFACE;
float co[3], no[3], face_nor[3], obmat[4][4], omat[3][3];
eSnapMode snap_elem = SCE_SNAP_TO_NONE;
eSnapMode snap_elements = v3d_cursor_snap_elements(tool_settings);
int snap_elem_index[3] = {-1, -1, -1};
int index = -1;
@ -628,23 +645,6 @@ static void v3d_cursor_snap_update(V3DSnapCursorState *state,
snap_elements |= SCE_SNAP_TO_FACE;
}
snap_data->is_enabled = true;
#ifdef USE_SNAP_DETECT_FROM_KEYMAP_HACK
if (!(state->flag & V3D_SNAPCURSOR_TOGGLE_ALWAYS_TRUE)) {
snap_data->is_snap_invert = v3d_cursor_is_snap_invert(data_intern, wm);
const ToolSettings *ts = scene->toolsettings;
if (snap_data->is_snap_invert != !(ts->snap_flag & SCE_SNAP)) {
snap_data->is_enabled = false;
if (!calc_plane_omat) {
snap_data->snap_elem = SCE_SNAP_TO_NONE;
return;
}
snap_elements = data_intern->snap_elem_hidden = SCE_SNAP_TO_FACE;
}
}
#endif
if (snap_elements & SCE_SNAP_TO_GEOM) {
float prev_co[3] = {0.0f};
if (state->prevpoint) {

View File

@ -734,14 +734,11 @@ static void view3d_interactive_add_begin(bContext *C, wmOperator *op, const wmEv
/* Set this flag so snapping always updated. */
int mval[2];
WM_event_drag_start_mval(event, ipd->region, mval);
int flag_orig = snap_state_new->flag;
snap_state_new->flag |= V3D_SNAPCURSOR_TOGGLE_ALWAYS_TRUE;
/* Be sure to also compute the #V3DSnapCursorData.plane_omat. */
snap_state->draw_plane = true;
ED_view3d_cursor_snap_data_update(snap_state_new, C, mval[0], mval[1]);
snap_state_new->flag = eV3DSnapCursor(flag_orig);
}
}