mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-20 23:36:20 +00:00
#1153 Annotation reference and sheet IDs now implemented in SVG.
This commit is contained in:
@@ -635,14 +635,8 @@ class RemoveDrawingFromSheet(bpy.types.Operator):
|
|||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
reference = tool.Ifc.get().by_id(self.reference)
|
reference = tool.Ifc.get().by_id(self.reference)
|
||||||
if tool.Ifc.get_schema() == "IFC2X3":
|
sheet = tool.Drawing.get_reference_sheet(reference)
|
||||||
sheet = reference.ReferenceToDocument[0]
|
drawing = tool.Drawing.get_reference_element(reference)
|
||||||
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]
|
|
||||||
|
|
||||||
tool.Ifc.run("document.unassign_document", product=drawing, document=reference)
|
tool.Ifc.run("document.unassign_document", product=drawing, document=reference)
|
||||||
tool.Ifc.run("document.remove_reference", reference=reference)
|
tool.Ifc.run("document.remove_reference", reference=reference)
|
||||||
|
|||||||
@@ -453,9 +453,23 @@ class SvgWriter:
|
|||||||
(symbol_position * self.scale)[1],
|
(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)))
|
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):
|
def draw_elevation_annotation(self, obj):
|
||||||
x_offset = self.raw_width / 2
|
x_offset = self.raw_width / 2
|
||||||
y_offset = self.raw_height / 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-arrow", insert=tuple(symbol_position * self.scale), transform=transform))
|
||||||
self.svg.add(self.svg.use("#elevation-tag", insert=tuple(symbol_position * self.scale)))
|
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):
|
def draw_text_annotation(self, text_obj, position):
|
||||||
x_offset = self.raw_width / 2
|
x_offset = self.raw_width / 2
|
||||||
|
|||||||
@@ -731,3 +731,21 @@ class Drawing(blenderbim.core.tool.Drawing):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def get_drawing_human_scale(cls, drawing):
|
def get_drawing_human_scale(cls, drawing):
|
||||||
return ifcopenshell.util.element.get_psets(drawing)["EPset_Drawing"]["HumanScale"]
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user