An instance D of the data type Topological_explorer is a decorator for interfacing the topological structure of a plane map P (read-only).
A plane map P consists of a triple of vertices, edges, and faces. We collectively call them objects. An edge e is a pair of vertices (v,w) with incidence operations v = source(e), w = target(e). The list of all edges with source v is called the adjacency list A(v).
Edges are paired into twins. For each edge e = (v,w) there's an edge twin(e) = (w,v) and twin(twin(e)) == e1.
An edge e = (v,w) knows two adjacent edges en = next(e) and ep = previous(e) where source(en) = w, previous(en) = e and target(ep) = v and next(ep) = e. By this symmetric previous-next relationship all edges are partitioned into face cycles. Two edges and are in the same face cycle if . All edges e in the same face cycle have the same incident face . The cyclic order on the adjacency list of a vertex v = source(e) is given by cyclic_adj_succ(e) = twin(previous(e)) and cyclic_adj_pred(e) = next(twin(e)).
A vertex v is embedded via coordinates point(v). By the embedding of its source and target an edge corresponds to a segment. P has the property that the embedding is always order-preserving. This means a ray fixed in point(v) of a vertex v and swept around counterclockwise meets the embeddings of target(e) () in the cyclic order defined by the list order of A.
The embedded face cycles partition the plane into maximal connected subsets of points. Each such set corresponds to a face. A face is bounded by its incident face cycles. For all the edges in the non-trivial face cycles it holds that the face is left of the edges. There can also be trivial face cycles in form of isolated vertices in the interior of a face. Each such vertex v knows its surrounding face f = face(v).
Plane maps are attributed, for each object we attribute an information mark(u) of type Mark. Mark fits the concepts assignable, default-constructible, and equal-comparable.
Local types are handles, iterators and circulators of the following kind: Vertex_const_handle, Vertex_const_iterator, Halfedge_const_handle, Halfedge_const_iterator, Face_const_handle, Face_const_iterator. Additionally the following circulators are defined.
|
| iterator over vertices of the map. |
|
| past-the-end iterator for vertices. |
|
| iterator over halfedges of the map. |
|
| past-the-end iterator for halfedges. |
|
| iterator over faces of the map. |
|
| past-the-end iterator for faces |
| ||
| ||
returns a circulator for the cyclic adjacency list of v. | ||
| ||
| ||
returns a circulator for the outer face cycle of f. | ||
|
| |
returns an iterator for all holes in the interior of f. A Hole_iterator can be assigned to a Halfedge_around_face_const_circulator. | ||
|
| |
returns the past-the-end iterator of f. | ||
|
| |
returns an iterator for all isolated vertices in the interior of f. | ||
|
| |
returns the past the end iterator of f. |
|
| returns the embedding of v. |
|
| returns the mark of v. |
|
| returns the mark of e. |
|
| returns the mark of f. |
|
| returns the number of vertices. |
|
| returns the number of halfedges. |
|
| returns the number of halfedge pairs. |
|
| returns the number of faces. |
|
| returns the number of face cycles. |
|
| |
calculates the number of connected components of P. | ||
|
| |
print the statistics of P: the number of vertices, edges, and faces. | ||
|
| |
checks the link structure and the genus of P. |
1 | The existence of the edge pairs makes P a bidirected graph, the twin links make P a map. |