#include </usr1/tp517/Tumble/trunk/src/tumble/cellcomplex.h>
Inheritance diagram for CellComplex< Vertex, Edge, Face, Tuple >:
Trash_T | trash_ |
int | keep_trash_ |
typedef PersistantHashSet< Cell * > | Trash_T |
Printing | |
void | print (std::ostream &os=std::cout) const |
Print list of Cells in this CellComplex. | |
void | print_statistics (std::ostream &os=std::cout) const |
Print sizes of data structures in this CellComplex. | |
template<class V, class E, class F, class T> | |
std::ostream & | operator<< (std::ostream &stream, const CellComplex< V, E, F, T > &bm) |
Public Types | |
Typedefs | |
typedef PersistantHashSet< Vertex * > | Vertex_Hash_T |
typedef PersistantHashSet< Edge * > | Edge_Hash_T |
typedef PersistantHashSet< Face * > | Face_Hash_T |
typedef PersistantHashMap< std::pair< Vertex *, Edge * >, Vertex *, PairHasher< Vertex *, Edge * > > | Switch0_Hash_T |
typedef PersistantHashMap< Tuple, Edge *, TupleHasher< Tuple > > | Switch1_Hash_T |
typedef PersistantHashMap< std::pair< Edge *, Face * >, Face *, PairHasher< Edge *, Face * > > | Switch2_Hash_T |
typedef PersistantHashSet< Face * > | Inverted_Hash_T |
Public Member Functions | |
CellComplex (PersistantStore &) | |
Constructor. | |
virtual | ~CellComplex () |
Destructor. | |
PersistantStore & | get_store () const |
Get the persistant store. | |
Member booleans | |
bool | is_member (Vertex *) const |
True if Vertex is a member of this CellComplex. | |
bool | is_member (Edge *) const |
True if Edge is a member of this CellComplex. | |
bool | is_member (Face *) const |
True if Face is a member of this CellComplex. | |
bool | is_inverse_handed (Face *) const |
True if Face is a member of this CellComplex. | |
Topological Queries | |
These functions allow one to get information about the toplogical structure relative to a given Cell or Cells. These should be used as much as possible in place of directly accessing the topological stored in the Cells themselves.
Operations that would normally return a list of Cells, append them to an STL data structure instead. This is more efficient and more usefull in most cases. | |
int | lower (Edge *e, std::vector< Vertex * > &vs) |
Append the Vertexs of given Edge to vector. | |
int | lower (Edge *e, std::list< Vertex * > &vs) |
Append the Vertexs of given Edge to list. | |
int | lower (Face *f, std::vector< Edge * > &es) |
Append the Edges of given Face to vector. | |
int | lower (Face *f, std::list< Edge * > &es) |
Append the Edges of given Face to list. | |
int | upper (Edge *e, std::vector< Face * > &fs) |
Append the Faces of given Edge to vector. | |
int | upper (Edge *e, std::list< Face * > &fs) |
Append the Faces of given Edge to list. | |
int | upper (Vertex *v, std::vector< Edge * > &es) |
Append the Edges of given Vertex to vector. | |
int | upper (Vertex *v, std::list< Edge * > &es) |
Append the Edges of given Vertex to list. | |
Vertex * | get_opposite_vertex (Edge *e, Vertex *v) |
Get Vertex opposite from given Vertex along given Edge. | |
Face * | get_opposite_face (Edge *e, Face *f) |
Get Face opposite from given Face. | |
void | enqueue_faces (Vertex *vert, std::deque< Face * > &faces) |
En-queues all faces around a Vertex to a std::deque. | |
void | enqueue_edges (Vertex *vert, std::deque< Edge * > &edges) |
En-queues all Edges around a Vertex to a std::deque. | |
Edge * | find_common_edge (Vertex *v0, Vertex *v1) |
Finds an Edge common to two Vertexs. | |
Edge * | find_common_edge (Face *f0, Face *f1) |
Finds an edge common to two faces. | |
void | find_adjacent_faces (Face *f, std::list< Face * > &faces) |
En-queues all faces adjacent to current face. | |
void | find_adjacent_edges (Edge *e, std::list< Edge * > &edges) |
En-queues all edges of faces that are adjacent to given edge. | |
void | find_adjacent_faces (Face *f, std::deque< Face * > &faces) |
En-queues all faces adjacent to current face. | |
void | find_adjacent_edges (Edge *e, std::deque< Edge * > &edges) |
En-queues all edges of faces that are adjacent to given edge. | |
Topological Navigation | |
These functions allow navigation through the toplogy in an oriented (counter-clockwise) way. We define a Tuple to be oriented correctly if the result of repeatedly calling results in a counter clockwise traversal of the Tuple's Face.
Calling Switch(2,t) over a boundary (thus walking off the complex) will result in a fixed point. The tuple returned will be a copy (use CellTuple==) of the original tuple. | |
Tuple | Switch (int, const Tuple &) const |
Apply a Switch operator to Tuple. | |
Tuple | get_tuple () const |
Get any oriented tuple. | |
Tuple | get_tuple (Face *) const |
Get an oriented tuple with given Face. | |
Tuple | get_tuple (Vertex *, Face *) const |
Get an oriented tuple with given Face and Vertex. | |
Tuple | get_tuple (Edge *, Face *) const |
Get an oriented tuple with given Face and Edge. | |
Tuple | get_tuple (Vertex *) const |
Get an oriented tuple with given Vertex. | |
Tuple | get_tuple (Edge *) const |
Get an oriented tuple with given Edge. | |
Tuple | get_tuple (Vertex *v, Edge *e) const |
Get a possibly unoriented tuple with given Edge and Vertex. | |
int | switch_size (int) const |
Debugging: get the size of a switch hash. At certain times, we will know exactly what size the switch structures should have. Allow assertions on this information. | |
Printing | |
int | get_num_vertices () const |
Vertex_Hash_T::iterator | get_vertexs_begin () const |
Vertex_Hash_T::iterator | get_vertexs_end () const |
Vertex_Hash_T::iterator | get_vertices_begin () const |
Vertex_Hash_T::iterator | get_vertices_end () const |
int | get_num_edges () const |
Edge_Hash_T::iterator | get_edges_begin () const |
Edge_Hash_T::iterator | get_edges_end () const |
int | get_num_faces () const |
Face_Hash_T::iterator | get_faces_begin () const |
Face_Hash_T::iterator | get_faces_end () const |
Iterator Wrappers for Ruby | |
These are very strait forward, but necessary for ruby to iterate
| |
Vertex * | get_next_vertex (typename Vertex_Hash_T::iterator &) const |
Edge * | get_next_edge (typename Edge_Hash_T::iterator &) const |
Face * | get_next_face (typename Face_Hash_T::iterator &) const |
Protected Member Functions | |
Cell Addition/Removal | |
These are functions for adding or removing Cells. Only subclasses can call them. The storage for the new vertex/edge/face is owned by the CellComplex, not by the subclass. | |
virtual void | add_vertex (Vertex *) |
Adds the given Edge to the CellComplex. | |
virtual void | add_edge (Edge *e) |
Adds the given Edge to the CellComplex. | |
virtual void | add_face (Face *, Edge **, int, bool inverse_handed=false) |
Adds the given Face to the CellComplex. | |
virtual void | delete_vertex (Vertex *) |
Remove a vertex and all its super-cells from the CellComplex. | |
virtual void | delete_edge (Edge *) |
Remove a edge and all its super-cells from the CellComplex. | |
virtual void | delete_face (Face *) |
Remove a face from the CellComplex. | |
void | trash_cell (Cell *) |
Don't yet free this memory to avoid pointers getting reused. | |
void | keep_trash () |
Start holding trash. keep_trash and empty_trash nest: you can safely call keep_trash in one algorithm even if another has already called it. | |
void | empty_trash () |
Notify that the current algorithm no longer needs the trash: it is safe to reuse memory again. keep_trash and empty_trash nest: you can safely call keep_trash in one algorithm even if another has already called it. Memory is only deallocated if all nesting levels have emptied their trash. | |
Private Member Functions | |
CellComplex (const CellComplex< Vertex, Edge, Face, Tuple > &other) | |
CellComplex< Vertex, Edge, Face, Tuple > & | operator= (const CellComplex< Vertex, Edge, Face, Tuple > &other) |
Private Attributes | |
Vertex_Hash_T | vertexs |
hash_set of Vertex Cells | |
Edge_Hash_T | edges |
hash_set of Edge Cells | |
Face_Hash_T | faces |
hash_set of Face Cells | |
PersistantMemoryPool< Cell > | pool_ |
Switch0_Hash_T | switch0 |
Map to implement Switch0 operator. | |
Switch1_Hash_T | switch1 |
Map to implement Switch1 operator. | |
Switch2_Hash_T | switch2 |
Map to implement Switch2 operator. | |
Inverted_Hash_T | inverted_faces |
Set of inverted faces. |
tuple= Switch(1, Switch(0, tuple))
will move you around a face.
Furthermore, using the above code, there are two directions the Switch operators could move you, clockwise, or counter-clockwise, depending on the initial tuple. Thus, to remain oriented correctly, we tuples to be oriented correctly is repeated applications of: tuple= Switch(1, Switch(0, tuple))
moves the tuple around in a counter clockwise manner.
When using the various flavors of get_tuple(), they will always return an oriented tuple. The misnamed 'inverted_faces' table is used to indicate whehter the default tuple for a face is correctly oriented, or needs to have its vertex fixed before returning from get_tuple(f). Expect about half of all faces to be "inverted" in this way.
When working with a CellComplex, one uses the get_tuple() and Switch() exclusively for navigation.
Together with the various Cell types the CellComplex holds all the toplogical information of a mesh, it is templated on Vertex, Edge, Face, and Tuple types, and with an appropriate instantiation form the appropriate mesh type.
By instating the CellComplex with BoundaryVertex, BoundaryEdge, BoundaryFace and BoundaryTuple types, we get a BoundaryComplex. Likewise, by instantiation with BezierVertex, BezierEdge, BezierTriangle, and BezierTuple types, we get a BezierComplex.
One important design complex behind the CellComplex and its instantiations is that they act as the memory managers. The BoundaryMesh and BezierMesh classes have methods for adding Cells of various forms, and those should be used over directly interfacing with the CellComplex, as the former take care of creating the Cells. Thus the end user does not need to make special steps to make sure the appropriate Cells are defined once and only once in memory.
One consequence of this is that whenever one gets a handle to a Cell, it is always a pointer, and never a copy. This is important as making changes to copy would not necessarily propagate to the original, and the changes would be lost, also using copies would complicate the memory management. Thus, pointers are used exclusively.
Perhaps one more level of abstraction would be to remove the various Cell classes entirely. The each cell could be represented as a unique integer, and all information, even ControlPoints and DataPoints would be stored in a mapping (cell_id, name)->val. The only problem here is a tradeoff of space and efficiency for style, as the current method is certainly more efficient.
Definition at line 98 of file cellcomplex.h.
typedef PersistantHashSet<Vertex*> CellComplex< Vertex, Edge, Face, Tuple >::Vertex_Hash_T |
Definition at line 147 of file cellcomplex.h.
typedef PersistantHashSet<Edge*> CellComplex< Vertex, Edge, Face, Tuple >::Edge_Hash_T |
Definition at line 148 of file cellcomplex.h.
typedef PersistantHashSet<Face*> CellComplex< Vertex, Edge, Face, Tuple >::Face_Hash_T |
Definition at line 149 of file cellcomplex.h.
typedef PersistantHashMap<std::pair<Vertex*,Edge*>,Vertex*,PairHasher<Vertex*,Edge*> > CellComplex< Vertex, Edge, Face, Tuple >::Switch0_Hash_T |
Definition at line 150 of file cellcomplex.h.
typedef PersistantHashMap<Tuple,Edge*,TupleHasher<Tuple> > CellComplex< Vertex, Edge, Face, Tuple >::Switch1_Hash_T |
Definition at line 151 of file cellcomplex.h.
typedef PersistantHashMap<std::pair<Edge*,Face*>,Face*,PairHasher<Edge*,Face*> > CellComplex< Vertex, Edge, Face, Tuple >::Switch2_Hash_T |
Definition at line 152 of file cellcomplex.h.
typedef PersistantHashSet<Face*> CellComplex< Vertex, Edge, Face, Tuple >::Inverted_Hash_T |
Definition at line 153 of file cellcomplex.h.
typedef PersistantHashSet<Cell*> CellComplex< Vertex, Edge, Face, Tuple >::Trash_T [private] |
For the trash mechanism: store the cells, and store whether to store them.
Definition at line 289 of file cellcomplex.h.
CellComplex< Vertex, Edge, Face, Tuple >::CellComplex | ( | PersistantStore & | ) | [inline] |
CellComplex< Vertex, Edge, Face, Tuple >::~CellComplex | ( | ) | [inline, virtual] |
Destructor.
Free all Vertexs, Edges, and Faces.
Since all other data is STL members they destruct themselves
Definition at line 31 of file cellcomplex_C.h.
CellComplex< Vertex, Edge, Face, Tuple >::CellComplex | ( | const CellComplex< Vertex, Edge, Face, Tuple > & | other | ) | [private] |
PersistantStore & CellComplex< Vertex, Edge, Face, Tuple >::get_store | ( | ) | const [inline] |
Get the persistant store.
Definition at line 42 of file cellcomplex_C.h.
References PersistantHashSet< Key, HashFcn, EqualKey >::get_store(), and CellComplex< Vertex, Edge, Face, Tuple >::vertexs.
Here is the call graph for this function:
CellComplex<Vertex, Edge, Face, Tuple>& CellComplex< Vertex, Edge, Face, Tuple >::operator= | ( | const CellComplex< Vertex, Edge, Face, Tuple > & | other | ) | [private] |
void CellComplex< Vertex, Edge, Face, Tuple >::add_vertex | ( | Vertex * | v | ) | [inline, protected, virtual] |
Adds the given Edge to the CellComplex.
This function will take an allocated Vertex which should already have its ContolPoints and DataPoints set up, and add it to the CellComplex. All topological related tasks and checks are completed here.
v | The Vertex to add |
Definition at line 139 of file cellcomplex_C.h.
References FATAL_ERROR, CellComplex< Vertex, Edge, Face, Tuple >::is_member(), PersistantMemoryPool< Datum >::mark_allocated(), CellComplex< Vertex, Edge, Face, Tuple >::pool_, and CellComplex< Vertex, Edge, Face, Tuple >::vertexs.
Here is the call graph for this function:
void CellComplex< Vertex, Edge, Face, Tuple >::add_edge | ( | Edge * | e | ) | [inline, protected, virtual] |
Adds the given Edge to the CellComplex.
This function will take an allocated Edge which should already have its ContolPoints and DataPoints set up, and add it to the CellComplex. All topological related tasks and checks are completed here. The Vertexs of the Edge must be provided and already in the CellComplex.
e | The Edge to add | |
v1 | The first Vertex of e | |
v2 | The second Vertex of e |
Definition at line 162 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::edges, CellComplex< Vertex, Edge, Face, Tuple >::is_member(), PersistantMemoryPool< Datum >::mark_allocated(), CellComplex< Vertex, Edge, Face, Tuple >::pool_, and CellComplex< Vertex, Edge, Face, Tuple >::switch0.
Here is the call graph for this function:
void CellComplex< Vertex, Edge, Face, Tuple >::add_face | ( | Face * | f, | |
Edge ** | es, | |||
int | num_es, | |||
bool | inverse_handed = false | |||
) | [inline, protected, virtual] |
Adds the given Face to the CellComplex.
This function will take an allocated Face which should already have its ContolPoints and DataPoints set up, and add it to the CellComplex. All topological related tasks and checks are completed here. The edges of the Face must be provided and already in the CellComplex.
Additionally at this point the edges must form a simple cycle.
f | The new face | |
es | Array of Edges of the new Face | |
num_es | Number of Edges | |
inverse_handed | Defaults false, but allows the canonical tuple of this face to be CW instead of CCW |
Definition at line 205 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::faces, FATAL_ERROR, CellComplex< Vertex, Edge, Face, Tuple >::inverted_faces, CellComplex< Vertex, Edge, Face, Tuple >::is_member(), PersistantMemoryPool< Datum >::mark_allocated(), CellComplex< Vertex, Edge, Face, Tuple >::pool_, CellComplex< Vertex, Edge, Face, Tuple >::switch1, and CellComplex< Vertex, Edge, Face, Tuple >::switch2.
Here is the call graph for this function:
void CellComplex< Vertex, Edge, Face, Tuple >::delete_vertex | ( | Vertex * | v | ) | [inline, protected, virtual] |
Remove a vertex and all its super-cells from the CellComplex.
Removes the given Vertex and all its Edges and all their Faces from the CellComplex. This is considered successful if Vertex is NULL. But will raise an error if Vertex is not a member of the CellComplex, as this will have unintended side effects.
v | Vertex to remove |
Reimplemented in BezierMesh, and BoundaryMesh.
Definition at line 299 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::delete_edge(), FATAL_ERROR, CellComplex< Vertex, Edge, Face, Tuple >::is_member(), CellComplex< Vertex, Edge, Face, Tuple >::trash_cell(), and CellComplex< Vertex, Edge, Face, Tuple >::vertexs.
Here is the call graph for this function:
void CellComplex< Vertex, Edge, Face, Tuple >::delete_edge | ( | Edge * | e | ) | [inline, protected, virtual] |
Remove a edge and all its super-cells from the CellComplex.
Removes the given Edge and all its Faces from the CellComplex. This is considered successful if Edge is NULL. But will raise an error if Edge is not a member of the CellComplex, as this will have unintended side effects.
e | Edge to remove |
Reimplemented in BezierMesh, and BoundaryMesh.
Definition at line 322 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::delete_face(), CellComplex< Vertex, Edge, Face, Tuple >::edges, FATAL_ERROR, CellComplex< Vertex, Edge, Face, Tuple >::is_member(), CellComplex< Vertex, Edge, Face, Tuple >::switch0, and CellComplex< Vertex, Edge, Face, Tuple >::trash_cell().
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::delete_vertex().
Here is the call graph for this function:
void CellComplex< Vertex, Edge, Face, Tuple >::delete_face | ( | Face * | f | ) | [inline, protected, virtual] |
Remove a face from the CellComplex.
Removes the given Face from the CellComplex. This is considered successful if Face is NULL. But will raise an error if Face is not a member of the CellComplex, as this will have unintended side effects.
f | Face to remove |
Reimplemented in BezierMesh.
Definition at line 360 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::faces, FATAL_ERROR, CellComplex< Vertex, Edge, Face, Tuple >::inverted_faces, CellComplex< Vertex, Edge, Face, Tuple >::is_member(), CellComplex< Vertex, Edge, Face, Tuple >::switch1, CellComplex< Vertex, Edge, Face, Tuple >::switch2, and CellComplex< Vertex, Edge, Face, Tuple >::trash_cell().
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::delete_edge().
Here is the call graph for this function:
void CellComplex< Vertex, Edge, Face, Tuple >::trash_cell | ( | Cell * | ) | [inline, protected] |
Don't yet free this memory to avoid pointers getting reused.
This is for functions that need to know whether a cell has been gotten rid of or not yet. Using is_member(c) doesn't work if c has been reallocated already.
Definition at line 414 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::keep_trash_, PersistantMemoryPool< Datum >::mark_deleted(), CellComplex< Vertex, Edge, Face, Tuple >::pool_, and CellComplex< Vertex, Edge, Face, Tuple >::trash_.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::delete_edge(), CellComplex< Vertex, Edge, Face, Tuple >::delete_face(), and CellComplex< Vertex, Edge, Face, Tuple >::delete_vertex().
Here is the call graph for this function:
void CellComplex< Vertex, Edge, Face, Tuple >::keep_trash | ( | ) | [inline, protected] |
Start holding trash. keep_trash and empty_trash nest: you can safely call keep_trash in one algorithm even if another has already called it.
Definition at line 430 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::keep_trash_.
void CellComplex< Vertex, Edge, Face, Tuple >::empty_trash | ( | ) | [inline, protected] |
Notify that the current algorithm no longer needs the trash: it is safe to reuse memory again. keep_trash and empty_trash nest: you can safely call keep_trash in one algorithm even if another has already called it. Memory is only deallocated if all nesting levels have emptied their trash.
Definition at line 442 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::keep_trash_, PersistantMemoryPool< Datum >::mark_deleted(), CellComplex< Vertex, Edge, Face, Tuple >::pool_, and CellComplex< Vertex, Edge, Face, Tuple >::trash_.
Here is the call graph for this function:
bool CellComplex< Vertex, Edge, Face, Tuple >::is_member | ( | Vertex * | ) | const [inline] |
True if Vertex is a member of this CellComplex.
Definition at line 457 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::vertexs.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::add_edge(), CellComplex< Vertex, Edge, Face, Tuple >::add_face(), CellComplex< Vertex, Edge, Face, Tuple >::add_vertex(), CellComplex< Vertex, Edge, Face, Tuple >::delete_edge(), CellComplex< Vertex, Edge, Face, Tuple >::delete_face(), and CellComplex< Vertex, Edge, Face, Tuple >::delete_vertex().
bool CellComplex< Vertex, Edge, Face, Tuple >::is_member | ( | Edge * | ) | const [inline] |
True if Edge is a member of this CellComplex.
Definition at line 465 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::edges.
bool CellComplex< Vertex, Edge, Face, Tuple >::is_member | ( | Face * | ) | const [inline] |
True if Face is a member of this CellComplex.
Definition at line 473 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::faces.
bool CellComplex< Vertex, Edge, Face, Tuple >::is_inverse_handed | ( | Face * | ) | const [inline] |
True if Face is a member of this CellComplex.
Definition at line 481 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::inverted_faces.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::get_tuple(), and MeshBinaryOutput::write().
int CellComplex< Vertex, Edge, Face, Tuple >::lower | ( | Edge * | e, | |
std::vector< Vertex * > & | vs | |||
) | [inline] |
Append the Vertexs of given Edge to vector.
This function does not clear the vector, it only appends.
e | The given Edge | |
vs | The std::vector to append to |
Definition at line 512 of file cellcomplex_C.h.
int CellComplex< Vertex, Edge, Face, Tuple >::lower | ( | Edge * | e, | |
std::list< Vertex * > & | vs | |||
) | [inline] |
Append the Vertexs of given Edge to list.
This function does not clear the list, it only appends.
e | The given Edge | |
vs | The std::list to append to |
Definition at line 528 of file cellcomplex_C.h.
int CellComplex< Vertex, Edge, Face, Tuple >::lower | ( | Face * | f, | |
std::vector< Edge * > & | es | |||
) | [inline] |
Append the Edges of given Face to vector.
This function does not clear the vector, it only appends.
f | The given Face | |
es | The std::vector to append to |
Definition at line 544 of file cellcomplex_C.h.
int CellComplex< Vertex, Edge, Face, Tuple >::lower | ( | Face * | f, | |
std::list< Edge * > & | es | |||
) | [inline] |
Append the Edges of given Face to list.
This function does not clear the list, it only appends.
f | The given Face | |
es | The std::list to append to |
Definition at line 563 of file cellcomplex_C.h.
int CellComplex< Vertex, Edge, Face, Tuple >::upper | ( | Edge * | e, | |
std::vector< Face * > & | fs | |||
) | [inline] |
Append the Faces of given Edge to vector.
This function does not clear the vector, it only appends.
e | The given Edge | |
fs | The std::vector to append to |
Definition at line 615 of file cellcomplex_C.h.
int CellComplex< Vertex, Edge, Face, Tuple >::upper | ( | Edge * | e, | |
std::list< Face * > & | fs | |||
) | [inline] |
Append the Faces of given Edge to list.
This function does not clear the list, it only appends.
e | The given Edge | |
fs | The std::list to append to |
Definition at line 640 of file cellcomplex_C.h.
int CellComplex< Vertex, Edge, Face, Tuple >::upper | ( | Vertex * | v, | |
std::vector< Edge * > & | es | |||
) | [inline] |
Append the Edges of given Vertex to vector.
This function does not clear the vector, it only appends.
v | The given Vertex | |
es | The std::vector to append to |
Definition at line 582 of file cellcomplex_C.h.
int CellComplex< Vertex, Edge, Face, Tuple >::upper | ( | Vertex * | v, | |
std::list< Edge * > & | es | |||
) | [inline] |
Append the Edges of given Vertex to list.
This function does not clear the list, it only appends.
v | The given Vertex | |
es | The std::list to append to |
Definition at line 598 of file cellcomplex_C.h.
Vertex * CellComplex< Vertex, Edge, Face, Tuple >::get_opposite_vertex | ( | Edge * | e, | |
Vertex * | v | |||
) | [inline] |
Get Vertex opposite from given Vertex along given Edge.
Given an Edge and one of its Vertexs, get the other Vertex of the Edge. If e is a self-loop the v will be returned, as it is considered to be its own opposite
e | The given Edge | |
v | The given Vertex |
Definition at line 665 of file cellcomplex_C.h.
Referenced by ConformalMesher::angle_is_positive(), and ConformalMesher::conform().
Face * CellComplex< Vertex, Edge, Face, Tuple >::get_opposite_face | ( | Edge * | e, | |
Face * | f | |||
) | [inline] |
Get Face opposite from given Face.
Given a Face and one of its Edges, get the other Face of the Edge. If there is no other face, NULL is returned.
e | The given Edge | |
f | The given Face |
Definition at line 682 of file cellcomplex_C.h.
References FATAL_ERROR.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::find_adjacent_faces().
void CellComplex< Vertex, Edge, Face, Tuple >::enqueue_faces | ( | Vertex * | v, | |
std::deque< Face * > & | faces | |||
) | [inline] |
En-queues all faces around a Vertex to a std::deque.
By all faces around a vertex we mean all 3-simplexes with v as a sub-simplex.
This function does not empty the deque, it only appends.
v | The Vertex | |
faces | The std::deque to append to |
Definition at line 722 of file cellcomplex_C.h.
void CellComplex< Vertex, Edge, Face, Tuple >::enqueue_edges | ( | Vertex * | v, | |
std::deque< Edge * > & | edges | |||
) | [inline] |
En-queues all Edges around a Vertex to a std::deque.
By all edges around a vertex we mean all 2-simplexes with v as a sub-simplex.
This function does not empty the deque, it only appends.
v | The Vertex | |
edges | The std::deque to append to |
Definition at line 707 of file cellcomplex_C.h.
Referenced by ConformalMesher::conform().
Edge * CellComplex< Vertex, Edge, Face, Tuple >::find_common_edge | ( | Vertex * | v0, | |
Vertex * | v1 | |||
) | [inline] |
Finds an Edge common to two Vertexs.
v0 | The first face | |
v1 | The second face |
Definition at line 747 of file cellcomplex_C.h.
Referenced by ConformalMesher::reticulate_splines(), and ConformalMesher::segment_appears().
Edge * CellComplex< Vertex, Edge, Face, Tuple >::find_common_edge | ( | Face * | f0, | |
Face * | f1 | |||
) | [inline] |
Finds an edge common to two faces.
f0 | The first face | |
f1 | The second face |
Definition at line 764 of file cellcomplex_C.h.
void CellComplex< Vertex, Edge, Face, Tuple >::find_adjacent_faces | ( | Face * | f, | |
std::list< Face * > & | faces | |||
) | [inline] |
En-queues all faces adjacent to current face.
By adjacent Face we mean all Faces who share a 2-simplex with the Face f. This function does not empty the list, it only appends.
f | The face | |
faces | The list to append to |
Definition at line 783 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::get_opposite_face().
Here is the call graph for this function:
void CellComplex< Vertex, Edge, Face, Tuple >::find_adjacent_edges | ( | Edge * | e, | |
std::list< Edge * > & | edges | |||
) | [inline] |
En-queues all edges of faces that are adjacent to given edge.
To find the adjacent Edges of e, we find all the Faces with e as a sub-simplex, and then take all Edges of those Faces which share a Vertex with e. Note that not all edges sharing a 1-simplex with e are included in this definition. Only the Edges who are sub-simplifies a face of which e is also sub-simplex.
This function does not empty the std::list, it only appends.
e | The Edge | |
edges | The std::list to append to |
Definition at line 827 of file cellcomplex_C.h.
void CellComplex< Vertex, Edge, Face, Tuple >::find_adjacent_faces | ( | Face * | f, | |
std::deque< Face * > & | faces | |||
) | [inline] |
En-queues all faces adjacent to current face.
By adjacent Face we mean all Faces who share a 2-simplex with the Face f. This function does not empty the std::deque, it only appends.
f | The face | |
faces | The std::deque to append to |
Definition at line 803 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::get_opposite_face().
Here is the call graph for this function:
void CellComplex< Vertex, Edge, Face, Tuple >::find_adjacent_edges | ( | Edge * | e, | |
std::deque< Edge * > & | edges | |||
) | [inline] |
En-queues all edges of faces that are adjacent to given edge.
To find the adjacent Edges of e, we find all the Faces with e as a sub-simplex, and then take all Edges of those Faces which share a Vertex with e. Note that not all edges sharing a 1-simplex with e are included in this definition. Only the Edges who are sub-simplexes a face of which e is also sub-simplex.
This function does not empty the std::deque, it only appends.
e | The Edge | |
edges | The std::deque to append to |
Definition at line 855 of file cellcomplex_C.h.
Tuple CellComplex< Vertex, Edge, Face, Tuple >::Switch | ( | int | snum, | |
const Tuple & | ct | |||
) | const [inline] |
Apply a Switch operator to Tuple.
This function applies one of the Switch operators to a Tuple of Cells. The switch operator is specified by the dimension of Cell to be switched.
An invalid switch number will result in the same tuple being returned.
This is the essential operator for navigating through the CellComplex. No other method of navigating should be used. This function is often used with the various get_tuple() varieties.
Switches are stored as hash_maps for time efficiency. There is a separate hash_map for each of the three switch types, although all switching should use this function, and not direct access to hashes, as we may change the implementation later.
Why the uppercase name? Because lowercase switch is a reserved word in C++.
If you attempt to switch2 on a tuple which has no opposite face, you get back the same tuple. Watch out for this one, as it may destroy your orientation if you don't notice it happening. In a well defined mesh, the only place this should happen is when the edge of your tuple is a boundary. Thus, when you have a boundary remember to check if there is an opposite face first.
The exact definition of the action of the switches is defined by the add_edge() and add_face() methods.
snum | The dimension to switch on | |
ct | The Tuple to switch on |
Definition at line 89 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::switch0, CellComplex< Vertex, Edge, Face, Tuple >::switch1, and CellComplex< Vertex, Edge, Face, Tuple >::switch2.
Referenced by ConformalMesher::excavate_holes(), CellComplex< Vertex, Edge, Face, Tuple >::get_tuple(), ConformalMesher::segment_appears(), EPSWrite::shade_triangle(), and Visualization::visual_switch().
Tuple CellComplex< Vertex, Edge, Face, Tuple >::get_tuple | ( | ) | const [inline] |
Get any oriented tuple.
Definition at line 874 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::faces.
Referenced by ConformalMesher::excavate_holes(), CellComplex< Vertex, Edge, Face, Tuple >::get_tuple(), ConformalMesher::segment_appears(), EPSWrite::shade_triangle(), and Visualization::visual_locate().
Tuple CellComplex< Vertex, Edge, Face, Tuple >::get_tuple | ( | Face * | f | ) | const [inline] |
Get an oriented tuple with given Face.
f | The Face |
Definition at line 885 of file cellcomplex_C.h.
References FATAL_ERROR, CellComplex< Vertex, Edge, Face, Tuple >::is_inverse_handed(), and CellComplex< Vertex, Edge, Face, Tuple >::Switch().
Here is the call graph for this function:
Tuple CellComplex< Vertex, Edge, Face, Tuple >::get_tuple | ( | Vertex * | v, | |
Face * | f | |||
) | const [inline] |
Get an oriented tuple with given Face and Vertex.
f | The Face | |
v | The Vertex |
Definition at line 928 of file cellcomplex_C.h.
References FATAL_ERROR, CellComplex< Vertex, Edge, Face, Tuple >::get_tuple(), and CellComplex< Vertex, Edge, Face, Tuple >::Switch().
Here is the call graph for this function:
Tuple CellComplex< Vertex, Edge, Face, Tuple >::get_tuple | ( | Edge * | e, | |
Face * | f | |||
) | const [inline] |
Get an oriented tuple with given Face and Edge.
f | The Face | |
e | The Edge |
Definition at line 906 of file cellcomplex_C.h.
References FATAL_ERROR, CellComplex< Vertex, Edge, Face, Tuple >::get_tuple(), and CellComplex< Vertex, Edge, Face, Tuple >::Switch().
Here is the call graph for this function:
Tuple CellComplex< Vertex, Edge, Face, Tuple >::get_tuple | ( | Vertex * | v | ) | const [inline] |
Get an oriented tuple with given Vertex.
v | The Vertex |
Definition at line 976 of file cellcomplex_C.h.
References FATAL_ERROR, and CellComplex< Vertex, Edge, Face, Tuple >::get_tuple().
Here is the call graph for this function:
Tuple CellComplex< Vertex, Edge, Face, Tuple >::get_tuple | ( | Edge * | e | ) | const [inline] |
Get an oriented tuple with given Edge.
e | The Edge |
Definition at line 1004 of file cellcomplex_C.h.
References FATAL_ERROR, and CellComplex< Vertex, Edge, Face, Tuple >::get_tuple().
Here is the call graph for this function:
Tuple CellComplex< Vertex, Edge, Face, Tuple >::get_tuple | ( | Vertex * | v, | |
Edge * | e | |||
) | const [inline] |
Get a possibly unoriented tuple with given Edge and Vertex.
This function returns a possibly unoriented tuple with a given Vertex and Edge, For some choices of vertexes and edges, there is no oriented tuple, thus we must return an unoriented tuple. Thus don't use this function unless you know what you are doing.
e | The Edge | |
v | The Vertex |
May | not comply if E is on the boundary and no such tuple exists |
Definition at line 957 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::get_tuple(), and CellComplex< Vertex, Edge, Face, Tuple >::Switch().
Here is the call graph for this function:
int CellComplex< Vertex, Edge, Face, Tuple >::switch_size | ( | int | ) | const [inline] |
Debugging: get the size of a switch hash. At certain times, we will know exactly what size the switch structures should have. Allow assertions on this information.
Definition at line 493 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::switch0, CellComplex< Vertex, Edge, Face, Tuple >::switch1, and CellComplex< Vertex, Edge, Face, Tuple >::switch2.
void CellComplex< Vertex, Edge, Face, Tuple >::print | ( | std::ostream & | os = std::cout |
) | const [inline] |
Print list of Cells in this CellComplex.
Definition at line 1019 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::edges, CellComplex< Vertex, Edge, Face, Tuple >::faces, CellComplex< Vertex, Edge, Face, Tuple >::get_num_edges(), CellComplex< Vertex, Edge, Face, Tuple >::get_num_faces(), CellComplex< Vertex, Edge, Face, Tuple >::get_num_vertices(), and CellComplex< Vertex, Edge, Face, Tuple >::vertexs.
Here is the call graph for this function:
void CellComplex< Vertex, Edge, Face, Tuple >::print_statistics | ( | std::ostream & | os = std::cout |
) | const [inline] |
Print sizes of data structures in this CellComplex.
Definition at line 1040 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::get_num_edges(), CellComplex< Vertex, Edge, Face, Tuple >::get_num_faces(), CellComplex< Vertex, Edge, Face, Tuple >::get_num_vertices(), CellComplex< Vertex, Edge, Face, Tuple >::inverted_faces, CellComplex< Vertex, Edge, Face, Tuple >::switch0, CellComplex< Vertex, Edge, Face, Tuple >::switch1, and CellComplex< Vertex, Edge, Face, Tuple >::switch2.
Referenced by ConformalMesher::mesh(), operator<<(), and Simulation::print_statistics().
Here is the call graph for this function:
int CellComplex< Vertex, Edge, Face, Tuple >::get_num_vertices | ( | ) | const [inline] |
Definition at line 248 of file cellcomplex.h.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::print(), CellComplex< Vertex, Edge, Face, Tuple >::print_statistics(), and MeshBinaryOutput::write().
CellComplex< Vertex, Edge, Face, Tuple >::Vertex_Hash_T::iterator CellComplex< Vertex, Edge, Face, Tuple >::get_vertexs_begin | ( | ) | const [inline] |
Definition at line 1059 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::vertexs.
Referenced by BezierMesh::coarsen_keep_boundary(), CellComplex< BezierVertex, BezierEdge, BezierTriangle, BezierTuple >::get_vertices_begin(), and ConformalMesher::insert_d0_vertices().
CellComplex< Vertex, Edge, Face, Tuple >::Vertex_Hash_T::iterator CellComplex< Vertex, Edge, Face, Tuple >::get_vertexs_end | ( | ) | const [inline] |
Definition at line 1066 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::vertexs.
Referenced by BezierMesh::coarsen_keep_boundary(), CellComplex< BezierVertex, BezierEdge, BezierTriangle, BezierTuple >::get_vertices_end(), and ConformalMesher::insert_d0_vertices().
Vertex_Hash_T::iterator CellComplex< Vertex, Edge, Face, Tuple >::get_vertices_begin | ( | ) | const [inline] |
Definition at line 251 of file cellcomplex.h.
Referenced by Visualization::draw_bdry_debug(), Visualization::draw_debug(), Simulation::move_(), MeshBinaryOutput::write(), and MeshOutput::write().
Vertex_Hash_T::iterator CellComplex< Vertex, Edge, Face, Tuple >::get_vertices_end | ( | ) | const [inline] |
Definition at line 254 of file cellcomplex.h.
Referenced by Visualization::draw_bdry_debug(), Visualization::draw_debug(), Simulation::move_(), MeshBinaryOutput::write(), and MeshOutput::write().
int CellComplex< Vertex, Edge, Face, Tuple >::get_num_edges | ( | ) | const [inline] |
Definition at line 258 of file cellcomplex.h.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::print(), CellComplex< Vertex, Edge, Face, Tuple >::print_statistics(), and MeshBinaryOutput::write().
CellComplex< Vertex, Edge, Face, Tuple >::Edge_Hash_T::iterator CellComplex< Vertex, Edge, Face, Tuple >::get_edges_begin | ( | ) | const [inline] |
Definition at line 1073 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::edges.
Referenced by BezierMesh::coarsen_keep_boundary(), ConformalMesher::create_subsplines(), Visualization::draw(), EPSWrite::draw_bdry(), Visualization::draw_bdry_debug(), Visualization::draw_bezier(), Visualization::draw_data(), Visualization::draw_data_channel(), Visualization::draw_debug(), EPSWrite::draw_edges(), Visualization::draw_flippable_edges(), Visualization::draw_skeleton(), Visualization::draw_smoothable_edges(), Visualization::draw_solid(), Simulation::move_(), ConformalMesher::reticulate_splines(), MeshBinaryOutput::write(), and MeshOutput::write().
CellComplex< Vertex, Edge, Face, Tuple >::Edge_Hash_T::iterator CellComplex< Vertex, Edge, Face, Tuple >::get_edges_end | ( | ) | const [inline] |
Definition at line 1080 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::edges.
Referenced by BezierMesh::coarsen_keep_boundary(), ConformalMesher::create_subsplines(), Visualization::draw(), EPSWrite::draw_bdry(), Visualization::draw_bdry_debug(), Visualization::draw_bezier(), Visualization::draw_data(), Visualization::draw_data_channel(), Visualization::draw_debug(), EPSWrite::draw_edges(), Visualization::draw_flippable_edges(), Visualization::draw_skeleton(), Visualization::draw_smoothable_edges(), Visualization::draw_solid(), Simulation::move_(), ConformalMesher::reticulate_splines(), MeshBinaryOutput::write(), and MeshOutput::write().
int CellComplex< Vertex, Edge, Face, Tuple >::get_num_faces | ( | ) | const [inline] |
Definition at line 262 of file cellcomplex.h.
Referenced by Visualization::draw_inverted_classes(), ConformalMesher::mesh(), CellComplex< Vertex, Edge, Face, Tuple >::print(), CellComplex< Vertex, Edge, Face, Tuple >::print_statistics(), MeshConstructor::remove_small_angles(), and MeshBinaryOutput::write().
CellComplex< Vertex, Edge, Face, Tuple >::Face_Hash_T::iterator CellComplex< Vertex, Edge, Face, Tuple >::get_faces_begin | ( | ) | const [inline] |
Definition at line 1087 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::faces.
Referenced by Visualization::draw_bezier(), Visualization::draw_data(), Visualization::draw_data_channel(), Visualization::draw_debug(), EPSWrite::draw_faces(), Visualization::draw_newton(), Visualization::draw_solid(), MeshBinaryOutput::write(), and MeshOutput::write().
CellComplex< Vertex, Edge, Face, Tuple >::Face_Hash_T::iterator CellComplex< Vertex, Edge, Face, Tuple >::get_faces_end | ( | ) | const [inline] |
Definition at line 1094 of file cellcomplex_C.h.
References CellComplex< Vertex, Edge, Face, Tuple >::faces.
Referenced by Visualization::draw_bezier(), Visualization::draw_data(), Visualization::draw_data_channel(), Visualization::draw_debug(), EPSWrite::draw_faces(), Visualization::draw_newton(), Visualization::draw_solid(), MeshBinaryOutput::write(), and MeshOutput::write().
Vertex* CellComplex< Vertex, Edge, Face, Tuple >::get_next_vertex | ( | typename Vertex_Hash_T::iterator & | ) | const |
Edge* CellComplex< Vertex, Edge, Face, Tuple >::get_next_edge | ( | typename Edge_Hash_T::iterator & | ) | const |
Face* CellComplex< Vertex, Edge, Face, Tuple >::get_next_face | ( | typename Face_Hash_T::iterator & | ) | const |
std::ostream& operator<< | ( | std::ostream & | stream, | |
const CellComplex< V, E, F, T > & | bm | |||
) | [friend] |
Vertex_Hash_T CellComplex< Vertex, Edge, Face, Tuple >::vertexs [private] |
hash_set of Vertex Cells
Definition at line 282 of file cellcomplex.h.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::add_vertex(), CellComplex< Vertex, Edge, Face, Tuple >::delete_vertex(), CellComplex< BezierVertex, BezierEdge, BezierTriangle, BezierTuple >::get_num_vertices(), CellComplex< Vertex, Edge, Face, Tuple >::get_store(), CellComplex< Vertex, Edge, Face, Tuple >::get_vertexs_begin(), CellComplex< Vertex, Edge, Face, Tuple >::get_vertexs_end(), CellComplex< Vertex, Edge, Face, Tuple >::is_member(), and CellComplex< Vertex, Edge, Face, Tuple >::print().
Edge_Hash_T CellComplex< Vertex, Edge, Face, Tuple >::edges [private] |
hash_set of Edge Cells
Definition at line 283 of file cellcomplex.h.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::add_edge(), CellComplex< Vertex, Edge, Face, Tuple >::delete_edge(), CellComplex< Vertex, Edge, Face, Tuple >::get_edges_begin(), CellComplex< Vertex, Edge, Face, Tuple >::get_edges_end(), CellComplex< BezierVertex, BezierEdge, BezierTriangle, BezierTuple >::get_num_edges(), CellComplex< Vertex, Edge, Face, Tuple >::is_member(), and CellComplex< Vertex, Edge, Face, Tuple >::print().
Face_Hash_T CellComplex< Vertex, Edge, Face, Tuple >::faces [private] |
hash_set of Face Cells
Definition at line 284 of file cellcomplex.h.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::add_face(), CellComplex< Vertex, Edge, Face, Tuple >::delete_face(), CellComplex< Vertex, Edge, Face, Tuple >::get_faces_begin(), CellComplex< Vertex, Edge, Face, Tuple >::get_faces_end(), CellComplex< BezierVertex, BezierEdge, BezierTriangle, BezierTuple >::get_num_faces(), CellComplex< Vertex, Edge, Face, Tuple >::get_tuple(), CellComplex< Vertex, Edge, Face, Tuple >::is_member(), and CellComplex< Vertex, Edge, Face, Tuple >::print().
Trash_T CellComplex< Vertex, Edge, Face, Tuple >::trash_ [private] |
Definition at line 290 of file cellcomplex.h.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::empty_trash(), and CellComplex< Vertex, Edge, Face, Tuple >::trash_cell().
int CellComplex< Vertex, Edge, Face, Tuple >::keep_trash_ [private] |
Definition at line 291 of file cellcomplex.h.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::empty_trash(), CellComplex< Vertex, Edge, Face, Tuple >::keep_trash(), and CellComplex< Vertex, Edge, Face, Tuple >::trash_cell().
PersistantMemoryPool<Cell> CellComplex< Vertex, Edge, Face, Tuple >::pool_ [private] |
Definition at line 297 of file cellcomplex.h.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::add_edge(), CellComplex< Vertex, Edge, Face, Tuple >::add_face(), CellComplex< Vertex, Edge, Face, Tuple >::add_vertex(), CellComplex< Vertex, Edge, Face, Tuple >::empty_trash(), and CellComplex< Vertex, Edge, Face, Tuple >::trash_cell().
Switch0_Hash_T CellComplex< Vertex, Edge, Face, Tuple >::switch0 [private] |
Map to implement Switch0 operator.
Definition at line 299 of file cellcomplex.h.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::add_edge(), CellComplex< Vertex, Edge, Face, Tuple >::delete_edge(), CellComplex< Vertex, Edge, Face, Tuple >::print_statistics(), CellComplex< Vertex, Edge, Face, Tuple >::Switch(), and CellComplex< Vertex, Edge, Face, Tuple >::switch_size().
Switch1_Hash_T CellComplex< Vertex, Edge, Face, Tuple >::switch1 [private] |
Map to implement Switch1 operator.
Definition at line 300 of file cellcomplex.h.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::add_face(), CellComplex< Vertex, Edge, Face, Tuple >::delete_face(), CellComplex< Vertex, Edge, Face, Tuple >::print_statistics(), CellComplex< Vertex, Edge, Face, Tuple >::Switch(), and CellComplex< Vertex, Edge, Face, Tuple >::switch_size().
Switch2_Hash_T CellComplex< Vertex, Edge, Face, Tuple >::switch2 [private] |
Map to implement Switch2 operator.
Definition at line 301 of file cellcomplex.h.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::add_face(), CellComplex< Vertex, Edge, Face, Tuple >::delete_face(), CellComplex< Vertex, Edge, Face, Tuple >::print_statistics(), CellComplex< Vertex, Edge, Face, Tuple >::Switch(), and CellComplex< Vertex, Edge, Face, Tuple >::switch_size().
Inverted_Hash_T CellComplex< Vertex, Edge, Face, Tuple >::inverted_faces [private] |
Set of inverted faces.
Definition at line 302 of file cellcomplex.h.
Referenced by CellComplex< Vertex, Edge, Face, Tuple >::add_face(), CellComplex< Vertex, Edge, Face, Tuple >::delete_face(), CellComplex< Vertex, Edge, Face, Tuple >::is_inverse_handed(), and CellComplex< Vertex, Edge, Face, Tuple >::print_statistics().