#include <CGAL/Topological_map.h>
 
represents a vertex of the topological map.
 
 
represents a halfedge of the topological map.
 
 
represents a face of the topological map.

The following handles, iterators and circulators have appropriate constant^{1} counterparts. The mutable types are assignable to their constant counterparts. Both circulators are assignable to the Halfedge_iterator. The iterators are assignable to the respective handle types. Wherever the handles appear in function parameter lists, the appropriate iterator can be used as well.
 
handle to vertex.
 
 
handle to halfedge.
 
 
handle to face.
 
 
a bidirectional iterator over the
vertices of the topological map. Its valuetype is
Topological_map<Dcel>::Vertex.
 
 
a bidirectional iterator over the
halfedges of the topological map. Its valuetype is
Topological_map<Dcel>::Halfedge.
 
 
a bidirectional iterator over the
Edges (every other halfedge) of the topological map. Its valuetype is
Topological_map<Dcel>::Halfedge.
 
 
a bidirectional iterator over the
faces of the topological map. Its valuetype is
Topological_map<Dcel>::Face.
 
 
a forward circulator over the
halfedges of a CCB (connected component of the boundary). Its
valuetype is Topological_map<Dcel>::Halfedge.
 
 
a forward circulator over
the halfedges that have the vertex as their target.
Its valuetype is Topological_map<Dcel>::Halfedge.
 
 
a bidirectional iterator to
traverse all the holes ( i.e., inner CCBs) of a face
(Holes_iterator++ is the next hole in the face).
Its value type is
Ccb_halfedge_circulator.

 
constructs an
empty map  containing one unbounded face.

The following methods return the number of map components, faces, halfedges or vertives, respectively.

 

 



 
inserts a new edge
between the vertices v1 and v2 which are the target
of previous1 and previous2 respectively. The return value
is the new halfedge that has v1 as its source.
If a new face is created it will be, by definition, the face incident
to the halfedge returned  this means that the order of the vertices
on the new face will be $$v_{0}...,v1,v2,...v_{0}.
This sets a requirement on the users (e.g,
Planar_map_2) to call the function with the arguments
in the right order (i.e., the order that will give the desired face).
Insertion at vertices may require updating of the holes
(since a
new face can be created that contains some of the holes of the old
face). To update the holes the function
move_hole() should be called by the user. Precondition: previous1 and previous2 have the same incident face. Precondition: previous1 and previous2 do not have the same target vertex (i.e., no loop).  

 
inserts a new edge for which one endpoint, v1 that is the target of previous, is already in the map. The return value is the new halfedge that has v1 as its source.  

 
inserts an edge as a new inner component of f. The return value is the new halfedge.  

 
moves the hole represented by the halfedge e from the face f1 to f2. Returns false if e does not represent a hole in f1, and true otherwise.  

 
splits the edge e into e1 and e2 , and adds a new vertex incident both e1 and e2. The return value is the halfedge (e1 or e2) with the same source vertex that e had.  

 
merges the two consecutive edges e1 and e2 into one
edge. The return value is the halfedge with the same source vertex
that e1 had and the same target e2 had.
This operation is the inverse of the split_edge
operation. Precondition: e1 and e2 are consecutive halfedges (i.e., e1.target()==e2.source()). Precondition: There is no other edge attached to the vertex between e1 and e2 (i.e., its degree is exactly 2).  

 
removes the edge referenced by e from tpm. If the operation causes two faces to merge, the merged face is returned. Otherwise, the face in which the edge was incident is returned. The removal of an edge might create a new hole inside the face (e.g., when removing an edge in the interior of an ``antenna''). In this case by definition e points at the new hole created (i.e., the path from e to its twin goes over the new hole) and its twin points at the outer CCB (i.e., the path from e>twin() to e passes over the outer CCB). This sets a requirement on the users to define which halfedge (e or e>twin()) should be given as the parameter. 
^{1}  This means that for every iterator or circulator there is a const_iterator and const_circulator counterpart. See [MS96] for a discussion of constant versus mutable iterator types. 