Fix bug where imported types with representations but no instances were not fully linked.

This commit is contained in:
Dion Moult
2021-10-23 18:15:23 +11:00
parent 6d817703aa
commit e779a57a09
3 changed files with 23 additions and 4 deletions
+12 -4
View File
@@ -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):
@@ -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
+6
View File
@@ -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