diff --git a/Packages/Triangulation_3/doc_tex/Triangulation_3/TDS3.tex b/Packages/Triangulation_3/doc_tex/Triangulation_3/TDS3.tex
index de3b5e6ec54..200899274f9 100644
--- a/Packages/Triangulation_3/doc_tex/Triangulation_3/TDS3.tex
+++ b/Packages/Triangulation_3/doc_tex/Triangulation_3/TDS3.tex
@@ -25,12 +25,28 @@
\section{Introduction}
\label{TDS3-sec-intro}
-\subsection{Definition}
+A three-dimensional triangulation is a three-dimensional simplicial
+complex, pure connected and without singularities \cite{by-ag-98}. It
+is a set of cells ($3$-faces, tetrahedra) such that two cells
+either do not intersect or share a common facet ($2$-face), edge
+($1$-face) or vertex ($0$-face).
+
+A geometric triangulation has two aspects: the combinatorial structure which
+gives the incidence and adjacency relations between faces, and the
+geometric information related to the position of vertices.
+
+\cgal\ proposes 3D geometric triangulations in which these
+two aspects are clearly separated.
+
+This chapter deals with 3D- triangulation data structures, meant to
+maintain the combinatorial information for 3D-geometric
+triangulations. The reader interested in geometric triangulations of
+$\R^3$ is advised to read Chapter~\ref{chapter-Triangulation3}.
+
+\subsection{Representation}
\label{TDS3-sec-def}
-A 3D- triangulation data structure is meant to maintain the combinatorial
-information (incidence and adjacency relations) for 3D-geometric
-triangulations. In \cgal, a triangulation data structure is a
+In \cgal, a triangulation data structure is a
container of cells ($3$-faces) and vertices ($0$-faces). 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.
@@ -38,7 +54,21 @@ 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. 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.
+with the same index (see Figure~\ref{TDS3-fig-repres}).
+
+\begin{ccTexOnly}
+\begin{figure}
+\begin{center}
+\includegraphics{repres.eps}
+\end{center}
+\caption{Representation \label{TDS3-fig-repres}}
+\end{figure}
+\end{ccTexOnly}
+
+\begin{ccHtmlOnly}
+
+\end{ccHtmlOnly}
Edges ($1$-faces) and facets ($2$-faces) are not explicitely
represented: a facet is given by a cell and an index (the facet
@@ -57,7 +87,7 @@ is not of full dimension.
As described in Chapter~\ref{chapter-Triangulation3}, a geometric
triangulation of a set of points in $\R^d$ is a partition of the
whole space $\R^d$ into cells having $d+1$ vertices: some of them
-are infinite, they are obtained by liking an additional vertex at
+are infinite, they are obtained by linking an additional vertex at
infinity to each facet of the convex hull of the points.
The underlying combinatorial triangulation of such a triangulation
without boundary of $\R^d$ can be seen as a triangulation of the
@@ -76,15 +106,51 @@ the boundary of a 4-dimensional simplex, which has 5 vertices. A
geometric embedding consists in choosing one of these vertices to be
infinite, thus four of the five 3-cells becomes infinite: the geometric
triangulation has one finite tetrahedron remaining, each of its facets
-being incident to the infinite cell.
+being incident to the infinite cell. See Figure~\ref{TDS3-fig-topo-simplex4}.
+\begin{ccTexOnly}
+\begin{figure}
+\begin{center}
+\includegraphics{topo-simplex4.eps}
+\end{center}
+\caption{4D simplex and a 3D geometric embedding \label{TDS3-fig-topo-simplex4}}
+\end{figure}
+\end{ccTexOnly}
+\begin{ccHtmlOnly}
+
+\end{ccHtmlOnly}
\item \emph{dimension 2.} We have 4 vertices forming one 3-dimensional
simplex, i.e. the boundary of a tetrahedron. The geometric embedding in
the plane consists in choosing one of these vertices to be infinite,
then the geometric triangulation has one finite triangle whose edges are
-adjacent to the infinite triangles. See Figure~\ref{TDS3-fig-topo-simplex}.
+adjacent to the infinite triangles. See Figure~\ref{TDS3-fig-topo-simplex3}.
+\begin{ccTexOnly}
+\begin{figure}
+\begin{center}
+\includegraphics{topo-simplex3.eps}
+\end{center}
+\caption{3D simplex and a 2D geometric embedding \label{TDS3-fig-topo-simplex3}}
+\end{figure}
+\end{ccTexOnly}
+\begin{ccHtmlOnly}
+
+\end{ccHtmlOnly}
\item \emph{dimension 1.} A 2-dimensional simplex (a triangle) has 3
vertices. The geometric embedding is and edge whose vertices are linked
-to an infinite point.
+to an infinite point. See Figure~\ref{TDS3-fig-topo-simplex2}.
+\begin{ccTexOnly}
+\begin{figure}
+\begin{center}
+\includegraphics{topo-simplex2.eps}
+\end{center}
+\caption{2D simplex and a 1D geometric embedding \label{TDS3-fig-topo-simplex2}}
+\end{figure}
+\end{ccTexOnly}
+\begin{ccHtmlOnly}
+
+\end{ccHtmlOnly}
\end{itemize}
The last two cases are defined uniquely:
@@ -105,20 +171,6 @@ triangulation data structure. The infinite vertex of the geometric
embedding is a vertex without any particularity in the
combinatorial triangulation.
-\begin{ccTexOnly}
-\begin{figure}
-\begin{center}
-\includegraphics{topo-simplex.eps}
-\end{center}
-\caption{3D simplex and its 2D geometric embedding \label{TDS3-fig-topo-simplex}}
-\end{figure}
-\end{ccTexOnly}
-
-\begin{ccHtmlOnly}
-
-\end{ccHtmlOnly}
-
The implicit representation of facets (resp. edges) still holds
for degenerate ($< 3$) dimensions : in dimension~2, each cell has only one
facet of index 3, and 3 edges $(0,1)$, $(1,2)$ and $(2,0)$; in
@@ -189,29 +241,144 @@ software design in this case.
\end{ccHtmlOnly}
-In the bottom
-layer, the base classes store elementary geometric information as
-well as any other information for the given application. The middle
-layer class stores the triangulation data structure, which is purely
-combinatorial. It provides operations such as insertion of a new
-vertex in a given cell, and is responsible for the combinatorial
-integrity of the triangulation. The upper layer is the geometric
-triangulation class, providing operations such as location of a point
-in the triangulation, insertion of a point, and is responsible for
-the geometric validity.
+In the bottom layer, the \cgal\ base classes store elementary
+geometric information. These classes are parameterized by a geometric
+traits class providing all the geometric types. A vertex has a pointer
+to a cell, and a cell has four pointers to vertices. These pointers
+are of type \ccc{void*}.
-The triangulation data structure class is parameterized by the base
-vertex and the base cell classes. It is up to the user to derive its
-own base classes from the \cgal\ base classes, and to use the
-triangulation data structure class proposed by \cgal.
+The middle layer class stores the triangulation data structure, which
+is purely combinatorial. A vertex of the triangulation data structure
+has a pointer to a cell of the triangulation data structure, and a
+cell has four pointers to vertices. These pointers are usual
+\ccc{C++} pointers. The triangulation data structure provides
+operations such as insertion of a new vertex in a given cell, on a
+$1$ or $2$-face, or, if the dimension of the triangulation is smaller
+than 3, outside the ``affine'' hull of the vertices, thus increasing
+the dimension of the triangulation by one. The triangulation data
+structure is responsible for the combinatorial integrity of the
+triangulation.
+
+It is up to the user to derive its own base classes from the \cgal\
+base classes to add any other information the may need for his given
+application, or to write his own base classes from scratch. In this
+case, his base classes must be models for the concepts described in
+Section~\ref{TDS3-sec-concept-Base}. As the triangulation data
+structure class is parameterized by the base vertex and the base cell
+classes. it will consider the user's bases classes instead of the
+predefined base classes.
+
+The upper layer, described in Chapter~\ref{chapter-Triangulation3}, is
+the geometric triangulation class, providing operations such as
+location of a point in the triangulation, insertion of a point, and is
+responsible for the geometric validity. A vertex of the triangulation
+has a pointer to a cell and a cell has four pointers to
+vertices. These pointers are \cgal\ \emph{handles}. The triangulation
+data structure class is one of the template parameters of the
+geometric triangulation class. The user may choose to replace the
+\cgal\ triangulation data structure class by its own triangulation
+data structure, in this case, his class has to be a model of the
+concept described in Section~\ref{TDS3-sec-concept}.
\section{Examples}
\label{TDS3-sec-examples}
+The following example shows how to construct a 3D triangulation data
+structure by inserting vertices.
+\begin{verbatim}
+#include
+
+#include
+#include
+#include
+#include
+
+#include
+
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+// the definition of the geometric traits class is necessary to
+// instanciate base vertices and cells but will in fact never be used
+// in the program
+typedef CGAL::Cartesian Rep;
+typedef CGAL::Triangulation_geom_traits_3 Gt;
+
+typedef CGAL::Triangulation_vertex_base_3 Vb;
+typedef CGAL::Triangulation_cell_base_3 Cb;
+
+typedef CGAL::Triangulation_data_structure_3 Tds;
+
+typedef typename Tds::Cell TDSCell;
+typedef typename Tds::Vertex TDSVertex;
+
+int main()
+{
+ Tds T;
+
+ assert( T.number_of_vertices() == 0 );
+ assert( T.dimension() == -2 );
+ assert( T.is_valid() );
+
+ std::vector V(5);
+ std::vector PV(7);
+
+ PV[0] = T.insert_outside_affine_hull(V[0]);
+ assert( T.number_of_vertices() == 1 );
+ assert( T.dimension() == -1 );
+ assert( T.is_valid() );
+
+ int i;
+ // each of the following insertions of vertices increases the dimension
+ for ( i=1; i<5; i++ ) {
+ PV[i] = T.insert_outside_affine_hull(V[i], PV[0]);
+ assert( T.number_of_vertices() == i+1 );
+ assert( T.dimension() == i-1 );
+ assert( T.is_valid() );
+ }
+ assert( T.number_of_cells() == 5 );
+
+ // we now have a simplex in dimension 4
+
+ // cell incident to PV[0]
+ TDSCell* c = PV[0]->cell();
+ int ind;
+ assert( c->has_vertex( PV[0], ind ) );
+ // PV[0] is the vertex of index ind in c
+
+ // insertion of a new vertex in the facet opposite to PV[0]
+ PV[5] = T.insert_in_facet(TDSVertex(), c, ind);
+
+ assert( T.number_of_vertices() == 6 );
+ assert( T.dimension() == 3 );
+ assert( T.is_valid() );
+
+ // insertion of a new vertex in c
+ PV[6] = T.insert_in_cell( TDSVertex(), c );
+
+ assert( T.number_of_vertices() == 7 );
+ assert( T.dimension() == 3 );
+ assert( T.is_valid() );
+
+ std::ofstream oFileT("output_tds",ios::out);
+ // writing file output_tds;
+ oFileT << T;
+
+ return 0;
+}
+\end{verbatim}
\clearpage
\section{Concepts}
+This section describes the concepts for a 3D- triangulation data
+structure, its vertices and cells.
+
\subsection{Concepts for a 3D- Triangulation Data Structure}
\label{TDS3-sec-concept}
\begin{ccClassTemplate}{Tds}
@@ -277,9 +444,12 @@ incident to a given edge. They are bidirectional and non mutable.
\ccMethod{Tds operator=(const Tds & tds1);}
{Assignment. All the vertices and cells are duplicated.}
+The previous first two methods are equivalent.
+
\ccMethod{void swap(Tds & tds1);}
{Swaps \ccVar\ and \ccc{tds1}. Should be preferred to \ccVar=\ccc{tds1}
-or \ccVar(\ccc{tds1}) when tds1 is deleted after that.}
+or \ccVar(\ccc{tds1}) when tds1 is deleted after that. Indeed, there is no
+copy of cells and vertices, thus this method runs in constant time.}
\ccMethod{Vertex* copy_tds(const Tds & tds1, Vertex* v = NULL);}
{\ccc{tds1} is copied into \ccVar. The vertex of \ccVar\
@@ -288,7 +458,8 @@ corresponding to \ccc{v} is returned.
\ccc{tds1}.}}
\ccFunction{void \ccTilde\ccVar();}
-{Destructor. All vertices and cells are deleted.}
+{Destructor. All vertices and cells are deleted, and \ccVar\ itself is
+deleted.}
\ccAccessFunctions
@@ -424,11 +595,12 @@ operation is exactly reciprocal to \ccc{\ccVar.insert_in_cell(v)}.
\textit{not yet implemented}}
\ccMethod{void clear();}
-{Deletes all cells and vertices.}
+{Deletes all cells and vertices. \ccVar\ is reset as a triangulation
+data structure constructed by the default constructor.}
In addition to these requirements, in order to be used as a triangulation
data structure by the class
-\ccc{CGAL_Delaunay_triangulation_3}, the triangulation
+\ccc{Delaunay_triangulation_3}, the triangulation
must offer the following method:
\ccMethod{void star_region( set > & region,
@@ -542,8 +714,6 @@ each cell given by their index in the preceding list of cells.
\ccCreationVariable{v}
-The vertex stores a point and a pointer to an incident cell.
-
The vertex class of a 3D- triangulation data structure must define
the types and operations listed in this section. Some of these
requirements are of geometric nature, they are \textit{optional}
@@ -725,8 +895,8 @@ a precise indication on the kind of invalidity encountered.}
\end{ccClass}
-\begin{ccClassTemplate}{CGAL_Triangulation_data_structure_3}
-\section{The Triangulation Data Structure Class\\
+\begin{ccClassTemplate}{Triangulation_data_structure_3}
+\section{A model of Triangulation Data Structure:\\
\protect \ccClassTemplateName}
\label{TDS3-sec-class}
@@ -736,26 +906,24 @@ geometric functionalities. It is templated by base classes for
vertices and cells described in Section~\ref{TDS3-sec-concept-Base}.
\ccInheritsFrom
-\ccc{CGAL_Triangulation_utils_3}
+\ccc{Triangulation_utils_3}
\\This class defines basic computations on indices of vertices and
-neighbors of cells (see Section~\ref{Triangulation3-sec-class-Utils} of
+neighbors of cells (Details are presented in
+Section~\ref{Triangulation3-sec-class-Utils} of
Chapter~\ref{chapter-Triangulation3}).
\ccInclude{CGAL/Triangulation_data_structure_3.h}
-The class \ccc{CGAL_Triangulation_ds_vertex_3} is a model for the vertex
+The class \ccc{Triangulation_ds_vertex_3} is a model for the vertex
concept described in Section~\ref{TDS3-sec-concept-Tds_Vertex}.
\ccInclude{CGAL/Triangulation_ds_vertex_3.h}
-The class \ccc{CGAL_Triangulation_ds_cell_3} is a model for the
+The class \ccc{Triangulation_ds_cell_3} is a model for the
cell concept described in Section~\ref{TDS3-sec-concept-Tds_Cell}.
\ccInclude{CGAL/Triangulation_ds_cell_3.h}
-\ccInheritsFrom
-\ccc{CGAL_Triangulation_utils_3}
-
\end{ccClassTemplate}
\section{Concepts for the Base Vertices and Cells}
@@ -943,29 +1111,33 @@ a precise indication on the kind of invalidity encountered.}
\end{ccClass}
-\section{The Base Classes for Vertices and Cells}
+\section{Models of Base Vertices and Cells}
\label{TDS3-sec-class-Base}
- \begin{ccClassTemplate}{CGAL_Triangulation_vertex_base_3}
+ \begin{ccClassTemplate}{Triangulation_vertex_base_3}
\subsection{The Base Class \protect \ccClassTemplateName}
\label{TDS3-sec-class-Base_Vertex}
-This class is proposed by \cgal\ as a base vertex class.
-It is templated by a geometric traits class. Using the same
-geometric traits class \ccc{Traits} as the one used for
-\ccc{CGAL_Triangulation_3} is strongly advised. In this way, the
-point type defined by \ccClassName\ is the same as the point type
-defined by the geometric traits class.
+This class is proposed by \cgal\ as a base vertex class. It is
+templated by a geometric traits class \ccc{Traits} that provides the
+geometric types. The user who uses the geometric layer (see
+Section~\ref{TDS3-sec-design} and
+Chapter~\ref{chapter-Triangulation3}) is strongly advised to use the
+same geometric traits class \ccc{Traits} as the one used for
+\ccc{Triangulation_3}. In this way, the point type
+defined by \ccClassName\ is the same as the point type defined by the
+geometric traits class. The default geometric traits class proposed by
+\cgal\ is presented in Section~\ref{Triangulation3-sec-Traits}.
-This base class can be used directly or can serve as a base to derive
-other base classes with some additionnal attribute (a color for example)
-tuned for a specific application.
+This base class can be used directly or can serve as a base to derive
+other base classes with some additionnal attributes (a color for
+example) tuned for a specific application.
\ccInclude{CGAL/Triangulation_vertex_base_3.h}
\end{ccClassTemplate}
- \begin{ccClassTemplate}{CGAL_Triangulation_cell_base_3}
+ \begin{ccClassTemplate}{Triangulation_cell_base_3}
\subsection{The Base Class \protect \ccClassTemplateName}
This class is proposed by \cgal\ as a base cell class, and is similar
@@ -975,4 +1147,3 @@ Section~\ref{TDS3-sec-class-Base_Vertex}).
\ccInclude{CGAL/Triangulation_cell_base_3.h}
\end{ccClassTemplate}
-
diff --git a/Packages/Triangulation_3/doc_tex/Triangulation_3/Triangulation3.tex b/Packages/Triangulation_3/doc_tex/Triangulation_3/Triangulation3.tex
index 267df4975fb..0a977dbf3d7 100644
--- a/Packages/Triangulation_3/doc_tex/Triangulation_3/Triangulation3.tex
+++ b/Packages/Triangulation_3/doc_tex/Triangulation_3/Triangulation3.tex
@@ -46,7 +46,7 @@ fourth vertex an auxiliary vertex called the \ccc{infinite vertex}. 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.
-The class \ccc{CGAL_Triangulation_3} of \cgal\ implements this
+The class \ccc{Triangulation_3} of \cgal\ implements this
point of view and therefore considers the triangulation of the set
of points as a set of finite and infinite tetrahedra. Notice that the
infinite vertex has no significant coordinates and that no
@@ -58,23 +58,45 @@ 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 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.
+orientation, the orientation being defined by the orientation of the
+underlying space $\R^3$. 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
+Figure~\ref{Triangulation3-fig-orient}.
-Edges ($1$-faces) and facets ($2$-faces) are not explicitely represented:
-a facet is given by a cell and an index (the facet
+\begin{ccTexOnly}
+\begin{figure}[htbp]
+\begin{center}
+\includegraphics{orient.eps}
+\end{center}
+\caption{Orientation of a cell (3-dimensional case)
+\label{Triangulation3-fig-orient}}
+\end{figure}
+\end{ccTexOnly}
+
+\begin{ccHtmlOnly}
+
+\end{ccHtmlOnly}
+
+As in the underlying combinatorial triangulation (see
+Chapter~\ref{chapter-TDS3}), edges ($1$-faces) and facets ($2$-faces)
+are not explicitely
+represented: a facet is given by a cell and an index (the facet
\ccc{i} of a cell \ccc{c} is the facet of \ccc{c} that is opposite to
the vertex of index \ccc{i}) and an edge is given by a cell and two
-indices (the edge \ccc{(i,j)} of a cell \ccc{c} is the edge
-whose endpoints are the vertices of indices \ccc{i} and \ccc{j} of
-\ccc{c}).
+indices (the edge \ccc{(i,j)} of a cell \ccc{c} is the edge whose
+endpoints are the vertices of indices \ccc{i} and \ccc{j} of
+\ccc{c}). See Figure~\ref{TDS3-fig-repres}.
\subsection{Degenerate Dimensions}
\label{Triangulation3-sec-degen_dim}
-The class \ccc{CGAL_Triangulation_3} can deal with degenerate
-dimensions:
+The class \ccc{Triangulation_3} can deal with degenerate
+dimensions. A triangulation of a set of points in $\R^d$ is a partition of the
+whole space $\R^d$ into cells having $d+1$ vertices: some of them
+are infinite, they are obtained by linking the additional infinite
+vertex to each facet of the convex hull of the points.
\begin{itemize}
\item {} \emph{dimension 2:} when a triangulation only contains
coplanar points (which is the case when there are only three points),
@@ -121,21 +143,6 @@ When all the points are collinear, this condition becomes:
{\bf (c-1D)} For any two adjacent edges $(u,v)$ and $(v,w)$, $u$ and
$w$ lie on opposite sides of the common vertex $v$.
-\begin{ccTexOnly}
-\begin{figure}[htbp]
-\begin{center}
-\includegraphics{orient.eps}
-\end{center}
-\caption{Orientation of a cell (3-dimensional case)
-\label{Triangulation3-fig-orient}}
-\end{figure}
-\end{ccTexOnly}
-
-\begin{ccHtmlOnly}
-
-\end{ccHtmlOnly}
-
The \ccc{is_valid()} method provided by \cgal\ checks the local
validity of a given triangulation. This does not always
ensure global validity \cite{mnssssu-cgpvg-96,dlpt-ccpps-98} but it is
@@ -144,7 +151,7 @@ sufficient for practical cases.
\section{Software Design}
\label{Triangulation3-sec-design}
-The class \ccc{CGAL_Triangulation_3} is designed to be used as
+The class \ccc{Triangulation_3} is designed to be used as
a layer upon a 3D-triangulation data structure as presented in
Section~\ref{TDS3-sec-design} of Chapter~\ref{chapter-TDS3}.
It provides high level geometric operations such as location of a point
@@ -163,22 +170,114 @@ described in Chapter~\ref{chapter-TDS3}.
Delaunay triangulations as well as hierarchical Delaunay triangulations
\cite{d-iirdt-98} are also implemented in the package:
-\ccc{CGAL_Delaunay_triangulation_3} inherits from
-\ccc{CGAL_Triangulation_3} and
-\ccc{CGAL_Delaunay_hierarchic_triangulation_3} inherits from
-\ccc{CGAL_Delaunay_triangulation_3}.
+\ccc{Delaunay_triangulation_3} inherits from
+\ccc{Triangulation_3} and
+\ccc{Delaunay_hierarchic_triangulation_3} inherits from
+\ccc{Delaunay_triangulation_3}. \textit{(hierarchical
+Delaunay triangulations are not yet implemented).}
-\ccc{CGAL_Triangulation_3} derives from
-\ccc{CGAL_Triangulation_utils_3}, which defines tools on
+\ccc{Triangulation_3} derives from
+\ccc{Triangulation_utils_3}, which defines tools on
the indices of vertices in cells (see
Section~\ref{Triangulation3-sec-class-Utils}).
\section{Examples}
\label{Triangulation3-sec-examples}
+This example shows the incremental construction of a 3D triangulation,
+the location of a point, and how to manipulate elementary operations
+on indices in a cell.
+
+\begin{verbatim}
+#include
+
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+
+typedef CGAL::Cartesian Rep;
+
+typedef CGAL::Triangulation_geom_traits_3 Gt;
+typedef CGAL::Triangulation_vertex_base_3 Vb;
+typedef CGAL::Triangulation_cell_base_3 Cb;
+
+typedef CGAL::Triangulation_data_structure_3 TDS;
+typedef CGAL::Triangulation_3 Triangulation;
+
+typedef typename Triangulation::Cell_handle Cell_handle;
+typedef typename Triangulation::Vertex_handle Vertex_handle;
+typedef typename Triangulation::Locate_type Locate_type;
+
+typedef Gt::Point Point;
+
+int main(int argc, char* argv[])
+{
+
+ Triangulation T;
+
+ // insertion from a list :
+ std::list L;
+ L.push_front(Point(0,0,0));
+ L.push_front(Point(1,0,0));
+ L.push_front(Point(0,1,0));
+
+ int n = T.insert(L.begin(), L.end());
+
+ // insertion from a vector :
+ std::vector V(3);
+ V[0] = Point(0,0,1);
+ V[1] = Point(1,1,1);
+ V[2] = Point(2,2,2);
+
+ n = n + T.insert(V.begin(), V.end());
+
+ // 6 points have been inserted :
+ assert( n == 6 );
+
+ // checking validity of T :
+ assert( T.is_valid(false) );
+
+ Locate_type lt;
+ int li, lj;
+ Point p(0,0,0);
+ Cell_handle c = T.locate(p, lt, li, lj);
+ // p is the vertex of c of index li :
+ assert( lt == Triangulation::VERTEX );
+ assert( c->vertex(li)->point() == p );
+
+ Vertex_handle v = c->vertex( (li+1)&3 );
+ // v is another vertex of c
+ Cell_handle nc = c->neighbor(li);
+ // nc = neighbor of c opposite to the vertex associated with p
+ // nc must have vertex v :
+ int nli;
+ assert( nc->has_vertex( v, nli ) );
+ // nli is the index of v in nc
+
+ std::ofstream oFileT("output",ios::out);
+ // writing file output;
+ oFileT << T;
+
+ return 0;
+}
+\end{verbatim}
\clearpage
-\begin{ccClass}{CGAL_Triangulation_utils_3}
+\begin{ccClass}{Triangulation_utils_3}
\section{A Class of Tools \protect \ccClassTemplateName}
\label{Triangulation3-sec-class-Utils}
@@ -223,7 +322,7 @@ Figure~\ref{Triangulation3-fig-utils}).
\end{ccClass}
-\begin{ccClassTemplate}{CGAL_Triangulation_3}
+\begin{ccClassTemplate}{Triangulation_3}
\section{The Triangulation Class \protect \ccClassTemplateName}
\ccDefinition
@@ -237,7 +336,7 @@ and~\ref{Triangulation3-sec-class-Traits}.
\ccInclude{CGAL/Triangulation_3.h}
\ccInheritsFrom
-\ccc{CGAL_Triangulation_utils_3}
+\ccc{Triangulation_utils_3}
(see Section~\ref{Triangulation3-sec-class-Utils})
\ccTypes
@@ -278,7 +377,8 @@ A handle is a type which supports the two dereference operators
bidirectionnel and non mutable. Circulators and iterators are
assignable to the corresponding handle types. Whenever a handle appears
in the parameter list of a function, an appropriate iterator or
-circulator can be used as well \textit{not yet implemented}. The edges and facets of the
+circulator can be used as well \textit{(not yet implemented)}. The
+edges and facets of the
triangulation can also be visited through iterators and circulators
which are bidirectionnel and non mutable.
@@ -314,7 +414,7 @@ OUTSIDE_AFFINE_HULL};}
{Introduces a triangulation \ccVar\ having only one vertex which is the
infinite vertex.}
-\ccConstructor{\ccClassName(const CGAL_Triangulation_3 & tr);}
+\ccConstructor{\ccClassName(const Triangulation_3 & tr);}
{Copy constructor. All the vertices and faces are duplicated.
\ccVar\ and \ccc{tr}\ refer to different triangulations. After the copy,
if \ccc{tr} is modified, \ccVar\ is not modified.}
@@ -325,19 +425,22 @@ deleted.}
\ccHeading{Assignment}
-\ccMethod{CGAL_Triangulation_3
- operator=(const CGAL_Triangulation_3 & tr);}
+\ccMethod{Triangulation_3
+ operator=(const Triangulation_3 & tr);}
{The triangulation is duplicated, and modifying one after the
copy does not modify the other.}
-\ccMethod{copy_triangulation
- (const CGAL_Triangulation_3 & tr);}
+\ccMethod{void copy_triangulation
+ (const Triangulation_3 & tr);}
{The triangulation is duplicated.}
-\ccMethod{void swap(CGAL_Triangulation_3 & tr);}
+The previous first two methods are equivalent.
+
+\ccMethod{void swap(Triangulation_3 & tr);}
{The triangulations \ccc{tr} and \ccVar\ are swapped.
\ccc{\ccVar.swap(tr)} should be preferred to \ccVar\ = \ccc{tr} or to
-\ccc{t(tr)} if \ccc{tr} is deleted after that.}
+\ccc{t(tr)} if \ccc{tr} is deleted after that. Indeed, there is no
+copy of cells and vertices, thus this method runs in constant time.}
\ccAccessFunctions
\ccMethod{const Traits & geom_traits() const;}
@@ -553,69 +656,69 @@ triangulation, \ccc{lt} is set to \ccc{OUTSIDE_AFFINE_HULL} and
{Same as the previous method, but \ccc{start} is used as a starting
place for the location.}
-\ccMethod{CGAL_Bounded_side
+\ccMethod{Bounded_side
side_of_cell(const Point & p,
Cell_handle c,
Locate_type & lt, int & li, int & lj) const;}
{Returns on which side of the oriented boundary of \ccc{c} lies
the point \ccc{p}. More precisely, it returns:\\
-- \ccc{CGAL_ON_BOUNDED_SIDE} if \ccc{p} is inside the cell (for an infinite
+- \ccc{ON_BOUNDED_SIDE} if \ccc{p} is inside the cell (for an infinite
cell this means that \ccc{p} lies strictly in the half space limited by
its finite facet) \\
-- \ccc{CGAL_ON_BOUNDARY} if p on the boundary of the cell (for an infinite
+- \ccc{ON_BOUNDARY} if p on the boundary of the cell (for an infinite
cell this means that \ccc{p} lies on the *finite* facet). Then
\ccc{lt} together with \ccc{li} and \ccc{lj} give the precise location
on the boundary (see the descriptions of \ccc{locate} methods)\\
-- \ccc{CGAL_ON_UNBOUNDED_SIDE} if \ccc{p} lies outside the cell (for an
+- \ccc{ON_UNBOUNDED_SIDE} if \ccc{p} lies outside the cell (for an
infinite cell this means that \ccc{p} is not in the preceding two
cases).
\ccPrecond{\ccc{\ccVar.dimension()} $=3$}}
-\ccMethod{CGAL_Bounded_side
+\ccMethod{Bounded_side
side_of_facet(const Point & p,
const Facet & f,
Locate_type & lt, int & li, int & lj) const;}
{Returns on which side of the oriented boundary of \ccc{f} lies
the point \ccc{p}:\\
-- \ccc{CGAL_ON_BOUNDED_SIDE} if \ccc{p} is inside the facet (for an
+- \ccc{ON_BOUNDED_SIDE} if \ccc{p} is inside the facet (for an
infinite facet this means that \ccc{p} lies strictly in the half plane
limited by its finite edge) \\
-- \ccc{CGAL_ON_BOUNDARY} if \ccc{p} is on the boundary of the facet
+- \ccc{ON_BOUNDARY} if \ccc{p} is on the boundary of the facet
(for an infinite facet this means that \ccc{p} lies on the finite
edge). \ccc{lt}, \ccc{li} and \ccc{lj} give the precise location of
\ccc{p} on the boundary of the facet. \ccc{li} and \ccc{lj} refer to
indices in the cell \ccc{c} storing \ccc{f}\\
-- \ccc{CGAL_ON_UNBOUNDED_SIDE} if \ccc{p} lies outside the facet (for
+- \ccc{ON_UNBOUNDED_SIDE} if \ccc{p} lies outside the facet (for
an infinite facet this means that \ccc{p} is not in the preceding two
cases)
\ccPrecond{\ccc{\ccVar.dimension()} $=2$ and \ccc{p} lies in the
plane containing the triangulation. \ccc{f.first} $=3$ (in dimension~2
there is only one facet per cell).}}
\ccGlue
-\ccMethod{CGAL_Bounded_side
+\ccMethod{Bounded_side
side_of_facet(const Point & p,
Cell_handle c,
Locate_type & lt, int & li, int & lj) const;}
{Same as the previous method for the facet \ccc{(c,3)}.}
-\ccMethod{CGAL_Bounded_side
+\ccMethod{Bounded_side
side_of_edge(const Point & p,
const Edge & e,
Locate_type & lt, int & li) const;}
{Returns on which side of the oriented boundary of \ccc{e} lies
the point \ccc{p}:\\
-- \ccc{CGAL_ON_BOUNDED_SIDE} if \ccc{p} is inside the edge (for an
+- \ccc{ON_BOUNDED_SIDE} if \ccc{p} is inside the edge (for an
infinite edge this means that \ccc{p} lies in the half line defined by
the vertex)\\
-- \ccc{CGAL_ON_BOUNDARY} if \ccc{p} equals one of the vertices,
+- \ccc{ON_BOUNDARY} if \ccc{p} equals one of the vertices,
\ccc{li} give the index of the vertex in the cell storing \ccc{e}\\
-- \ccc{CGAL_ON_UNBOUNDED_SIDE} if \ccc{p} lies outside the edge (for
+- \ccc{ON_UNBOUNDED_SIDE} if \ccc{p} lies outside the edge (for
an infinite edge this means that \ccc{p} lies on the other half line)\\
\ccPrecond{\ccc{\ccVar.dimension()} $=1$ and \ccc{p} is collinear
with the points of the triangulation. \ccc{e.first} $=0$ and
\ccc{e.second} $=1$ (in dimension~2 there is only one edge per cell).}}
\ccGlue
-\ccMethod{CGAL_Bounded_side
+\ccMethod{Bounded_side
side_of_edge(const Point & p,
Cell_handle c,
Locate_type & lt, int & li) const;}
@@ -691,8 +794,8 @@ inside cell \ccc{c}.}}
{Inserts point \ccc{p} in facet \ccc{f}. In dimension~3, the 2
neighboring cells are split into 3 tetrahedra; in dimension~2, the facet
is split into 3 triangles.
-\ccPrecond{\ccc{\ccVar.dimension()} $\geq 2$ and \ccc{p} lies inside
-face \ccc{f}.}}
+\ccPrecond{\ccc{\ccVar.dimension()} $\geq 2$ and \ccc{p} lies strictly
+inside face \ccc{f}.}}
\ccGlue
\ccMethod{Vertex_handle insert_in_facet(const Point & p,
Cell_handle c, int i);}
@@ -717,7 +820,7 @@ dimension~1.}}
\ccMethod{Vertex_handle insert_outside_convex_hull(const Point & p,
Cell_handle c,
int li, int lj=0);}
-{\ccc{c}, together with \ccc{li} and possibly \ccc{lj}, give a
+{The cell \ccc{c}, together with \ccc{li} and possibly \ccc{lj}, give a
separator (facet, edge or vertex, depending on the dimension) for
\ccc{p} from the triangulation (see the description of method
\ccc{locate()} for more details on the way the separator is represented).\\
@@ -792,7 +895,7 @@ and \ccc{Vertex}. They are all invalidated by any change in the
triangulation.
\ccMethod{Vertex_iterator finite_vertices_begin() const;}
-{Starts at an arbitrary finite vertex. Then \ccc{$++$} and \ccc{$--$} will
+{Starts at an arbitrary finite vertex. Then \ccc{++} and \ccc{--} will
iterate on finite vertices. Returns \ccc{vertices_end()} when
\ccc{\ccVar.number_of_vertices()} $<1$.}
\ccGlue
@@ -805,7 +908,7 @@ ones). Returns \ccc{vertices_end()} when
{Past-the-end iterator}
\ccMethod{Edge_iterator finite_edges_begin() const;}
-{Starts at an arbitrary finite edge. Then \ccc{$++$} and \ccc{$--$} will
+{Starts at an arbitrary finite edge. Then \ccc{++} and \ccc{--} will
iterate on finite edges. Returns \ccc{edges_end()} when
\ccc{\ccVar.dimension()} $<1$.}
\ccGlue
@@ -817,7 +920,7 @@ ones). Returns \ccc{edges_end()} when \ccc{\ccVar.dimension()} $<1$.}
{Past-the-end iterator}
\ccMethod{Facet_iterator finite_facets_begin() const;}
-{Starts at an arbitrary finite facet. Then \ccc{$++$} and \ccc{$--$} will
+{Starts at an arbitrary finite facet. Then \ccc{++} and \ccc{--} will
iterate on finite facets. Returns \ccc{facets_end()} when
\ccc{\ccVar.dimension()} $<2$.}
\ccGlue
@@ -830,7 +933,7 @@ ones). Returns \ccc{facets_end()} when
{Past-the-end iterator}
\ccMethod{Cell_iterator finite_cells_begin() const;}
-{Starts at an arbitrary finite cell. Then \ccc{$++$} and \ccc{$--$} will
+{Starts at an arbitrary finite cell. Then \ccc{++} and \ccc{--} will
iterate on finite cells. Returns \ccc{cells_end()} when
\ccc{\ccVar.dimension()} $<3$.}
\ccGlue
@@ -907,7 +1010,7 @@ debugging.
\ccMethod{bool
is_valid(bool verbose = false) const;}
-{Checks the combinatorial validity of the triangulation and also the
+{Checks the combinatorial validity of the triangulation. Checks also the
validity of its geometric embedding (see
Section~\ref{Triangulation3-sec-Valid}). When \ccc{verbose} is set to true,
messages describing the first invalidity encountered are printed.\\
@@ -936,7 +1039,7 @@ corresponding input operators of the vertex and the cell
classes. Assigns the resulting triangulation to \ccc{t}.}
\ccFunction{ostream& operator<<
-(ostream& os, const CGAL_Triangulation_3 &t);}
+(ostream& os, const Triangulation_3 &t);}
{Writes the triangulation \ccc{t} into \ccc{os}.}
The information in the \ccc{iostream} is: the dimension, the number of
@@ -949,7 +1052,7 @@ of maximal dimension.)
\end{ccClassTemplate}
-\begin{ccClassTemplate}{CGAL_Triangulation_vertex_3}
+\begin{ccClassTemplate}{Triangulation_vertex_3}
\section{The Vertex Class of a Triangulation \protect \ccClassTemplateName}
\label{Triangulation3-sec-class-Vertex}
@@ -973,9 +1076,9 @@ defined in the class \ccc{Triangulation_3}:
\ccGlue
\ccTypedef{typedef typename Tds::Cell Ctds;}{cell of the triangulation data structure}
\ccGlue
-\ccTypedef{typedef CGAL_Triangulation_vertex_handle_3 Vertex_handle;}{handle to a vertex}
+\ccTypedef{typedef Triangulation_vertex_handle_3 Vertex_handle;}{handle to a vertex}
\ccGlue
-\ccTypedef{typedef CGAL_Triangulation_cell_handle_3 Cell_handle;}{handle to a cell}
+\ccTypedef{typedef Triangulation_cell_handle_3 Cell_handle;}{handle to a cell}
\begin{ccAdvanced}
\ccCreation
@@ -1034,7 +1137,7 @@ of maximal dimension (Section~\ref{Triangulation3-sec-degen_dim}).}
\end{ccClassTemplate}
-\begin{ccClassTemplate}{CGAL_Triangulation_cell_3}
+\begin{ccClassTemplate}{Triangulation_cell_3}
\section{The Cell Class of a Triangulation \protect \ccClassTemplateName}
\label{Triangulation3-sec-class-Cell}
@@ -1056,7 +1159,7 @@ dimension: (Section~\ref{Triangulation3-sec-degen_dim}).
\ccTypes
The class \ccClassTemplateName\ defines the same types as the
-\ccc{CGAL_Triangulation_vertex_3} class.
+\ccc{Triangulation_vertex_3} class.
\begin{ccAdvanced}
\ccCreation
@@ -1168,7 +1271,7 @@ computes the index \ccc{i} of the neighbor.}
\label{Triangulation3-sec-Traits}
The first template parameter of the triangulation class
-\ccc{CGAL_Triangulation_3} of \cgal\ is the geometric traits class.
+\ccc{Triangulation_3} of \cgal\ is the geometric traits class.
The first subsection of this section describes the requirements
that the geometric traits class must fulfill. The second subsection
@@ -1180,12 +1283,12 @@ presents a predefined geometric traits class available in \cgal.
\protect \ccClassName}
\label{Triangulation3-sec-concept-Traits}
-\subsubsection{To be used by \protect \ccc{CGAL_Triangulation_3}}
+\subsubsection{To be used by \protect \ccc{Triangulation_3}}
\ccCreationVariable{traits}
The geometric traits class \ccClassName\ of the triangulation
-class \ccc{CGAL_Triangulation_3} must define the geometric
+class \ccc{Triangulation_3} must define the geometric
objects (points, segments, triangles and tetrahedra) forming the
triangulation together with a few geometric predicates on these objects:
equality, coordinates comparison, orientation in the space, orientation
@@ -1225,36 +1328,36 @@ can be provided.
\ccMethod{bool equal(const Point & p, const Point & q) const;}
{Equality test.}
-\ccMethod{CGAL_Comparison_result compare_x(const Point & p, const Point
+\ccMethod{Comparison_result compare_x(const Point & p, const Point
& q) const;}
-{Comparison of \ccc{x}-coordinates. Returns \ccc{CGAL_LARGER}
-(resp. \ccc{CGAL_EQUAL}, \ccc{CGAL_SMALLER}) when the \ccc{x}
+{Comparison of \ccc{x}-coordinates. Returns \ccc{LARGER}
+(resp. \ccc{EQUAL}, \ccc{SMALLER}) when the \ccc{x}
coordinate of \ccc{p} is larger than (resp. equal to, smaller than)
the \ccc{x} coordinate of \ccc{q}.}
\ccGlue
-\ccMethod{CGAL_Comparison_result compare_y(const Point & p, const Point
+\ccMethod{Comparison_result compare_y(const Point & p, const Point
& q) const;}
{Comparison of \ccc{y}-coordinates.}
\ccGlue
-\ccMethod{CGAL_Comparison_result compare_z(const Point & p, const Point
+\ccMethod{Comparison_result compare_z(const Point & p, const Point
& q) const;}
{Comparison of \ccc{z}-coordinates.}
-\ccMethod{CGAL_Orientation orientation(const Point& p0,
+\ccMethod{Orientation orientation(const Point& p0,
const Point& p1,
const Point& p2,
const Point& p3) const;}
{Orientation test in three dimensions.}
-\ccMethod{CGAL_Orientation orientation_in_plane
+\ccMethod{Orientation orientation_in_plane
(const Point & q,
const Point & r,
const Point & s,
const Point & test) const;}
{When \ccc{test, q, r, s} are coplanar, tests whether \ccc{test} is on the
-same side of \ccc{(q, r)} as \ccc{s}. Returns \ccc{CGAL_COLLINEAR} if
-\ccc{test, q, r} are collinear, \ccc{CGAL_POSITIVE} if \ccc{(q, r, test)}
-and \ccc{(q, r, s)} have the same orientation, \ccc{CGAL_NEGATIVE} if
+same side of \ccc{(q, r)} as \ccc{s}. Returns \ccc{COLLINEAR} if
+\ccc{test, q, r} are collinear, \ccc{POSITIVE} if \ccc{(q, r, test)}
+and \ccc{(q, r, s)} have the same orientation, \ccc{NEGATIVE} if
\ccc{(q, r, test)} and \ccc{(q, r, s)} have opposite orientations.
\ccPrecond{\ccc{test,q,r,s} are coplanar and \ccc{q,r,s} are not collinear.}}
@@ -1264,7 +1367,7 @@ and \ccc{(q, r, s)} have the same orientation, \ccc{CGAL_NEGATIVE} if
{Collinearity test.}
\subsubsection{To be used by \protect
-\ccc{CGAL_Delaunay_triangulation_3}}
+\ccc{Delaunay_triangulation_3}}
In addition to the requirements described before, the geometric traits
class of a
@@ -1272,7 +1375,7 @@ Delaunay triangulation must fulfill the following requirements:
\ccHeading{Predicates}
-\ccMethod{CGAL_Oriented_side
+\ccMethod{Oriented_side
side_of_oriented_sphere(const Point & p,
const Point & q,
const Point & r,
@@ -1281,23 +1384,23 @@ Delaunay triangulation must fulfill the following requirements:
{Computes the side of point \ccc{test} with respect to the oriented
sphere circumscribing \ccc{p,q,r,s}.}
-\ccMethod{CGAL_Oriented_side
+\ccMethod{Oriented_side
side_of_oriented_circle(const Point & p,
const Point & q,
const Point & r,
const Point & test) const;}
-{computes the side of \ccc{test} with respect to the oriented circle
+{Computes the side of \ccc{test} with respect to the oriented circle
circumscribing \ccc{p,q,r}.
\ccPrecond{\ccc{p,q,r,test} are coplanar.}}
\subsubsection{To be used by \protect
-\ccc{CGAL_Delaunay_hierarchic_triangulation_3}}
+\ccc{Delaunay_hierarchic_triangulation_3}}
\textit{Not yet implemented}
\end{ccClass}
- \begin{ccClassTemplate}{CGAL_Triangulation_geom_traits_3}
+ \begin{ccClassTemplate}{Triangulation_geom_traits_3}
\subsection{The Class \protect \ccClassTemplateName}
\label{Triangulation3-sec-class-Traits}
@@ -1314,13 +1417,13 @@ Section~\ref{Triangulation3-sec-concept-Traits}.
\ccTypes
-\ccTypedef{typedef CGAL_Point_3 Point;}{}
+\ccTypedef{typedef Point_3 Point;}{}
\ccGlue
-\ccTypedef{typedef CGAL_Segment_3 Segment;}{}
+\ccTypedef{typedef Segment_3 Segment;}{}
\ccGlue
-\ccTypedef{typedef CGAL_Triangle_3 Triangle;}{}
+\ccTypedef{typedef Triangle_3 Triangle;}{}
\ccGlue
-\ccTypedef{typedef CGAL_Tetrahedron_3 Tetrahedron;}{}
+\ccTypedef{typedef Tetrahedron_3 Tetrahedron;}{}
\end{ccClassTemplate}
@@ -1328,32 +1431,32 @@ Section~\ref{Triangulation3-sec-concept-Traits}.
\label{Triangulation3-sec-tds}
The second template parameter of the basic triangulation class
-\ccc{CGAL_Triangulation_3} is a triangulation data structure
+\ccc{Triangulation_3} is a triangulation data structure
class. This class can be seen as a container for the cells and
vertices maintaining incidence and adjacency relations.
The concept for the triangulation data structure is described in
Section~\ref{TDS3-sec-concept} of Chapter~\ref{chapter-TDS3}. Its optional
arguments related to geometry are compulsory for this use as a
-template parameter of \ccc{CGAL_Triangulation_3}.
+template parameter of \ccc{Triangulation_3}.
A model of this triangulation data structure is
-\ccc{CGAL_Triangulation_data_structuree_3} presented in
+\ccc{Triangulation_data_structuree_3} presented in
Section~\ref{TDS3-sec-class}.
-\begin{ccClassTemplate}{CGAL_Delaunay_triangulation_3}
+\begin{ccClassTemplate}{Delaunay_triangulation_3}
\section{The Delaunay Triangulation Class \protect
\ccClassTemplateName}
\ccDefinition
\ccInclude{CGAL/Delaunay_triangulation_3.h}
-\ccInheritsFrom{\ccc{CGAL_Triangulation_3}}
+\ccInheritsFrom{\ccc{Triangulation_3}}
\ccCreationVariable{dt}
\ccTypes
-Inherits the types of \ccc{CGAL_Triangulation_3}.
+Inherits the types of \ccc{Triangulation_3}.
\ccCreation
@@ -1364,13 +1467,17 @@ Inherits the types of \ccc{CGAL_Triangulation_3}.
{Creates an empty Delaunay triangulation with traits class
\ccc{traits}.}
-\ccConstructor{\ccClassName(const CGAL_Delaunay_triangulation_3 & dt1)}
+\ccConstructor{\ccClassName(const Delaunay_triangulation_3 & dt1)}
{Copy constructor.}
\ccModifiers
\ccHeading{Insertion}
+The following methods, which already exist in triangulations, are
+overloaded to ensure the empty sphere property of Delaunay
+triangulations.
+
\ccMethod{Vertex_handle insert(const Point & p );}
{Inserts point \ccc{p} in the triangulation and returns the corresponding
vertex. Similar to the insertion in a triangulation, but insures in
@@ -1408,45 +1515,45 @@ number of inserted points.
\ccHeading{Queries}
-\ccMethod{CGAL_Bounded_side
+\ccMethod{Bounded_side
side_of_sphere(Cell_handle c, const Point & p) const;}
{Returns on which side of the circumscribed sphere of \ccc{c} lies
the point \ccc{p}. More precisely, it returns:\\
-- \ccc{CGAL_ON_BOUNDED_SIDE} if \ccc{p} is inside the sphere (for an infinite
+- \ccc{ON_BOUNDED_SIDE} if \ccc{p} is inside the sphere (for an infinite
cell this means that \ccc{p} lies strictly either in the half space
limited by its finite facet, or in the interior of the disk
circumscribing the *finite* facet) \\
-- \ccc{CGAL_ON_BOUNDARY} if p on the boundary of the sphere (for an infinite
+- \ccc{ON_BOUNDARY} if p on the boundary of the sphere (for an infinite
cell this means that \ccc{p} lies on the circle circumscribing
the *finite* facet)\\
-- \ccc{CGAL_ON_UNBOUNDED_SIDE} if \ccc{p} lies outside the sphere (for an
+- \ccc{ON_UNBOUNDED_SIDE} if \ccc{p} lies outside the sphere (for an
infinite cell this means that \ccc{p} is not in the preceding two
cases).
\ccPrecond{\ccc{\ccVar.dimension()} $=3$.}}
-\ccMethod{CGAL_Bounded_side
+\ccMethod{Bounded_side
side_of_circle(const Facet & f, const Point & p) const;}
{Returns on which side of the circumscribed circle of \ccc{f} lies
the point \ccc{p}. More precisely, it returns:\\
- in dimension~3:\\
--- for a finite facet, \ccc{CGAL_ON_BOUNDARY} if \ccc{p} lies
-on the circle, \ccc{CGAL_ON_UNBOUNDED_SIDE} when it lies in the exterior of
-the disk, \ccc{CGAL_ON_BOUNDED_SIDE} when it lies in its interior.\\
+-- for a finite facet, \ccc{ON_BOUNDARY} if \ccc{p} lies
+on the circle, \ccc{ON_UNBOUNDED_SIDE} when it lies in the exterior of
+the disk, \ccc{ON_BOUNDED_SIDE} when it lies in its interior.\\
-- for an infinite facet, it considers the plane defined by the finite
facet of the same cell, and does the same as in dimension~2 in this
plane.\\
- in dimension~2:\\
--- for a finite facet, \ccc{CGAL_ON_BOUNDARY} if \ccc{p} lies
-on the circle, \ccc{CGAL_ON_UNBOUNDED_SIDE} when it lies in the exterior of
-the disk, \ccc{CGAL_ON_BOUNDED_SIDE} when it lies in its interior.\\
--- for an infinite facet, \ccc{CGAL_ON_BOUNDARY} if the
+-- for a finite facet, \ccc{ON_BOUNDARY} if \ccc{p} lies
+on the circle, \ccc{ON_UNBOUNDED_SIDE} when it lies in the exterior of
+the disk, \ccc{ON_BOUNDED_SIDE} when it lies in its interior.\\
+-- for an infinite facet, \ccc{ON_BOUNDARY} if the
point lies on the finite edge of \ccc{f} (endpoints included),
-\ccc{CGAL_ON_BOUNDED_SIDE} for a point in the open half-plane defined
-by \ccc{f}, \ccc{CGAL_ON_UNBOUNDED_SIDE} elsewhere.
+\ccc{ON_BOUNDED_SIDE} for a point in the open half-plane defined
+by \ccc{f}, \ccc{ON_UNBOUNDED_SIDE} elsewhere.
\ccPrecond{\ccc{\ccVar.dimension()} $\geq 2$.}}
-\ccMethod{CGAL_Bounded_side
+\ccMethod{Bounded_side
side_of_circle(Cell_handle c, int i, const Point & p);}
-{Same as the previous method.}
+{Same as the previous method for facet \ccc{i} of cell \ccc{c}.}
\begin{ccAdvanced}
\ccHeading{Checking}
@@ -1464,7 +1571,7 @@ This method is mainly a debugging help for the users of advanced features.
\end{ccClassTemplate}
-\begin{ccClassTemplate}{CGAL_Delaunay_hierarchic_triangulation_3}
+\begin{ccClassTemplate}{Delaunay_hierarchic_triangulation_3}
\section{The Hierarchic Delaunay Triangulation Class \protect
\ccClassTemplateName}
@@ -1491,13 +1598,13 @@ To work around this problem, two functions have been defined to transform
\ccc{handles} into usual $C^{++}$ pointers for debugging purposes.
\ccFunction{template
- CGAL_Triangulation_vertex_3 *
-CGAL_debug(const CGAL_Triangulation_vertex_handle_3 v);}
+ Triangulation_vertex_3 *
+debug(const Triangulation_vertex_handle_3 v);}
{}
\ccFunction{template
- CGAL_Triangulation_cell_3 *
- CGAL_debug(const CGAL_Triangulation_cell_handle_3
+ Triangulation_cell_3 *
+ debug(const Triangulation_cell_handle_3
c);}
{}
diff --git a/Packages/Triangulation_3/doc_tex/basic/Triangulation_3/TDS3.tex b/Packages/Triangulation_3/doc_tex/basic/Triangulation_3/TDS3.tex
index de3b5e6ec54..200899274f9 100644
--- a/Packages/Triangulation_3/doc_tex/basic/Triangulation_3/TDS3.tex
+++ b/Packages/Triangulation_3/doc_tex/basic/Triangulation_3/TDS3.tex
@@ -25,12 +25,28 @@
\section{Introduction}
\label{TDS3-sec-intro}
-\subsection{Definition}
+A three-dimensional triangulation is a three-dimensional simplicial
+complex, pure connected and without singularities \cite{by-ag-98}. It
+is a set of cells ($3$-faces, tetrahedra) such that two cells
+either do not intersect or share a common facet ($2$-face), edge
+($1$-face) or vertex ($0$-face).
+
+A geometric triangulation has two aspects: the combinatorial structure which
+gives the incidence and adjacency relations between faces, and the
+geometric information related to the position of vertices.
+
+\cgal\ proposes 3D geometric triangulations in which these
+two aspects are clearly separated.
+
+This chapter deals with 3D- triangulation data structures, meant to
+maintain the combinatorial information for 3D-geometric
+triangulations. The reader interested in geometric triangulations of
+$\R^3$ is advised to read Chapter~\ref{chapter-Triangulation3}.
+
+\subsection{Representation}
\label{TDS3-sec-def}
-A 3D- triangulation data structure is meant to maintain the combinatorial
-information (incidence and adjacency relations) for 3D-geometric
-triangulations. In \cgal, a triangulation data structure is a
+In \cgal, a triangulation data structure is a
container of cells ($3$-faces) and vertices ($0$-faces). 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.
@@ -38,7 +54,21 @@ 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. 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.
+with the same index (see Figure~\ref{TDS3-fig-repres}).
+
+\begin{ccTexOnly}
+\begin{figure}
+\begin{center}
+\includegraphics{repres.eps}
+\end{center}
+\caption{Representation \label{TDS3-fig-repres}}
+\end{figure}
+\end{ccTexOnly}
+
+\begin{ccHtmlOnly}
+
+\end{ccHtmlOnly}
Edges ($1$-faces) and facets ($2$-faces) are not explicitely
represented: a facet is given by a cell and an index (the facet
@@ -57,7 +87,7 @@ is not of full dimension.
As described in Chapter~\ref{chapter-Triangulation3}, a geometric
triangulation of a set of points in $\R^d$ is a partition of the
whole space $\R^d$ into cells having $d+1$ vertices: some of them
-are infinite, they are obtained by liking an additional vertex at
+are infinite, they are obtained by linking an additional vertex at
infinity to each facet of the convex hull of the points.
The underlying combinatorial triangulation of such a triangulation
without boundary of $\R^d$ can be seen as a triangulation of the
@@ -76,15 +106,51 @@ the boundary of a 4-dimensional simplex, which has 5 vertices. A
geometric embedding consists in choosing one of these vertices to be
infinite, thus four of the five 3-cells becomes infinite: the geometric
triangulation has one finite tetrahedron remaining, each of its facets
-being incident to the infinite cell.
+being incident to the infinite cell. See Figure~\ref{TDS3-fig-topo-simplex4}.
+\begin{ccTexOnly}
+\begin{figure}
+\begin{center}
+\includegraphics{topo-simplex4.eps}
+\end{center}
+\caption{4D simplex and a 3D geometric embedding \label{TDS3-fig-topo-simplex4}}
+\end{figure}
+\end{ccTexOnly}
+\begin{ccHtmlOnly}
+
+\end{ccHtmlOnly}
\item \emph{dimension 2.} We have 4 vertices forming one 3-dimensional
simplex, i.e. the boundary of a tetrahedron. The geometric embedding in
the plane consists in choosing one of these vertices to be infinite,
then the geometric triangulation has one finite triangle whose edges are
-adjacent to the infinite triangles. See Figure~\ref{TDS3-fig-topo-simplex}.
+adjacent to the infinite triangles. See Figure~\ref{TDS3-fig-topo-simplex3}.
+\begin{ccTexOnly}
+\begin{figure}
+\begin{center}
+\includegraphics{topo-simplex3.eps}
+\end{center}
+\caption{3D simplex and a 2D geometric embedding \label{TDS3-fig-topo-simplex3}}
+\end{figure}
+\end{ccTexOnly}
+\begin{ccHtmlOnly}
+
+\end{ccHtmlOnly}
\item \emph{dimension 1.} A 2-dimensional simplex (a triangle) has 3
vertices. The geometric embedding is and edge whose vertices are linked
-to an infinite point.
+to an infinite point. See Figure~\ref{TDS3-fig-topo-simplex2}.
+\begin{ccTexOnly}
+\begin{figure}
+\begin{center}
+\includegraphics{topo-simplex2.eps}
+\end{center}
+\caption{2D simplex and a 1D geometric embedding \label{TDS3-fig-topo-simplex2}}
+\end{figure}
+\end{ccTexOnly}
+\begin{ccHtmlOnly}
+
+\end{ccHtmlOnly}
\end{itemize}
The last two cases are defined uniquely:
@@ -105,20 +171,6 @@ triangulation data structure. The infinite vertex of the geometric
embedding is a vertex without any particularity in the
combinatorial triangulation.
-\begin{ccTexOnly}
-\begin{figure}
-\begin{center}
-\includegraphics{topo-simplex.eps}
-\end{center}
-\caption{3D simplex and its 2D geometric embedding \label{TDS3-fig-topo-simplex}}
-\end{figure}
-\end{ccTexOnly}
-
-\begin{ccHtmlOnly}
-
-\end{ccHtmlOnly}
-
The implicit representation of facets (resp. edges) still holds
for degenerate ($< 3$) dimensions : in dimension~2, each cell has only one
facet of index 3, and 3 edges $(0,1)$, $(1,2)$ and $(2,0)$; in
@@ -189,29 +241,144 @@ software design in this case.
\end{ccHtmlOnly}
-In the bottom
-layer, the base classes store elementary geometric information as
-well as any other information for the given application. The middle
-layer class stores the triangulation data structure, which is purely
-combinatorial. It provides operations such as insertion of a new
-vertex in a given cell, and is responsible for the combinatorial
-integrity of the triangulation. The upper layer is the geometric
-triangulation class, providing operations such as location of a point
-in the triangulation, insertion of a point, and is responsible for
-the geometric validity.
+In the bottom layer, the \cgal\ base classes store elementary
+geometric information. These classes are parameterized by a geometric
+traits class providing all the geometric types. A vertex has a pointer
+to a cell, and a cell has four pointers to vertices. These pointers
+are of type \ccc{void*}.
-The triangulation data structure class is parameterized by the base
-vertex and the base cell classes. It is up to the user to derive its
-own base classes from the \cgal\ base classes, and to use the
-triangulation data structure class proposed by \cgal.
+The middle layer class stores the triangulation data structure, which
+is purely combinatorial. A vertex of the triangulation data structure
+has a pointer to a cell of the triangulation data structure, and a
+cell has four pointers to vertices. These pointers are usual
+\ccc{C++} pointers. The triangulation data structure provides
+operations such as insertion of a new vertex in a given cell, on a
+$1$ or $2$-face, or, if the dimension of the triangulation is smaller
+than 3, outside the ``affine'' hull of the vertices, thus increasing
+the dimension of the triangulation by one. The triangulation data
+structure is responsible for the combinatorial integrity of the
+triangulation.
+
+It is up to the user to derive its own base classes from the \cgal\
+base classes to add any other information the may need for his given
+application, or to write his own base classes from scratch. In this
+case, his base classes must be models for the concepts described in
+Section~\ref{TDS3-sec-concept-Base}. As the triangulation data
+structure class is parameterized by the base vertex and the base cell
+classes. it will consider the user's bases classes instead of the
+predefined base classes.
+
+The upper layer, described in Chapter~\ref{chapter-Triangulation3}, is
+the geometric triangulation class, providing operations such as
+location of a point in the triangulation, insertion of a point, and is
+responsible for the geometric validity. A vertex of the triangulation
+has a pointer to a cell and a cell has four pointers to
+vertices. These pointers are \cgal\ \emph{handles}. The triangulation
+data structure class is one of the template parameters of the
+geometric triangulation class. The user may choose to replace the
+\cgal\ triangulation data structure class by its own triangulation
+data structure, in this case, his class has to be a model of the
+concept described in Section~\ref{TDS3-sec-concept}.
\section{Examples}
\label{TDS3-sec-examples}
+The following example shows how to construct a 3D triangulation data
+structure by inserting vertices.
+\begin{verbatim}
+#include
+
+#include
+#include
+#include
+#include
+
+#include
+
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+// the definition of the geometric traits class is necessary to
+// instanciate base vertices and cells but will in fact never be used
+// in the program
+typedef CGAL::Cartesian Rep;
+typedef CGAL::Triangulation_geom_traits_3 Gt;
+
+typedef CGAL::Triangulation_vertex_base_3 Vb;
+typedef CGAL::Triangulation_cell_base_3 Cb;
+
+typedef CGAL::Triangulation_data_structure_3 Tds;
+
+typedef typename Tds::Cell TDSCell;
+typedef typename Tds::Vertex TDSVertex;
+
+int main()
+{
+ Tds T;
+
+ assert( T.number_of_vertices() == 0 );
+ assert( T.dimension() == -2 );
+ assert( T.is_valid() );
+
+ std::vector V(5);
+ std::vector PV(7);
+
+ PV[0] = T.insert_outside_affine_hull(V[0]);
+ assert( T.number_of_vertices() == 1 );
+ assert( T.dimension() == -1 );
+ assert( T.is_valid() );
+
+ int i;
+ // each of the following insertions of vertices increases the dimension
+ for ( i=1; i<5; i++ ) {
+ PV[i] = T.insert_outside_affine_hull(V[i], PV[0]);
+ assert( T.number_of_vertices() == i+1 );
+ assert( T.dimension() == i-1 );
+ assert( T.is_valid() );
+ }
+ assert( T.number_of_cells() == 5 );
+
+ // we now have a simplex in dimension 4
+
+ // cell incident to PV[0]
+ TDSCell* c = PV[0]->cell();
+ int ind;
+ assert( c->has_vertex( PV[0], ind ) );
+ // PV[0] is the vertex of index ind in c
+
+ // insertion of a new vertex in the facet opposite to PV[0]
+ PV[5] = T.insert_in_facet(TDSVertex(), c, ind);
+
+ assert( T.number_of_vertices() == 6 );
+ assert( T.dimension() == 3 );
+ assert( T.is_valid() );
+
+ // insertion of a new vertex in c
+ PV[6] = T.insert_in_cell( TDSVertex(), c );
+
+ assert( T.number_of_vertices() == 7 );
+ assert( T.dimension() == 3 );
+ assert( T.is_valid() );
+
+ std::ofstream oFileT("output_tds",ios::out);
+ // writing file output_tds;
+ oFileT << T;
+
+ return 0;
+}
+\end{verbatim}
\clearpage
\section{Concepts}
+This section describes the concepts for a 3D- triangulation data
+structure, its vertices and cells.
+
\subsection{Concepts for a 3D- Triangulation Data Structure}
\label{TDS3-sec-concept}
\begin{ccClassTemplate}{Tds}
@@ -277,9 +444,12 @@ incident to a given edge. They are bidirectional and non mutable.
\ccMethod{Tds operator=(const Tds & tds1);}
{Assignment. All the vertices and cells are duplicated.}
+The previous first two methods are equivalent.
+
\ccMethod{void swap(Tds & tds1);}
{Swaps \ccVar\ and \ccc{tds1}. Should be preferred to \ccVar=\ccc{tds1}
-or \ccVar(\ccc{tds1}) when tds1 is deleted after that.}
+or \ccVar(\ccc{tds1}) when tds1 is deleted after that. Indeed, there is no
+copy of cells and vertices, thus this method runs in constant time.}
\ccMethod{Vertex* copy_tds(const Tds & tds1, Vertex* v = NULL);}
{\ccc{tds1} is copied into \ccVar. The vertex of \ccVar\
@@ -288,7 +458,8 @@ corresponding to \ccc{v} is returned.
\ccc{tds1}.}}
\ccFunction{void \ccTilde\ccVar();}
-{Destructor. All vertices and cells are deleted.}
+{Destructor. All vertices and cells are deleted, and \ccVar\ itself is
+deleted.}
\ccAccessFunctions
@@ -424,11 +595,12 @@ operation is exactly reciprocal to \ccc{\ccVar.insert_in_cell(v)}.
\textit{not yet implemented}}
\ccMethod{void clear();}
-{Deletes all cells and vertices.}
+{Deletes all cells and vertices. \ccVar\ is reset as a triangulation
+data structure constructed by the default constructor.}
In addition to these requirements, in order to be used as a triangulation
data structure by the class
-\ccc{CGAL_Delaunay_triangulation_3}, the triangulation
+\ccc{Delaunay_triangulation_3}, the triangulation
must offer the following method:
\ccMethod{void star_region( set > & region,
@@ -542,8 +714,6 @@ each cell given by their index in the preceding list of cells.
\ccCreationVariable{v}
-The vertex stores a point and a pointer to an incident cell.
-
The vertex class of a 3D- triangulation data structure must define
the types and operations listed in this section. Some of these
requirements are of geometric nature, they are \textit{optional}
@@ -725,8 +895,8 @@ a precise indication on the kind of invalidity encountered.}
\end{ccClass}
-\begin{ccClassTemplate}{CGAL_Triangulation_data_structure_3}
-\section{The Triangulation Data Structure Class\\
+\begin{ccClassTemplate}{Triangulation_data_structure_3}
+\section{A model of Triangulation Data Structure:\\
\protect \ccClassTemplateName}
\label{TDS3-sec-class}
@@ -736,26 +906,24 @@ geometric functionalities. It is templated by base classes for
vertices and cells described in Section~\ref{TDS3-sec-concept-Base}.
\ccInheritsFrom
-\ccc{CGAL_Triangulation_utils_3}
+\ccc{Triangulation_utils_3}
\\This class defines basic computations on indices of vertices and
-neighbors of cells (see Section~\ref{Triangulation3-sec-class-Utils} of
+neighbors of cells (Details are presented in
+Section~\ref{Triangulation3-sec-class-Utils} of
Chapter~\ref{chapter-Triangulation3}).
\ccInclude{CGAL/Triangulation_data_structure_3.h}
-The class \ccc{CGAL_Triangulation_ds_vertex_3} is a model for the vertex
+The class \ccc{Triangulation_ds_vertex_3} is a model for the vertex
concept described in Section~\ref{TDS3-sec-concept-Tds_Vertex}.
\ccInclude{CGAL/Triangulation_ds_vertex_3.h}
-The class \ccc{CGAL_Triangulation_ds_cell_3} is a model for the
+The class \ccc{Triangulation_ds_cell_3} is a model for the
cell concept described in Section~\ref{TDS3-sec-concept-Tds_Cell}.
\ccInclude{CGAL/Triangulation_ds_cell_3.h}
-\ccInheritsFrom
-\ccc{CGAL_Triangulation_utils_3}
-
\end{ccClassTemplate}
\section{Concepts for the Base Vertices and Cells}
@@ -943,29 +1111,33 @@ a precise indication on the kind of invalidity encountered.}
\end{ccClass}
-\section{The Base Classes for Vertices and Cells}
+\section{Models of Base Vertices and Cells}
\label{TDS3-sec-class-Base}
- \begin{ccClassTemplate}{CGAL_Triangulation_vertex_base_3}
+ \begin{ccClassTemplate}{Triangulation_vertex_base_3}
\subsection{The Base Class \protect \ccClassTemplateName}
\label{TDS3-sec-class-Base_Vertex}
-This class is proposed by \cgal\ as a base vertex class.
-It is templated by a geometric traits class. Using the same
-geometric traits class \ccc{Traits} as the one used for
-\ccc{CGAL_Triangulation_3} is strongly advised. In this way, the
-point type defined by \ccClassName\ is the same as the point type
-defined by the geometric traits class.
+This class is proposed by \cgal\ as a base vertex class. It is
+templated by a geometric traits class \ccc{Traits} that provides the
+geometric types. The user who uses the geometric layer (see
+Section~\ref{TDS3-sec-design} and
+Chapter~\ref{chapter-Triangulation3}) is strongly advised to use the
+same geometric traits class \ccc{Traits} as the one used for
+\ccc{Triangulation_3}. In this way, the point type
+defined by \ccClassName\ is the same as the point type defined by the
+geometric traits class. The default geometric traits class proposed by
+\cgal\ is presented in Section~\ref{Triangulation3-sec-Traits}.
-This base class can be used directly or can serve as a base to derive
-other base classes with some additionnal attribute (a color for example)
-tuned for a specific application.
+This base class can be used directly or can serve as a base to derive
+other base classes with some additionnal attributes (a color for
+example) tuned for a specific application.
\ccInclude{CGAL/Triangulation_vertex_base_3.h}
\end{ccClassTemplate}
- \begin{ccClassTemplate}{CGAL_Triangulation_cell_base_3}
+ \begin{ccClassTemplate}{Triangulation_cell_base_3}
\subsection{The Base Class \protect \ccClassTemplateName}
This class is proposed by \cgal\ as a base cell class, and is similar
@@ -975,4 +1147,3 @@ Section~\ref{TDS3-sec-class-Base_Vertex}).
\ccInclude{CGAL/Triangulation_cell_base_3.h}
\end{ccClassTemplate}
-
diff --git a/Packages/Triangulation_3/doc_tex/basic/Triangulation_3/Triangulation3.tex b/Packages/Triangulation_3/doc_tex/basic/Triangulation_3/Triangulation3.tex
index 267df4975fb..0a977dbf3d7 100644
--- a/Packages/Triangulation_3/doc_tex/basic/Triangulation_3/Triangulation3.tex
+++ b/Packages/Triangulation_3/doc_tex/basic/Triangulation_3/Triangulation3.tex
@@ -46,7 +46,7 @@ fourth vertex an auxiliary vertex called the \ccc{infinite vertex}. 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.
-The class \ccc{CGAL_Triangulation_3} of \cgal\ implements this
+The class \ccc{Triangulation_3} of \cgal\ implements this
point of view and therefore considers the triangulation of the set
of points as a set of finite and infinite tetrahedra. Notice that the
infinite vertex has no significant coordinates and that no
@@ -58,23 +58,45 @@ 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 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.
+orientation, the orientation being defined by the orientation of the
+underlying space $\R^3$. 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
+Figure~\ref{Triangulation3-fig-orient}.
-Edges ($1$-faces) and facets ($2$-faces) are not explicitely represented:
-a facet is given by a cell and an index (the facet
+\begin{ccTexOnly}
+\begin{figure}[htbp]
+\begin{center}
+\includegraphics{orient.eps}
+\end{center}
+\caption{Orientation of a cell (3-dimensional case)
+\label{Triangulation3-fig-orient}}
+\end{figure}
+\end{ccTexOnly}
+
+\begin{ccHtmlOnly}
+
+\end{ccHtmlOnly}
+
+As in the underlying combinatorial triangulation (see
+Chapter~\ref{chapter-TDS3}), edges ($1$-faces) and facets ($2$-faces)
+are not explicitely
+represented: a facet is given by a cell and an index (the facet
\ccc{i} of a cell \ccc{c} is the facet of \ccc{c} that is opposite to
the vertex of index \ccc{i}) and an edge is given by a cell and two
-indices (the edge \ccc{(i,j)} of a cell \ccc{c} is the edge
-whose endpoints are the vertices of indices \ccc{i} and \ccc{j} of
-\ccc{c}).
+indices (the edge \ccc{(i,j)} of a cell \ccc{c} is the edge whose
+endpoints are the vertices of indices \ccc{i} and \ccc{j} of
+\ccc{c}). See Figure~\ref{TDS3-fig-repres}.
\subsection{Degenerate Dimensions}
\label{Triangulation3-sec-degen_dim}
-The class \ccc{CGAL_Triangulation_3} can deal with degenerate
-dimensions:
+The class \ccc{Triangulation_3} can deal with degenerate
+dimensions. A triangulation of a set of points in $\R^d$ is a partition of the
+whole space $\R^d$ into cells having $d+1$ vertices: some of them
+are infinite, they are obtained by linking the additional infinite
+vertex to each facet of the convex hull of the points.
\begin{itemize}
\item {} \emph{dimension 2:} when a triangulation only contains
coplanar points (which is the case when there are only three points),
@@ -121,21 +143,6 @@ When all the points are collinear, this condition becomes:
{\bf (c-1D)} For any two adjacent edges $(u,v)$ and $(v,w)$, $u$ and
$w$ lie on opposite sides of the common vertex $v$.
-\begin{ccTexOnly}
-\begin{figure}[htbp]
-\begin{center}
-\includegraphics{orient.eps}
-\end{center}
-\caption{Orientation of a cell (3-dimensional case)
-\label{Triangulation3-fig-orient}}
-\end{figure}
-\end{ccTexOnly}
-
-\begin{ccHtmlOnly}
-
-\end{ccHtmlOnly}
-
The \ccc{is_valid()} method provided by \cgal\ checks the local
validity of a given triangulation. This does not always
ensure global validity \cite{mnssssu-cgpvg-96,dlpt-ccpps-98} but it is
@@ -144,7 +151,7 @@ sufficient for practical cases.
\section{Software Design}
\label{Triangulation3-sec-design}
-The class \ccc{CGAL_Triangulation_3} is designed to be used as
+The class \ccc{Triangulation_3} is designed to be used as
a layer upon a 3D-triangulation data structure as presented in
Section~\ref{TDS3-sec-design} of Chapter~\ref{chapter-TDS3}.
It provides high level geometric operations such as location of a point
@@ -163,22 +170,114 @@ described in Chapter~\ref{chapter-TDS3}.
Delaunay triangulations as well as hierarchical Delaunay triangulations
\cite{d-iirdt-98} are also implemented in the package:
-\ccc{CGAL_Delaunay_triangulation_3} inherits from
-\ccc{CGAL_Triangulation_3} and
-\ccc{CGAL_Delaunay_hierarchic_triangulation_3} inherits from
-\ccc{CGAL_Delaunay_triangulation_3}.
+\ccc{Delaunay_triangulation_3} inherits from
+\ccc{Triangulation_3} and
+\ccc{Delaunay_hierarchic_triangulation_3} inherits from
+\ccc{Delaunay_triangulation_3}. \textit{(hierarchical
+Delaunay triangulations are not yet implemented).}
-\ccc{CGAL_Triangulation_3} derives from
-\ccc{CGAL_Triangulation_utils_3}, which defines tools on
+\ccc{Triangulation_3} derives from
+\ccc{Triangulation_utils_3}, which defines tools on
the indices of vertices in cells (see
Section~\ref{Triangulation3-sec-class-Utils}).
\section{Examples}
\label{Triangulation3-sec-examples}
+This example shows the incremental construction of a 3D triangulation,
+the location of a point, and how to manipulate elementary operations
+on indices in a cell.
+
+\begin{verbatim}
+#include
+
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+
+typedef CGAL::Cartesian Rep;
+
+typedef CGAL::Triangulation_geom_traits_3 Gt;
+typedef CGAL::Triangulation_vertex_base_3 Vb;
+typedef CGAL::Triangulation_cell_base_3 Cb;
+
+typedef CGAL::Triangulation_data_structure_3 TDS;
+typedef CGAL::Triangulation_3 Triangulation;
+
+typedef typename Triangulation::Cell_handle Cell_handle;
+typedef typename Triangulation::Vertex_handle Vertex_handle;
+typedef typename Triangulation::Locate_type Locate_type;
+
+typedef Gt::Point Point;
+
+int main(int argc, char* argv[])
+{
+
+ Triangulation T;
+
+ // insertion from a list :
+ std::list L;
+ L.push_front(Point(0,0,0));
+ L.push_front(Point(1,0,0));
+ L.push_front(Point(0,1,0));
+
+ int n = T.insert(L.begin(), L.end());
+
+ // insertion from a vector :
+ std::vector V(3);
+ V[0] = Point(0,0,1);
+ V[1] = Point(1,1,1);
+ V[2] = Point(2,2,2);
+
+ n = n + T.insert(V.begin(), V.end());
+
+ // 6 points have been inserted :
+ assert( n == 6 );
+
+ // checking validity of T :
+ assert( T.is_valid(false) );
+
+ Locate_type lt;
+ int li, lj;
+ Point p(0,0,0);
+ Cell_handle c = T.locate(p, lt, li, lj);
+ // p is the vertex of c of index li :
+ assert( lt == Triangulation::VERTEX );
+ assert( c->vertex(li)->point() == p );
+
+ Vertex_handle v = c->vertex( (li+1)&3 );
+ // v is another vertex of c
+ Cell_handle nc = c->neighbor(li);
+ // nc = neighbor of c opposite to the vertex associated with p
+ // nc must have vertex v :
+ int nli;
+ assert( nc->has_vertex( v, nli ) );
+ // nli is the index of v in nc
+
+ std::ofstream oFileT("output",ios::out);
+ // writing file output;
+ oFileT << T;
+
+ return 0;
+}
+\end{verbatim}
\clearpage
-\begin{ccClass}{CGAL_Triangulation_utils_3}
+\begin{ccClass}{Triangulation_utils_3}
\section{A Class of Tools \protect \ccClassTemplateName}
\label{Triangulation3-sec-class-Utils}
@@ -223,7 +322,7 @@ Figure~\ref{Triangulation3-fig-utils}).
\end{ccClass}
-\begin{ccClassTemplate}{CGAL_Triangulation_3}
+\begin{ccClassTemplate}{Triangulation_3}
\section{The Triangulation Class \protect \ccClassTemplateName}
\ccDefinition
@@ -237,7 +336,7 @@ and~\ref{Triangulation3-sec-class-Traits}.
\ccInclude{CGAL/Triangulation_3.h}
\ccInheritsFrom
-\ccc{CGAL_Triangulation_utils_3}
+\ccc{Triangulation_utils_3}
(see Section~\ref{Triangulation3-sec-class-Utils})
\ccTypes
@@ -278,7 +377,8 @@ A handle is a type which supports the two dereference operators
bidirectionnel and non mutable. Circulators and iterators are
assignable to the corresponding handle types. Whenever a handle appears
in the parameter list of a function, an appropriate iterator or
-circulator can be used as well \textit{not yet implemented}. The edges and facets of the
+circulator can be used as well \textit{(not yet implemented)}. The
+edges and facets of the
triangulation can also be visited through iterators and circulators
which are bidirectionnel and non mutable.
@@ -314,7 +414,7 @@ OUTSIDE_AFFINE_HULL};}
{Introduces a triangulation \ccVar\ having only one vertex which is the
infinite vertex.}
-\ccConstructor{\ccClassName(const CGAL_Triangulation_3 & tr);}
+\ccConstructor{\ccClassName(const Triangulation_3 & tr);}
{Copy constructor. All the vertices and faces are duplicated.
\ccVar\ and \ccc{tr}\ refer to different triangulations. After the copy,
if \ccc{tr} is modified, \ccVar\ is not modified.}
@@ -325,19 +425,22 @@ deleted.}
\ccHeading{Assignment}
-\ccMethod{CGAL_Triangulation_3
- operator=(const CGAL_Triangulation_3 & tr);}
+\ccMethod{Triangulation_3
+ operator=(const Triangulation_3 & tr);}
{The triangulation is duplicated, and modifying one after the
copy does not modify the other.}
-\ccMethod{copy_triangulation
- (const CGAL_Triangulation_3 & tr);}
+\ccMethod{void copy_triangulation
+ (const Triangulation_3 & tr);}
{The triangulation is duplicated.}
-\ccMethod{void swap(CGAL_Triangulation_3 & tr);}
+The previous first two methods are equivalent.
+
+\ccMethod{void swap(Triangulation_3 & tr);}
{The triangulations \ccc{tr} and \ccVar\ are swapped.
\ccc{\ccVar.swap(tr)} should be preferred to \ccVar\ = \ccc{tr} or to
-\ccc{t(tr)} if \ccc{tr} is deleted after that.}
+\ccc{t(tr)} if \ccc{tr} is deleted after that. Indeed, there is no
+copy of cells and vertices, thus this method runs in constant time.}
\ccAccessFunctions
\ccMethod{const Traits & geom_traits() const;}
@@ -553,69 +656,69 @@ triangulation, \ccc{lt} is set to \ccc{OUTSIDE_AFFINE_HULL} and
{Same as the previous method, but \ccc{start} is used as a starting
place for the location.}
-\ccMethod{CGAL_Bounded_side
+\ccMethod{Bounded_side
side_of_cell(const Point & p,
Cell_handle c,
Locate_type & lt, int & li, int & lj) const;}
{Returns on which side of the oriented boundary of \ccc{c} lies
the point \ccc{p}. More precisely, it returns:\\
-- \ccc{CGAL_ON_BOUNDED_SIDE} if \ccc{p} is inside the cell (for an infinite
+- \ccc{ON_BOUNDED_SIDE} if \ccc{p} is inside the cell (for an infinite
cell this means that \ccc{p} lies strictly in the half space limited by
its finite facet) \\
-- \ccc{CGAL_ON_BOUNDARY} if p on the boundary of the cell (for an infinite
+- \ccc{ON_BOUNDARY} if p on the boundary of the cell (for an infinite
cell this means that \ccc{p} lies on the *finite* facet). Then
\ccc{lt} together with \ccc{li} and \ccc{lj} give the precise location
on the boundary (see the descriptions of \ccc{locate} methods)\\
-- \ccc{CGAL_ON_UNBOUNDED_SIDE} if \ccc{p} lies outside the cell (for an
+- \ccc{ON_UNBOUNDED_SIDE} if \ccc{p} lies outside the cell (for an
infinite cell this means that \ccc{p} is not in the preceding two
cases).
\ccPrecond{\ccc{\ccVar.dimension()} $=3$}}
-\ccMethod{CGAL_Bounded_side
+\ccMethod{Bounded_side
side_of_facet(const Point & p,
const Facet & f,
Locate_type & lt, int & li, int & lj) const;}
{Returns on which side of the oriented boundary of \ccc{f} lies
the point \ccc{p}:\\
-- \ccc{CGAL_ON_BOUNDED_SIDE} if \ccc{p} is inside the facet (for an
+- \ccc{ON_BOUNDED_SIDE} if \ccc{p} is inside the facet (for an
infinite facet this means that \ccc{p} lies strictly in the half plane
limited by its finite edge) \\
-- \ccc{CGAL_ON_BOUNDARY} if \ccc{p} is on the boundary of the facet
+- \ccc{ON_BOUNDARY} if \ccc{p} is on the boundary of the facet
(for an infinite facet this means that \ccc{p} lies on the finite
edge). \ccc{lt}, \ccc{li} and \ccc{lj} give the precise location of
\ccc{p} on the boundary of the facet. \ccc{li} and \ccc{lj} refer to
indices in the cell \ccc{c} storing \ccc{f}\\
-- \ccc{CGAL_ON_UNBOUNDED_SIDE} if \ccc{p} lies outside the facet (for
+- \ccc{ON_UNBOUNDED_SIDE} if \ccc{p} lies outside the facet (for
an infinite facet this means that \ccc{p} is not in the preceding two
cases)
\ccPrecond{\ccc{\ccVar.dimension()} $=2$ and \ccc{p} lies in the
plane containing the triangulation. \ccc{f.first} $=3$ (in dimension~2
there is only one facet per cell).}}
\ccGlue
-\ccMethod{CGAL_Bounded_side
+\ccMethod{Bounded_side
side_of_facet(const Point & p,
Cell_handle c,
Locate_type & lt, int & li, int & lj) const;}
{Same as the previous method for the facet \ccc{(c,3)}.}
-\ccMethod{CGAL_Bounded_side
+\ccMethod{Bounded_side
side_of_edge(const Point & p,
const Edge & e,
Locate_type & lt, int & li) const;}
{Returns on which side of the oriented boundary of \ccc{e} lies
the point \ccc{p}:\\
-- \ccc{CGAL_ON_BOUNDED_SIDE} if \ccc{p} is inside the edge (for an
+- \ccc{ON_BOUNDED_SIDE} if \ccc{p} is inside the edge (for an
infinite edge this means that \ccc{p} lies in the half line defined by
the vertex)\\
-- \ccc{CGAL_ON_BOUNDARY} if \ccc{p} equals one of the vertices,
+- \ccc{ON_BOUNDARY} if \ccc{p} equals one of the vertices,
\ccc{li} give the index of the vertex in the cell storing \ccc{e}\\
-- \ccc{CGAL_ON_UNBOUNDED_SIDE} if \ccc{p} lies outside the edge (for
+- \ccc{ON_UNBOUNDED_SIDE} if \ccc{p} lies outside the edge (for
an infinite edge this means that \ccc{p} lies on the other half line)\\
\ccPrecond{\ccc{\ccVar.dimension()} $=1$ and \ccc{p} is collinear
with the points of the triangulation. \ccc{e.first} $=0$ and
\ccc{e.second} $=1$ (in dimension~2 there is only one edge per cell).}}
\ccGlue
-\ccMethod{CGAL_Bounded_side
+\ccMethod{Bounded_side
side_of_edge(const Point & p,
Cell_handle c,
Locate_type & lt, int & li) const;}
@@ -691,8 +794,8 @@ inside cell \ccc{c}.}}
{Inserts point \ccc{p} in facet \ccc{f}. In dimension~3, the 2
neighboring cells are split into 3 tetrahedra; in dimension~2, the facet
is split into 3 triangles.
-\ccPrecond{\ccc{\ccVar.dimension()} $\geq 2$ and \ccc{p} lies inside
-face \ccc{f}.}}
+\ccPrecond{\ccc{\ccVar.dimension()} $\geq 2$ and \ccc{p} lies strictly
+inside face \ccc{f}.}}
\ccGlue
\ccMethod{Vertex_handle insert_in_facet(const Point & p,
Cell_handle c, int i);}
@@ -717,7 +820,7 @@ dimension~1.}}
\ccMethod{Vertex_handle insert_outside_convex_hull(const Point & p,
Cell_handle c,
int li, int lj=0);}
-{\ccc{c}, together with \ccc{li} and possibly \ccc{lj}, give a
+{The cell \ccc{c}, together with \ccc{li} and possibly \ccc{lj}, give a
separator (facet, edge or vertex, depending on the dimension) for
\ccc{p} from the triangulation (see the description of method
\ccc{locate()} for more details on the way the separator is represented).\\
@@ -792,7 +895,7 @@ and \ccc{Vertex}. They are all invalidated by any change in the
triangulation.
\ccMethod{Vertex_iterator finite_vertices_begin() const;}
-{Starts at an arbitrary finite vertex. Then \ccc{$++$} and \ccc{$--$} will
+{Starts at an arbitrary finite vertex. Then \ccc{++} and \ccc{--} will
iterate on finite vertices. Returns \ccc{vertices_end()} when
\ccc{\ccVar.number_of_vertices()} $<1$.}
\ccGlue
@@ -805,7 +908,7 @@ ones). Returns \ccc{vertices_end()} when
{Past-the-end iterator}
\ccMethod{Edge_iterator finite_edges_begin() const;}
-{Starts at an arbitrary finite edge. Then \ccc{$++$} and \ccc{$--$} will
+{Starts at an arbitrary finite edge. Then \ccc{++} and \ccc{--} will
iterate on finite edges. Returns \ccc{edges_end()} when
\ccc{\ccVar.dimension()} $<1$.}
\ccGlue
@@ -817,7 +920,7 @@ ones). Returns \ccc{edges_end()} when \ccc{\ccVar.dimension()} $<1$.}
{Past-the-end iterator}
\ccMethod{Facet_iterator finite_facets_begin() const;}
-{Starts at an arbitrary finite facet. Then \ccc{$++$} and \ccc{$--$} will
+{Starts at an arbitrary finite facet. Then \ccc{++} and \ccc{--} will
iterate on finite facets. Returns \ccc{facets_end()} when
\ccc{\ccVar.dimension()} $<2$.}
\ccGlue
@@ -830,7 +933,7 @@ ones). Returns \ccc{facets_end()} when
{Past-the-end iterator}
\ccMethod{Cell_iterator finite_cells_begin() const;}
-{Starts at an arbitrary finite cell. Then \ccc{$++$} and \ccc{$--$} will
+{Starts at an arbitrary finite cell. Then \ccc{++} and \ccc{--} will
iterate on finite cells. Returns \ccc{cells_end()} when
\ccc{\ccVar.dimension()} $<3$.}
\ccGlue
@@ -907,7 +1010,7 @@ debugging.
\ccMethod{bool
is_valid(bool verbose = false) const;}
-{Checks the combinatorial validity of the triangulation and also the
+{Checks the combinatorial validity of the triangulation. Checks also the
validity of its geometric embedding (see
Section~\ref{Triangulation3-sec-Valid}). When \ccc{verbose} is set to true,
messages describing the first invalidity encountered are printed.\\
@@ -936,7 +1039,7 @@ corresponding input operators of the vertex and the cell
classes. Assigns the resulting triangulation to \ccc{t}.}
\ccFunction{ostream& operator<<
-(ostream& os, const CGAL_Triangulation_3 &t);}
+(ostream& os, const Triangulation_3 &t);}
{Writes the triangulation \ccc{t} into \ccc{os}.}
The information in the \ccc{iostream} is: the dimension, the number of
@@ -949,7 +1052,7 @@ of maximal dimension.)
\end{ccClassTemplate}
-\begin{ccClassTemplate}{CGAL_Triangulation_vertex_3}
+\begin{ccClassTemplate}{Triangulation_vertex_3}
\section{The Vertex Class of a Triangulation \protect \ccClassTemplateName}
\label{Triangulation3-sec-class-Vertex}
@@ -973,9 +1076,9 @@ defined in the class \ccc{Triangulation_3}:
\ccGlue
\ccTypedef{typedef typename Tds::Cell Ctds;}{cell of the triangulation data structure}
\ccGlue
-\ccTypedef{typedef CGAL_Triangulation_vertex_handle_3 Vertex_handle;}{handle to a vertex}
+\ccTypedef{typedef Triangulation_vertex_handle_3 Vertex_handle;}{handle to a vertex}
\ccGlue
-\ccTypedef{typedef CGAL_Triangulation_cell_handle_3 Cell_handle;}{handle to a cell}
+\ccTypedef{typedef Triangulation_cell_handle_3 Cell_handle;}{handle to a cell}
\begin{ccAdvanced}
\ccCreation
@@ -1034,7 +1137,7 @@ of maximal dimension (Section~\ref{Triangulation3-sec-degen_dim}).}
\end{ccClassTemplate}
-\begin{ccClassTemplate}{CGAL_Triangulation_cell_3}
+\begin{ccClassTemplate}{Triangulation_cell_3}
\section{The Cell Class of a Triangulation \protect \ccClassTemplateName}
\label{Triangulation3-sec-class-Cell}
@@ -1056,7 +1159,7 @@ dimension: (Section~\ref{Triangulation3-sec-degen_dim}).
\ccTypes
The class \ccClassTemplateName\ defines the same types as the
-\ccc{CGAL_Triangulation_vertex_3} class.
+\ccc{Triangulation_vertex_3} class.
\begin{ccAdvanced}
\ccCreation
@@ -1168,7 +1271,7 @@ computes the index \ccc{i} of the neighbor.}
\label{Triangulation3-sec-Traits}
The first template parameter of the triangulation class
-\ccc{CGAL_Triangulation_3} of \cgal\ is the geometric traits class.
+\ccc{Triangulation_3} of \cgal\ is the geometric traits class.
The first subsection of this section describes the requirements
that the geometric traits class must fulfill. The second subsection
@@ -1180,12 +1283,12 @@ presents a predefined geometric traits class available in \cgal.
\protect \ccClassName}
\label{Triangulation3-sec-concept-Traits}
-\subsubsection{To be used by \protect \ccc{CGAL_Triangulation_3}}
+\subsubsection{To be used by \protect \ccc{Triangulation_3}}
\ccCreationVariable{traits}
The geometric traits class \ccClassName\ of the triangulation
-class \ccc{CGAL_Triangulation_3} must define the geometric
+class \ccc{Triangulation_3} must define the geometric
objects (points, segments, triangles and tetrahedra) forming the
triangulation together with a few geometric predicates on these objects:
equality, coordinates comparison, orientation in the space, orientation
@@ -1225,36 +1328,36 @@ can be provided.
\ccMethod{bool equal(const Point & p, const Point & q) const;}
{Equality test.}
-\ccMethod{CGAL_Comparison_result compare_x(const Point & p, const Point
+\ccMethod{Comparison_result compare_x(const Point & p, const Point
& q) const;}
-{Comparison of \ccc{x}-coordinates. Returns \ccc{CGAL_LARGER}
-(resp. \ccc{CGAL_EQUAL}, \ccc{CGAL_SMALLER}) when the \ccc{x}
+{Comparison of \ccc{x}-coordinates. Returns \ccc{LARGER}
+(resp. \ccc{EQUAL}, \ccc{SMALLER}) when the \ccc{x}
coordinate of \ccc{p} is larger than (resp. equal to, smaller than)
the \ccc{x} coordinate of \ccc{q}.}
\ccGlue
-\ccMethod{CGAL_Comparison_result compare_y(const Point & p, const Point
+\ccMethod{Comparison_result compare_y(const Point & p, const Point
& q) const;}
{Comparison of \ccc{y}-coordinates.}
\ccGlue
-\ccMethod{CGAL_Comparison_result compare_z(const Point & p, const Point
+\ccMethod{Comparison_result compare_z(const Point & p, const Point
& q) const;}
{Comparison of \ccc{z}-coordinates.}
-\ccMethod{CGAL_Orientation orientation(const Point& p0,
+\ccMethod{Orientation orientation(const Point& p0,
const Point& p1,
const Point& p2,
const Point& p3) const;}
{Orientation test in three dimensions.}
-\ccMethod{CGAL_Orientation orientation_in_plane
+\ccMethod{Orientation orientation_in_plane
(const Point & q,
const Point & r,
const Point & s,
const Point & test) const;}
{When \ccc{test, q, r, s} are coplanar, tests whether \ccc{test} is on the
-same side of \ccc{(q, r)} as \ccc{s}. Returns \ccc{CGAL_COLLINEAR} if
-\ccc{test, q, r} are collinear, \ccc{CGAL_POSITIVE} if \ccc{(q, r, test)}
-and \ccc{(q, r, s)} have the same orientation, \ccc{CGAL_NEGATIVE} if
+same side of \ccc{(q, r)} as \ccc{s}. Returns \ccc{COLLINEAR} if
+\ccc{test, q, r} are collinear, \ccc{POSITIVE} if \ccc{(q, r, test)}
+and \ccc{(q, r, s)} have the same orientation, \ccc{NEGATIVE} if
\ccc{(q, r, test)} and \ccc{(q, r, s)} have opposite orientations.
\ccPrecond{\ccc{test,q,r,s} are coplanar and \ccc{q,r,s} are not collinear.}}
@@ -1264,7 +1367,7 @@ and \ccc{(q, r, s)} have the same orientation, \ccc{CGAL_NEGATIVE} if
{Collinearity test.}
\subsubsection{To be used by \protect
-\ccc{CGAL_Delaunay_triangulation_3}}
+\ccc{Delaunay_triangulation_3}}
In addition to the requirements described before, the geometric traits
class of a
@@ -1272,7 +1375,7 @@ Delaunay triangulation must fulfill the following requirements:
\ccHeading{Predicates}
-\ccMethod{CGAL_Oriented_side
+\ccMethod{Oriented_side
side_of_oriented_sphere(const Point & p,
const Point & q,
const Point & r,
@@ -1281,23 +1384,23 @@ Delaunay triangulation must fulfill the following requirements:
{Computes the side of point \ccc{test} with respect to the oriented
sphere circumscribing \ccc{p,q,r,s}.}
-\ccMethod{CGAL_Oriented_side
+\ccMethod{Oriented_side
side_of_oriented_circle(const Point & p,
const Point & q,
const Point & r,
const Point & test) const;}
-{computes the side of \ccc{test} with respect to the oriented circle
+{Computes the side of \ccc{test} with respect to the oriented circle
circumscribing \ccc{p,q,r}.
\ccPrecond{\ccc{p,q,r,test} are coplanar.}}
\subsubsection{To be used by \protect
-\ccc{CGAL_Delaunay_hierarchic_triangulation_3}}
+\ccc{Delaunay_hierarchic_triangulation_3}}
\textit{Not yet implemented}
\end{ccClass}
- \begin{ccClassTemplate}{CGAL_Triangulation_geom_traits_3}
+ \begin{ccClassTemplate}{Triangulation_geom_traits_3}
\subsection{The Class \protect \ccClassTemplateName}
\label{Triangulation3-sec-class-Traits}
@@ -1314,13 +1417,13 @@ Section~\ref{Triangulation3-sec-concept-Traits}.
\ccTypes
-\ccTypedef{typedef CGAL_Point_3 Point;}{}
+\ccTypedef{typedef Point_3 Point;}{}
\ccGlue
-\ccTypedef{typedef CGAL_Segment_3 Segment;}{}
+\ccTypedef{typedef Segment_3 Segment;}{}
\ccGlue
-\ccTypedef{typedef CGAL_Triangle_3 Triangle;}{}
+\ccTypedef{typedef Triangle_3