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 (V, E, F) 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 e and e' are in the same face cycle if e = next*(e'). All edges e in the same face cycle have the same incident face f = face(e). 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) (e ∈ A(v)) 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 u ∈ V ∪ E ∪ F 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. |