From b18cd37b7f84a9b9e04bb6941c7f2142e8a3e30d Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 7 Mar 2022 11:50:51 +0000 Subject: [PATCH] Triangulation_2: Add an example that stars a conflict zone --- .../doc/Triangulation_2/examples.txt | 1 + .../examples/Triangulation_2/CMakeLists.txt | 1 + .../Triangulation_2/star_conflict_zone.cpp | 59 +++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp diff --git a/Triangulation_2/doc/Triangulation_2/examples.txt b/Triangulation_2/doc/Triangulation_2/examples.txt index 459982e56a2..688a58665ae 100644 --- a/Triangulation_2/doc/Triangulation_2/examples.txt +++ b/Triangulation_2/doc/Triangulation_2/examples.txt @@ -22,4 +22,5 @@ \example Triangulation_2/segment_soup_to_polylines.cpp \example Triangulation_2/draw_triangulation_2.cpp \example Triangulation_2/low_dimensional.cpp +\example Triangulation_2/star_conflict_zone.cpp */ diff --git a/Triangulation_2/examples/Triangulation_2/CMakeLists.txt b/Triangulation_2/examples/Triangulation_2/CMakeLists.txt index f5af1d45f31..3c56e972268 100644 --- a/Triangulation_2/examples/Triangulation_2/CMakeLists.txt +++ b/Triangulation_2/examples/Triangulation_2/CMakeLists.txt @@ -17,6 +17,7 @@ endforeach() if(CGAL_Qt5_FOUND) target_link_libraries(draw_triangulation_2 PUBLIC CGAL::CGAL_Basic_viewer) + target_link_libraries(star_conflict_zone PUBLIC CGAL::CGAL_Basic_viewer) else() message( STATUS diff --git a/Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp b/Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp new file mode 100644 index 00000000000..bb42398e09c --- /dev/null +++ b/Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include +#include +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; +typedef K::Point_2 Point_2; +typedef CGAL::Delaunay_triangulation_2 Dt2; +typedef Dt2::Edge Edge; +typedef Dt2::Face_handle Face_handle; +typedef Dt2::Face_circulator Face_circulator; +typedef Dt2::Vertex_handle Vertex_handle; + +int main( ) +{ + Dt2 dt2; + + dt2.insert(Point_2(0,0)); + dt2.insert(Point_2(10,0)); + dt2.insert(Point_2(0,10)); + + std::array points = { Point_2(2,2), Point_2(1,0), Point_2(9,9) }; + + CGAL::spatial_sort(points.begin(), points.end()); + + Face_handle hint; + + std::vector faces; + std::vector edges; + + assert(dt2.dimension() == 2); // precondition of get_conflicts_and_bounda + for(const Point_2 p : points){ + faces.clear(); // faster than variables in the scope + edges.clear(); + dt2.get_conflicts_and_boundary(p, + std::back_inserter(faces), + std::back_inserter(edges), + hint); + + // Do something with the faces before the insertion + + Vertex_handle vh = dt2.star_hole(p, + edges.begin(), edges.end(), + faces.begin(), faces.end()); + hint = vh->face(); // we could also take any element of faces + + // Do something with the faces after the insertion + Face_circulator fc = dt2.incident_faces(vh), done(fc); + do { + fc++; + } while (fc != done); + + draw(dt2); + } + return 0; +}