mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-24 02:08:05 +00:00
Add local orientation operator and UI toggle for colored dimensions
This commit is contained in:
@@ -77,6 +77,7 @@ classes = (
|
|||||||
operator.UpdateItemAttributes,
|
operator.UpdateItemAttributes,
|
||||||
operator.UpdateParametricRepresentation,
|
operator.UpdateParametricRepresentation,
|
||||||
operator.UpdateRepresentation,
|
operator.UpdateRepresentation,
|
||||||
|
operator.BIM_OT_set_local_orientation,
|
||||||
operator.CreateInstance,
|
operator.CreateInstance,
|
||||||
prop.RepresentationItem,
|
prop.RepresentationItem,
|
||||||
prop.RepresentationItemObject,
|
prop.RepresentationItemObject,
|
||||||
@@ -134,6 +135,10 @@ def register():
|
|||||||
|
|
||||||
bpy.types.Object.BIMGeometryProperties = bpy.props.PointerProperty(type=prop.BIMObjectGeometryProperties)
|
bpy.types.Object.BIMGeometryProperties = bpy.props.PointerProperty(type=prop.BIMObjectGeometryProperties)
|
||||||
bpy.types.Scene.BIMGeometryProperties = bpy.props.PointerProperty(type=prop.BIMGeometryProperties)
|
bpy.types.Scene.BIMGeometryProperties = bpy.props.PointerProperty(type=prop.BIMGeometryProperties)
|
||||||
|
bpy.types.Scene.show_colored_dimensions = bpy.props.BoolProperty(name="Show Colored Dimensions", description="Show XYZ dimensions in color", default=False, update=ui.BIM_PT_derived_coordinates.update_show_colored_dimensions)
|
||||||
|
bpy.types.Scene.bonsai_prev_orientation_type = bpy.props.StringProperty(name="Prev Orientation Type")
|
||||||
|
bpy.types.Scene.bonsai_prev_gizmo_translate = bpy.props.BoolProperty(name="Prev Gizmo Translate")
|
||||||
|
|
||||||
bpy.types.VIEW3D_MT_object.append(ui.object_menu)
|
bpy.types.VIEW3D_MT_object.append(ui.object_menu)
|
||||||
bpy.types.OUTLINER_MT_object.append(ui.outliner_menu)
|
bpy.types.OUTLINER_MT_object.append(ui.outliner_menu)
|
||||||
bpy.types.VIEW3D_MT_object_context_menu.append(ui.object_menu)
|
bpy.types.VIEW3D_MT_object_context_menu.append(ui.object_menu)
|
||||||
@@ -214,3 +219,7 @@ def unregister():
|
|||||||
for km, kmi in addon_keymaps:
|
for km, kmi in addon_keymaps:
|
||||||
km.keymap_items.remove(kmi)
|
km.keymap_items.remove(kmi)
|
||||||
addon_keymaps.clear()
|
addon_keymaps.clear()
|
||||||
|
|
||||||
|
del bpy.types.Scene.show_colored_dimensions
|
||||||
|
del bpy.types.Scene._bonsai_prev_orientation_type
|
||||||
|
del bpy.types.Scene._bonsai_prev_gizmo_translate
|
||||||
@@ -3469,3 +3469,32 @@ class CreateInstance(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
bpy.ops.bim.hotkey(hotkey="S_A")
|
bpy.ops.bim.hotkey(hotkey="S_A")
|
||||||
|
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
class BIM_OT_set_local_orientation(bpy.types.Operator):
|
||||||
|
bl_idname = "bim.set_local_orientation"
|
||||||
|
bl_label = "Set Local Orientation"
|
||||||
|
|
||||||
|
def execute(self, context):
|
||||||
|
scene = bpy.context.scene
|
||||||
|
area_3d = next((area for area in bpy.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
|
||||||
|
|
||||||
|
try:
|
||||||
|
if context.scene.show_colored_dimensions:
|
||||||
|
if space_3d:
|
||||||
|
scene.bonsai_prev_orientation_type = scene.transform_orientation_slots[1].type
|
||||||
|
scene.bonsai_prev_gizmo_translate = space_3d.show_gizmo_object_translate
|
||||||
|
scene.transform_orientation_slots[1].type = "LOCAL"
|
||||||
|
space_3d.show_gizmo_object_translate = True
|
||||||
|
|
||||||
|
# Note: You can't color the text, but you could use custom icons or emojis as a visual cue
|
||||||
|
else:
|
||||||
|
if space_3d:
|
||||||
|
if hasattr(scene, "bonsai_prev_orientation_type"):
|
||||||
|
scene.transform_orientation_slots[1].type = scene.bonsai_prev_orientation_type
|
||||||
|
if hasattr(scene, "bonsai_prev_gizmo_translate"):
|
||||||
|
space_3d.show_gizmo_object_translate = scene.bonsai_prev_gizmo_translate
|
||||||
|
|
||||||
|
except Exception:
|
||||||
|
self.report({'WARNING'}, "Could not set transform orientation.")
|
||||||
|
return {'FINISHED'}
|
||||||
@@ -515,6 +515,9 @@ class BIM_PT_derived_coordinates(Panel):
|
|||||||
def poll(cls, context):
|
def poll(cls, context):
|
||||||
return context.active_object is not None
|
return context.active_object is not None
|
||||||
|
|
||||||
|
def update_show_colored_dimensions(self, context):
|
||||||
|
bpy.ops.bim.set_local_orientation()
|
||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
if not DerivedCoordinatesData.is_loaded:
|
if not DerivedCoordinatesData.is_loaded:
|
||||||
DerivedCoordinatesData.load()
|
DerivedCoordinatesData.load()
|
||||||
@@ -525,14 +528,27 @@ class BIM_PT_derived_coordinates(Panel):
|
|||||||
text += "*"
|
text += "*"
|
||||||
row.operator("bim.edit_object_placement", text=text, icon="EXPORT")
|
row.operator("bim.edit_object_placement", text=text, icon="EXPORT")
|
||||||
|
|
||||||
row = self.layout.row()
|
|
||||||
|
# --- XYZ Dimensions with checkbox ---
|
||||||
|
row = self.layout.row(align=True)
|
||||||
row.label(text="XYZ Dimensions")
|
row.label(text="XYZ Dimensions")
|
||||||
|
row.prop(context.scene, "show_colored_dimensions", text="Show Locals Gizmo")
|
||||||
|
|
||||||
row = self.layout.row(align=True)
|
row = self.layout.row(align=True)
|
||||||
row.enabled = False
|
row.enabled = False
|
||||||
row.prop(context.active_object, "dimensions", text="X", index=0, slider=True)
|
area_3d = next((area for area in context.screen.areas if area.type == 'VIEW_3D'), None)
|
||||||
row.prop(context.active_object, "dimensions", text="Y", index=1, slider=True)
|
space_3d = next((space for space in area_3d.spaces if space.type == 'VIEW_3D'), None)
|
||||||
row.prop(context.active_object, "dimensions", text="Z", index=2, slider=True)
|
|
||||||
|
if context.scene.show_colored_dimensions:
|
||||||
|
for axis, icon, idx in [("X", 'STRIP_COLOR_01', 0), ("Y", 'STRIP_COLOR_04', 1), ("Z", 'STRIP_COLOR_05', 2)]:
|
||||||
|
split = row.split(factor=0.30, align=True)
|
||||||
|
split.label(text=axis, icon=icon)
|
||||||
|
split.prop(context.active_object, "dimensions", text="", index=idx)
|
||||||
|
else:
|
||||||
|
|
||||||
|
row.prop(context.active_object, "dimensions", text="X", index=0)
|
||||||
|
row.prop(context.active_object, "dimensions", text="Y", index=1)
|
||||||
|
row.prop(context.active_object, "dimensions", text="Z", index=2)
|
||||||
|
|
||||||
row = self.layout.row(align=True)
|
row = self.layout.row(align=True)
|
||||||
row.label(text="Min Global Z")
|
row.label(text="Min Global Z")
|
||||||
|
|||||||
Reference in New Issue
Block a user