From 36ca54f3a2c3f13c437fd1201027c9298487f879 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 28 Mar 2024 16:56:54 +1100 Subject: [PATCH] Don't consider borderline points to be inside a shape for more robust protrusion results --- src/ifcgeom/kernels/opencascade/IfcGeomTree.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ifcgeom/kernels/opencascade/IfcGeomTree.h b/src/ifcgeom/kernels/opencascade/IfcGeomTree.h index 20a474960c..985e4e81cd 100644 --- a/src/ifcgeom/kernels/opencascade/IfcGeomTree.h +++ b/src/ifcgeom/kernels/opencascade/IfcGeomTree.h @@ -252,6 +252,10 @@ namespace IfcGeom { */ double at, au, av; if (intersectRayTriangle(ray_origin, ray_vector, ta, tb, tc, at, au, av, false)) { + if (std::abs(at) < 1e-4) { + // The point is basically lying on a face so inside/outside is ambiguous. + return false; + } // At is a signed intersection distance (positive is along +ray_vector) if (at > -1e-5) { total_intersections++;