From 08afec34614637b4f3cfb73a6a0f42311229c621 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 28 Oct 2022 22:32:15 +1100 Subject: [PATCH] Support material layer set usage negative direction sense for parametric walls --- src/blenderbim/blenderbim/bim/module/model/data.py | 9 ++++++--- src/blenderbim/blenderbim/tool/model.py | 7 ++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/data.py b/src/blenderbim/blenderbim/bim/module/model/data.py index 079694ac01..9aec066036 100644 --- a/src/blenderbim/blenderbim/bim/module/model/data.py +++ b/src/blenderbim/blenderbim/bim/module/model/data.py @@ -188,14 +188,17 @@ class AuthoringData: if not ifc_class and ifc_classes: ifc_class = ifc_classes[0][0] if ifc_class: - elements = sorted(tool.Ifc.get().by_type(ifc_class), key=lambda s: s.Name) + elements = sorted(tool.Ifc.get().by_type(ifc_class), key=lambda s: s.Name or "Unnamed") results.extend(elements) return results return [] @classmethod def relating_types(cls, ifc_class=None): - return [(str(e.id()), e.Name, e.Description or "") for e in cls.constr_class_entities(ifc_class=ifc_class)] + return [ + (str(e.id()), e.Name or "Unnamed", e.Description or "") + for e in cls.constr_class_entities(ifc_class=ifc_class) + ] @classmethod def relating_types_browser(cls): @@ -331,7 +334,7 @@ class ArrayData: @classmethod def load(cls): cls.is_loaded = True - cls.data = { "parameters": cls.parameters() } + cls.data = {"parameters": cls.parameters()} @classmethod def parameters(cls): diff --git a/src/blenderbim/blenderbim/tool/model.py b/src/blenderbim/blenderbim/tool/model.py index cd2d5acd0d..5aec36bbc1 100644 --- a/src/blenderbim/blenderbim/tool/model.py +++ b/src/blenderbim/blenderbim/tool/model.py @@ -92,14 +92,19 @@ class Model(blenderbim.core.tool.Model): unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) offset = 0.0 thickness = 0.0 + direction_sense = "POSITIVE" material = ifcopenshell.util.element.get_material(element) if material: if material.is_a("IfcMaterialLayerSetUsage"): offset = material.OffsetFromReferenceLine * unit_scale + direction_sense = material.DirectionSense material = material.ForLayerSet if material.is_a("IfcMaterialLayerSet"): thickness = sum([l.LayerThickness for l in material.MaterialLayers]) * unit_scale - return {"thickness": thickness, "offset": offset} + if direction_sense == "NEGATIVE": + thickness *= -1 + offset *= -1 + return {"thickness": thickness, "offset": offset, "direction_sense": direction_sense} @classmethod def get_manual_booleans(cls, element):