mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-22 21:02:28 +00:00
#2053. Minor fix. Enable strict tolerance everywhere.
This commit is contained in:
@@ -86,6 +86,7 @@ class IfcStore:
|
|||||||
ifc_hash = hashlib.md5(ifc_key.encode("utf-8")).hexdigest()
|
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")
|
IfcStore.cache_path = os.path.join(bpy.context.scene.BIMProperties.data_dir, "cache", f"{ifc_hash}.h5")
|
||||||
cache_settings = ifcopenshell.geom.settings()
|
cache_settings = ifcopenshell.geom.settings()
|
||||||
|
cache_settings.set(cache_settings.STRICT_TOLERANCE, True)
|
||||||
try:
|
try:
|
||||||
IfcStore.cache = ifcopenshell.geom.serializers.hdf5(IfcStore.cache_path, cache_settings)
|
IfcStore.cache = ifcopenshell.geom.serializers.hdf5(IfcStore.cache_path, cache_settings)
|
||||||
except:
|
except:
|
||||||
|
|||||||
@@ -163,8 +163,7 @@ class IfcImporter:
|
|||||||
self.settings = ifcopenshell.geom.settings()
|
self.settings = ifcopenshell.geom.settings()
|
||||||
self.settings.set_deflection_tolerance(self.ifc_import_settings.deflection_tolerance)
|
self.settings.set_deflection_tolerance(self.ifc_import_settings.deflection_tolerance)
|
||||||
self.settings.set_angular_tolerance(self.ifc_import_settings.angular_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 = ifcopenshell.geom.settings()
|
||||||
self.settings_native.set(self.settings_native.INCLUDE_CURVES, True)
|
self.settings_native.set(self.settings_native.INCLUDE_CURVES, True)
|
||||||
self.settings_2d = ifcopenshell.geom.settings()
|
self.settings_2d = ifcopenshell.geom.settings()
|
||||||
|
|||||||
@@ -301,12 +301,13 @@ class CreateDrawing(bpy.types.Operator):
|
|||||||
elements = set(ifc.by_type("IfcElement")) - set(ifc.by_type("IfcOpeningElement"))
|
elements = set(ifc.by_type("IfcElement")) - set(ifc.by_type("IfcOpeningElement"))
|
||||||
|
|
||||||
self.setup_serialiser(ifc)
|
self.setup_serialiser(ifc)
|
||||||
cache_settings = ifcopenshell.geom.settings(DISABLE_TRIANGULATION=True)
|
|
||||||
cache = IfcStore.get_cache()
|
cache = IfcStore.get_cache()
|
||||||
[cache.remove(guid) for guid in invalidated_guids]
|
[cache.remove(guid) for guid in invalidated_guids]
|
||||||
|
|
||||||
if target_view_contexts and elements:
|
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)
|
geom_settings.set_context_ids(target_view_contexts)
|
||||||
it = ifcopenshell.geom.iterator(geom_settings, ifc, multiprocessing.cpu_count(), include=elements)
|
it = ifcopenshell.geom.iterator(geom_settings, ifc, multiprocessing.cpu_count(), include=elements)
|
||||||
it.set_cache(cache)
|
it.set_cache(cache)
|
||||||
@@ -317,18 +318,14 @@ class CreateDrawing(bpy.types.Operator):
|
|||||||
elements -= processed
|
elements -= processed
|
||||||
|
|
||||||
if body_contexts and elements:
|
if body_contexts and elements:
|
||||||
geom_settings = ifcopenshell.geom.settings(
|
geom_settings = ifcopenshell.geom.settings(DISABLE_TRIANGULATION=True, STRICT_TOLERANCE=True)
|
||||||
DISABLE_TRIANGULATION=True,
|
|
||||||
)
|
|
||||||
geom_settings.set_context_ids(body_contexts)
|
geom_settings.set_context_ids(body_contexts)
|
||||||
it = ifcopenshell.geom.iterator(geom_settings, ifc, multiprocessing.cpu_count(), include=elements)
|
it = ifcopenshell.geom.iterator(geom_settings, ifc, multiprocessing.cpu_count(), include=elements)
|
||||||
it.set_cache(cache)
|
it.set_cache(cache)
|
||||||
for elem in self.yield_from_iterator(it):
|
for elem in self.yield_from_iterator(it):
|
||||||
self.serialiser.write(elem)
|
self.serialiser.write(elem)
|
||||||
|
|
||||||
geom_settings = ifcopenshell.geom.settings(
|
geom_settings = ifcopenshell.geom.settings(DISABLE_TRIANGULATION=True, STRICT_TOLERANCE=True)
|
||||||
DISABLE_TRIANGULATION=True,
|
|
||||||
)
|
|
||||||
it = ifcopenshell.geom.iterator(geom_settings, ifc, include=[self.camera_element])
|
it = ifcopenshell.geom.iterator(geom_settings, ifc, include=[self.camera_element])
|
||||||
for elem in self.yield_from_iterator(it):
|
for elem in self.yield_from_iterator(it):
|
||||||
self.serialiser.write(elem)
|
self.serialiser.write(elem)
|
||||||
@@ -345,7 +342,9 @@ class CreateDrawing(bpy.types.Operator):
|
|||||||
return svg_path
|
return svg_path
|
||||||
|
|
||||||
def setup_serialiser(self, ifc):
|
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.svg_buffer = ifcopenshell.geom.serializers.buffer()
|
||||||
self.serialiser = ifcopenshell.geom.serializers.svg(self.svg_buffer, self.svg_settings)
|
self.serialiser = ifcopenshell.geom.serializers.svg(self.svg_buffer, self.svg_settings)
|
||||||
self.serialiser.setFile(ifc)
|
self.serialiser.setFile(ifc)
|
||||||
|
|||||||
Reference in New Issue
Block a user