From b18cd37b7f84a9b9e04bb6941c7f2142e8a3e30d Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 7 Mar 2022 11:50:51 +0000 Subject: [PATCH 1/3] 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; +} From fa0a8a2bedbbb28c85b0bc671d28dbcd3cd644e7 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 7 Mar 2022 11:59:06 +0000 Subject: [PATCH 2/3] Triangulation_2: Add an example that stars a conflict zone --- .../CGAL/Delaunay_triangulation_2.h | 6 ++--- .../Triangulation_2/star_conflict_zone.cpp | 25 +++++++++++-------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/Triangulation_2/doc/Triangulation_2/CGAL/Delaunay_triangulation_2.h b/Triangulation_2/doc/Triangulation_2/CGAL/Delaunay_triangulation_2.h index 911caf7983c..45a4fe12c20 100644 --- a/Triangulation_2/doc/Triangulation_2/CGAL/Delaunay_triangulation_2.h +++ b/Triangulation_2/doc/Triangulation_2/CGAL/Delaunay_triangulation_2.h @@ -236,7 +236,7 @@ std::pair get_conflicts_and_boundary(const Point &p, OutputItFaces fit, OutputItBoundaryEdges eit, -Face_handle start) const; +Face_handle start = Face_handle()) const; /*! outputs the faces of the conflict zone of point `p` into an output iterator. @@ -248,7 +248,7 @@ template OutputItFaces get_conflicts (const Point &p, OutputItFaces fit, -Face_handle start) const; +Face_handle start = Face_handle()) const; /*! outputs the boundary edges of the conflict zone of point `p` into an output iterator. @@ -266,7 +266,7 @@ template OutputItBoundaryEdges get_boundary_of_conflicts(const Point &p, OutputItBoundaryEdges eit, -Face_handle start) const; +Face_handle start = Face_handle()) const; /// @} diff --git a/Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp b/Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp index bb42398e09c..2093d144e7b 100644 --- a/Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp +++ b/Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp @@ -22,7 +22,7 @@ int main( ) 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) }; + std::array points = { Point_2(2,2), Point_2(1,0), Point_2(2,2) }; CGAL::spatial_sort(points.begin(), points.end()); @@ -40,19 +40,22 @@ int main( ) std::back_inserter(edges), hint); - // Do something with the faces before the insertion + if(faces.empty()){ + std::cout << "point " << p << " already in the triangulation" << std::endl; + }else{ + // 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 + 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 { + // Do something with the faces after the insertion + Face_circulator fc = dt2.incident_faces(vh), done(fc); + do { fc++; - } while (fc != done); - + } while (fc != done); + } draw(dt2); } return 0; From eba31bec5ea792a2f72f5ebe15ca59fe82fafe22 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 7 Mar 2022 15:12:13 +0100 Subject: [PATCH 3/3] Update Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp Co-authored-by: Sebastien Loriot --- Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp b/Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp index 2093d144e7b..c16f662e081 100644 --- a/Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp +++ b/Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp @@ -31,7 +31,7 @@ int main( ) std::vector faces; std::vector edges; - assert(dt2.dimension() == 2); // precondition of get_conflicts_and_bounda + assert(dt2.dimension() == 2); // precondition of get_conflicts_and_boundary for(const Point_2 p : points){ faces.clear(); // faster than variables in the scope edges.clear();