From 4be91c26c4045189f7704c7a3c488afa11e3cc08 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 15 Mar 2026 13:24:56 -0500 Subject: [PATCH] Integrate manual drawing references into annotation tool Adds MANUAL_DRAWING_REFERENCE to the annotation type dropdown. Selecting it shows a dialog to choose elevation or section and optionally assign a target drawing before placement. Tags are protected from regeneration via EPset_Annotation.IsManualDrawingReference. Generated with the assistance of an AI coding tool. --- src/bonsai/bonsai/bim/module/drawing/ui.py | 10 ++++++++++ src/bonsai/bonsai/core/drawing.py | 22 ---------------------- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/ui.py b/src/bonsai/bonsai/bim/module/drawing/ui.py index a6d742c54a..8d769fecb9 100644 --- a/src/bonsai/bonsai/bim/module/drawing/ui.py +++ b/src/bonsai/bonsai/bim/module/drawing/ui.py @@ -555,6 +555,16 @@ class BIM_PT_product_assignments(Panel): assert self.layout assert (obj := context.active_object) + + element = tool.Ifc.get_entity(obj) + if element and tool.Drawing.is_manual_drawing_reference(element): + row = self.layout.row(align=True) + row.label( + text=ProductAssignmentsData.data["relating_product"] or "No Drawing Assigned", icon="IMAGE_DATA" + ) + row.operator("bim.assign_manual_drawing_reference", icon="GREASEPENCIL", text="") + return + props = tool.Drawing.get_object_assigned_product_props(obj) if props.is_editing_product: diff --git a/src/bonsai/bonsai/core/drawing.py b/src/bonsai/bonsai/core/drawing.py index 952261a2c4..cc11ff2833 100644 --- a/src/bonsai/bonsai/core/drawing.py +++ b/src/bonsai/bonsai/core/drawing.py @@ -562,28 +562,6 @@ def assign_manual_drawing_reference( ifc.run("drawing.assign_product", relating_product=drawing, related_object=element) -def add_manual_drawing_reference( - ifc: type[tool.Ifc], - collector: type[tool.Collector], - drawing_tool: type[tool.Drawing], - drawing: ifcopenshell.entity_instance, - annotation_type: str, -) -> bpy.types.Object: - if annotation_type == "ELEVATION": - element = drawing_tool.create_manual_elevation_reference(drawing) - else: # SECTION - target_view = drawing_tool.get_drawing_target_view(drawing) - context = drawing_tool.get_annotation_context(target_view) - if not context: - context = drawing_tool.create_annotation_context(target_view, annotation_type) - element = drawing_tool.create_manual_section_reference(drawing, context) - drawing_tool.set_manual_drawing_reference(element) - ifc.run("group.assign_group", group=drawing_tool.get_drawing_group(drawing), products=[element]) - obj = ifc.get_object(element) - collector.assign(obj) - return obj - - def build_schedule(drawing: type[tool.Drawing], schedule: ifcopenshell.entity_instance) -> None: drawing.create_svg_schedule(schedule) drawing.open_svg(drawing.get_path_with_ext(drawing.get_document_uri(schedule), "svg"))