diff --git a/src/blenderbim/blenderbim/bim/data/templates/view-title.svg b/src/blenderbim/blenderbim/bim/data/templates/view-title.svg
index 302826ec61..9bfad5dc85 100644
--- a/src/blenderbim/blenderbim/bim/data/templates/view-title.svg
+++ b/src/blenderbim/blenderbim/bim/data/templates/view-title.svg
@@ -70,7 +70,7 @@
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.96055365px;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.26458332px"
y="103.10933"
x="32.822662"
- id="tspan857">{{no}}
+ id="tspan857">{{Identification}}
{{name}}
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.54325247px;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:start;text-anchor:start;stroke-width:0.26458329px">{{Name}}
{{scale}}
+ id="tspan865">{{Scale}}
diff --git a/src/blenderbim/blenderbim/bim/module/drawing/prop.py b/src/blenderbim/blenderbim/bim/module/drawing/prop.py
index 07e5b9b626..a0935d6ac7 100644
--- a/src/blenderbim/blenderbim/bim/module/drawing/prop.py
+++ b/src/blenderbim/blenderbim/bim/module/drawing/prop.py
@@ -72,8 +72,10 @@ def update_diagram_scale(self, context):
scale = self.diagram_scale
if scale == "CUSTOM":
scale = self.custom_diagram_scale
- scale = scale.split("|")[1]
- element = tool.Ifc.get_entity(context.scene.camera)
+ if "|" not in scale:
+ return
+ human_scale, scale = scale.split("|")
+ element = tool.Ifc.get_entity(context.scene.active_object)
if not element:
return
pset = ifcopenshell.util.element.get_psets(element).get("EPset_Drawing")
@@ -81,7 +83,9 @@ def update_diagram_scale(self, context):
pset = tool.Ifc.get().by_id(pset["id"])
else:
pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element, name="EPset_Drawing")
- ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Scale": scale})
+ ifcopenshell.api.run(
+ "pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Scale": scale, "HumanScale": human_scale}
+ )
def get_diagram_scales(self, context):
diff --git a/src/blenderbim/blenderbim/bim/module/drawing/sheeter.py b/src/blenderbim/blenderbim/bim/module/drawing/sheeter.py
index 3c5779d3a0..95dc0b8da7 100644
--- a/src/blenderbim/blenderbim/bim/module/drawing/sheeter.py
+++ b/src/blenderbim/blenderbim/bim/module/drawing/sheeter.py
@@ -180,7 +180,7 @@ class SheetBuilder:
root = tree.getroot()
self.build_titleblock(root, sheet)
- self.build_drawings(root, sheet_name)
+ self.build_drawings(root, sheet)
self.build_schedules(root.findall('{http://www.w3.org/2000/svg}g[@data-type="schedule"]'))
with open(os.path.join(self.data_dir, "build", sheet_name, f"{sheet_name}.svg"), "wb") as output:
@@ -192,8 +192,15 @@ class SheetBuilder:
titleblock.append(self.parse_embedded_svg(image, sheet.get_info()))
titleblock.remove(image)
- def build_drawings(self, root, sheet_name):
+ def build_drawings(self, root, sheet):
+ sheet_name = tool.Drawing.get_sheet_filename(sheet)
+ references = tool.Drawing.get_document_references(sheet)
+ drawing_references = {tool.Drawing.get_reference_element(r): r for r in references}
+
for view in root.findall('{http://www.w3.org/2000/svg}g[@data-type="drawing"]'):
+ drawing = [d for d in drawing_references.keys() if d and d.GlobalId == view.attrib["data-guid"]][0]
+ reference = drawing_references[drawing]
+
images = view.findall("{http://www.w3.org/2000/svg}image")
background = None
@@ -208,8 +215,6 @@ class SheetBuilder:
elif image.attrib["data-type"] == "view-title":
view_title = image
- self.scale = "NTS"
-
if foreground is not None:
view.append(self.parse_embedded_svg(foreground, {}))
@@ -219,12 +224,11 @@ class SheetBuilder:
if view_title is not None:
foreground_path = self.get_href(foreground)
- view.append(
- self.parse_embedded_svg(
- view_title,
- {"no": 1, "name": ntpath.basename(foreground_path)[0:-4], "scale": self.scale},
- )
- )
+ data = reference.get_info()
+ if not data["Name"]:
+ data["Name"] = ntpath.basename(foreground_path)[0:-4]
+ data["Scale"] = tool.Drawing.get_drawing_human_scale(drawing)
+ view.append(self.parse_embedded_svg(view_title, data))
for image in images:
view.remove(image)
diff --git a/src/blenderbim/blenderbim/core/drawing.py b/src/blenderbim/blenderbim/core/drawing.py
index ac43fd3323..845d35ed89 100644
--- a/src/blenderbim/blenderbim/core/drawing.py
+++ b/src/blenderbim/blenderbim/core/drawing.py
@@ -115,7 +115,7 @@ def add_drawing(ifc, collector, drawing, target_view=None, location_hint=None):
ifc.run("group.assign_group", group=group, product=element)
collector.assign(camera)
pset = ifc.run("pset.add_pset", product=element, name="EPset_Drawing")
- ifc.run("pset.edit_pset", pset=pset, properties={"TargetView": target_view, "Scale": "1/100"})
+ ifc.run("pset.edit_pset", pset=pset, properties={"TargetView": target_view, "Scale": "1/100", "HumanScale": "1:100"})
drawing.import_drawings()
diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py
index 5dd7d8022a..e01bd58bea 100644
--- a/src/blenderbim/blenderbim/tool/drawing.py
+++ b/src/blenderbim/blenderbim/tool/drawing.py
@@ -291,24 +291,17 @@ class Drawing(blenderbim.core.tool.Drawing):
if not new.is_expanded:
continue
- if tool.Ifc.get_schema() == "IFC2X3":
- references = sheet.DocumentReferences or []
- else:
- references = sheet.HasDocumentReferences or []
-
- for reference in references:
+ for reference in cls.get_document_references(sheet):
new = props.sheets.add()
new.ifc_definition_id = reference.id()
new.is_sheet = False
if tool.Ifc.get_schema() == "IFC2X3":
new.identification = reference.ItemReference or "X"
- element = [
- r for r in tool.Ifc.by_type("IfcRelAssociatesDocument") if r.RelatingDocument == reference
- ][0].RelatedObjects[0]
else:
new.identification = reference.Identification or "X"
- element = reference.DocumentRefForObjects[0].RelatedObjects[0]
+
+ element = cls.get_reference_element(reference)
new.name = element.Name
new.reference_type = "DRAWING"
@@ -720,3 +713,21 @@ class Drawing(blenderbim.core.tool.Drawing):
if grid_obj.matrix_world != obj.matrix_world:
bpy.ops.bim.update_representation(obj=obj.name)
tool.Geometry.record_object_position(obj)
+
+ @classmethod
+ def get_document_references(cls, document):
+ if tool.Ifc.get_schema() == "IFC2X3":
+ return document.DocumentReferences or []
+ return document.HasDocumentReferences or []
+
+ @classmethod
+ def get_reference_element(cls, reference):
+ if tool.Ifc.get_schema() == "IFC2X3":
+ return [
+ r for r in tool.Ifc.by_type("IfcRelAssociatesDocument") if r.RelatingDocument == reference
+ ][0].RelatedObjects[0]
+ return reference.DocumentRefForObjects[0].RelatedObjects[0]
+
+ @classmethod
+ def get_drawing_human_scale(cls, drawing):
+ return ifcopenshell.util.element.get_psets(drawing)["EPset_Drawing"]["HumanScale"]