\( \newcommand{\E}{\mathrm{E}} \) \( \newcommand{\A}{\mathrm{A}} \) \( \newcommand{\R}{\mathrm{R}} \) \( \newcommand{\N}{\mathrm{N}} \) \( \newcommand{\Q}{\mathrm{Q}} \) \( \newcommand{\Z}{\mathrm{Z}} \) \( \def\ccSum #1#2#3{ \sum_{#1}^{#2}{#3} } \def\ccProd #1#2#3{ \sum_{#1}^{#2}{#3} }\)
CGAL - Halfedge Data Structures
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
HalfedgeDSHalfedge Concept Reference

Definition

The concept HalfedgeDSHalfedge defines the requirements for the local Halfedge type in the HalfedgeDS concept. It is also required in the Halfedge_wrapper<Refs,Traits> member class template of an items class, see the HalfedgeDSItems concept.

A halfedge is an oriented edge between two vertices. It is always paired with a halfedge pointing in the opposite direction. The opposite() member function returns this halfedge of opposite orientation. The next() member function points to the successor halfedge along the face - or if the halfedge is a border halfedge - along the open region. A halfedge optionally stores a reference to the previous halfedge along the face, a reference to an incident vertex, and a reference to an incident face. Type tags indicate whether the related member functions are supported. Figure figureHalfedgeDSOptionalMethods depicts the relationship between a halfedge and its incident halfedges, vertices, and faces.

hds_optional.png
The three classes Vertex, Halfedge, and Face of the halfedge data structure. Member functions with shaded background are mandatory. The others are optionally supported.

For the protection of the integrity of the data structure classes such as CGAL::Polyhedron_3 are allowed to redefine the modifying member functions to be private. In order to make them accessible for the halfedge data structure they must be derived from a base class Base where the modifying member functions are still public. Even more protection is provided for the set_opposite() member function. The base class Base_base provides access to it. (The protection could be bypassed also by an user, but not by accident.)

Has Models:

CGAL::HalfedgeDS_halfedge_base

CGAL::HalfedgeDS_halfedge_min_base

See Also
HalfedgeDS<Traits,Items,Alloc>
HalfedgeDSItems
HalfedgeDSVertex
HalfedgeDSFace

Types

typedef unspecified_type HalfedgeDS
 instantiated HalfedgeDS ( \( \equiv\) Refs).
 
typedef unspecified_type Base
 base class that allows modifications.
 
typedef unspecified_type Base_base
 base class to access set_opposite().
 
typedef unspecified_type Vertex
 model of HalfedgeDSVertex.
 
typedef unspecified_type Face
 model of HalfedgeDSFace.
 
typedef unspecified_type Vertex_handle
 handle to vertex.
 
typedef unspecified_type Halfedge_handle
 handle to halfedge.
 
typedef unspecified_type Face_handle
 handle to face.
 
typedef unspecified_type Vertex_const_handle
 
typedef unspecified_type Halfedge_const_handle
 
typedef unspecified_type Face_const_handle
 
typedef unspecified_type Supports_halfedge_prev
 CGAL::Tag_true or CGAL::Tag_false.
 
typedef unspecified_type Supports_halfedge_vertex
 CGAL::Tag_true or CGAL::Tag_false.
 
typedef unspecified_type Supports_halfedge_face
 CGAL::Tag_true or CGAL::Tag_false.
 

Creation

 Halfedge ()
 default constructor.
 

Operations

Halfedge_handle opposite ()
 
Halfedge_const_handle opposite () const
 the opposite halfedge.
 
void set_opposite (Halfedge_handle h)
 sets opposite halfedge to h.
 
Halfedge_handle next ()
 
Halfedge_const_handle next () const
 the next halfedge around the face.
 
void set_next (Halfedge_handle h)
 sets next halfedge to h.
 
bool is_border () const
 is true if the halfedge is a border halfedge.
 

Operations available if Supports_halfedge_prev == CGAL::Tag_true

Halfedge_handle prev ()
 
Halfedge_const_handle prev () const
 the previous halfedge around the face.
 
void set_prev (Halfedge_handle h)
 sets prev halfedge to h.
 

Operations available if Supports_halfedge_vertex == CGAL::Tag_true

Vertex_handle vertex ()
 
Vertex_const_handle vertex () const
 the incident vertex of h.
 
void set_vertex (Vertex_handle v)
 sets incident vertex to v.
 

Operations available if Supports_halfedge_face == CGAL::Tag_true

Face_handle face ()
 
Face_const_handle face () const
 the incident face of the halfedge. More...
 
void set_face (Face_handle f)
 sets incident face to f.
 

Member Function Documentation

Face_const_handle HalfedgeDSHalfedge::face ( ) const

the incident face of the halfedge.

If the halfedge is a border halfedge the result is default construction of the handle.