From 286b5a1c341aef6529e15a3eaf02e32036c395e2 Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Sat, 17 Feb 2024 10:12:07 -0300 Subject: [PATCH 1/2] Fix: Snap Cursor API not returning index Not a serious problem as nowhere currently requires this index. --- source/blender/editors/space_view3d/view3d_cursor_snap.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/space_view3d/view3d_cursor_snap.cc b/source/blender/editors/space_view3d/view3d_cursor_snap.cc index 84ac9e62b29..0610e4633de 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 & From dd1c12e4d0ee75ad5360bf7ba59db92b82e28b51 Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Sat, 17 Feb 2024 10:17:02 -0300 Subject: [PATCH 2/2] Fix: 'V3D_SNAPCURSOR_OCCLUSION_ALWAYS_TRUE' flag not working The name `use_occlusion_test` was misleading and led to errors. If this variable is false, objects will be considered to always be occluders. Not a serious problem, since the flag is not being used. --- .../editors/transform/transform_snap_object.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/source/blender/editors/transform/transform_snap_object.cc b/source/blender/editors/transform/transform_snap_object.cc index 9f5e6256d09..5ee6ff4d218 100644 --- a/source/blender/editors/transform/transform_snap_object.cc +++ b/source/blender/editors/transform/transform_snap_object.cc @@ -1270,9 +1270,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, @@ -1293,7 +1294,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; } } } @@ -1312,7 +1313,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; } @@ -1351,7 +1352,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) { @@ -1385,7 +1386,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) {