From f39d3d4b9cd4c7692889dd70c92368c988d97430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Thu, 15 May 2025 21:28:31 -0300 Subject: [PATCH] Fix polyline plane method decorator to show properly. The `plane_method` where not being cleared after canceling or confirming the polyline operator. --- src/bonsai/bonsai/bim/module/model/polyline.py | 14 ++++++++++++++ src/bonsai/bonsai/bim/module/model/profile.py | 1 + src/bonsai/bonsai/bim/module/model/wall.py | 1 + src/bonsai/bonsai/bim/module/project/operator.py | 1 + 4 files changed, 17 insertions(+) diff --git a/src/bonsai/bonsai/bim/module/model/polyline.py b/src/bonsai/bonsai/bim/module/model/polyline.py index 505f6d7664..359b50f5b5 100644 --- a/src/bonsai/bonsai/bim/module/model/polyline.py +++ b/src/bonsai/bonsai/bim/module/model/polyline.py @@ -643,12 +643,22 @@ class PolylineOperator: tool.Blender.update_viewport() def choose_plane(self, event: bpy.types.Event, x: bool = True, y: bool = True, z: bool = True) -> None: + def get_plane_origin(): + polyline_data = bpy.context.scene.BIMPolylineProperties.insertion_polyline + polyline_points = polyline_data[0].polyline_points if polyline_data else [] + if len(polyline_points) > 0: + reference_point = polyline_points[-1] + else: + reference_point = Vector((0.0, 0.0, 0.0)) + self.tool_state.plane_origin = Vector((reference_point.x, reference_point.y, reference_point.z)) + if x: if event.shift and event.value == "PRESS" and event.type == "X": self.tool_state.use_default_container = False self.tool_state.plane_method = "YZ" if self.tool_state.plane_method != "YZ" else None self.tool_state.axis_method = None tool.Blender.update_viewport() + get_plane_origin() if y: if event.shift and event.value == "PRESS" and event.type == "Y": @@ -656,6 +666,7 @@ class PolylineOperator: self.tool_state.plane_method = "XZ" if self.tool_state.plane_method != "XZ" else None self.tool_state.axis_method = None tool.Blender.update_viewport() + get_plane_origin() if z: if event.shift and event.value == "PRESS" and event.type == "Z": @@ -663,6 +674,8 @@ class PolylineOperator: self.tool_state.plane_method = "XY" if self.tool_state.plane_method != "XY" else None self.tool_state.axis_method = None tool.Blender.update_viewport() + get_plane_origin() + def handle_instructions( self, context: bpy.types.Context, custom_instructions: dict = {}, custom_info: str = "", overwrite: bool = False @@ -880,6 +893,7 @@ class PolylineOperator: else: if event.value == "RELEASE" and event.type in {"ESC"}: self.tool_state.axis_method = None + self.tool_state.plane_method = None context.workspace.status_text_set(text=None) PolylineDecorator.uninstall() tool.Polyline.clear_polyline() diff --git a/src/bonsai/bonsai/bim/module/model/profile.py b/src/bonsai/bonsai/bim/module/model/profile.py index a409c91fab..c28c9b0718 100644 --- a/src/bonsai/bonsai/bim/module/model/profile.py +++ b/src/bonsai/bonsai/bim/module/model/profile.py @@ -1196,6 +1196,7 @@ class DrawPolylineProfile(bpy.types.Operator, PolylineOperator, tool.Ifc.Operato ): self.create_profiles_from_polyline(context) context.workspace.status_text_set(text=None) + self.tool_state.plane_method = None ProductDecorator.uninstall() PolylineDecorator.uninstall() tool.Polyline.clear_polyline() diff --git a/src/bonsai/bonsai/bim/module/model/wall.py b/src/bonsai/bonsai/bim/module/model/wall.py index 0e7044be83..d2c16e7c13 100644 --- a/src/bonsai/bonsai/bim/module/model/wall.py +++ b/src/bonsai/bonsai/bim/module/model/wall.py @@ -571,6 +571,7 @@ class DrawPolylineWall(bpy.types.Operator, PolylineOperator, tool.Ifc.Operator): ): self.create_walls_from_polyline(context) context.workspace.status_text_set(text=None) + self.tool_state.plane_method = None ProductDecorator.uninstall() PolylineDecorator.uninstall() tool.Polyline.clear_polyline() diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 8a9e5138e9..07f1f4f6a6 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -2633,6 +2633,7 @@ class MeasureTool(bpy.types.Operator, PolylineOperator): and event.type in {"RET", "NUMPAD_ENTER", "RIGHTMOUSE"} ) or single_mode: context.workspace.status_text_set(text=None) + self.tool_state.plane_method = None PolylineDecorator.uninstall() tool.Polyline.move_polyline_to_measure(context, self.input_ui) tool.Polyline.clear_polyline()