From 4d03dbe076e0d849e163d7ff37f2d1d0d9f13c99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Tue, 28 Mar 2023 22:42:40 +0200 Subject: [PATCH] Try-Catch the CDT constraint insertions --- .../Hole_filling/Triangulate_hole_polyline.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Hole_filling/Triangulate_hole_polyline.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Hole_filling/Triangulate_hole_polyline.h index 797a6912f26..0bb232eb66b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Hole_filling/Triangulate_hole_polyline.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Hole_filling/Triangulate_hole_polyline.h @@ -1442,12 +1442,20 @@ triangulate_hole_polyline_with_cdt(const PointRange& points, vertices[v->info()] = v; } - for (std::size_t i = 0; i < size; ++i) { - const std::size_t ip = (i + 1) % size; - if (vertices[i] != vertices[ip]) { - cdt.insert_constraint(vertices[i], vertices[ip]); + try + { + for (std::size_t i = 0; i < size; ++i) { + const std::size_t ip = (i + 1) % size; + if (vertices[i] != vertices[ip]) { + cdt.insert_constraint(vertices[i], vertices[ip]); + } } } + catch(const typename CDT::Intersection_of_constraints_exception&) + { + visitor.end_planar_phase(false); + return false; + } // Mark external faces. for (typename CDT::All_faces_iterator fit = cdt.all_faces_begin(),