/// \defgroup PkgTriangulation3Ref Reference Manual
/// \defgroup PkgTriangulation3Concepts Concepts
/// \ingroup PkgTriangulation3Ref


/// \defgroup PkgTriangulation3TriangulationClasses Triangulation Classes
/// \ingroup PkgTriangulation3Ref

/// \defgroup PkgTriangulation3TraitsClasses Traits Classes
/// \ingroup PkgTriangulation3Ref

/// \defgroup PkgTriangulation3VertexCellClasses Vertex and Cell Classes
/// \ingroup PkgTriangulation3Ref

/*!
\cgalInclude{CGAL/draw_triangulation_3.h}
*/
/// \defgroup PkgDrawTriangulation3 Draw a Triangulation 3
/// \ingroup PkgTriangulation3Ref

/// \defgroup PkgIOTriangulation3 I/O for a Triangulation 3
/// \ingroup PkgTriangulation3Ref

/*!
\addtogroup PkgTriangulation3Ref
\cgalPkgDescriptionBegin{3D Triangulations,PkgTriangulation3}
\cgalPkgPicture{twotets.png}
\cgalPkgSummaryBegin
\cgalPkgAuthors{Clément Jamin, Sylvain Pion, and Monique Teillaud}
\cgalPkgDesc{This package allows to build and handle triangulations for point sets in three dimensions. Any \cgal triangulation covers the convex hull of its vertices. Triangulations are build incrementally  and can be modified by insertion, displacements or removal of vertices.  They offer point location facilities.  The package provides plain triangulation (whose faces depends on the  insertion order of the vertices) and Delaunay triangulations. %Regular triangulations are also provided for sets of weighted points. Delaunay and regular triangulations offer nearest neighbor queries and primitives to build the dual Voronoi and power diagrams. Optionally, the main Delaunay and regular triangulation algorithms (insert, remove) support multi-core shared-memory architectures to take advantage of available parallelism.}
\cgalPkgManuals{Chapter_3D_Triangulations,PkgTriangulation3Ref}
\cgalPkgSummaryEnd
\cgalPkgShortInfoBegin
\cgalPkgSince{2.1}
\cgalPkgDependsOn{\ref PkgTDS3}
\cgalPkgBib{cgal:pt-t3}
\cgalPkgLicense{\ref licensesGPL "GPL" }
\cgalPkgDemo{3D Triangulations,triangulation_3.zip}
\cgalPkgShortInfoEnd
\cgalPkgDescriptionEnd


A three-dimensional triangulation is a three-dimensional simplicial
complex, pure connected and without singularities \cgalCite{by-ag-98}. Its
cells (`3`-faces) are such that two cells either do not intersect or
share a common facet (`2`-face), edge (`1`-face) or vertex (`0`-face).

The basic 3D-triangulation class of \cgal is primarily designed to
represent the triangulations of a set of points \f$ A \f$ in \f$ \mathbb{R}^3 \f$.  It can
be viewed as a partition of the convex hull of \f$ A \f$ into tetrahedra
whose vertices are the points of \f$ A \f$.  Together with the unbounded
cell having the convex hull boundary as its frontier, the triangulation
forms a partition of \f$ \mathbb{R}^3 \f$.

In order to deal only with tetrahedra, which is convenient for many applications, the
unbounded cell can be subdivided into tetrahedra by considering that
each convex hull facet is incident to an <i>infinite cell</i> having as
fourth vertex an auxiliary vertex called the <i>infinite vertex</i>.  In
that way, each facet is incident to exactly two cells and special cases
at the boundary of the convex hull are simple to deal with.


A triangulation is a collection of vertices and cells that are linked
together through incidence and adjacency relations. Each cell gives
access to its four incident vertices and to its four adjacent
cells. Each vertex gives access to one of its incident cells.

The four vertices of a cell are indexed with 0, 1, 2 and 3 in positive
orientation, the positive orientation being defined by the orientation
of the underlying Euclidean space \f$ \mathbb{R}^3 \f$. The neighbors of a cell are also
indexed with 0, 1, 2, 3 in such a way that the neighbor indexed by `i`
is opposite to the vertex with the same index. See
\cgalFigureRef{Triangulation3figorient}.

\cgalClassifedRefPages

\cgalCRPSection{Concepts}

- `TriangulationTraits_3`
- `DelaunayTriangulationTraits_3`
- `RegularTriangulationTraits_3`
- `TriangulationVertexBase_3`
- `TriangulationVertexBaseWithInfo_3`
- `TriangulationCellBase_3`
- `TriangulationCellBaseWithInfo_3`
- `DelaunayTriangulationCellBase_3`
- `RegularTriangulationVertexBase_3`
- `RegularTriangulationCellBase_3`
- `RegularTriangulationCellBaseWithWeightedCircumcenter_3`
- `TriangulationDataStructure_3`
- `WeightedPoint`

\cgalCRPSection{Classes}

\cgalCRPSubsection{Main Classes}

- `CGAL::Triangulation_3<TriangulationTraits_3,TriangulationDataStructure_3,SurjectiveLockDataStructure>`
- `CGAL::Delaunay_triangulation_3<DelaunayTriangulationTraits_3,TriangulationDataStructure_3,LocationPolicy,SurjectiveLockDataStructure>`
- `CGAL::Regular_triangulation_3<RegularTriangulationTraits_3,TriangulationDataStructure_3,SurjectiveLockDataStructure>`
- `CGAL::Triangulation_vertex_base_3<TriangulationTraits_3, TriangulationDSVertexBase_3>`
- `CGAL::Triangulation_vertex_base_with_info_3<Info, TriangulationTraits_3, TriangulationVertexBase_3>`
- `CGAL::Triangulation_cell_base_3<TriangulationTraits_3, TriangulationDSCellBase_3>`
- `CGAL::Triangulation_cell_base_with_info_3<Info, TriangulationTraits_3, TriangulationCellBase_3>`
- `CGAL::Delaunay_triangulation_cell_base_3<DelaunayTriangulationTraits_3,Cb>`
- `CGAL::Delaunay_triangulation_cell_base_with_circumcenter_3<DelaunayTriangulationTraits_3,Cb>`
- `CGAL::Regular_triangulation_vertex_base_3<RegularTriangulationTraits_3,Vb>`
- `CGAL::Regular_triangulation_cell_base_3<RegularTriangulationTraits_3,Cb>`
- `CGAL::Regular_triangulation_cell_base_with_weighted_circumcenter_3<RegularTriangulationTraits_3,Cb>`
- `CGAL::Triangulation_simplex_3<Triangulation_3>`

\cgalCRPSubsection{Traits Classes}

- `CGAL::Regular_triangulation_euclidean_traits_3<K,Weight>`
- `CGAL::Robust_weighted_circumcenter_filtered_traits_3<K>`

\cgalCRPSection{Enums}

- `CGAL::Triangulation_3::Locate_type`

\cgalCRPSection{Draw a Triangulation 3}

- \link PkgDrawTriangulation3 CGAL::draw<T3>() \endlink

\cgalCRPSection{I/O}
 - \link PkgIOTriangulation3 CGAL::Triangulation_3::file_input<Tr_src, ConvertVertex, ConvertCell>()\endlink
 - \link PkgIOTriangulation3 CGAL::file_input<Tr_src, Tr_tgt, ConvertVertex, ConvertCell>()\endlink
*/

