diff --git a/src/blenderbim/blenderbim/bim/ifc.py b/src/blenderbim/blenderbim/bim/ifc.py index a375d51529..f5be2ea01f 100644 --- a/src/blenderbim/blenderbim/bim/ifc.py +++ b/src/blenderbim/blenderbim/bim/ifc.py @@ -86,6 +86,7 @@ class IfcStore: ifc_hash = hashlib.md5(ifc_key.encode("utf-8")).hexdigest() IfcStore.cache_path = os.path.join(bpy.context.scene.BIMProperties.data_dir, "cache", f"{ifc_hash}.h5") cache_settings = ifcopenshell.geom.settings() + cache_settings.set(cache_settings.STRICT_TOLERANCE, True) try: IfcStore.cache = ifcopenshell.geom.serializers.hdf5(IfcStore.cache_path, cache_settings) except: diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index 80b3c2d193..d72344c4d5 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -163,8 +163,7 @@ class IfcImporter: self.settings = ifcopenshell.geom.settings() self.settings.set_deflection_tolerance(self.ifc_import_settings.deflection_tolerance) self.settings.set_angular_tolerance(self.ifc_import_settings.angular_tolerance) - # See https://github.com/IfcOpenShell/IfcOpenShell/issues/2053 - # self.settings.set(self.settings.STRICT_TOLERANCE, True) + self.settings.set(self.settings.STRICT_TOLERANCE, True) self.settings_native = ifcopenshell.geom.settings() self.settings_native.set(self.settings_native.INCLUDE_CURVES, True) self.settings_2d = ifcopenshell.geom.settings() diff --git a/src/blenderbim/blenderbim/bim/module/drawing/operator.py b/src/blenderbim/blenderbim/bim/module/drawing/operator.py index 27fa0688fa..305d1080e8 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/operator.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/operator.py @@ -301,12 +301,13 @@ class CreateDrawing(bpy.types.Operator): elements = set(ifc.by_type("IfcElement")) - set(ifc.by_type("IfcOpeningElement")) self.setup_serialiser(ifc) - cache_settings = ifcopenshell.geom.settings(DISABLE_TRIANGULATION=True) cache = IfcStore.get_cache() [cache.remove(guid) for guid in invalidated_guids] if target_view_contexts and elements: - geom_settings = ifcopenshell.geom.settings(DISABLE_TRIANGULATION=True, INCLUDE_CURVES=True) + geom_settings = ifcopenshell.geom.settings( + DISABLE_TRIANGULATION=True, STRICT_TOLERANCE=True, INCLUDE_CURVES=True + ) geom_settings.set_context_ids(target_view_contexts) it = ifcopenshell.geom.iterator(geom_settings, ifc, multiprocessing.cpu_count(), include=elements) it.set_cache(cache) @@ -317,18 +318,14 @@ class CreateDrawing(bpy.types.Operator): elements -= processed if body_contexts and elements: - geom_settings = ifcopenshell.geom.settings( - DISABLE_TRIANGULATION=True, - ) + geom_settings = ifcopenshell.geom.settings(DISABLE_TRIANGULATION=True, STRICT_TOLERANCE=True) geom_settings.set_context_ids(body_contexts) it = ifcopenshell.geom.iterator(geom_settings, ifc, multiprocessing.cpu_count(), include=elements) it.set_cache(cache) for elem in self.yield_from_iterator(it): self.serialiser.write(elem) - geom_settings = ifcopenshell.geom.settings( - DISABLE_TRIANGULATION=True, - ) + geom_settings = ifcopenshell.geom.settings(DISABLE_TRIANGULATION=True, STRICT_TOLERANCE=True) it = ifcopenshell.geom.iterator(geom_settings, ifc, include=[self.camera_element]) for elem in self.yield_from_iterator(it): self.serialiser.write(elem) @@ -345,7 +342,9 @@ class CreateDrawing(bpy.types.Operator): return svg_path def setup_serialiser(self, ifc): - self.svg_settings = ifcopenshell.geom.settings(DISABLE_TRIANGULATION=True, INCLUDE_CURVES=True) + self.svg_settings = ifcopenshell.geom.settings( + DISABLE_TRIANGULATION=True, STRICT_TOLERANCE=True, INCLUDE_CURVES=True + ) self.svg_buffer = ifcopenshell.geom.serializers.buffer() self.serialiser = ifcopenshell.geom.serializers.svg(self.svg_buffer, self.svg_settings) self.serialiser.setFile(ifc)