diff --git a/source/blender/editors/space_view3d/view3d_cursor_snap.cc b/source/blender/editors/space_view3d/view3d_cursor_snap.cc index 3e878c14535..2a1909978cf 100644 --- a/source/blender/editors/space_view3d/view3d_cursor_snap.cc +++ b/source/blender/editors/space_view3d/view3d_cursor_snap.cc @@ -815,7 +815,7 @@ static void v3d_cursor_snap_update(V3DSnapCursorState *state, v3d_cursor_snap_calc_incremental(scene, v3d, region, state->prevpoint, co); } } - else if (snap_elem == SCE_SNAP_TO_VERTEX) { + else if (snap_elem & SCE_SNAP_TO_VERTEX) { snap_elem_index[0] = index; } else if (snap_elem & diff --git a/source/blender/editors/transform/transform_snap_object.cc b/source/blender/editors/transform/transform_snap_object.cc index 37500c56f36..5dadf7921aa 100644 --- a/source/blender/editors/transform/transform_snap_object.cc +++ b/source/blender/editors/transform/transform_snap_object.cc @@ -1245,9 +1245,10 @@ eSnapMode ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx, eSnapMode retval = SCE_SNAP_TO_NONE; float ray_depth_max = BVH_RAYCAST_DIST_MAX; - bool use_occlusion_test = params->use_occlusion_test && !XRAY_ENABLED(v3d); + const bool is_allways_occluded = !params->use_occlusion_test; + bool use_occlusion_plane = is_allways_occluded || !XRAY_ENABLED(v3d); - if (use_occlusion_test || (snap_to_flag & SCE_SNAP_TO_FACE)) { + if (use_occlusion_plane || (snap_to_flag & SCE_SNAP_TO_FACE)) { const RegionView3D *rv3d = static_cast(region->regiondata); float3 ray_end; ED_view3d_win_to_ray_clipped_ex(depsgraph, @@ -1268,7 +1269,7 @@ eSnapMode ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx, } else { snap_to_flag &= ~SCE_SNAP_TO_FACE; - use_occlusion_test = false; + use_occlusion_plane = false; } } } @@ -1287,7 +1288,7 @@ eSnapMode ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx, prev_co, dist_px ? square_f(*dist_px) : FLT_MAX, nullptr, - use_occlusion_test)) + use_occlusion_plane)) { return retval; } @@ -1326,7 +1327,7 @@ eSnapMode ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx, } } - if (use_occlusion_test || (snap_to_flag & SCE_SNAP_TO_FACE)) { + if (use_occlusion_plane || (snap_to_flag & SCE_SNAP_TO_FACE)) { has_hit = raycastObjects(sctx); if (has_hit) { @@ -1360,7 +1361,7 @@ eSnapMode ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx, /* Remove what has already been computed. */ sctx->runtime.snap_to_flag &= ~(SCE_SNAP_TO_FACE | SCE_SNAP_INDIVIDUAL_NEAREST); - if (use_occlusion_test && has_hit && + if (use_occlusion_plane && has_hit && /* By convention we only snap to the original elements of a curve. */ sctx->ret.ob->type != OB_CURVES_LEGACY) {