Instructions in polyline tools were moved to the status bar.

Previously the instructions were shown on screen with decorators. Now it is handled by the modal function of the polyline tools.
This commit is contained in:
Bruno Perdigão
2024-09-09 22:27:24 -03:00
parent c06929e1c7
commit 794154f6f5
4 changed files with 38 additions and 40 deletions
@@ -316,9 +316,6 @@ class PolylineDecorator:
if cls.is_installed: if cls.is_installed:
cls.uninstall() cls.uninstall()
handler = cls() handler = cls()
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.draw_measurements, (context,), "WINDOW", "POST_PIXEL"))
cls.handlers.append(SpaceView3D.draw_handler_add(handler.draw_input_ui, (context,), "WINDOW", "POST_PIXEL")) cls.handlers.append(SpaceView3D.draw_handler_add(handler.draw_input_ui, (context,), "WINDOW", "POST_PIXEL"))
cls.handlers.append(SpaceView3D.draw_handler_add(handler, (context,), "WINDOW", "POST_VIEW")) cls.handlers.append(SpaceView3D.draw_handler_add(handler, (context,), "WINDOW", "POST_VIEW"))
@@ -338,9 +335,6 @@ class PolylineDecorator:
cls.event = event cls.event = event
cls.tool_state = tool_state cls.tool_state = tool_state
cls.input_ui = input_ui cls.input_ui = input_ui
cls.snap_info = f"""Snap: {snapping_point[1]}
Axis:{tool_state.axis_method}
Plane: {tool_state.plane_method}"""
@classmethod @classmethod
def set_input_ui(cls, input_ui): def set_input_ui(cls, input_ui):
@@ -440,27 +434,6 @@ class PolylineDecorator:
blf.draw(self.font_id, "a: " + measurement_prop[i].angle) 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
font_size = tool.Blender.scale_font_size(12)
blf.size(self.font_id, font_size)
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.tool_state.instructions)
position = (region.width / 2) - (text_w / 2)
blf.position(self.font_id, position, 10, 0)
blf.draw(self.font_id, self.tool_state.instructions)
text_w, text_h = blf.dimensions(0, self.snap_info)
position = (region.width / 2) - (text_w / 2)
blf.position(self.font_id, position, 30, 0)
blf.draw(self.font_id, self.snap_info)
def __call__(self, context): def __call__(self, context):
+23 -6
View File
@@ -88,12 +88,20 @@ class PolylineOperator:
self.snap_angle = None self.snap_angle = None
self.snapping_points = [] self.snapping_points = []
self.instructions = """TAB: Cycle Input self.instructions = """TAB: Cycle Input
M: Modify Snap Point D: Distance Input
C: Close A: Angle Input
Backspace: Remove M: Modify Snap Point
X Y: Axis C: Close Polyline
Shift: Lock axis BACKSPACE: Remove Point
""" X, Y: Choose Axis
SHIFT: Lock axis
"""
self.snap_info = """
Snap:
Axis:
Plane:
"""
self.tool_state = tool.Polyline.create_tool_state() self.tool_state = tool.Polyline.create_tool_state()
def recalculate_inputs(self, context): def recalculate_inputs(self, context):
@@ -154,6 +162,14 @@ class PolylineOperator:
self.tool_state.axis_method = None self.tool_state.axis_method = None
tool.Blender.update_viewport() tool.Blender.update_viewport()
def handle_instructions(self, context):
self.snap_info = f"""|
Axis: {self.tool_state.axis_method}
Plane: {self.tool_state.plane_method}
Snap: {self.snapping_points[0][1]}
"""
context.workspace.status_text_set(self.instructions + self.snap_info)
def handle_keyboard_input(self, context, event): def handle_keyboard_input(self, context, event):
if self.tool_state.is_input_on and event.value == "PRESS" and event.type == "TAB": if self.tool_state.is_input_on and event.value == "PRESS" and event.type == "TAB":
@@ -279,6 +295,7 @@ class PolylineOperator:
else: else:
if event.value == "RELEASE" and event.type in {"ESC"}: if event.value == "RELEASE" and event.type in {"ESC"}:
self.tool_state.axis_method = None self.tool_state.axis_method = None
context.workspace.status_text_set(text=None)
PolylineDecorator.uninstall() PolylineDecorator.uninstall()
tool.Snap.clear_polyline() tool.Snap.clear_polyline()
tool.Blender.update_viewport() tool.Blender.update_viewport()
@@ -327,6 +327,8 @@ class DrawPolylineWall(bpy.types.Operator, PolylineOperator):
if event.type in {"MIDDLEMOUSE", "WHEELUPMOUSE", "WHEELDOWNMOUSE"}: if event.type in {"MIDDLEMOUSE", "WHEELUPMOUSE", "WHEELDOWNMOUSE"}:
return {"PASS_THROUGH"} return {"PASS_THROUGH"}
self.handle_instructions(context)
self.handle_mouse_move(context, event) self.handle_mouse_move(context, event)
self.choose_axis(event) self.choose_axis(event)
@@ -335,6 +337,7 @@ class DrawPolylineWall(bpy.types.Operator, PolylineOperator):
if not self.tool_state.is_input_on and event.value == "RELEASE" and event.type in {"RET", "NUMPAD_ENTER", "RIGHTMOUSE"}: if not self.tool_state.is_input_on and event.value == "RELEASE" and event.type in {"RET", "NUMPAD_ENTER", "RIGHTMOUSE"}:
self.create_walls_from_polyline(context) self.create_walls_from_polyline(context)
context.workspace.status_text_set(text=None)
PolylineDecorator.uninstall() PolylineDecorator.uninstall()
tool.Snap.clear_polyline() tool.Snap.clear_polyline()
tool.Blender.update_viewport() tool.Blender.update_viewport()
@@ -2283,18 +2283,22 @@ class MeasureTool(bpy.types.Operator, PolylineOperator):
self.input_ui = tool.Polyline.create_input_ui(init_z=True) self.input_ui = tool.Polyline.create_input_ui(init_z=True)
self.input_options = ["D", "A", "X", "Y", "Z"] self.input_options = ["D", "A", "X", "Y", "Z"]
self.instructions = """TAB: Cycle Input self.instructions = """TAB: Cycle Input
M: Modify Snap Point D: Distance Input
C: Close A: Angle Input
Backspace: Remove M: Modify Snap Point
X Y Z: Axis C: Close Polyline
S-(X Y Z): Plane BACKSPACE: Remove Point
Shift: Lock axis X, Y, Z: Choose Axis
""" S-X, S-Y, S-Z: Choose Plane
SHIFT: Lock axis
"""
def modal(self, context, event): def modal(self, context, event):
if event.type in {"MIDDLEMOUSE", "WHEELUPMOUSE", "WHEELDOWNMOUSE"}: if event.type in {"MIDDLEMOUSE", "WHEELUPMOUSE", "WHEELDOWNMOUSE"}:
return {"PASS_THROUGH"} return {"PASS_THROUGH"}
self.handle_instructions(context)
self.handle_mouse_move(context, event) self.handle_mouse_move(context, event)
self.choose_axis(event, z=True) self.choose_axis(event, z=True)
@@ -2304,6 +2308,7 @@ class MeasureTool(bpy.types.Operator, PolylineOperator):
self.handle_snap_selection(context, event) self.handle_snap_selection(context, event)
if not self.tool_state.is_input_on and event.value == "RELEASE" and event.type in {"RET", "NUMPAD_ENTER", "RIGHTMOUSE"}: if not self.tool_state.is_input_on and event.value == "RELEASE" and event.type in {"RET", "NUMPAD_ENTER", "RIGHTMOUSE"}:
context.workspace.status_text_set(text=None)
PolylineDecorator.uninstall() PolylineDecorator.uninstall()
tool.Snap.clear_polyline() tool.Snap.clear_polyline()
tool.Blender.update_viewport() tool.Blender.update_viewport()