mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-26 02:07:36 +00:00
Fix bug with mixed snap.
This commit is contained in:
@@ -304,7 +304,7 @@ class PolylineOperator:
|
|||||||
|
|
||||||
def handle_snap_selection(self, context, event):
|
def handle_snap_selection(self, context, event):
|
||||||
if event.value == "PRESS" and event.type == "M":
|
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)
|
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])
|
PolylineDecorator.update(event, self.tool_state, self.input_ui, self.snapping_points[0])
|
||||||
tool.Blender.update_viewport()
|
tool.Blender.update_viewport()
|
||||||
|
|||||||
@@ -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((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, 1, 0))))
|
||||||
intersections.append(tool.Cad.intersect_edge_plane(axis_start, axis_end, snap_point[0], Vector((0, 0, 1))))
|
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)
|
sorted_intersections = sorted(((i, "Mix") for i in intersections if i is not None), reverse=False)
|
||||||
return (sorted_intersections[0], "Mix"), (sorted_intersections[1], "Mix")
|
return sorted_intersections
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def detect_snapping_points(cls, context, event, objs_2d_bbox, tool_state):
|
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 point[1] == "Axis":
|
||||||
if snapping_points[0][1] not in {"Axis", "Plane"}:
|
if snapping_points[0][1] not in {"Axis", "Plane"}:
|
||||||
mixed_snap = cls.mix_snap_and_axis(snapping_points[0], axis_start, axis_end)
|
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]))
|
for mixed_point in mixed_snap:
|
||||||
snapping_points.insert(0, (mixed_snap[0][0], mixed_snap[0][1]))
|
snapping_points.insert(0, mixed_point)
|
||||||
cls.update_snapping_point(mixed_snap[0][0], mixed_snap[0][1])
|
cls.update_snapping_point(mixed_snap[0][0], mixed_snap[0][1])
|
||||||
return snapping_points
|
return snapping_points
|
||||||
cls.update_snapping_point(point[0], point[1])
|
cls.update_snapping_point(point[0], point[1])
|
||||||
@@ -505,7 +505,13 @@ class Snap(bonsai.core.tool.Snap):
|
|||||||
return snapping_points
|
return snapping_points
|
||||||
|
|
||||||
@classmethod
|
@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]
|
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])
|
cls.update_snapping_point(shifted_list[0][0], shifted_list[0][1])
|
||||||
return shifted_list
|
return shifted_list
|
||||||
|
|||||||
Reference in New Issue
Block a user