From f77d2f449df278707372b74e8e7ed180741c654c Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 2 Feb 2023 22:55:39 +1100 Subject: [PATCH] Close #2451. Implement georeferenced elevations in drawings. --- .../blenderbim/bim/module/drawing/decoration.py | 13 +++++++++++-- .../blenderbim/bim/module/drawing/svgwriter.py | 8 ++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/decoration.py b/src/blenderbim/blenderbim/bim/module/drawing/decoration.py index 67d65d6cd7..8e8181580f 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/decoration.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/decoration.py @@ -23,6 +23,7 @@ import blf import bgl import math import bmesh +import ifcopenshell import blenderbim.tool as tool import blenderbim.bim.module.drawing.helper as helper from functools import reduce @@ -1150,6 +1151,7 @@ class PlanLevelDecorator(LevelDecorator): """ def draw_labels(self, context, obj, splines): + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) region = context.region region3d = context.region_data for verts in splines: @@ -1160,7 +1162,10 @@ class PlanLevelDecorator(LevelDecorator): dir = p1 - p0 if dir.length < 1: continue - text = "RL " + self.format_value(context, verts[-1].z) + z = verts[-1].z / unit_scale + z = ifcopenshell.util.geolocation.auto_z2e(tool.Ifc.get(), z) + z *= unit_scale + text = "RL " + self.format_value(context, z) self.draw_label(context, text, p0, dir, gap=8, center=False) @@ -1233,6 +1238,7 @@ class SectionLevelDecorator(LevelDecorator): """ def draw_labels(self, context, obj, splines): + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) region = context.region region3d = context.region_data for verts in splines: @@ -1245,7 +1251,10 @@ class SectionLevelDecorator(LevelDecorator): dir = p1 - p0 if dir.length < 1: continue - text = "RL " + self.format_value(context, verts[-1].z) + z = verts[-1].z / unit_scale + z = ifcopenshell.util.geolocation.auto_z2e(tool.Ifc.get(), z) + z *= unit_scale + text = "RL " + self.format_value(context, z) self.draw_label(context, text, p0 + dir.normalized() * 16, -dir, gap=16, center=False) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py index da0a3748fe..b0b48209ce 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py @@ -196,6 +196,10 @@ class SvgWriter: if bpy.context.scene.unit_settings.system == "IMPERIAL": rl = helper.format_distance(rl) else: + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + rl /= unit_scale + rl = ifcopenshell.util.geolocation.auto_z2e(tool.Ifc.get(), rl) + rl *= unit_scale rl = "{:.3f}m".format(rl) text_style = { "font-size": annotation.Annotator.get_svg_text_size(2.5), @@ -600,6 +604,10 @@ class SvgWriter: if bpy.context.scene.unit_settings.system == "IMPERIAL": rl = helper.format_distance(rl) else: + unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + rl /= unit_scale + rl = ifcopenshell.util.geolocation.auto_z2e(tool.Ifc.get(), rl) + rl *= unit_scale rl = "{:.3f}m".format(rl) if projected_points[0].x > projected_points[-1].x: text_anchor = "end"