diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index 786944334a..2ae36395b8 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -527,6 +527,7 @@ class IfcImporter: try: shape = ifcopenshell.geom.create_shape(self.settings, representation_map.MappedRepresentation) mesh = self.create_mesh(element, shape) + self.link_mesh(shape, mesh) self.meshes[mesh_name] = mesh except: self.ifc_import_settings.logger.error("Failed to generate shape for %s", element) @@ -729,10 +730,7 @@ class IfcImporter: mesh = self.meshes.get(mesh_name) if mesh is None: mesh = self.create_mesh(element, shape) - if "-" in shape.geometry.id: - mesh.BIMMeshProperties.ifc_definition_id = int(shape.geometry.id.split("-")[0]) - else: - mesh.BIMMeshProperties.ifc_definition_id = int(shape.geometry.id) + self.link_mesh(shape, mesh) self.meshes[mesh_name] = mesh else: mesh = None @@ -1422,6 +1420,16 @@ class IfcImporter: self.added_data[element.id()] = obj IfcStore.link_element(element, obj) + def link_mesh(self, shape, mesh): + if hasattr(shape, "geometry"): + geometry = shape.geometry + else: + geometry = shape + if "-" in geometry.id: + mesh.BIMMeshProperties.ifc_definition_id = int(geometry.id.split("-")[0]) + else: + mesh.BIMMeshProperties.ifc_definition_id = int(geometry.id) + class IfcImportSettings: def __init__(self): diff --git a/src/blenderbim/test/bim/feature/project.feature b/src/blenderbim/test/bim/feature/project.feature index e968410146..a658a62659 100644 --- a/src/blenderbim/test/bim/feature/project.feature +++ b/src/blenderbim/test/bim/feature/project.feature @@ -92,6 +92,11 @@ Scenario: Load project elements - load all project elements And the object "IfcBeam/Beam" is in the collection "IfcElementAssembly/Empty" And the object "IfcSlab/Slab" is in the collection "IfcBuildingStorey/Ground Floor" And the object "IfcWall/Wall" is in the collection "IfcBuildingStorey/Level 1" + And the object "IfcSlab/Slab" has data which is an IFC representation + And the object "IfcBeam/Beam" has data which is an IFC representation + And the object "IfcWall/Wall" has data which is an IFC representation + And the object "IfcSlabType/Slab" has data which is an IFC representation + And the object "IfcWallType/Wall" has data which is an IFC representation And "scene.BIMProjectProperties.is_loading" is "False" Scenario: Load project elements - load objects filtered by decomposition diff --git a/src/blenderbim/test/bim/test_feature.py b/src/blenderbim/test/bim/test_feature.py index 74656dbd25..bdd29c10dd 100644 --- a/src/blenderbim/test/bim/test_feature.py +++ b/src/blenderbim/test/bim/test_feature.py @@ -321,6 +321,12 @@ def the_object_name_is_not_an_ifc_element(name): assert id == 0, f"The ID is {id}" +@then(parsers.parse('the object "{name}" has data which is an IFC representation')) +def the_object_name_is_not_an_ifc_element(name): + id = the_object_name_exists(name).data.BIMMeshProperties.ifc_definition_id + assert id != 0, f"The ID is {id}" + + @then(parsers.parse('the material "{name}" is not an IFC material')) def the_material_name_is_not_an_ifc_material(name): id = the_material_name_exists(name).BIMObjectProperties.ifc_definition_id