From 6f6700db06a9e197c1e817db6da28e4167817be6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Fri, 11 Oct 2024 10:38:15 -0300 Subject: [PATCH] Fix bug with mixed snap. --- src/bonsai/bonsai/bim/module/model/polyline.py | 2 +- src/bonsai/bonsai/tool/snap.py | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/polyline.py b/src/bonsai/bonsai/bim/module/model/polyline.py index f0d118fcbe..363ef5c0a0 100644 --- a/src/bonsai/bonsai/bim/module/model/polyline.py +++ b/src/bonsai/bonsai/bim/module/model/polyline.py @@ -304,7 +304,7 @@ class PolylineOperator: def handle_snap_selection(self, context, event): if event.value == "PRESS" and event.type == "M": - self.snapping_points = tool.Snap.modify_snapping_point_selection(self.snapping_points) + self.snapping_points = tool.Snap.modify_snapping_point_selection(self.snapping_points, lock_axis = self.tool_state.lock_axis) tool.Polyline.calculate_distance_and_angle(context, self.input_ui, self.tool_state) PolylineDecorator.update(event, self.tool_state, self.input_ui, self.snapping_points[0]) tool.Blender.update_viewport() diff --git a/src/bonsai/bonsai/tool/snap.py b/src/bonsai/bonsai/tool/snap.py index 46c97482f4..23428a5f10 100644 --- a/src/bonsai/bonsai/tool/snap.py +++ b/src/bonsai/bonsai/tool/snap.py @@ -243,8 +243,8 @@ class Snap(bonsai.core.tool.Snap): intersections.append(tool.Cad.intersect_edge_plane(axis_start, axis_end, snap_point[0], Vector((1, 0, 0)))) intersections.append(tool.Cad.intersect_edge_plane(axis_start, axis_end, snap_point[0], Vector((0, 1, 0)))) intersections.append(tool.Cad.intersect_edge_plane(axis_start, axis_end, snap_point[0], Vector((0, 0, 1)))) - sorted_intersections = sorted(i for i in intersections if i is not None) - return (sorted_intersections[0], "Mix"), (sorted_intersections[1], "Mix") + sorted_intersections = sorted(((i, "Mix") for i in intersections if i is not None), reverse=False) + return sorted_intersections @classmethod def detect_snapping_points(cls, context, event, objs_2d_bbox, tool_state): @@ -494,8 +494,8 @@ class Snap(bonsai.core.tool.Snap): if point[1] == "Axis": if snapping_points[0][1] not in {"Axis", "Plane"}: mixed_snap = cls.mix_snap_and_axis(snapping_points[0], axis_start, axis_end) - snapping_points.insert(0, (mixed_snap[1][0], mixed_snap[1][1])) - snapping_points.insert(0, (mixed_snap[0][0], mixed_snap[0][1])) + for mixed_point in mixed_snap: + snapping_points.insert(0, mixed_point) cls.update_snapping_point(mixed_snap[0][0], mixed_snap[0][1]) return snapping_points cls.update_snapping_point(point[0], point[1]) @@ -505,7 +505,13 @@ class Snap(bonsai.core.tool.Snap): return snapping_points @classmethod - def modify_snapping_point_selection(cls, snapping_points): + def modify_snapping_point_selection(cls, snapping_points, lock_axis=False): shifted_list = snapping_points[1:] + snapping_points[:1] + if lock_axis: # Will only cycle through mix or axis + non_axis_snap = [point for point in snapping_points if point[1] not in {"Axis", "Mix"}] + axis_snap = [point for point in snapping_points if point[1] in {"Axis", "Mix"}] + shifted_list = axis_snap[1:] + axis_snap[:1] + shifted_list.extend(non_axis_snap) + cls.update_snapping_point(shifted_list[0][0], shifted_list[0][1]) return shifted_list