From 6adf5d957ab1ccc3756d0e502e19b0f412c5da04 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 31 Mar 2025 18:18:06 +0500 Subject: [PATCH] Fix error adding a space boundary (a7509db) --- src/bonsai/bonsai/bim/import_ifc.py | 5 ++++- src/bonsai/bonsai/bim/module/boundary/operator.py | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/bonsai/bonsai/bim/import_ifc.py b/src/bonsai/bonsai/bim/import_ifc.py index 5c36163207..903f0ca6a3 100644 --- a/src/bonsai/bonsai/bim/import_ifc.py +++ b/src/bonsai/bonsai/bim/import_ifc.py @@ -1092,7 +1092,10 @@ class IfcImporter: verts=verts, load_indexed_maps=self.ifc_import_settings.load_indexed_maps, ) - return tool.Loader.slice_layerset_mesh(element, mesh) + # E.g. `create_mesh` is also used for IfcRelSpaceBoundary. + if element.is_a("IfcObjectDefinition"): + return tool.Loader.slice_layerset_mesh(element, mesh) + return mesh except: self.ifc_import_settings.logger.error("Could not create mesh for %s", element) import traceback diff --git a/src/bonsai/bonsai/bim/module/boundary/operator.py b/src/bonsai/bonsai/bim/module/boundary/operator.py index 820112bf9c..14d9987d8a 100644 --- a/src/bonsai/bonsai/bim/module/boundary/operator.py +++ b/src/bonsai/bonsai/bim/module/boundary/operator.py @@ -72,13 +72,16 @@ class Loader: # ConnectionGeometry is optional in IFC schema for some reasons. if not boundary.ConnectionGeometry: return None + assert self.ifc_importer + assert self.operator surface = boundary.ConnectionGeometry.SurfaceOnRelatingElement # Workaround for invalid geometry provided by Revit. See https://github.com/Autodesk/revit-ifc/issues/270 if surface.is_a("IfcCurveBoundedPlane") and not getattr(surface, "InnerBoundaries", None): surface.InnerBoundaries = () try: shape = ifcopenshell.geom.create_shape(self.settings, surface) - mesh = self.ifc_importer.create_mesh(None, shape) + mesh = self.ifc_importer.create_mesh(boundary, shape) + assert mesh tool.Loader.link_mesh(shape, mesh) except RuntimeError: # Fallback solution for invalid geometry provided by Revit. (InnerBoundaries cuting OuterBoundary)