CGAL 4.14 - 2D Triangulation Data Structure
TriangulationDSFaceBase_2 Concept Reference

## Definition

The concept TriangulationDSFaceBase_2 describes the requirements for the face base class of a CGAL::Triangulation_data_structure_2<Vb,Fb>.

Note that if the CGAL::Triangulation_data_structure_2 is plugged into a triangulation class, the face base class may have additional geometric requirements depending on the triangulation class.

At the base level, (see Sections Software Design and The Default Triangulation Data Structure ), a face stores handles on its three vertices and on the three neighboring faces. The vertices and neighbors are indexed 0,1 and 2. Neighbor i lies opposite to vertex i.

Since the CGAL::Triangulation_data_structure_2 is the class which defines the handle types, the face base class has to be somehow parameterized by the triangulation data structure. But since the CGAL::Triangulation_data_structure_2 itself is parameterized by the face and vertex base classes, there is a cycle in the definition of these classes. In order to break the cycle, the base classes for faces and vertices which are plugged in to instantiate a CGAL::Triangulation_data_structure_2 use void as triangulation data structure parameter. Then, the CGAL::Triangulation_data_structure_2 uses a rebind mechanism (similar to the one specified in std::allocator) in order to plug itself as parameter in the face and vertex base classes. This mechanism requires that the base class provides a templated nested class Rebind_TDS that itself provides the subtype Rebind_TDS::Other which is the rebound version of the base class. This rebound base class is the class that the CGAL::Triangulation_data_structure_2 actually uses as a base class for the class CGAL::Triangulation_data_structure_2::Face.

Refines:
TriangulationDataStructure_2::Face
Has Models:

CGAL::Triangulation_ds_face_base_2<Tds>

CGAL::Triangulation_face_base_2<Traits,Fb>

CGAL::Regular_triangulation_face_base_2<Traits,Fb>

CGAL::Constrained_triangulation_face_base_2<Traits,Fb>

CGAL::Triangulation_face_base_with_info_2<Info,Traits,Fb>

TriangulationDSVertexBase_2
TriangulationDataStructure_2::Face
TriangulationFaceBase_2
CGAL::Triangulation_data_structure_2<Vb,Fb>

## Types

The concept TriangulationDSFaceBase_2 has to provide the following types.

template<typename TDS2 >
using Rebind_TDS = unspecified_type
This template class has to define a type Rebind_TDS<TDS_2>::Other which is the rebound face base, where the CGAL::Triangulation_data_structure_2 is actually plugged in. More...

typedef TriangulationDataStructure_2 Triangulation_data_structure

typedef TriangulationDataStructure_2::Vertex_handle Vertex_handle

typedef TriangulationDataStructure_2::Face_handle Face_handle

## Creation

TriangulationDSFaceBase_2 ()
default constructor.

TriangulationDSFaceBase_2 (Vertex_handle v0, Vertex_handle v1, Vertex_handle v2)
Initializes the vertices with v0, v1, v2 and the neighbors with Face_handle().

TriangulationDSFaceBase_2 (Vertex_handle v0, Vertex_handle v1, Vertex_handle v2, Face_handle n0, Face_handle n1, Face_handle n2)
initializes the vertices with v0,v1, v2 and the neighbors with n0, n1, n2.

## Access Functions

int dimension ()
returns the dimension.

Vertex_handle vertex (int i) const
returns the vertex i of the face. More...

bool has_vertex (Vertex_handle v)
returns true if v is a vertex of the face.

bool has_vertex (Vertex_handle v, int &i) const
as above, and sets i to the index of v in the face.

int index (Vertex_handle v) const
returns the index of v in the face.

Face_handle neighbor (int i) const
returns the neighbor i of the face. More...

bool has_neighbor (Face_handle n)
returns true if n is a neighbor of the face.

bool has_neigbor (Face_handle n, int &i) const
as above, and sets i to the index of n in the face.

int index (const Face_handle n) const
returns the index of neighbor n in the face.

## Setting

void set_vertex (int i, Vertex_handle v)
sets vertex i to v. More...

void set_vertices ()
sets the vertices to Vertex_handle().

void set_vertices (Vertex_handle v0, Vertex_handle v1, Vertex_handle v2)
sets the vertices.

void set_neighbor (int i, Face_handle n)
sets neighbor i to n. More...

void set_neighbors ()
sets the neighbors to Face_handle().

void set_neighbors (Face_handle n0, Face_handle n1, Face_handle n2)
sets the neighbors.

## Orientation

void reorient ()
Changes the orientation of the face by exchanging vertex(0) with vertex(1) and neighbor(0) with neighbor(1).

void ccw_permute ()
performs a counterclockwise permutation of the vertices and neighbors of the face.

void cw_permute ()
performs a clockwise permutation of the vertices and neighbors of the face.

## Checking

bool is_valid (bool verbose=false) const
performs any required test on a face. More...

## Various

These member functions are required by CGAL::Triangulation_data_structure_2 because it uses CGAL::Compact_container to store its faces.

See the documentation of CGAL::Compact_container for the exact requirements.

void * for_compact_container () const

void *& for_compact_container ()

## ◆ Rebind_TDS

template<typename TDS2 >

This template class has to define a type Rebind_TDS<TDS_2>::Other which is the rebound face base, where the CGAL::Triangulation_data_structure_2 is actually plugged in.

This type Other will be the actual base of the class CGAL::Triangulation_data_structure_2::Face.

Note
It can be implemented using a nested template class.

## ◆ is_valid()

 bool TriangulationDSFaceBase_2::is_valid ( bool verbose = false ) const

performs any required test on a face.

If verbose is set to true, messages are printed to give a precise indication of the kind of invalidity encountered.

## ◆ neighbor()

 Face_handle TriangulationDSFaceBase_2::neighbor ( int i ) const

returns the neighbor i of the face.

Precondition
$$0\leq i \leq2$$.

## ◆ set_neighbor()

 void TriangulationDSFaceBase_2::set_neighbor ( int i, Face_handle n )

sets neighbor i to n.

Precondition
$$0\leq i \leq2$$.

## ◆ set_vertex()

 void TriangulationDSFaceBase_2::set_vertex ( int i, Vertex_handle v )

sets vertex i to v.

Precondition
$$0\leq i \leq2$$.

## ◆ vertex()

 Vertex_handle TriangulationDSFaceBase_2::vertex ( int i ) const

returns the vertex i of the face.

Precondition
$$0\leq i \leq2$$.