CellComplex< Vertex, Edge, Face, Tuple > Class Template Reference

A toplogical data structure. More...

#include </usr1/tp517/Tumble/trunk/src/tumble/cellcomplex.h>

Inheritance diagram for CellComplex< Vertex, Edge, Face, Tuple >:

[legend]
Collaboration diagram for CellComplex< Vertex, Edge, Face, Tuple >:
[legend]
List of all members.
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.
PersistantStoreget_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 $ tup=Switch(1, Switch(0, tup)) $ 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

Todo:
write real iterator wrappers for ruby


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< Cellpool_
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.

Detailed Description

template<class Vertex, class Edge, class Face, class Tuple>
class CellComplex< Vertex, Edge, Face, Tuple >

A toplogical data structure.

Introduction

A CellComplex is a data structure for storing and retrieving topological information about a mesh. It is based on the work of Brison.

Description

The idea behind a CellComplex is that each toplogical feature in a mesh (Vertex, Edge, or Face), is a Cell. Then to define a unique position in the mesh one only needs to have a CellTuple which is an ordered list of Cells where each Cell in the list is of one higher dimension than the previous. In two dimensions this amounts to a triple of <VertexCell, EdgeCell, FaceCell>, we call such a Tuple a CellTuple. Also defined in the CellComplex are operators for moving from CellTuple to CellTuple. These operators are called switch operators. For a complete discussion see the work of Brison. For the casual user, the switch operators amount to "switching", out a Cell of a certain dimension from the CellTuple, while keeping the Cells of the other Dimension fixed. Thus, calling 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.

Changes

Formerly the CellComplex also held the geometric data (ControlPoint) and functional data (DataPoints). This was both inefficient, and inaccurate, as the CellComplex is a topological structure only. This data has been moved to the DataStore class.

Considerations

The major item on the wishlist for the CellComplex would be a system for hashing (cell,name)->val pairs. This would allow applications to store arbitrary data on Cells, without having to modify the Cell classes individually. As of right now there are various properties stored inside Cells, such as restlength for BoundaryEdges, and min_angle for BoundaryFaces, and fixed and color members for both BoundaryEdges and BoundaryFaces. These could all be generalized away by such a general mapping.

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.

Considerations

Todo:
Add Brison paper reference and discussion

Definition at line 98 of file cellcomplex.h.


Member Typedef Documentation

template<class Vertex, class Edge, class Face, class Tuple>
typedef PersistantHashSet<Vertex*> CellComplex< Vertex, Edge, Face, Tuple >::Vertex_Hash_T

Definition at line 147 of file cellcomplex.h.

template<class Vertex, class Edge, class Face, class Tuple>
typedef PersistantHashSet<Edge*> CellComplex< Vertex, Edge, Face, Tuple >::Edge_Hash_T

Definition at line 148 of file cellcomplex.h.

template<class Vertex, class Edge, class Face, class Tuple>
typedef PersistantHashSet<Face*> CellComplex< Vertex, Edge, Face, Tuple >::Face_Hash_T

Definition at line 149 of file cellcomplex.h.

template<class Vertex, class Edge, class Face, class Tuple>
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.

template<class Vertex, class Edge, class Face, class Tuple>
typedef PersistantHashMap<Tuple,Edge*,TupleHasher<Tuple> > CellComplex< Vertex, Edge, Face, Tuple >::Switch1_Hash_T

Definition at line 151 of file cellcomplex.h.

template<class Vertex, class Edge, class Face, class Tuple>
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.

template<class Vertex, class Edge, class Face, class Tuple>
typedef PersistantHashSet<Face*> CellComplex< Vertex, Edge, Face, Tuple >::Inverted_Hash_T

Definition at line 153 of file cellcomplex.h.

template<class Vertex, class Edge, class Face, class Tuple>
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.


Constructor & Destructor Documentation

template<class Vertex, class Edge, class Face, class Tuple>
CellComplex< Vertex, Edge, Face, Tuple >::CellComplex ( PersistantStore  )  [inline]

Constructor.

Definition at line 17 of file cellcomplex_C.h.

template<class Vertex, class Edge, class Face, class Tuple>
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.

template<class Vertex, class Edge, class Face, class Tuple>
CellComplex< Vertex, Edge, Face, Tuple >::CellComplex ( const CellComplex< Vertex, Edge, Face, Tuple > &  other  )  [private]


Member Function Documentation

template<class Vertex, class Edge, class Face, class Tuple>
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:

template<class Vertex, class Edge, class Face, class Tuple>
CellComplex<Vertex, Edge, Face, Tuple>& CellComplex< Vertex, Edge, Face, Tuple >::operator= ( const CellComplex< Vertex, Edge, Face, Tuple > &  other  )  [private]

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
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:

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
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:

template<class Vertex, class Edge, class Face, class Tuple>
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.

Todo:
Allow Faces to have Edge sets which are not simple cycles as is the case for some BoundaryFaces
Parameters:
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:

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
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:

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
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:

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
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:

template<class Vertex, class Edge, class Face, class Tuple>
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:

template<class Vertex, class Edge, class Face, class Tuple>
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_.

template<class Vertex, class Edge, class Face, class Tuple>
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:

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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.

template<class Vertex, class Edge, class Face, class Tuple>
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.

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
e The given Edge
vs The std::vector to append to
Returns:
Number of Vertexs appended, -1 if Edge does not exist

Definition at line 512 of file cellcomplex_C.h.

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
e The given Edge
vs The std::list to append to
Returns:
Number of Vertexs appended, -1 if Edge does not exist

Definition at line 528 of file cellcomplex_C.h.

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
f The given Face
es The std::vector to append to
Returns:
Number of Edges appended, -1 if Face does not exist

Definition at line 544 of file cellcomplex_C.h.

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
f The given Face
es The std::list to append to
Returns:
Number of Edges appended, -1 if Face does not exist

Definition at line 563 of file cellcomplex_C.h.

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
e The given Edge
fs The std::vector to append to
Returns:
Number of Faces appended, -1 if Edge does not exist

Definition at line 615 of file cellcomplex_C.h.

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
e The given Edge
fs The std::list to append to
Returns:
Number of Faces appended, -1 if Edge does not exist

Definition at line 640 of file cellcomplex_C.h.

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
v The given Vertex
es The std::vector to append to
Returns:
Number of Edges appended, -1 if Vertex does not exist

Definition at line 582 of file cellcomplex_C.h.

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
v The given Vertex
es The std::list to append to
Returns:
Number of Edges appended, -1 if Vertex does not exist

Definition at line 598 of file cellcomplex_C.h.

template<class Vertex, class Edge, class Face, class Tuple>
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

Parameters:
e The given Edge
v The given Vertex
Returns:
The opposite Vertex

Definition at line 665 of file cellcomplex_C.h.

Referenced by ConformalMesher::angle_is_positive(), and ConformalMesher::conform().

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
e The given Edge
f The given Face
Returns:
The opposite Face, NULL if no such face

Definition at line 682 of file cellcomplex_C.h.

References FATAL_ERROR.

Referenced by CellComplex< Vertex, Edge, Face, Tuple >::find_adjacent_faces().

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
v The Vertex
faces The std::deque to append to

Definition at line 722 of file cellcomplex_C.h.

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
v The Vertex
edges The std::deque to append to

Definition at line 707 of file cellcomplex_C.h.

Referenced by ConformalMesher::conform().

template<class Vertex, class Edge, class Face, class Tuple>
Edge * CellComplex< Vertex, Edge, Face, Tuple >::find_common_edge ( Vertex *  v0,
Vertex *  v1 
) [inline]

Finds an Edge common to two Vertexs.

Parameters:
v0 The first face
v1 The second face
Returns:
The common edge or NULL if no common edge

Definition at line 747 of file cellcomplex_C.h.

Referenced by ConformalMesher::reticulate_splines(), and ConformalMesher::segment_appears().

template<class Vertex, class Edge, class Face, class Tuple>
Edge * CellComplex< Vertex, Edge, Face, Tuple >::find_common_edge ( Face *  f0,
Face *  f1 
) [inline]

Finds an edge common to two faces.

Parameters:
f0 The first face
f1 The second face
Returns:
The common edge or NULL if no common edge

Definition at line 764 of file cellcomplex_C.h.

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
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:

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
e The Edge
edges The std::list to append to

Definition at line 827 of file cellcomplex_C.h.

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
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:

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
e The Edge
edges The std::deque to append to

Definition at line 855 of file cellcomplex_C.h.

template<class Vertex, class Edge, class Face, class Tuple>
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++.

Note:
If you attempt to switch1 on an edge with a self loop, you get back the same tuple.

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.

Todo:
Currently we have no good ideas how to set up switches for faces with edge sets that do not form simple cycles. Thus, we do not currently allow Faces with such edge sets. Some BoundaryFaces have such a topology, in this case, we currently add only those edges of the face which do make a simple cycle, this leaves the BoundaryComplex technically incorrectly defined. As we never use tuples of the BoundaryMesh, this problem is not currently pressing, although it should be fixed in the future.
Parameters:
snum The dimension to switch on
ct The Tuple to switch on
Returns:
The restult of the given Switch operator

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().

template<class Vertex, class Edge, class Face, class Tuple>
Tuple CellComplex< Vertex, Edge, Face, Tuple >::get_tuple (  )  const [inline]

Get any oriented tuple.

Returns:
An 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().

template<class Vertex, class Edge, class Face, class Tuple>
Tuple CellComplex< Vertex, Edge, Face, Tuple >::get_tuple ( Face *  f  )  const [inline]

Get an oriented tuple with given Face.

Parameters:
f The Face
Returns:
An oriented CellTuple with f as 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:

template<class Vertex, class Edge, class Face, class Tuple>
Tuple CellComplex< Vertex, Edge, Face, Tuple >::get_tuple ( Vertex *  v,
Face *  f 
) const [inline]

Get an oriented tuple with given Face and Vertex.

Parameters:
f The Face
v The Vertex
Returns:
An oriented CellTuple with f as the Face and v as 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:

template<class Vertex, class Edge, class Face, class Tuple>
Tuple CellComplex< Vertex, Edge, Face, Tuple >::get_tuple ( Edge *  e,
Face *  f 
) const [inline]

Get an oriented tuple with given Face and Edge.

Parameters:
f The Face
e The Edge
Returns:
An oriented CellTuple with f as the Face and e as 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:

template<class Vertex, class Edge, class Face, class Tuple>
Tuple CellComplex< Vertex, Edge, Face, Tuple >::get_tuple ( Vertex *  v  )  const [inline]

Get an oriented tuple with given Vertex.

Parameters:
v The Vertex
Returns:
An oriented CellTuple with v as 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:

template<class Vertex, class Edge, class Face, class Tuple>
Tuple CellComplex< Vertex, Edge, Face, Tuple >::get_tuple ( Edge *  e  )  const [inline]

Get an oriented tuple with given Edge.

Parameters:
e The Edge
Returns:
An oriented CellTuple with e as 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:

template<class Vertex, class Edge, class Face, class Tuple>
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.

Parameters:
e The Edge
v The Vertex
Returns:
An oriented CellTuple with e as the Edge and v as the Vertex
Exceptions:
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:

template<class Vertex, class Edge, class Face, class Tuple>
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.

template<class Vertex, class Edge, class Face, class Tuple>
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:

template<class Vertex, class Edge, class Face, class Tuple>
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:

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
Vertex* CellComplex< Vertex, Edge, Face, Tuple >::get_next_vertex ( typename Vertex_Hash_T::iterator &   )  const

template<class Vertex, class Edge, class Face, class Tuple>
Edge* CellComplex< Vertex, Edge, Face, Tuple >::get_next_edge ( typename Edge_Hash_T::iterator &   )  const

template<class Vertex, class Edge, class Face, class Tuple>
Face* CellComplex< Vertex, Edge, Face, Tuple >::get_next_face ( typename Face_Hash_T::iterator &   )  const


Friends And Related Function Documentation

template<class Vertex, class Edge, class Face, class Tuple>
template<class V, class E, class F, class T>
std::ostream& operator<< ( std::ostream &  stream,
const CellComplex< V, E, F, T > &  bm 
) [friend]


Member Data Documentation

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().

template<class Vertex, class Edge, class Face, class Tuple>
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().


The documentation for this class was generated from the following files:
Generated on Mon May 24 09:53:33 2010 for TUMBLE by  doxygen 1.5.2