diff --git a/source/blender/editors/transform/transform_snap_object.cc b/source/blender/editors/transform/transform_snap_object.cc index 36a833feea5..d11e62ef433 100644 --- a/source/blender/editors/transform/transform_snap_object.cc +++ b/source/blender/editors/transform/transform_snap_object.cc @@ -723,6 +723,12 @@ bool nearest_world_tree(SnapObjectContext *sctx, if (sctx->runtime.params.keep_on_same_target) { r_nearest->dist_sq = original_distance; } + else if (sctx->runtime.params.face_nearest_steps > 1) { + /* Recalculate the distance. + * When multiple steps are tested, we cannot depend on the distance calculated for + * `nearest.dist_sq`, as it reduces with each step. */ + r_nearest->dist_sq = math::distance_squared(sctx->runtime.curr_co, co); + } return true; } diff --git a/source/blender/editors/transform/transform_snap_object_mesh.cc b/source/blender/editors/transform/transform_snap_object_mesh.cc index 2cbe17340fb..9157e8bd90d 100644 --- a/source/blender/editors/transform/transform_snap_object_mesh.cc +++ b/source/blender/editors/transform/transform_snap_object_mesh.cc @@ -202,7 +202,7 @@ static bool nearest_world_mesh(SnapObjectContext *sctx, } BVHTreeNearest nearest{}; - nearest.dist_sq = sctx->ret.dist_px_sq; + nearest.dist_sq = sctx->ret.dist_nearest_sq; if (nearest_world_tree( sctx, treedata.tree, treedata.nearest_callback, obmat, &treedata, &nearest)) { SnapData::register_result(sctx, ob_eval, &me_eval->id, obmat, &nearest);