mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-22 00:32:38 +00:00
moved to viewport overlays
This commit is contained in:
@@ -533,7 +533,7 @@ class BIM_PT_derived_coordinates(Panel):
|
|||||||
area_3d = next((area for area in context.screen.areas if area.type == "VIEW_3D"), None)
|
area_3d = next((area for area in context.screen.areas if area.type == "VIEW_3D"), None)
|
||||||
space_3d = next((space for space in area_3d.spaces if space.type == "VIEW_3D"), None)
|
space_3d = next((space for space in area_3d.spaces if space.type == "VIEW_3D"), None)
|
||||||
|
|
||||||
if bpy.context.scene.MeasureToolSettings.measurement_type == "XYZ_DIMENSIONS":
|
if bpy.context.scene.BIMModelProperties.measure_xyz_dimensions:
|
||||||
for axis, icon, idx in [("X", "STRIP_COLOR_01", 0), ("Y", "STRIP_COLOR_04", 1), ("Z", "STRIP_COLOR_05", 2)]:
|
for axis, icon, idx in [("X", "STRIP_COLOR_01", 0), ("Y", "STRIP_COLOR_04", 1), ("Z", "STRIP_COLOR_05", 2)]:
|
||||||
row.label(text="", icon=icon)
|
row.label(text="", icon=icon)
|
||||||
row.prop(context.active_object, "dimensions", text=axis, index=idx)
|
row.prop(context.active_object, "dimensions", text=axis, index=idx)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ from bonsai.bim.prop import ObjProperty
|
|||||||
from bonsai.bim.module.model.data import AuthoringData
|
from bonsai.bim.module.model.data import AuthoringData
|
||||||
from bpy.types import PropertyGroup, NodeTree
|
from bpy.types import PropertyGroup, NodeTree
|
||||||
from math import pi, radians
|
from math import pi, radians
|
||||||
from bonsai.bim.module.model.decorator import WallAxisDecorator, SlabDirectionDecorator
|
from bonsai.bim.module.model.decorator import WallAxisDecorator, SlabDirectionDecorator, BoundingBoxDecorator
|
||||||
from bonsai.bim.module.model.door import update_door_modifier_bmesh
|
from bonsai.bim.module.model.door import update_door_modifier_bmesh
|
||||||
from bonsai.bim.module.model.window import update_window_modifier_bmesh
|
from bonsai.bim.module.model.window import update_window_modifier_bmesh
|
||||||
from bonsai.bim.module.drawing.decoration import CutDecorator
|
from bonsai.bim.module.drawing.decoration import CutDecorator
|
||||||
@@ -114,6 +114,38 @@ def update_slab_direction_decorator(self: "BIMModelProperties", context: bpy.typ
|
|||||||
SlabDirectionDecorator.uninstall()
|
SlabDirectionDecorator.uninstall()
|
||||||
|
|
||||||
|
|
||||||
|
def update_measure_xyz(self: "BIMModelProperties", context: bpy.types.Context) -> None:
|
||||||
|
area_3d = next((area for area in context.screen.areas if area.type == "VIEW_3D"), None)
|
||||||
|
space_3d = next((space for space in area_3d.spaces if space.type == "VIEW_3D"), None) if area_3d else None
|
||||||
|
scene = context.scene
|
||||||
|
|
||||||
|
if self.measure_xyz_dimensions:
|
||||||
|
BoundingBoxDecorator.install(context)
|
||||||
|
# Save previous state if not already saved
|
||||||
|
if not self.prev_transform_orientation_slot_type:
|
||||||
|
self.prev_transform_orientation_slot_type = scene.transform_orientation_slots[1].type
|
||||||
|
if not self.prev_show_gizmo_object_translate and space_3d:
|
||||||
|
self.prev_show_gizmo_object_translate = space_3d.show_gizmo_object_translate
|
||||||
|
# Set new state
|
||||||
|
if space_3d:
|
||||||
|
if len(context.selected_objects) == 1:
|
||||||
|
scene.transform_orientation_slots[1].type = "LOCAL"
|
||||||
|
else:
|
||||||
|
scene.transform_orientation_slots[1].type = "GLOBAL"
|
||||||
|
space_3d.show_gizmo_object_translate = True
|
||||||
|
else:
|
||||||
|
BoundingBoxDecorator.uninstall()
|
||||||
|
# Restore previous state
|
||||||
|
if space_3d:
|
||||||
|
prev_orientation = self.prev_transform_orientation_slot_type
|
||||||
|
if prev_orientation:
|
||||||
|
scene.transform_orientation_slots[1].type = prev_orientation
|
||||||
|
self.prev_transform_orientation_slot_type = ""
|
||||||
|
prev_gizmo = self.prev_show_gizmo_object_translate
|
||||||
|
if prev_gizmo is not None:
|
||||||
|
space_3d.show_gizmo_object_translate = prev_gizmo
|
||||||
|
self.prev_show_gizmo_object_translate = False
|
||||||
|
|
||||||
def update_cut_decorator(self: "BIMModelProperties", context: bpy.types.Context) -> None:
|
def update_cut_decorator(self: "BIMModelProperties", context: bpy.types.Context) -> None:
|
||||||
if self.show_cut_decorator:
|
if self.show_cut_decorator:
|
||||||
CutDecorator.install(bpy.context)
|
CutDecorator.install(bpy.context)
|
||||||
@@ -248,6 +280,19 @@ class BIMModelProperties(PropertyGroup):
|
|||||||
default=False,
|
default=False,
|
||||||
update=update_slab_direction_decorator,
|
update=update_slab_direction_decorator,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
prev_transform_orientation_slot_type: bpy.props.StringProperty(
|
||||||
|
name="Previous Gizmo Orientation Type"
|
||||||
|
)
|
||||||
|
prev_show_gizmo_object_translate: bpy.props.BoolProperty(
|
||||||
|
name="Previous Gizmo Translate"
|
||||||
|
)
|
||||||
|
|
||||||
|
measure_xyz_dimensions: bpy.props.BoolProperty(
|
||||||
|
name="Measure XYZ Dimensions",
|
||||||
|
default=False,
|
||||||
|
update=update_measure_xyz
|
||||||
|
)
|
||||||
show_cut_decorator: bpy.props.BoolProperty(
|
show_cut_decorator: bpy.props.BoolProperty(
|
||||||
name="Show Cut Decorator",
|
name="Show Cut Decorator",
|
||||||
default=True,
|
default=True,
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ classes = (
|
|||||||
operator.LoadProjectElements,
|
operator.LoadProjectElements,
|
||||||
operator.MeasureTool,
|
operator.MeasureTool,
|
||||||
operator.MeasureFaceAreaTool,
|
operator.MeasureFaceAreaTool,
|
||||||
operator.MeasureXYZDimensionsTool,
|
|
||||||
operator.ClearMeasurement,
|
operator.ClearMeasurement,
|
||||||
operator.NewProject,
|
operator.NewProject,
|
||||||
operator.QueryLinkedElement,
|
operator.QueryLinkedElement,
|
||||||
@@ -101,10 +100,6 @@ def register():
|
|||||||
bpy.types.TOPBAR_MT_file_import.append(ui.file_import_menu)
|
bpy.types.TOPBAR_MT_file_import.append(ui.file_import_menu)
|
||||||
bpy.types.TOPBAR_MT_file.prepend(ui.file_menu)
|
bpy.types.TOPBAR_MT_file.prepend(ui.file_menu)
|
||||||
bpy.types.TOPBAR_MT_file_context_menu.prepend(ui.file_menu)
|
bpy.types.TOPBAR_MT_file_context_menu.prepend(ui.file_menu)
|
||||||
bpy.types.Scene.prev_transform_orientation_slot_type = bpy.props.StringProperty(
|
|
||||||
name="Previous Gizmo Orientation Type"
|
|
||||||
)
|
|
||||||
bpy.types.Scene.prev_show_gizmo_object_translate = bpy.props.BoolProperty(name="Previous Gizmo Translate")
|
|
||||||
wm = bpy.context.window_manager
|
wm = bpy.context.window_manager
|
||||||
if wm.keyconfigs.addon:
|
if wm.keyconfigs.addon:
|
||||||
km = wm.keyconfigs.addon.keymaps.get("Window")
|
km = wm.keyconfigs.addon.keymaps.get("Window")
|
||||||
@@ -125,8 +120,6 @@ def unregister():
|
|||||||
bpy.utils.unregister_tool(workspace.ExploreTool)
|
bpy.utils.unregister_tool(workspace.ExploreTool)
|
||||||
del bpy.types.Scene.BIMProjectProperties
|
del bpy.types.Scene.BIMProjectProperties
|
||||||
del bpy.types.Scene.MeasureToolSettings
|
del bpy.types.Scene.MeasureToolSettings
|
||||||
del bpy.types.Scene.prev_transform_orientation_slot_type
|
|
||||||
del bpy.types.Scene.prev_show_gizmo_object_translate
|
|
||||||
bpy.app.handlers.load_post.remove(decorator.toggle_decorations_on_load)
|
bpy.app.handlers.load_post.remove(decorator.toggle_decorations_on_load)
|
||||||
bpy.types.TOPBAR_MT_file.remove(ui.file_menu)
|
bpy.types.TOPBAR_MT_file.remove(ui.file_menu)
|
||||||
bpy.types.TOPBAR_MT_file_context_menu.remove(ui.file_menu)
|
bpy.types.TOPBAR_MT_file_context_menu.remove(ui.file_menu)
|
||||||
|
|||||||
@@ -2648,6 +2648,7 @@ class MeasureTool(bpy.types.Operator, PolylineOperator):
|
|||||||
and event.type in {"RET", "NUMPAD_ENTER", "RIGHTMOUSE"}
|
and event.type in {"RET", "NUMPAD_ENTER", "RIGHTMOUSE"}
|
||||||
) or single_mode:
|
) or single_mode:
|
||||||
context.workspace.status_text_set(text=None)
|
context.workspace.status_text_set(text=None)
|
||||||
|
self.tool_state.plane_method = None
|
||||||
PolylineDecorator.uninstall()
|
PolylineDecorator.uninstall()
|
||||||
tool.Polyline.move_polyline_to_measure(context, self.input_ui)
|
tool.Polyline.move_polyline_to_measure(context, self.input_ui)
|
||||||
tool.Polyline.clear_polyline()
|
tool.Polyline.clear_polyline()
|
||||||
@@ -2800,43 +2801,3 @@ class ClearMeasurement(bpy.types.Operator):
|
|||||||
MeasureDecorator.uninstall()
|
MeasureDecorator.uninstall()
|
||||||
tool.Blender.update_viewport()
|
tool.Blender.update_viewport()
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
from bonsai.bim.module.model.decorator import BoundingBoxDecorator
|
|
||||||
|
|
||||||
class MeasureXYZDimensionsTool(bpy.types.Operator):
|
|
||||||
bl_idname = "bim.measure_xyz_dimensions_tool"
|
|
||||||
bl_label = "Show bounding box dimensions"
|
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
|
||||||
|
|
||||||
def execute(self, context):
|
|
||||||
scene = context.scene
|
|
||||||
area_3d = next((area for area in context.screen.areas if area.type == "VIEW_3D"), None)
|
|
||||||
space_3d = next((space for space in area_3d.spaces if space.type == "VIEW_3D"), None) if area_3d else None
|
|
||||||
|
|
||||||
if scene.MeasureToolSettings.measurement_type == "XYZ_DIMENSIONS":
|
|
||||||
BoundingBoxDecorator.install(context)
|
|
||||||
# Save previous state if not already saved
|
|
||||||
if not scene.get("prev_transform_orientation_slot_type", None):
|
|
||||||
scene["prev_transform_orientation_slot_type"] = scene.transform_orientation_slots[1].type
|
|
||||||
if not scene.get("prev_show_gizmo_object_translate", None) and space_3d:
|
|
||||||
scene["prev_show_gizmo_object_translate"] = space_3d.show_gizmo_object_translate
|
|
||||||
# Set new state
|
|
||||||
if space_3d:
|
|
||||||
if len(context.selected_objects) == 1:
|
|
||||||
scene.transform_orientation_slots[1].type = "LOCAL"
|
|
||||||
else:
|
|
||||||
scene.transform_orientation_slots[1].type = "GLOBAL"
|
|
||||||
space_3d.show_gizmo_object_translate = True
|
|
||||||
else:
|
|
||||||
BoundingBoxDecorator.uninstall()
|
|
||||||
# Restore previous state
|
|
||||||
if space_3d:
|
|
||||||
prev_orientation = scene.get("prev_transform_orientation_slot_type", None)
|
|
||||||
if prev_orientation:
|
|
||||||
scene.transform_orientation_slots[1].type = prev_orientation
|
|
||||||
scene["prev_transform_orientation_slot_type"] = ""
|
|
||||||
prev_gizmo = scene.get("prev_show_gizmo_object_translate", None)
|
|
||||||
if prev_gizmo is not None:
|
|
||||||
space_3d.show_gizmo_object_translate = prev_gizmo
|
|
||||||
scene["prev_show_gizmo_object_translate"] = None
|
|
||||||
return {"FINISHED"}
|
|
||||||
@@ -507,32 +507,15 @@ class BIMProjectProperties(PropertyGroup):
|
|||||||
yield link
|
yield link
|
||||||
|
|
||||||
|
|
||||||
prev_measurement_type = ""
|
|
||||||
|
|
||||||
|
|
||||||
def measurement_type_update(self, context):
|
|
||||||
global prev_measurement_type
|
|
||||||
# We enable/disable the measure_xyz_dimensions_tool depending on the selected type
|
|
||||||
if prev_measurement_type != self.measurement_type:
|
|
||||||
bpy.ops.bim.measure_xyz_dimensions_tool()
|
|
||||||
else:
|
|
||||||
# toggle to default
|
|
||||||
self.measurement_type = "POLYLINE"
|
|
||||||
prev_measurement_type = self.measurement_type
|
|
||||||
|
|
||||||
|
|
||||||
class MeasureToolSettings(PropertyGroup):
|
class MeasureToolSettings(PropertyGroup):
|
||||||
measurement_type_items = [
|
measurement_type_items = [
|
||||||
("SINGLE", "SINGLE", "Single", "FIXED_SIZE", 1),
|
("SINGLE", "SINGLE", "Single", "FIXED_SIZE", 1),
|
||||||
("POLYLINE", "POLYLINE", "Polyline", "DRIVER_ROTATIONAL_DIFFERENCE", 2),
|
("POLYLINE", "POLYLINE", "Polyline", "DRIVER_ROTATIONAL_DIFFERENCE", 2),
|
||||||
("POLY_AREA", "POLY_AREA", "Poyline Area", "OUTLINER_DATA_LIGHTPROBE", 3),
|
("POLY_AREA", "POLY_AREA", "Poyline Area", "OUTLINER_DATA_LIGHTPROBE", 3),
|
||||||
("FACE_AREA", "FACE_AREA", "Face Area", "FACESEL", 4),
|
("FACE_AREA", "FACE_AREA", "Face Area", "FACESEL", 4),
|
||||||
("XYZ_DIMENSIONS", "XYZ_DIMENSIONS", "XYZ Dimensions", "ORIENTATION_LOCAL", 5),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
measurement_type: bpy.props.EnumProperty(
|
measurement_type: bpy.props.EnumProperty(items=measurement_type_items, default="POLYLINE")
|
||||||
items=measurement_type_items, default="POLYLINE", update=measurement_type_update
|
|
||||||
)
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
measurement_type: Literal["SINGLE", "POLYLINE", "AREA"]
|
measurement_type: Literal["SINGLE", "POLYLINE", "AREA"]
|
||||||
|
|||||||
@@ -108,7 +108,6 @@ class ExploreHotkey(bpy.types.Operator):
|
|||||||
measure_type = bpy.context.scene.MeasureToolSettings.measurement_type
|
measure_type = bpy.context.scene.MeasureToolSettings.measurement_type
|
||||||
if measure_type == "FACE_AREA":
|
if measure_type == "FACE_AREA":
|
||||||
bpy.ops.bim.measure_face_area_tool("INVOKE_DEFAULT")
|
bpy.ops.bim.measure_face_area_tool("INVOKE_DEFAULT")
|
||||||
elif measure_type == "XYZ_DIMENSIONS":
|
|
||||||
pass
|
|
||||||
else:
|
else:
|
||||||
bpy.ops.bim.measure_tool("INVOKE_DEFAULT", measure_type=measure_type)
|
bpy.ops.bim.measure_tool("INVOKE_DEFAULT", measure_type=measure_type)
|
||||||
|
|||||||
@@ -1334,6 +1334,8 @@ class BIM_PT_decorators_overlay(Panel):
|
|||||||
row = col.row(align=True)
|
row = col.row(align=True)
|
||||||
row.prop(model_props, "show_slab_direction", text="Slab Direction")
|
row.prop(model_props, "show_slab_direction", text="Slab Direction")
|
||||||
row = col.row(align=True)
|
row = col.row(align=True)
|
||||||
|
row.prop(model_props, "measure_xyz_dimensions", text="Bounding Box Dimensions")
|
||||||
|
row = col.row(align=True)
|
||||||
row.prop(model_props, "show_cut_decorator", text="Cut Decorator")
|
row.prop(model_props, "show_cut_decorator", text="Cut Decorator")
|
||||||
row.prop(model_props, "show_cut_decorator_fill", text="Fill Cut Decorator")
|
row.prop(model_props, "show_cut_decorator_fill", text="Fill Cut Decorator")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user