Navigation: Up, Table of Contents, Bibliography, Index, Title Page

Halfedge of a Polyhedral Surface

Definition

Figure  reference arrow depicts the relationship between a halfedge and its incident halfedges, vertices, and facets. A halfedge is an oriented edge between two vertices. It is always paired with its counterpart that has the opposite direction. They are mutually linked with the opposite() member function. If a halfedge is incident to a facet the next() member function points to the successor halfedge around this facet. For border edges the next() member function points to the successor halfedge along some hole (which might not be uniquely determined in situations with more than one hole at a vertex). An invariant is that successive assignments of the form h = h->next() cycles counterclockwise around the facet and traverses all halfedges incident to this facet. A similar invariant is that successive assignments of the form h = h->next()->opposite() cycles clockwise around the vertex and traverses all halfedges incident to this vertex. Two circulators are provided for these circular orders. next() and opposite() are mandatory functions for each instantiation of polyhedral surfaces. The other member functions are optional as indicated with the type tags defined in Polyhedron_3, see Section reference. The prev() member function points to the preceding halfedge around the same facet. Handles to the incident vertex and facet are optionally stored.

Types

Halfedge defines the same types as Polyhedron_3 except the traits class.

Access Functions

Halfedge_handle h.opposite () the opposite halfedge.
Halfedge_handle h.next () the next halfedge around the facet.
Halfedge_handle h.prev () the previous halfedge around the facet.
Vertex_handle h.vertex () the incident vertex.
Facet_handle h.facet () the incident facet. If h is a border halfedge the result is a singular value for the handle.
Halfedge_handle h.next_on_vertex ()
the next halfedge around the vertex (clockwise). Is equal to h.next()->opposite().
Halfedge_handle h.prev_on_vertex ()
the previous halfedge around the vertex (counterclockwise). Is equal to h.opposite()->prev().

Halfedge_around_vertex_circulator
h.vertex_begin () circulator of halfedges around the vertex (clockwise).

Halfedge_around_facet_circulator
h.facet_begin () circulator of halfedges around the facet (counterclockwise).

bool h.is_border () is true if h is a border halfedge.
bool h.is_border_edge ()
is true if h or h.opposite() is a border halfedge.

Implementation

The methods prev() and prev_on_vertex() work in constant time if Supports_halfedge_prev Tag_true. Otherwise both methods search for the previous halfedge around the incident facet.


Next: Class declaration of Facet
Navigation: Up, Table of Contents, Bibliography, Index, Title Page
The GALIA project. Jan 18, 2000.