From b6ddc0d55eb99b01617467f87d77bac3cf1427f3 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 14 Jul 2023 14:46:36 +0500 Subject: [PATCH] avoid IfcSpatialElement errors in ifc2x3 IfcSpatialElement was added only in ifc4 --- src/blenderbim/blenderbim/bim/module/spatial/data.py | 6 +++++- src/blenderbim/blenderbim/tool/geometry.py | 2 +- src/blenderbim/blenderbim/tool/spatial.py | 6 +++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/spatial/data.py b/src/blenderbim/blenderbim/bim/module/spatial/data.py index 9623045536..930a19b84a 100644 --- a/src/blenderbim/blenderbim/bim/module/spatial/data.py +++ b/src/blenderbim/blenderbim/bim/module/spatial/data.py @@ -43,7 +43,11 @@ class SpatialData: @classmethod def containers(cls): results = {} - for container in tool.Ifc.get().by_type("IfcSpatialElement"): + if tool.Ifc.get_schema() == "IFC2X3": + spatial_elements = tool.Ifc.get().by_type("IfcSpatialStructureElement") + else: + spatial_elements = tool.Ifc.get().by_type("IfcSpatialElement") + for container in spatial_elements: results[container.id()] = { "type": container.is_a(), "id": container.id(), diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index 94f135082a..3512539d35 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -99,7 +99,7 @@ class Geometry(blenderbim.core.tool.Geometry): if element.VoidsElements: bpy.ops.bim.remove_opening(opening_id=element.id()) else: - is_spatial = element.is_a("IfcSpatialElement") + is_spatial = element.is_a() in ("IfcSpatialElement", "IfcSpatialStructureElement") if getattr(element, "HasOpenings", None): for rel in element.HasOpenings: bpy.ops.bim.remove_opening(opening_id=rel.RelatedOpeningElement.id()) diff --git a/src/blenderbim/blenderbim/tool/spatial.py b/src/blenderbim/blenderbim/tool/spatial.py index 95369338fd..75f5f20110 100644 --- a/src/blenderbim/blenderbim/tool/spatial.py +++ b/src/blenderbim/blenderbim/tool/spatial.py @@ -52,7 +52,7 @@ class Spatial(blenderbim.core.tool.Spatial): if not structure.is_a("IfcSpatialStructureElement"): return False else: - if not structure.is_a("IfcSpatialElement"): + if not structure.is_a() in ("IfcSpatialElement", "IfcSpatialStructureElement"): return False if not hasattr(element, "ReferencedInStructures"): return False @@ -204,7 +204,7 @@ class Spatial(blenderbim.core.tool.Spatial): parent = tool.Ifc.get().by_type("IfcProject")[0] for object in ifcopenshell.util.element.get_parts(parent) or []: - if object.is_a("IfcSpatialElement"): + if object.is_a() in ("IfcSpatialElement", "IfcSpatialStructureElement"): cls.create_new_storey_li(object, 0) cls.props.is_container_update_enabled = True @@ -223,7 +223,7 @@ class Spatial(blenderbim.core.tool.Spatial): new.has_children = True if new.is_expanded: for related_object in ifcopenshell.util.element.get_parts(element) or []: - if related_object.is_a("IfcSpatialElement"): + if related_object.is_a() in ("IfcSpatialElement", "IfcSpatialStructureElement"): cls.create_new_storey_li(related_object, level_index + 1) @classmethod