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/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..c16f662e081 --- /dev/null +++ b/Triangulation_2/examples/Triangulation_2/star_conflict_zone.cpp @@ -0,0 +1,62 @@ +#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(2,2) }; + + 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_boundary + 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); + + 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 + + // 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; +}