diff options
author | kintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c> | 2010-02-02 17:39:23 (GMT) |
---|---|---|
committer | kintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c> | 2010-02-02 17:39:23 (GMT) |
commit | 5a8b764ab2342659761ff5202635830e7baea964 (patch) | |
tree | 8993a9c7ec0284f3ea04cf3ba0fad62c00de2af7 /src/dxftess-cgal.cc | |
parent | 234a3bf8efb3a1300ed9b3d2b064003fdf8210b5 (diff) |
Let the known case of polygon intersection spew out an error message instead of crashing
git-svn-id: http://svn.clifford.at/openscad/trunk@412 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'src/dxftess-cgal.cc')
-rw-r--r-- | src/dxftess-cgal.cc | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/dxftess-cgal.cc b/src/dxftess-cgal.cc index 68b85db..2e80fea 100644 --- a/src/dxftess-cgal.cc +++ b/src/dxftess-cgal.cc @@ -10,6 +10,8 @@ #include <CGAL/Delaunay_mesher_no_edge_refinement_2.h> #include <CGAL/Delaunay_mesh_face_base_2.h> #include <CGAL/Delaunay_mesh_criteria_2.h> +#include <CGAL/assertions_behaviour.h> +#include <CGAL/exceptions.h> typedef CGAL::Exact_predicates_inexact_constructions_kernel K; typedef CGAL::Triangulation_vertex_base_2<K> Vb; @@ -100,6 +102,9 @@ void dxf_tesselate(PolySet *ps, DxfData *dxf, double rot, bool up, bool /* do_tr QHash<edge_t,int> edge_to_triangle; QHash<edge_t,int> edge_to_path; + CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION); + try { + // read path data and copy all relevant infos for (int i = 0; i < dxf->paths.count(); i++) { @@ -151,6 +156,14 @@ void dxf_tesselate(PolySet *ps, DxfData *dxf, double rot, bool up, bool /* do_tr } } + } + catch (CGAL::Assertion_exception e) { + PRINTF("ERROR: Polygon intersection detected. Skipping affected polygons."); + CGAL::set_error_behaviour(old_behaviour); + return; + } + CGAL::set_error_behaviour(old_behaviour); + // run delaunay triangulation std::list<CDTPoint> list_of_seeds; CGAL::refine_Delaunay_mesh_2_without_edge_refinement(cdt, |