diff --git a/src/bonsai/bonsai/bim/module/model/decorator.py b/src/bonsai/bonsai/bim/module/model/decorator.py index e96bd74450..9987b639ce 100644 --- a/src/bonsai/bonsai/bim/module/model/decorator.py +++ b/src/bonsai/bonsai/bim/module/model/decorator.py @@ -302,7 +302,6 @@ class PolylineDecorator: is_installed = False handlers = [] event = None - input_type = None input_ui = None angle_snap_mat = None @@ -311,6 +310,7 @@ class PolylineDecorator: instructions = None snap_info = None + @classmethod def install(cls, context): if cls.is_installed: @@ -321,6 +321,7 @@ class PolylineDecorator: cls.handlers.append(SpaceView3D.draw_handler_add(handler, (context,), "WINDOW", "POST_VIEW")) cls.is_installed = True + @classmethod def uninstall(cls): for handler in cls.handlers: @@ -330,25 +331,30 @@ class PolylineDecorator: pass cls.is_installed = False + @classmethod def update(cls, event, tool_state, input_ui, snapping_point): cls.event = event cls.tool_state = tool_state cls.input_ui = input_ui + @classmethod def set_input_ui(cls, input_ui): cls.input_ui = input_ui + @classmethod def set_angle_axis_line(cls, start, end): cls.axis_start = start cls.axis_end = end + # @classmethod # def set_axis_rectangle(cls, corners): # cls.axis_rectangle = [*corners] + @classmethod def set_tool_state(cls, tool_state): cls.tool_state = tool_state diff --git a/src/bonsai/bonsai/bim/module/model/polyline.py b/src/bonsai/bonsai/bim/module/model/polyline.py index a828309696..7d4550066a 100644 --- a/src/bonsai/bonsai/bim/module/model/polyline.py +++ b/src/bonsai/bonsai/bim/module/model/polyline.py @@ -331,6 +331,14 @@ class PolylineOperator: tool.Snap.remove_last_polyline_point() tool.Blender.update_viewport() + + def modal(self, context, event): + PolylineDecorator.update(event, self.tool_state, self.input_ui, self.snapping_points[0]) + tool.Blender.update_viewport() + if event.type in {"MIDDLEMOUSE", "WHEELUPMOUSE", "WHEELDOWNMOUSE"}: + return {"PASS_THROUGH"} + + def invoke(self, context, event): PolylineDecorator.install(context) tool.Snap.clear_snapping_point() @@ -347,7 +355,5 @@ class PolylineOperator: self.snapping_points = tool.Snap.select_snapping_points(context, event, self.tool_state, detected_snaps) 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() context.window_manager.modal_handler_add(self) - # return {"RUNNING_MODAL"} diff --git a/src/bonsai/bonsai/bim/module/model/wall.py b/src/bonsai/bonsai/bim/module/model/wall.py index a5ddd83a7a..bb5eb038b4 100644 --- a/src/bonsai/bonsai/bim/module/model/wall.py +++ b/src/bonsai/bonsai/bim/module/model/wall.py @@ -297,8 +297,6 @@ class DrawPolylineWall(bpy.types.Operator, PolylineOperator): def __init__(self): super().__init__() - # TODO This is creating a hack in generate function from DumbWallGenerator - # Come up with a better solution def create_walls_from_polyline(self, context): props = context.scene.BIMModelProperties relating_type_id = props.relating_type_id @@ -324,8 +322,7 @@ class DrawPolylineWall(bpy.types.Operator, PolylineOperator): DumbWallJoiner().join_V(wall1["obj"], wall2["obj"]) def modal(self, context, event): - if event.type in {"MIDDLEMOUSE", "WHEELUPMOUSE", "WHEELDOWNMOUSE"}: - return {"PASS_THROUGH"} + super().modal(context, event) self.handle_instructions(context) diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index a112beb324..42d254d5e3 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -2294,8 +2294,8 @@ if bpy.app.version >= (4, 1, 0): class MeasureTool(bpy.types.Operator, PolylineOperator): bl_idname = "bim.measure_tool" - bl_options = {"REGISTER", "UNDO"} bl_label = "Measure Tool" + bl_options = {"REGISTER", "UNDO"} @classmethod def poll(cls, context): @@ -2317,8 +2317,7 @@ class MeasureTool(bpy.types.Operator, PolylineOperator): """ def modal(self, context, event): - if event.type in {"MIDDLEMOUSE", "WHEELUPMOUSE", "WHEELDOWNMOUSE"}: - return {"PASS_THROUGH"} + super().modal(context, event) self.handle_instructions(context)