From ae449574642e84002471ce9c0a720a834f4574da Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 19 Jun 2023 18:01:57 +0500 Subject: [PATCH] Fixed getting filtered spatial elements at import for ifc2x3 #3283 In ifc2x3 IfcProject is not IfcContext because there is no IfcContext in ifc2x3 and it was causing the error below on .ifc import with filtered spatial elements. Also added small refactor Traceback: Error: Python: Traceback (most recent call last): File "\blenderbim\bim\module\project\operator.py", line 595, in execute ifc_importer.execute() File "\blenderbim\bim\import_ifc.py", line 253, in execute self.create_spatial_elements() File "\blenderbim\bim\import_ifc.py", line 688, in create_spatial_elements self.create_generic_elements(self.spatial_elements) File "\blenderbim\bim\import_ifc.py", line 698, in create_generic_elements products = self.create_products(elements) File "\blenderbim\bim\import_ifc.py", line 717, in create_products iterator = ifcopenshell.geom.iterator(settings, self.file, multiprocessing.cpu_count(), include=products) File "\blenderbim\libs\site\packages\ifcopenshell\geom\main.py", line 99, in __init__ raise ValueError("include and exclude need to be an aggregate of IfcProduct?") ValueError: include and exclude need to be an aggregate of IfcProduct? --- src/blenderbim/blenderbim/bim/import_ifc.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index 2b95a36f1f..b91d0e2d51 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -361,7 +361,7 @@ class IfcImporter: while True: results.add(spatial_element) spatial_element = ifcopenshell.util.element.get_aggregate(spatial_element) - if not spatial_element or spatial_element.is_a("IfcContext"): + if not spatial_element or spatial_element.is_a() in ("IfcContext", "IfcProject"): break return results @@ -1342,14 +1342,11 @@ class IfcImporter: obj.BIMObjectProperties.collection = self.project["blender"] def create_collections(self): - if self.ifc_import_settings.collection_mode == "DECOMPOSITION": - self.create_decomposition_collections() - elif self.ifc_import_settings.collection_mode == "SPATIAL_DECOMPOSITION": - self.create_spatial_decomposition_collections() - - def create_decomposition_collections(self): self.create_spatial_decomposition_collections() - self.create_aggregate_collections() + if self.ifc_import_settings.collection_mode == "DECOMPOSITION": + self.create_aggregate_collections() + elif self.ifc_import_settings.collection_mode == "SPATIAL_DECOMPOSITION": + pass def create_spatial_decomposition_collections(self): for rel_aggregate in self.project["ifc"].IsDecomposedBy or []: