7#include <CGAL/Delaunay_triangulation.h>
41template<
typename K,
typename SimplicialComplex,
typename Po
intRange>
43 using TDS = CGAL::Triangulation_data_structure<
44 typename K::Dimension,
45 CGAL::Triangulation_vertex<K, typename SimplicialComplex::Vertex_handle>,
46 CGAL::Triangulation_ds_full_cell<void, CGAL::TDS_full_cell_mirror_storage_policy> >;
47 using Triangulation = CGAL::Delaunay_triangulation<K, TDS>;
48 auto pt_it = std::begin(points);
49 auto pt_end = std::end(points);
50 if(pt_it == pt_end)
return;
51 int d = k.point_dimension_d_object()(*pt_it);
55 typedef std::vector<typename Triangulation::Full_cell_handle> Full_cell_h_vector;
56 Full_cell_h_vector cs;
57 std::vector<typename SimplicialComplex::Vertex_handle> splx;
59 for(
int idx = 0; pt_it != pt_end; ++pt_it, ++idx) {
62 typename Triangulation::Locate_type lt;
63 typename Triangulation::Face f(d);
64 typename Triangulation::Facet ft;
65 typename Triangulation::Full_cell_handle s = tri.locate(p, lt, f, ft);
67 if (lt == Triangulation::OUTSIDE_AFFINE_HULL) {
69 tri.insert_outside_affine_hull(p)->data() = idx;
71 else if (lt == Triangulation::ON_VERTEX) {
75 if(tri.current_dimension() == 1) {
76 if(lt == Triangulation::OUTSIDE_CONVEX_HULL) {
79 complex.insert_simplex_and_subfaces({s->vertex(0)->data(), s->vertex(1)->data(), idx});
81 typename Triangulation::Vertex_handle v = tri.tds().insert_in_full_cell(s);
87 std::back_insert_iterator<Full_cell_h_vector> out(cs);
88 typename Triangulation::Facet ft = tri.compute_conflict_zone(p, s, out);
91 bool interrupted =
false;
92 for(
int i = 0; i <= tri.current_dimension(); ++i) {
94 if(tri.is_infinite(c->vertex(i))) { interrupted =
true;
break; }
95 splx.push_back(c->vertex(i)->data());
97 if (interrupted)
continue;
100 complex.insert_simplex_and_subfaces(splx);
102 tri.insert_in_hole(p, cs.begin(), cs.end(), ft)->data() = idx;
108 for(
auto it = tri.finite_full_cells_begin(); it != tri.finite_full_cells_end(); ++it) {
110 for(
int i = 0; i <= tri.current_dimension(); i++) {
111 splx.push_back(it->vertex(i)->data());
113 complex.insert_simplex_and_subfaces(splx);
void construct_incremental_delaunay(K const &k, SimplicialComplex &complex, PointRange const &points)
Definition: Incremental_delaunay.h:42
Gudhi namespace.
Definition: SimplicialComplexForAlpha.h:14