From 77a2284f8a8a6c0542699d552ac970215c0577ba Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Thu, 4 Jun 2026 21:37:41 +0200 Subject: [PATCH] Re-sew non-manifold operands; interior loop re-orientations affect edge identity #8140 --- src/ifcgeom/kernels/opencascade/OpenCascadeKernel.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/ifcgeom/kernels/opencascade/OpenCascadeKernel.cpp b/src/ifcgeom/kernels/opencascade/OpenCascadeKernel.cpp index e8b672906e..5284a26a5b 100644 --- a/src/ifcgeom/kernels/opencascade/OpenCascadeKernel.cpp +++ b/src/ifcgeom/kernels/opencascade/OpenCascadeKernel.cpp @@ -136,6 +136,17 @@ bool IfcGeom::OpenCascadeKernel::convert_openings(const IfcUtil::IfcBaseEntity* for (auto entity_part : parts) { bool is_manifold = util::is_manifold(entity_part); + if (!is_manifold) { + // force sewing, edge identity might have been mudied by FixAdvFace.FixOrientation.MSG5 to fix interior loop winding order + TopTools_ListOfShape list; + IfcGeom::util::shape_to_face_list(entity_part, list); + IfcGeom::util::create_solid_from_faces(list, entity_part, settings_.get().get(), true); + is_manifold = util::is_manifold(entity_part); + if (is_manifold) { + Logger::Warning("Successfully sewed non-manifold first operand"); + } + } + if (!is_manifold) { if (settings_.get().get()) { BOPAlgo_MakerVolume mv;