Simplicial subcomplex of a complex represented by a skeleton/blockers pair. More...
#include <Skeleton_blocker_sub_complex.h>
Public Member Functions | |
Vertex_handle | add_vertex (Root_vertex_handle global) |
void | add_edge (Root_vertex_handle v1_root, Root_vertex_handle v2_root) |
void | add_blocker (const Root_simplex_handle &blocker_root) |
void | make_restricted_complex (const ComplexType &parent_complex, const Simplex_handle &simplex) |
void | clear () |
boost::optional< Vertex_handle > | get_address (Root_vertex_handle global) const |
std::vector< boost::optional < Vertex_handle > > | get_addresses (const Root_simplex_handle &s) const |
![]() | |
Link_complex | link (Vertex_handle v) const |
Link_complex | link (Edge_handle edge) const |
Link_complex | link (const Simplex_handle &simplex) const |
boost::optional< Simplex_handle > | get_simplex_address (const Root_simplex_handle &s) const |
Compute the local vertices of 's' in the current complex If one of them is not present in the complex then the return value is uninitialized. | |
Root_simplex_handle | get_id (const Simplex_handle &local_simplex) const |
returns a simplex with vertices which are the id of vertices of the argument. | |
virtual bool | contains (const Simplex_handle &s) const |
returns true iff the simplex s belongs to the simplicial complex. | |
int | num_connected_components () const |
returns the number of connected components in the graph of the 1-skeleton. | |
bool | is_cone () const |
Test if the complex is a cone. More... | |
Vertex_handle | operator[] (Root_vertex_handle global) const |
Return a local Vertex_handle of a vertex given a global one. More... | |
Graph_vertex & | operator[] (Vertex_handle address) |
Return the vertex node associated to local Vertex_handle. More... | |
const Graph_vertex & | operator[] (Vertex_handle address) const |
Return the vertex node associated to local Vertex_handle. More... | |
Vertex_handle | add_vertex () |
Adds a vertex to the simplicial complex and returns its Vertex_handle. | |
void | remove_vertex (Vertex_handle address) |
Remove a vertex from the simplicial complex. More... | |
bool | contains_vertex (Vertex_handle u) const |
bool | contains_vertex (Root_vertex_handle u) const |
bool | contains_vertices (const Simplex_handle &sigma) const |
virtual boost::optional < Vertex_handle > | get_address (Root_vertex_handle id) const |
Given an Id return the address of the vertex having this Id in the complex. More... | |
Root_vertex_handle | get_id (Vertex_handle local) const |
Vertex_handle | convert_handle_from_another_complex (const Skeleton_blocker_complex &other, Vertex_handle vh_in_other) const |
Convert an address of a vertex of a complex to the address in the current complex. More... | |
int | degree (Vertex_handle local) const |
return the graph degree of a vertex. | |
boost::optional< Edge_handle > | operator[] (const std::pair< Vertex_handle, Vertex_handle > &ab) const |
return an edge handle if the two vertices forms an edge in the complex | |
Graph_edge & | operator[] (Edge_handle edge_handle) |
returns the stored node associated to an edge | |
const Graph_edge & | operator[] (Edge_handle edge_handle) const |
returns the stored node associated to an edge | |
Vertex_handle | first_vertex (Edge_handle edge_handle) const |
returns the first vertex of an edge More... | |
Vertex_handle | second_vertex (Edge_handle edge_handle) const |
returns the first vertex of an edge More... | |
Simplex_handle | get_vertices (Edge_handle edge_handle) const |
returns the simplex made with the two vertices of the edge More... | |
Edge_handle | add_edge (Vertex_handle a, Vertex_handle b) |
Adds an edge between vertices a and b and all its cofaces. | |
void | add_edges (const Simplex_handle &sigma) |
Adds all edges and their cofaces of a simplex to the simplicial complex. | |
virtual Edge_handle | remove_edge (Vertex_handle a, Vertex_handle b) |
Removes an edge from the simplicial complex and all its cofaces. More... | |
void | remove_edge (Edge_handle edge) |
Removes edge and its cofaces from the simplicial complex. | |
void | keep_only_vertices () |
The complex is reduced to its set of vertices. All the edges and blockers are removed. | |
bool | contains_edge (Vertex_handle a, Vertex_handle b) const |
bool | contains_edges (const Simplex_handle &sigma) const |
std::string | to_string () const |
std::string | vertices_to_string () const |
std::string | edges_to_string () const |
std::string | blockers_to_string () const |
bool | is_popable_blocker (Blocker_handle sigma) const |
void | remove_popable_blockers () |
void | remove_popable_blockers (Vertex_handle v) |
void | remove_all_popable_blockers (Vertex_handle v) |
Removes all the popable blockers of the complex passing through v and delete them. Also remove popable blockers in the neighborhood if they became popable. | |
void | remove_star (Vertex_handle v) |
void | remove_star (Vertex_handle a, Vertex_handle b) |
void | remove_star (Edge_handle e) |
void | remove_star (const Simplex_handle &sigma) |
void | add_simplex (const Simplex_handle &sigma) |
add a maximal simplex plus all its cofaces. More... | |
simplifiable_status | is_remove_star_homotopy_preserving (const Simplex_handle &simplex) |
virtual contractible_status | is_contractible () const |
Test if the complex is reducible using a strategy defined in the class (by default it tests if the complex is a cone) More... | |
Complex_vertex_range | vertex_range () const |
Returns a Complex_vertex_range over all vertices of the complex. | |
Complex_neighbors_vertices_range | vertex_range (Vertex_handle v) const |
Returns a Complex_edge_range over all edges of the simplicial complex that passes trough v. | |
Complex_edge_range | edge_range () const |
Returns a Complex_edge_range over all edges of the simplicial complex. | |
Complex_edge_around_vertex_range | edge_range (Vertex_handle v) const |
Returns a Complex_edge_range over all edges of the simplicial complex that passes through 'v'. | |
Complex_triangle_around_vertex_range | triangle_range (Vertex_handle v) const |
Range over triangles around a vertex of the simplicial complex. Methods .begin() and .end() return a Triangle_around_vertex_iterator. | |
Complex_triangle_range | triangle_range () const |
Range over triangles of the simplicial complex. Methods .begin() and .end() return a Triangle_around_vertex_iterator. | |
Complex_simplex_around_vertex_range | simplex_range (Vertex_handle v) const |
Returns a Complex_simplex_around_vertex_range over all the simplices around a vertex of the complex. | |
Complex_simplex_range | simplex_range () const |
Returns a Complex_simplex_range over all the simplices of the complex. | |
Skeleton_blocker_complex (int num_vertices_=0, Visitor *visitor_=NULL) | |
constructs a simplicial complex with a given number of vertices and a visitor. | |
template<typename SimpleHandleOutputIterator > | |
Skeleton_blocker_complex (SimpleHandleOutputIterator simplex_begin, SimpleHandleOutputIterator simplex_end, bool is_flag_complex=false, Visitor *visitor_=NULL) | |
Constructor with a list of simplices. More... | |
Skeleton_blocker_complex (const Skeleton_blocker_complex ©) | |
Skeleton_blocker_complex & | operator= (const Skeleton_blocker_complex ©) |
bool | operator== (const Skeleton_blocker_complex &other) const |
bool | operator!= (const Skeleton_blocker_complex &other) const |
virtual | ~Skeleton_blocker_complex () |
void | set_visitor (Visitor *other_visitor) |
allows to change the visitor. | |
Complex_blocker_around_vertex_range | blocker_range (Vertex_handle v) |
Returns a range of the blockers of the complex passing through a vertex. | |
Const_complex_blocker_around_vertex_range | const_blocker_range (Vertex_handle v) const |
Returns a range of the blockers of the complex passing through a vertex. | |
Complex_blocker_range | blocker_range () |
Returns a range of the blockers of the complex. | |
Const_complex_blocker_range | const_blocker_range () const |
Returns a range of the blockers of the complex. | |
Blocker_handle | add_blocker (const Simplex_handle &blocker) |
Adds the simplex to the set of blockers and returns a Blocker_handle toward it if was not present before and 0 otherwise. | |
void | remove_blocker (const Blocker_handle sigma) |
Removes the simplex from the set of blockers. More... | |
void | remove_blockers () |
Remove all blockers, in other words, it expand the simplicial complex to the smallest flag complex that contains it. | |
void | delete_blocker (Blocker_handle sigma) |
bool | contains_blocker (const Blocker_handle s) const |
bool | contains_blocker (const Simplex_handle &s) const |
bool | link_condition (Vertex_handle a, Vertex_handle b, bool ignore_popable_blockers=false) const |
bool | link_condition (Edge_handle e, bool ignore_popable_blockers=false) const |
void | contract_edge (Edge_handle edge) |
void | contract_edge (Vertex_handle a, Vertex_handle b) |
Additional Inherited Members | |
![]() | |
typedef SkeletonBlockerDS::Graph_vertex | Graph_vertex |
The type of stored vertex node, specified by the template SkeletonBlockerDS. | |
typedef SkeletonBlockerDS::Graph_edge | Graph_edge |
The type of stored edge node, specified by the template SkeletonBlockerDS. | |
typedef SkeletonBlockerDS::Vertex_handle | Vertex_handle |
The type of an handle to a vertex of the complex. | |
typedef Skeleton_blocker_simplex < Vertex_handle > | Simplex_handle |
A ordered set of integers that represents a simplex. | |
typedef Simplex_handle * | Blocker_handle |
Handle to a blocker of the complex. | |
typedef boost::graph_traits < Graph >::edge_descriptor | Edge_handle |
Handle to an edge of the complex. | |
enum | simplifiable_status |
enum | contractible_status |
typedef Vertex_iterator < Skeleton_blocker_complex > | Complex_vertex_iterator |
typedef boost::iterator_range < Complex_vertex_iterator > | Complex_vertex_range |
typedef Neighbors_vertices_iterator < Skeleton_blocker_complex > | Complex_neighbors_vertices_iterator |
typedef boost::iterator_range < Complex_neighbors_vertices_iterator > | Complex_neighbors_vertices_range |
typedef Edge_iterator < Skeleton_blocker_complex > | Complex_edge_iterator |
typedef boost::iterator_range < Complex_edge_iterator > | Complex_edge_range |
typedef Edge_around_vertex_iterator < Skeleton_blocker_complex > | Complex_edge_around_vertex_iterator |
typedef boost::iterator_range < Complex_edge_around_vertex_iterator > | Complex_edge_around_vertex_range |
typedef Triangle_around_vertex_iterator < Skeleton_blocker_complex, Superior_link > | Superior_triangle_around_vertex_iterator |
typedef boost::iterator_range < Triangle_around_vertex_iterator < Skeleton_blocker_complex, Link > > | Complex_triangle_around_vertex_range |
typedef boost::iterator_range < Triangle_iterator < Skeleton_blocker_complex > > | Complex_triangle_range |
typedef Triangle_iterator < Skeleton_blocker_complex > | Complex_triangle_iterator |
typedef Simplex_around_vertex_iterator < Skeleton_blocker_complex, Link > | Complex_simplex_around_vertex_iterator |
typedef boost::iterator_range < Complex_simplex_around_vertex_iterator > | Complex_simplex_around_vertex_range |
Range over the simplices of the simplicial complex around a vertex. Methods .begin() and .end() return a Complex_simplex_around_vertex_iterator. | |
typedef Simplex_iterator < Skeleton_blocker_complex > | Complex_simplex_iterator |
typedef boost::iterator_range < Complex_simplex_iterator > | Complex_simplex_range |
Simplicial subcomplex of a complex represented by a skeleton/blockers pair.
Stores a subcomplex of a simplicial complex. To simplify explanations below, we will suppose that :
One vertex of K may exists in L but with a different address. To be able to locate the vertices in K from vertices of L, the class stores a map 'adresses' between vertices of K and vertices of L.
Note that the type for handle of vertices of L is 'Vertex_handle' and the type for handle of vertices of K is 'Root_vertex_handle'.
The template ComplexType is type of the root complex. It allows to know if the subcomplex is geometric or not. It has to be either 'Skeleton_blockers_complex' or 'Skeleton_blockers_geometric_complex'.
|
inline |
Add a blocker to the sub-complex. It assumes that all vertices of blocker_root are present in the sub-complex.
|
inline |
Add an edge (v1_root,v2_root) to the sub-complex. It assumes that both vertices corresponding to v1_root and v2_root are present in the sub-complex.
|
inline |
Add a vertex 'global' of K to L. When added to L, this vertex will receive another number, addresses(global), its local adress. return the adress where the vertex lay on L. The vertex corresponding to 'global' must not be already present in the complex.
|
inlinevirtual |
Clears the simplicial complex. After a call to this function, blockers are destroyed. The 1-skeleton and the set of blockers are both empty.
Reimplemented from Gudhi::skbl::Skeleton_blocker_complex< SkeletonBlockerDS >.
|
inline |
Compute the local vertex in L corresponding to the vertex global in K. runs in O(log n) if n = num_vertices()
|
inline |
Allocates a simplex in L corresponding to the simplex s in K with its local adresses and returns an AddressSimplex. same as get_address except that it will return a simplex in any case. The vertices that were not found are not added.
|
inline |
Constructs the restricted complex of 'parent_complex' to vertices of 'simplex'.