mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-29 03:37:21 +00:00
Autodocument hotkeys in the BIM tool hotkeys descriptions
Addition to #5223 Example - https://i.imgur.com/vGVHNPL.png
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
# along with Bonsai. If not, see <http://www.gnu.org/licenses/>.
|
# along with Bonsai. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import bpy
|
import bpy
|
||||||
import bpy.utils.previews
|
import bpy.utils.previews
|
||||||
import bonsai.tool as tool
|
import bonsai.tool as tool
|
||||||
@@ -239,12 +240,14 @@ class CableTool(BimTool):
|
|||||||
BimToolUI.draw(context, layout, ifc_element_type=cls.ifc_element_type)
|
BimToolUI.draw(context, layout, ifc_element_type=cls.ifc_element_type)
|
||||||
|
|
||||||
|
|
||||||
|
MODIFIERS = {
|
||||||
|
"A": ("EVENT_ALT", "OPTION" if sys.platform == "Darwin" else "ALT"),
|
||||||
|
"C": ("EVENT_CTRL", "CTRL"),
|
||||||
|
"S": ("EVENT_SHIFT", "⇧"),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def add_layout_hotkey_operator(layout, text, hotkey, description, ui_context=""):
|
def add_layout_hotkey_operator(layout, text, hotkey, description, ui_context=""):
|
||||||
modifiers = {
|
|
||||||
"A": "EVENT_ALT",
|
|
||||||
"C": "EVENT_CTRL",
|
|
||||||
"S": "EVENT_SHIFT",
|
|
||||||
}
|
|
||||||
modifier, key = hotkey.split("_")
|
modifier, key = hotkey.split("_")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -252,14 +255,21 @@ def add_layout_hotkey_operator(layout, text, hotkey, description, ui_context="")
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
custom_icon = custom_icon_previews["IFC"].icon_id
|
custom_icon = custom_icon_previews["IFC"].icon_id
|
||||||
|
|
||||||
|
modifier_icon, modifier_str = MODIFIERS[modifier]
|
||||||
|
|
||||||
if ui_context == "TOOL_HEADER":
|
if ui_context == "TOOL_HEADER":
|
||||||
op = layout.operator("bim.hotkey", text="", icon_value=custom_icon)
|
op = layout.operator("bim.hotkey", text="", icon_value=custom_icon)
|
||||||
else:
|
else:
|
||||||
row = layout.row(align=True)
|
row = layout.row(align=True)
|
||||||
op = row.operator("bim.hotkey", text=text, icon_value=custom_icon)
|
op = row.operator("bim.hotkey", text=text, icon_value=custom_icon)
|
||||||
row.label(text="", icon=modifiers[modifier])
|
row.label(text="", icon=modifier_icon)
|
||||||
row.label(text="", icon=f"EVENT_{key}")
|
row.label(text="", icon=f"EVENT_{key}")
|
||||||
|
|
||||||
|
hotkey_description = f"Hotkey: {modifier_str} {key}"
|
||||||
|
if description:
|
||||||
|
description += "\n\n"
|
||||||
|
description += hotkey_description
|
||||||
|
|
||||||
op.hotkey = hotkey
|
op.hotkey = hotkey
|
||||||
op.description = description
|
op.description = description
|
||||||
return op
|
return op
|
||||||
@@ -370,9 +380,7 @@ class BimToolUI:
|
|||||||
|
|
||||||
cls.layout.separator()
|
cls.layout.separator()
|
||||||
|
|
||||||
add_layout_hotkey_operator(
|
add_layout_hotkey_operator(cls.layout, "Regen", "S_G", bpy.ops.bim.recalculate_wall.__doc__, ui_context)
|
||||||
cls.layout, "Regen", "S_G", bpy.ops.bim.recalculate_wall.__doc__ + "\n⇧ G", ui_context
|
|
||||||
)
|
|
||||||
|
|
||||||
cls.layout.separator()
|
cls.layout.separator()
|
||||||
|
|
||||||
@@ -380,21 +388,21 @@ class BimToolUI:
|
|||||||
cls.layout,
|
cls.layout,
|
||||||
"Extend",
|
"Extend",
|
||||||
"S_E",
|
"S_E",
|
||||||
"Extends/reduces element to 3D cursor\n⇧ E",
|
"Extends/reduces element to 3D cursor",
|
||||||
ui_context,
|
ui_context,
|
||||||
)
|
)
|
||||||
add_layout_hotkey_operator(
|
add_layout_hotkey_operator(
|
||||||
cls.layout,
|
cls.layout,
|
||||||
"Butt",
|
"Butt",
|
||||||
"S_T",
|
"S_T",
|
||||||
"Intersects two non-parallel elements to a butt corner junction\n⇧ T",
|
"Intersects two non-parallel elements to a butt corner junction",
|
||||||
ui_context,
|
ui_context,
|
||||||
)
|
)
|
||||||
add_layout_hotkey_operator(
|
add_layout_hotkey_operator(
|
||||||
cls.layout,
|
cls.layout,
|
||||||
"Mitre",
|
"Mitre",
|
||||||
"S_Y",
|
"S_Y",
|
||||||
"Intersects two non-parallel elements to a mitred corner junction\n⇧ Y",
|
"Intersects two non-parallel elements to a mitred corner junction",
|
||||||
ui_context,
|
ui_context,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -404,12 +412,10 @@ class BimToolUI:
|
|||||||
)
|
)
|
||||||
cls.layout.separator()
|
cls.layout.separator()
|
||||||
|
|
||||||
add_layout_hotkey_operator(cls.layout, "Merge", "S_M", bpy.ops.bim.merge_wall.__doc__ + "\n⇧ M", ui_context)
|
add_layout_hotkey_operator(cls.layout, "Merge", "S_M", bpy.ops.bim.merge_wall.__doc__, ui_context)
|
||||||
add_layout_hotkey_operator(cls.layout, "Split", "S_K", bpy.ops.bim.split_wall.__doc__ + "\n⇧ K", ui_context)
|
add_layout_hotkey_operator(cls.layout, "Split", "S_K", bpy.ops.bim.split_wall.__doc__, ui_context)
|
||||||
add_layout_hotkey_operator(
|
add_layout_hotkey_operator(cls.layout, "Rotate 90", "S_R", bpy.ops.bim.rotate_90.__doc__, ui_context)
|
||||||
cls.layout, "Rotate 90", "S_R", bpy.ops.bim.rotate_90.__doc__ + "\n⇧ R", ui_context
|
add_layout_hotkey_operator(cls.layout, "Flip", "S_F", bpy.ops.bim.flip_wall.__doc__, ui_context)
|
||||||
)
|
|
||||||
add_layout_hotkey_operator(cls.layout, "Flip", "S_F", bpy.ops.bim.flip_wall.__doc__ + "\n⇧ F", ui_context)
|
|
||||||
|
|
||||||
# row.operator("bim.unjoin_walls", icon="X", text="")
|
# row.operator("bim.unjoin_walls", icon="X", text="")
|
||||||
|
|
||||||
@@ -596,37 +602,37 @@ class BimToolUI:
|
|||||||
op.x_angle = cls.props.x_angle
|
op.x_angle = cls.props.x_angle
|
||||||
|
|
||||||
row = cls.layout.row()
|
row = cls.layout.row()
|
||||||
add_layout_hotkey_operator(row, "Regen", "S_G", bpy.ops.bim.recalculate_wall.__doc__ + "\n⇧ G", ui_context)
|
add_layout_hotkey_operator(row, "Regen", "S_G", bpy.ops.bim.recalculate_wall.__doc__, ui_context)
|
||||||
|
|
||||||
row = cls.layout.row(align=True)
|
row = cls.layout.row(align=True)
|
||||||
add_layout_hotkey_operator(
|
add_layout_hotkey_operator(
|
||||||
row,
|
row,
|
||||||
"Extend",
|
"Extend",
|
||||||
"S_E",
|
"S_E",
|
||||||
"Extends/reduces element to 3D cursor\n⇧ E",
|
"Extends/reduces element to 3D cursor",
|
||||||
ui_context,
|
ui_context,
|
||||||
)
|
)
|
||||||
add_layout_hotkey_operator(
|
add_layout_hotkey_operator(
|
||||||
row,
|
row,
|
||||||
"Butt",
|
"Butt",
|
||||||
"S_T",
|
"S_T",
|
||||||
"Intersects two non-parallel elements to a butt corner junction\n⇧ T",
|
"Intersects two non-parallel elements to a butt corner junction",
|
||||||
ui_context,
|
ui_context,
|
||||||
)
|
)
|
||||||
add_layout_hotkey_operator(
|
add_layout_hotkey_operator(
|
||||||
row,
|
row,
|
||||||
"Mitre",
|
"Mitre",
|
||||||
"S_Y",
|
"S_Y",
|
||||||
"Intersects two non-parallel elements to a mitred corner junction\n⇧ Y",
|
"Intersects two non-parallel elements to a mitred corner junction",
|
||||||
ui_context,
|
ui_context,
|
||||||
)
|
)
|
||||||
row.operator("bim.unjoin_walls", text="", icon_value=custom_icon_previews["UNJOIN_WALLS"].icon_id)
|
row.operator("bim.unjoin_walls", text="", icon_value=custom_icon_previews["UNJOIN_WALLS"].icon_id)
|
||||||
|
|
||||||
row = cls.layout.row(align=True)
|
row = cls.layout.row(align=True)
|
||||||
add_layout_hotkey_operator(row, "Merge", "S_M", bpy.ops.bim.merge_wall.__doc__ + "\n⇧ M", ui_context)
|
add_layout_hotkey_operator(row, "Merge", "S_M", bpy.ops.bim.merge_wall.__doc__, ui_context)
|
||||||
add_layout_hotkey_operator(row, "Split", "S_K", bpy.ops.bim.split_wall.__doc__ + "\n⇧ K", ui_context)
|
add_layout_hotkey_operator(row, "Split", "S_K", bpy.ops.bim.split_wall.__doc__, ui_context)
|
||||||
add_layout_hotkey_operator(row, "Rotate 90", "S_R", bpy.ops.bim.rotate_90.__doc__ + "\n⇧ R", ui_context)
|
add_layout_hotkey_operator(row, "Rotate 90", "S_R", bpy.ops.bim.rotate_90.__doc__, ui_context)
|
||||||
add_layout_hotkey_operator(row, "Flip", "S_F", bpy.ops.bim.flip_wall.__doc__ + "\n⇧ F", ui_context)
|
add_layout_hotkey_operator(row, "Flip", "S_F", bpy.ops.bim.flip_wall.__doc__, ui_context)
|
||||||
|
|
||||||
elif AuthoringData.data["active_material_usage"] == "LAYER3":
|
elif AuthoringData.data["active_material_usage"] == "LAYER3":
|
||||||
if len(context.selected_objects) == 1:
|
if len(context.selected_objects) == 1:
|
||||||
@@ -848,7 +854,7 @@ class BimToolUI:
|
|||||||
|
|
||||||
class Hotkey(bpy.types.Operator, tool.Ifc.Operator):
|
class Hotkey(bpy.types.Operator, tool.Ifc.Operator):
|
||||||
bl_idname = "bim.hotkey"
|
bl_idname = "bim.hotkey"
|
||||||
bl_label = "Hotkey"
|
bl_label = ""
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
hotkey: bpy.props.StringProperty()
|
hotkey: bpy.props.StringProperty()
|
||||||
description: bpy.props.StringProperty()
|
description: bpy.props.StringProperty()
|
||||||
@@ -1137,7 +1143,7 @@ class Hotkey(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
def hotkey_S_P(self):
|
def hotkey_S_P(self):
|
||||||
mode = bpy.context.mode
|
mode = bpy.context.mode
|
||||||
current_tool = bpy.context.workspace.tools.from_space_view3d_mode(mode)
|
current_tool = bpy.context.workspace.tools.from_space_view3d_mode(mode)
|
||||||
if current_tool.idname == 'bim.wall_tool':
|
if current_tool.idname == "bim.wall_tool":
|
||||||
bpy.ops.bim.draw_polyline_wall("INVOKE_DEFAULT")
|
bpy.ops.bim.draw_polyline_wall("INVOKE_DEFAULT")
|
||||||
|
|
||||||
def hotkey_S_L(self):
|
def hotkey_S_L(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user