CGAL 4.7 - 2D Triangulation Data Structure: TriangulationDSFaceBase_2 Concept Reference

\( \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 4.7 - 2D Triangulation Data Structure

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
List of all members
TriangulationDSFaceBase_2 Concept Reference
Concepts

## Definition

The concept `TriangulationDSFaceBase_2` describes the requirements for the base face 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 a `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`.

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>`

See Also
  `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 `Compact_container` to store its faces. See the documentation of `Compact_container` for the exact requirements.
void * | for_compact_container () const
void *& | for_compact_container ()

## Member Typedef Documentation

template<typename TDS2 >

using TriangulationDSFaceBase_2::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.

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.

## Member Function Documentation

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.

Face_handle TriangulationDSFaceBase_2::neighbor | ( | int | i) |  | const

returns the neighbor `i` of the face.

Precondition
  \( 0\leq i \leq2\).

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

sets neighbor `i` to `n`.

Precondition
  \( 0\leq i \leq2\).

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

sets vertex `i` to `v`.

Precondition
  \( 0\leq i \leq2\).

Vertex_handle TriangulationDSFaceBase_2::vertex | ( | int | i) |  | const

returns the vertex `i` of the face.

Precondition
  \( 0\leq i \leq2\).