From 2bf303686cc0fffc2eb0489f6b26551f1a923218 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Sat, 5 Apr 2025 11:45:56 -0300 Subject: [PATCH] Snap - Improve how viewport zoom affects snapping. --- src/bonsai/bonsai/tool/raycast.py | 8 +++----- src/bonsai/bonsai/tool/snap.py | 14 +++++++------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/bonsai/bonsai/tool/raycast.py b/src/bonsai/bonsai/tool/raycast.py index 71f35cd559..364269392a 100644 --- a/src/bonsai/bonsai/tool/raycast.py +++ b/src/bonsai/bonsai/tool/raycast.py @@ -193,9 +193,7 @@ class Raycast(bonsai.core.tool.Raycast): # Makes the snapping point more or less sticky than others # It changes the distance and affects how the snapping point are sorted # We multiply by the increment snap which is based on the viewport zoom - snap_threshold = 10 * tool.Snap.get_increment_snap_value(bpy.context) - if face: - snap_threshold = tool.Snap.get_increment_snap_value(bpy.context) + snap_threshold = rv3d.view_distance / 100 try: loc = view3d_utils.region_2d_to_location_3d(region, rv3d, mouse_pos, ray_direction) @@ -288,7 +286,7 @@ class Raycast(bonsai.core.tool.Raycast): rv3d = context.region_data mouse_pos = event.mouse_region_x, event.mouse_region_y ray_origin, ray_target, ray_direction = cls.get_viewport_ray_data(context, event) - snap_threshold = tool.Snap.get_increment_snap_value(bpy.context) + snap_threshold = rv3d.view_distance / 100 try: loc = view3d_utils.region_2d_to_location_3d(region, rv3d, mouse_pos, ray_direction) @@ -365,7 +363,7 @@ class Raycast(bonsai.core.tool.Raycast): rv3d = context.region_data mouse_pos = event.mouse_region_x, event.mouse_region_y ray_origin, ray_target, ray_direction = cls.get_viewport_ray_data(context, event) - snap_threshold = tool.Snap.get_increment_snap_value(bpy.context) + snap_threshold = rv3d.view_distance / 100 try: loc = view3d_utils.region_2d_to_location_3d(region, rv3d, mouse_pos, ray_direction) diff --git a/src/bonsai/bonsai/tool/snap.py b/src/bonsai/bonsai/tool/snap.py index 49e9a25e8b..ec8be9fdfd 100644 --- a/src/bonsai/bonsai/tool/snap.py +++ b/src/bonsai/bonsai/tool/snap.py @@ -483,17 +483,17 @@ class Snap(bonsai.core.tool.Snap): def sort_points_by_weighted_distance(snapping_points): for snap in snapping_points: - weight_factor = 100 * cls.get_increment_snap_value(context) + zoom_factor = bpy.context.region_data.view_distance if snap["type"] == "Vertex": - snap["distance"] *= weight_factor / 12 - if snap["type"] == "Edge": - snap["distance"] *= weight_factor + snap["distance"] *= (zoom_factor / 10) if snap["type"] == "Edge Center": - snap["distance"] *= weight_factor / 5 + snap["distance"] *= (zoom_factor / 8) if snap["type"] == "Edge Intersection": - snap["distance"] *= weight_factor / 10 + snap["distance"] *= (zoom_factor / 5) + if snap["type"] == "Edge": + snap["distance"] *= zoom_factor if snap["type"] in ["Plane", "Axis", "Face"]: - snap["distance"] = weight_factor / 50 + snap["distance"] *= zoom_factor return sorted(snapping_points, key=lambda x: x["distance"]) snaps_by_group = filter_snapping_points_by_group(detected_snaps)