Skeleton_blocker_geometric_complex.h
1/* This file is part of the Gudhi Library - https://gudhi.inria.fr/ - which is released under MIT.
2 * See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
3 * Author(s): David Salinas
4 *
5 * Copyright (C) 2014 Inria
6 *
7 * Modification(s):
8 * - YYYY/MM Author: Description of the modification
9 */
10
11#ifndef SKELETON_BLOCKER_GEOMETRIC_COMPLEX_H_
12#define SKELETON_BLOCKER_GEOMETRIC_COMPLEX_H_
13
14#include <gudhi/Skeleton_blocker_complex.h>
15#include <gudhi/Skeleton_blocker/Skeleton_blocker_sub_complex.h>
16#include <gudhi/Debug_utils.h>
17
18namespace Gudhi {
19
20namespace skeleton_blocker {
21
27template<typename SkeletonBlockerGeometricDS>
29public Skeleton_blocker_complex<SkeletonBlockerGeometricDS> {
30 public:
31 typedef typename SkeletonBlockerGeometricDS::GT GT;
32
34
37 typedef typename SimplifiableSkeletonblocker::Edge_handle Edge_handle;
38 typedef typename SimplifiableSkeletonblocker::Simplex Simplex;
39
41
42 typedef typename SkeletonBlockerGeometricDS::Point Point;
43
45
49 template<typename PointIterator>
50 explicit Skeleton_blocker_geometric_complex(int num_vertices, PointIterator begin, PointIterator end) {
51 for (auto point = begin; point != end; ++point)
53 }
54
60 template<typename SimpleHandleOutputIterator, typename PointIterator>
62 SimpleHandleOutputIterator simplex_begin, SimpleHandleOutputIterator simplex_end,
63 PointIterator points_begin, PointIterator points_end,
64 bool is_flag_complex = false)
65 : Skeleton_blocker_complex<SkeletonBlockerGeometricDS>(simplex_begin, simplex_end, is_flag_complex) {
66 unsigned current = 0;
67 for (auto point = points_begin; point != points_end; ++point)
68 (*this)[Vertex_handle(current++)].point() = Point(point->begin(), point->end());
69 }
70
76 template<typename SimpleHandleOutputIterator>
78 SimpleHandleOutputIterator simplex_begin, SimpleHandleOutputIterator simplex_end,
79 bool is_flag_complex = false)
80 : Skeleton_blocker_complex<SkeletonBlockerGeometricDS>(simplex_begin, simplex_end, is_flag_complex) { }
81
87 }
88
94 (*this)[ad].point() = point;
95 return ad;
96 }
97
101 const Point& point(Vertex_handle v) const {
102 assert(this->contains_vertex(v));
103 return (*this)[v].point();
104 }
105
110 assert(this->contains_vertex(v));
111 return (*this)[v].point();
112 }
113
114 const Point& point(Root_vertex_handle global_v) const {
115 Vertex_handle local_v((*this)[global_v]);
116 assert(this->contains_vertex(local_v));
117 return (*this)[local_v].point();
118 }
119
120 Point& point(Root_vertex_handle global_v) {
121 Vertex_handle local_v((*this)[global_v]);
122 assert(this->contains_vertex(local_v));
123 return (*this)[local_v].point();
124 }
125
126 typedef Skeleton_blocker_link_complex<Skeleton_blocker_geometric_complex> Geometric_link;
127
132 Geometric_link link(*this, Simplex(v));
133 // we now add the point info
134 add_points_to_link(link);
135 return link;
136 }
137
141 Geometric_link link(const Simplex& simplex) const {
142 Geometric_link link(*this, simplex);
143 // we now add the point info
144 add_points_to_link(link);
145 return link;
146 }
147
151 Geometric_link link(Edge_handle edge) const {
152 Geometric_link link(*this, edge);
153 // we now add the point info
154 add_points_to_link(link);
155 return link;
156 }
157
159
164 return Abstract_link(*this, Simplex(v));
165 }
166
170 Abstract_link abstract_link(const Simplex& simplex) const {
171 return Abstract_link(*this, simplex);
172 }
173
177 Abstract_link abstract_link(Edge_handle edge) const {
178 return Abstract_link(*this, edge);
179 }
180
181 private:
182 void add_points_to_link(Geometric_link& link) const {
183 for (Vertex_handle v : link.vertex_range()) {
184 Root_vertex_handle v_root(link.get_id(v));
185 link.point(v) = (*this).point(v_root);
186 }
187 }
188};
189
190
191template<typename SkeletonBlockerGeometricComplex, typename SimpleHandleOutputIterator, typename PointIterator>
192SkeletonBlockerGeometricComplex make_complex_from_top_faces(
193 SimpleHandleOutputIterator simplex_begin,
194 SimpleHandleOutputIterator simplex_end,
195 PointIterator points_begin,
196 PointIterator points_end,
197 bool is_flag_complex = false) {
198 typedef SkeletonBlockerGeometricComplex SBGC;
199 SkeletonBlockerGeometricComplex complex;
200 unsigned current = 0;
201 complex =
202 make_complex_from_top_faces<SBGC>(simplex_begin, simplex_end, is_flag_complex);
203 for (auto point = points_begin; point != points_end; ++point)
204 // complex.point(Vertex_handle(current++)) = Point(point->begin(),point->end());
205 complex.point(typename SBGC::Vertex_handle(current++)) = typename SBGC::Point(*point);
206 return complex;
207}
208
209} // namespace skeleton_blocker
210
211namespace skbl = skeleton_blocker;
212
213} // namespace Gudhi
214
215#endif // SKELETON_BLOCKER_GEOMETRIC_COMPLEX_H_
Abstract Simplicial Complex represented with a skeleton/blockers pair.
Definition: Skeleton_blocker_complex.h:51
Skeleton_blocker_simplex< Vertex_handle > Simplex
A ordered set of integers that represents a simplex.
Definition: Skeleton_blocker_complex.h:83
Vertex_handle add_vertex()
Adds a vertex to the simplicial complex and returns its Vertex_handle.
Definition: Skeleton_blocker_complex.h:372
Complex_vertex_range vertex_range() const
Returns a Complex_vertex_range over all vertices of the complex.
Definition: Skeleton_blocker_complex.h:1282
Root_vertex_handle get_id(Vertex_handle local) const
Definition: Skeleton_blocker_complex.h:443
boost::graph_traits< Graph >::edge_descriptor Edge_handle
Handle to an edge of the complex.
Definition: Skeleton_blocker_complex.h:114
Class that represents a geometric complex that can be simplified. The class allows access to points o...
Definition: Skeleton_blocker_geometric_complex.h:29
Vertex_handle add_vertex()
Add a vertex to the complex with a default constructed associated point.
Definition: Skeleton_blocker_geometric_complex.h:85
Abstract_link abstract_link(Edge_handle edge) const
Definition: Skeleton_blocker_geometric_complex.h:177
Point & point(Vertex_handle v)
Returns the Point associated to the vertex v.
Definition: Skeleton_blocker_geometric_complex.h:109
Abstract_link abstract_link(Vertex_handle v) const
Definition: Skeleton_blocker_geometric_complex.h:163
Skeleton_blocker_geometric_complex(SimpleHandleOutputIterator simplex_begin, SimpleHandleOutputIterator simplex_end, bool is_flag_complex=false)
Constructor with a list of simplices. Points of every vertex are the point constructed with default c...
Definition: Skeleton_blocker_geometric_complex.h:77
Vertex_handle add_vertex(const Point &point)
Add a vertex to the complex with its associated point.
Definition: Skeleton_blocker_geometric_complex.h:92
Skeleton_blocker_geometric_complex(SimpleHandleOutputIterator simplex_begin, SimpleHandleOutputIterator simplex_end, PointIterator points_begin, PointIterator points_end, bool is_flag_complex=false)
Constructor with a list of simplices.
Definition: Skeleton_blocker_geometric_complex.h:61
Geometric_link link(const Simplex &simplex) const
Definition: Skeleton_blocker_geometric_complex.h:141
const Point & point(Vertex_handle v) const
Returns the Point associated to the vertex v.
Definition: Skeleton_blocker_geometric_complex.h:101
Skeleton_blocker_geometric_complex(int num_vertices, PointIterator begin, PointIterator end)
Definition: Skeleton_blocker_geometric_complex.h:50
Abstract_link abstract_link(const Simplex &simplex) const
Definition: Skeleton_blocker_geometric_complex.h:170
Geometric_link link(Vertex_handle v) const
Definition: Skeleton_blocker_geometric_complex.h:131
Geometric_link link(Edge_handle edge) const
Definition: Skeleton_blocker_geometric_complex.h:151
The type of vertices that are stored the boost graph. A Vertex must be Default Constructible and Equa...
Definition: SkeletonBlockerDS.h:67
Root_vertex_handle and Vertex_handle are similar to global and local vertex descriptor used in boost ...
Definition: SkeletonBlockerDS.h:47
Concept for template class of Skeleton_blocker_geometric_complex . It must specify a GeometryTrait wh...
Definition: SkeletonBlockerGeometricDS.h:28
GeometryTrait GT
Definition: SkeletonBlockerGeometricDS.h:32
GeometryTrait::Point Point
Definition: SkeletonBlockerGeometricDS.h:37
Handle type for the vertices of a cell complex.
Definition: VertexHandle.h:15