From 5ff75569a0ffe2fcb1158d76be544472f1823ae9 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 28 May 2023 17:29:00 +1000 Subject: [PATCH] See #3184. Preserve parametric layerset axis direction hints when changing types. --- src/blenderbim/blenderbim/bim/module/model/slab.py | 10 +++++++++- src/blenderbim/blenderbim/bim/module/model/wall.py | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/slab.py b/src/blenderbim/blenderbim/bim/module/model/slab.py index 8b9efc0ef7..7c9bbceebc 100644 --- a/src/blenderbim/blenderbim/bim/module/model/slab.py +++ b/src/blenderbim/blenderbim/bim/module/model/slab.py @@ -252,9 +252,17 @@ class DumbSlabPlaner: new_material = ifcopenshell.util.element.get_material(settings["relating_type"]) if not new_material or not new_material.is_a("IfcMaterialLayerSet"): return + parametric = ifcopenshell.util.element.get_psets(settings["relating_type"]).get("EPset_Parametric") + layer_set_direction = None + if parametric: + layer_set_direction = parametric.get("LayerSetDirection", layer_set_direction) new_thickness = sum([l.LayerThickness for l in new_material.MaterialLayers]) material = ifcopenshell.util.element.get_material(settings["related_object"]) - if material and material.is_a("IfcMaterialLayerSetUsage") and material.LayerSetDirection == "AXIS3": + if not material or not material.is_a("IfcMaterialLayerSetUsage"): + return + if layer_set_direction: + material.LayerSetDirection = layer_set_direction + if material.LayerSetDirection == "AXIS3": self.change_thickness(settings["related_object"], new_thickness) def change_thickness(self, element, thickness): diff --git a/src/blenderbim/blenderbim/bim/module/model/wall.py b/src/blenderbim/blenderbim/bim/module/model/wall.py index 174fd97e2d..0a43c1d021 100644 --- a/src/blenderbim/blenderbim/bim/module/model/wall.py +++ b/src/blenderbim/blenderbim/bim/module/model/wall.py @@ -699,8 +699,16 @@ class DumbWallPlaner: new_material = ifcopenshell.util.element.get_material(settings["relating_type"]) if not new_material or not new_material.is_a("IfcMaterialLayerSet"): return + parametric = ifcopenshell.util.element.get_psets(settings["relating_type"]).get("EPset_Parametric") + layer_set_direction = None + if parametric: + layer_set_direction = parametric.get("LayerSetDirection", layer_set_direction) material = ifcopenshell.util.element.get_material(settings["related_object"]) - if material and material.is_a("IfcMaterialLayerSetUsage") and material.LayerSetDirection == "AXIS2": + if not material or not material.is_a("IfcMaterialLayerSetUsage"): + return + if layer_set_direction: + material.LayerSetDirection = layer_set_direction + if material.LayerSetDirection == "AXIS2": DumbWallRecalculator().recalculate([obj])