From 48b74ebb7609334bfa8942837490ee2b5d5ca431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Mon, 26 Aug 2024 16:45:30 -0300 Subject: [PATCH] Polytool: creates a decorator to show instructions on the screen. --- .../bonsai/bim/module/model/decorator.py | 27 +++++++++++++++++-- src/bonsai/bonsai/bim/module/model/wall.py | 8 ++++++ .../bonsai/bim/module/project/operator.py | 9 +++++++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/decorator.py b/src/bonsai/bonsai/bim/module/model/decorator.py index 6298ab66ae..a2e9e4ce22 100644 --- a/src/bonsai/bonsai/bim/module/model/decorator.py +++ b/src/bonsai/bonsai/bim/module/model/decorator.py @@ -307,13 +307,15 @@ class PolylineDecorator: angle_snap_mat = None angle_snap_loc = None use_default_container = False - + instructions = None + @classmethod def install(cls, context): if cls.is_installed: cls.uninstall() handler = cls() cls.handlers.append(SpaceView3D.draw_handler_add(handler.draw_input_panel, (context,), "WINDOW", "POST_PIXEL")) + cls.handlers.append(SpaceView3D.draw_handler_add(handler.draw_on_screen_menu, (context,), "WINDOW", "POST_PIXEL")) cls.handlers.append(SpaceView3D.draw_handler_add(handler.draw_measurements, (context,), "WINDOW", "POST_PIXEL")) cls.handlers.append(SpaceView3D.draw_handler_add(handler, (context,), "WINDOW", "POST_VIEW")) cls.is_installed = True @@ -354,6 +356,10 @@ class PolylineDecorator: cls.plane_origin = plane_origin cls.plane_normal = plane_normal + @classmethod + def set_instructions(cls, instructions): + cls.instructions = instructions + @classmethod def calculate_distance_and_angle(cls, context, is_input_on): @@ -556,7 +562,7 @@ class PolylineDecorator: self.addon_prefs = tool.Blender.get_addon_preferences() - self.font_id = 0 + self.font_id = 1 blf.size(self.font_id, 12) blf.enable(self.font_id, blf.SHADOW) blf.shadow(self.font_id, 6, 0, 0, 0, 1) @@ -592,6 +598,23 @@ class PolylineDecorator: blf.position(self.font_id, coords_angle[0], coords_angle[1], 0) blf.draw(self.font_id, "a: " + measurement_prop[i].angle) + def draw_on_screen_menu(self, context): + region = context.region + + self.addon_prefs = tool.Blender.get_addon_preferences() + self.font_id = 2 + blf.size(self.font_id, 12) + blf.enable(self.font_id, blf.SHADOW) + blf.shadow(self.font_id, 6, 0, 0, 0, 1) + color = self.addon_prefs.decorations_colour + blf.color(self.font_id, *color) + + text_w, text_h = blf.dimensions(0, self.instructions) + position = (region.width / 2) - (text_w / 2) + blf.position(self.font_id, position, 10, 0) + blf.draw(self.font_id, self.instructions) + + def __call__(self, context): self.addon_prefs = tool.Blender.get_addon_preferences() diff --git a/src/bonsai/bonsai/bim/module/model/wall.py b/src/bonsai/bonsai/bim/module/model/wall.py index 7736a65ca7..f58f64c11e 100644 --- a/src/bonsai/bonsai/bim/module/model/wall.py +++ b/src/bonsai/bonsai/bim/module/model/wall.py @@ -325,6 +325,13 @@ class DrawPolylineWall(bpy.types.Operator): self.input_panel = {"D": "", "A": "", "X": "", "Y": ""} self.snap_angle = None self.snapping_points = [] + self.instructions = """TAB: Cycle Input + M: Modify Snap Point + C: Close + Backspace: Remove + X Y: Axis + Shift: Lock axis +""" def recalculate_inputs(self, context): if self.number_input: @@ -518,6 +525,7 @@ class DrawPolylineWall(bpy.types.Operator): tool.Snap.set_use_default_container(True) PolylineDecorator.set_use_default_container(True) tool.Snap.set_snap_plane_method("XY") + PolylineDecorator.set_instructions(self.instructions) PolylineDecorator.set_input_panel(self.input_panel, self.input_type) self.visible_objs = tool.Raycast.get_visible_objects(context) for obj in self.visible_objs: diff --git a/src/bonsai/bonsai/bim/module/project/operator.py b/src/bonsai/bonsai/bim/module/project/operator.py index 61dfeb2875..1b7af87064 100644 --- a/src/bonsai/bonsai/bim/module/project/operator.py +++ b/src/bonsai/bonsai/bim/module/project/operator.py @@ -2334,6 +2334,14 @@ class MeasureTool(bpy.types.Operator): self.input_panel = {"D": "", "A": "", "X": "", "Y": "", "Z": ""} self.snap_angle = None self.snapping_points = [] + self.instructions = """TAB: Cycle Input + M: Modify Snap Point + C: Close + Backspace: Remove + X Y Z: Axis + S-(X Y Z): Plane + Shift: Lock axis +""" def recalculate_inputs(self, context): if self.number_input: @@ -2520,6 +2528,7 @@ class MeasureTool(bpy.types.Operator): PolylineDecorator.set_use_default_container(False) tool.Snap.set_snap_plane_method(None) tool.Snap.set_snap_axis_method(None) + PolylineDecorator.set_instructions(self.instructions) PolylineDecorator.set_input_panel(self.input_panel, self.input_type) self.visible_objs = tool.Raycast.get_visible_objects(context) for obj in self.visible_objs: