diff --git a/src/blenderbim/blenderbim/bim/module/drawing/operator.py b/src/blenderbim/blenderbim/bim/module/drawing/operator.py index a1913c4ff2..aeadfaff80 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/operator.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/operator.py @@ -635,14 +635,8 @@ class RemoveDrawingFromSheet(bpy.types.Operator): def execute(self, context): reference = tool.Ifc.get().by_id(self.reference) - if tool.Ifc.get_schema() == "IFC2X3": - sheet = reference.ReferenceToDocument[0] - drawing = [r for r in tool.Ifc.by_type("IfcRelAssociatesDocument") if r.RelatingDocument == reference][ - 0 - ].RelatedObjects[0] - else: - sheet = reference.ReferencedDocument - drawing = reference.DocumentRefForObjects[0].RelatedObjects[0] + sheet = tool.Drawing.get_reference_sheet(reference) + drawing = tool.Drawing.get_reference_element(reference) tool.Ifc.run("document.unassign_document", product=drawing, document=reference) tool.Ifc.run("document.remove_reference", reference=reference) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py index b13656735c..2fe5bc6944 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py @@ -453,9 +453,23 @@ class SvgWriter: (symbol_position * self.scale)[1], ) - self.svg.add(self.svg.use("#section-arrow", insert=tuple(symbol_position * self.scale), transform=transform)) + self.svg.add( + self.svg.use("#section-arrow", insert=tuple(symbol_position * self.scale), transform=transform) + ) self.svg.add(self.svg.use("#section-tag", insert=tuple(symbol_position * self.scale))) + reference_id, sheet_id = self.get_reference_and_sheet_id_from_annotation(tool.Ifc.get_entity(obj)) + text_position = list(symbol_position * self.scale) + text_style = { + "font-size": annotation.Annotator.get_svg_text_size(2.5), + "font-family": "OpenGost Type B TT", + "text-anchor": "middle", + "alignment-baseline": "middle", + "dominant-baseline": "middle", + } + self.svg.add(self.svg.text(reference_id, insert=(text_position[0], text_position[1] - 2.5), **text_style)) + self.svg.add(self.svg.text(sheet_id, insert=(text_position[0], text_position[1] + 2.5), **text_style)) + def draw_elevation_annotation(self, obj): x_offset = self.raw_width / 2 y_offset = self.raw_height / 2 @@ -475,6 +489,34 @@ class SvgWriter: self.svg.add(self.svg.use("#elevation-arrow", insert=tuple(symbol_position * self.scale), transform=transform)) self.svg.add(self.svg.use("#elevation-tag", insert=tuple(symbol_position * self.scale))) + reference_id, sheet_id = self.get_reference_and_sheet_id_from_annotation(tool.Ifc.get_entity(obj)) + text_position = list(symbol_position * self.scale) + text_style = { + "font-size": annotation.Annotator.get_svg_text_size(2.5), + "font-family": "OpenGost Type B TT", + "text-anchor": "middle", + "alignment-baseline": "middle", + "dominant-baseline": "middle", + } + self.svg.add(self.svg.text(reference_id, insert=(text_position[0], text_position[1] - 2.5), **text_style)) + self.svg.add(self.svg.text(sheet_id, insert=(text_position[0], text_position[1] + 2.5), **text_style)) + + def get_reference_and_sheet_id_from_annotation(self, element): + reference_id = "-" + sheet_id = "-" + drawing = tool.Drawing.get_annotation_element(element) + reference = tool.Drawing.get_drawing_reference(drawing) + if reference: + sheet = tool.Drawing.get_reference_sheet(reference) + if sheet: + if tool.Ifc.get_schema() == "IFC2X3": + reference_id = reference.ItemReference or "-" + sheet_id = sheet.DocumentId or "-" + else: + reference_id = reference.Identification or "-" + sheet_id = sheet.Identification or "-" + return (reference_id, sheet_id) + return ("-", "-") def draw_text_annotation(self, text_obj, position): x_offset = self.raw_width / 2 diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index e01bd58bea..66640599c7 100644 --- a/src/blenderbim/blenderbim/tool/drawing.py +++ b/src/blenderbim/blenderbim/tool/drawing.py @@ -731,3 +731,21 @@ class Drawing(blenderbim.core.tool.Drawing): @classmethod def get_drawing_human_scale(cls, drawing): return ifcopenshell.util.element.get_psets(drawing)["EPset_Drawing"]["HumanScale"] + + @classmethod + def get_annotation_element(cls, element): + for rel in element.HasAssignments: + if rel.is_a("IfcRelAssignsToProduct"): + return rel.RelatingProduct + + @classmethod + def get_drawing_reference(cls, drawing): + for rel in drawing.HasAssociations: + if rel.is_a("IfcRelAssociatesDocument"): + return rel.RelatingDocument + + @classmethod + def get_reference_sheet(cls, reference): + if tool.Ifc.get_schema() == "IFC2X3": + return reference.ReferenceToDocument[0] + return reference.ReferencedDocument