after reviews of user manual

This commit is contained in:
Olivier Devillers 2012-05-23 15:22:18 +00:00
parent 20b9923723
commit 1c976bb71f
24 changed files with 478 additions and 514 deletions

View File

@ -1,6 +1,6 @@
-------------------------------------------------- --------------------------------------------------
En lisant les reviews Problems to be solved from the reviews
-------------------------------------------------- --------------------------------------------------
example delaunay does not execute properly example delaunay does not execute properly
@ -11,6 +11,13 @@ put a default value for dim in the constructor
check that the perturbation scheme is independant of the order of insertion check that the perturbation scheme is independant of the order of insertion
Add a template parameter Location_policy
ambient dim vs max dim
check all is_valid function, precise in the doc what they are doing.
(do sth like 2/3 d)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -4,28 +4,37 @@
\newcommand{\sphere}{\ensuremath{\mathcal S}} \newcommand{\sphere}{\ensuremath{\mathcal S}}
\renewcommand{\real}{\ensuremath{\mathbb R}} \renewcommand{\real}{\ensuremath{\mathbb R}}
This package proposes data structure and algorithms to compute
triangulations of points in any dimensions.
The \ccc{Triangulation_data_structure} allows to store and manipulate the
combinatorial part of a triangulation while the geometric classes
\ccc{Triangulation} and \ccc{DelaunayTriangulation} allows to
compute a (Delaunay) triangulation of a set of points and to maintain
it under insertions (and deletions in the Delaunay case).
\section{Introduction\label{triangulation:intro}} \section{Introduction\label{triangulation:intro}}
A \textbf{finite abstract simplicial complex} is built on a finite set of A \em{finite abstract simplicial complex} is built on a finite set of
vertices $V$ and consists of a collection $S$ of subsets of $V$ such that vertices $V$ and consists of a collection $S$ of subsets of $V$ such that
\centerline{if $s$ is a set of vertices in $S$, then all the subsets of $s$ are also \centerline{if $s$ is a set of vertices in $S$, then all the subsets of $s$ are also
in $S$.} in $S$.}
The sets in $S$ (which are subsets of $V$) are called The sets in $S$ (which are subsets of $V$) are called
\textbf{faces} or \textbf{simplices} (the \em{faces} or \em{simplices} (the
singular of which is \textbf{simplex}). singular of which is \em{simplex}).
% %
A simplex $s\in S$ is \textbf{maximal} if it is not a proper subset of some other A simplex $s\in S$ is \em{maximal} if it is not a proper subset of some other
set in $S$. The simplicial complex is \textbf{pure} %(or \textbf{homogeneous}) set in $S$. The simplicial complex is \em{pure} %(or \em{homogeneous})
if all the maximal simplices have the same cardinality, i.e., they have the same if all the maximal simplices have the same cardinality, i.e., they have the same
number of vertices. number of vertices.
In the sequel, we will call these maximal simplices \textbf{(full) cells}. In the sequel, we will call these maximal simplices \em{full cells}.
A \textbf{face} of a simplex is a subset of it. A \em{face} of a simplex is a subset of it.
A \textbf{proper face} of a simplex is a strict subset of it. A \em{proper face} of a simplex is a strict subset of it.
If the vertices are embedded into Euclidean space $\real^d$, we deal with If the vertices are embedded into Euclidean space $\real^d$, we deal with
\textbf{finite simplicial complexes} which have slightly different simplices \em{finite simplicial complexes} which have slightly different simplices
and additional requirements: and additional requirements:
\begin{itemize} \begin{itemize}
\item vertices corresponds to points in space. \item vertices corresponds to points in space.
@ -37,31 +46,35 @@ simplices (the empty set counts).
See the \ccAnchor{http://en.wikipedia.org/wiki/Simplicial_complex}{wikipedia See the \ccAnchor{http://en.wikipedia.org/wiki/Simplicial_complex}{wikipedia
entry} for more about simplicial complexes. entry} for more about simplicial complexes.
This \cgal\ package deals with pure finite simplicial complexes, which This \cgal\ package deals with pure finite simplicial complexes
we will simply call in the sequel \textbf{triangulations}. It provides three main classes without boundary, which
we will simply call in the sequel \em{triangulations}. It provides three main classes
for creating and manipulating triangulations. for creating and manipulating triangulations.
The class \ccc{CGAL::Triangulation_data_structure<Dimensionality, The class \ccc{CGAL::Triangulation_data_structure<Dimensionality,
TDSVertex, TDSFullCell>} models an abstract triangulation: vertices in this TriangulationDSVertex, TriangulationDSFullCell>} models an {\em abstract triangulation}: vertices in this
class are not embedded in Euclidean space but are only of combinatorial class are not embedded in Euclidean space but are only of combinatorial
nature. nature.
The class \ccc{CGAL::Triangulation<TrTraits, TDS>} embeds an abstract The class \ccc{CGAL::Triangulation<TriangulationTraits, TriangulationDataStructure>} embeds an abstract
triangulation in Euclidean space, thus forming a geometric triangulation in Euclidean space, thus forming a geometric
triangulation. Methods are triangulation. Methods are
provided for the insertion %and removal provided for the insertion %and removal
of points in the triangulation, the of points in the triangulation, the
traversal of various elements of the triangulation, as well as the localization of a traversal of various elements of the triangulation, as well as the localization of a
query point inside the triangulation. query point inside the triangulation.
The convex hull of the points is part of the triangulation, the fact
that there is no boundary is ensured by adding an infinite vertex and
infinite full cells to triangulate the outside of the convex hull.
The class \ccc{CGAL::Delaunay_triangulation<DTTraits, TDS>} adds further The class \ccc{CGAL::Delaunay_triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>} adds further
constraints to a triangulation, in that all its simplices must have the constraints to a triangulation, in that all its simplices must have the
so-called \textbf{Delaunay} or \textbf{empty-ball} property: the interior of so-called \em{Delaunay} or \em{empty-ball} property: the interior of
a ball circumscribing any simplex (or full cell) must be free from any a ball circumscribing any simplex (or full cell) must be free from any
vertex of the triangulation. The \ccc{CGAL::Delaunay_triangulation} class vertex of the triangulation. The \ccc{CGAL::Delaunay_triangulation} class
supports deletion of vertices. supports deletion of vertices.
%The class \ccc{CGAL::Regular_triangulation<RegularTraits, TDS>} is a generalization of %The class \ccc{CGAL::Regular_triangulation<RegularTraits, TriangulationDataStructure>} is a generalization of
%the Delaunay triangulation. %the Delaunay triangulation.
%The rest of this user manual gives more details about these classes and the %The rest of this user manual gives more details about these classes and the
@ -81,38 +94,36 @@ affinely independent.
If the maximal dimension of a simplex in the triangulation is If the maximal dimension of a simplex in the triangulation is
$d$, we call:\begin{itemize} $d$, we call:\begin{itemize}
\item an $i$-face for some $i\in[0,d]$ a \textbf{face}; \item an $i$-face for some $i\in[0,d]$ a \em{face};
\item a $0$-face a \textbf{vertex}; \item a $0$-face a \em{vertex};
\item a $1$-face an \textbf{edge}; \item a $1$-face an \em{edge};
\item a $(d-2)$-face a \textbf{ridge}; \item a $(d-2)$-face a \em{ridge};
\item a $(d-1)$-face a \textbf{facet}; and \item a $(d-1)$-face a \em{facet}; and
\item a $d$-face a \textbf{full cell}. \item a $d$-face a \em{full cell}.
\end{itemize} \end{itemize}
Two faces $\sigma$ and $\sigma'$ are \textbf{incident} if and only if Two faces $\sigma$ and $\sigma'$ are \em{incident} if and only if
$\sigma'$ is a proper sub-face of $\sigma$ or \emph{vice versa}. $\sigma'$ is a proper sub-face of $\sigma$ or \emph{vice versa}.
\section{Triangulation Data Structure\label{triangulation:tds}} \section{Triangulation Data Structure\label{triangulation:tds}}
\newcommand{\tds}{\ccc{TDS}} \newcommand{\tds}{\ccc{TriangulationDataStructure}}
\newcommand{\ad}{\ensuremath{D}} \newcommand{\ad}{\ensuremath{D}}
\newcommand{\cd}{\ensuremath{d}} \newcommand{\cd}{\ensuremath{d}}
In this section, we describe the concept \ccc{TriangulationDataStructure} for In this section, we describe the concept \ccc{TriangulationDataStructure} for
which \cgal\ provides one model class: which \cgal\ provides one model class:
\ccc{CGAL::Triangulation_data_structure<Dimensionality, TDSVertex, \ccc{CGAL::Triangulation_data_structure<Dimensionality, TriangulationDSVertex,
TDSFullCell>}. For simplicity, we use the abbreviation \tds. TriangulationDSFullCell>}. For simplicity, we use the abbreviation \tds.
A \tds\ cannot represent every abstract pure complex, but rather the A \tds\ can represent an abstract pure complex,
combinatorial nature of a (geometric) triangulation. For example, a facet such that any facet is incident to exactly two full cells.
may be incident to arbitrarily many simplices in an abstract pure complex, but
to at most two in a \tds\ (and in fact exactly two as we explain below).
A \tds\ has a property called the \textbf{ambient dimension} which is a A \tds\ has a property called the \em{ambient dimension} which is a
positive integer equal to the maximum dimension a full cell can have. positive integer equal to the maximum dimension a full cell can have.
This ambient dimension can be chosen by the user at the creation of a \tds\ This ambient dimension can be chosen by the user at the creation of a \tds\
and can then be queried using the method \ccc{tds.ambient_dimension()}. and can then be queried using the method \ccc{tds.ambient_dimension()}.
A \tds\ also knows the \textbf{current dimension} of its full cells, A \tds\ also knows the \em{current dimension} of its full cells,
which can be queried with \ccc{tds.current_dimension()}. In the sequel, let which can be queried with \ccc{tds.current_dimension()}. In the sequel, let
us denote the ambient dimension with \ad\ and the current dimension with \cd. us denote the ambient dimension with \ad\ and the current dimension with \cd.
It always holds that $-2\leq\cd\leq\ad$ and $0<\ad$. It always holds that $-2\leq\cd\leq\ad$ and $0<\ad$.
@ -131,52 +142,53 @@ The special meaning of negative values for $d$ will be explain below.
% %
%% By contrast, in the present \ccc{Triangulation} \cgal\ package, the reference %% By contrast, in the present \ccc{Triangulation} \cgal\ package, the reference
%% dimension of a pure complex (or a pure complex data structure) is its current %% dimension of a pure complex (or a pure complex data structure) is its current
%% dimension. This means that, whatever the current dimension is, a full %% dimension. This means that, whatever the current dimension is, a
%% cell is always represented by the \ccc{FullCell} nested type, And a %% full cell is always represented by the \ccc{FullCell} nested type, And a
%% \ccc{Facet} represents a face of dimension \ccc{current_dimension()-1} %% \ccc{Facet} represents a face of dimension \ccc{current_dimension()-1}
%% \textbf{and not} \ccc{ambient_dimension()-1}. %% \em{and not} \ccc{ambient_dimension()-1}.
\subsubsection{The data structure triangulates $\sphere^\cd$} \subsubsection{The data structure triangulates $\sphere^\cd$}
In a first approximation, a \tds\ can be viewed as A \tds\ can be viewed as
a \emph{triangulation} of the topological sphere $\sphere^\cd$, a {triangulation} of the topological sphere $\sphere^\cd$,
i.e., its faces can be embedded to form a partition of i.e., its faces can be embedded to form a partition of
$\sphere^\cd$ into $\cd$-simplices. When a $\sphere^\cd$ into $\cd$-simplices.
\tds\ is used as the combinatorial part of a geometric triangulation, one % When a
special vertex of the \tds\ plays the role of the \textbf{vertex at % \tds\ is used as the combinatorial part of a geometric triangulation, one
infinity}; we can consider that the triangulation covers the whole % special vertex of the \tds\ plays the role of the \em{vertex at
affine hull of its vertices % infinity}; we can consider that the triangulation covers the whole
using \textbf{infinite} or \textbf{unbounded} cells to fill the space outside the convex % affine hull of its vertices
hull of the triangulation's finite vertices. (More details are given in the next section.) % using \em{infinite} or \em{unbounded} full cells to fill the space outside the convex
% hull of the triangulation's finite vertices. (More details are given in the next section.)
One nice consequence of the above important fact is that a cell has One nice consequence of the above important fact is that a full cell has
always exactly $\cd+1$ neighbors. always exactly $\cd+1$ neighbors.
Two full cells $\sigma$ and $\sigma'$ sharing a facet are called Two full cells $\sigma$ and $\sigma'$ sharing a facet are called
\textbf{neighbors}. \em{neighbors}.
Possible values of $\cd$ (the \emph{current dimension} of the triangulation) include Possible values of $\cd$ (the \emph{current dimension} of the triangulation) include
\begin{itemize} \begin{itemize}
\item[$\cd=-2$] This corresponds to the non-existence of any object in \item[$\cd=-2$] This corresponds to the non-existence of any object in
the \tds. the \tds.
\item[$\cd=-1$] This corresponds to a single vertex and a single cell. In a \item[$\cd=-1$] This corresponds to a single vertex and a single full cell. In a
geometric triangulation, this vertex corresponds to the vertex at infinity. geometric triangulation, this vertex corresponds to the vertex at infinity.
\item[$\cd=0$] This corresponds to two vertices (geometrically, the finite vertex and \item[$\cd=0$] This corresponds to two vertices (geometrically, the finite vertex and
the infinite vertex), each corresponding to a cell; the infinite vertex), each corresponding to a full cell;
the two cells being neighbors of each other. This is the unique the two full cells being neighbors of each other. This is the unique
triangulation of the $0$-sphere. triangulation of the $0$-sphere.
\item[$0<\cd\le\ad$] This corresponds to a standard triangulation of \item[$0<\cd\le\ad$] This corresponds to a standard triangulation of
the sphere $\sphere^\cd$. the sphere $\sphere^\cd$.
\end{itemize} \end{itemize}
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - TDS IMPLEMENTATION % - - - - - - - - - - - - - - - - - - - - - - - - - - - - T D S IMPLEMENTATION
\subsection{The class \ccc{Triangulation_data_structure}\label{triangulation:tds:impl}} \subsection{The class \ccc{Triangulation_data_structure}\label{triangulation:tds:impl}}
We give here some details about the class We give here some details about the class
\ccc{Triangulation_data_structure<Dimensionality, TDSVertex, \ccc{Triangulation_data_structure<Dimensionality, TriangulationDSVertex,
TDSFullCell>} TriangulationDSFullCell>}
implementing the concept \ccc{TriangulationDataStructure}. implementing the concept \ccc{TriangulationDataStructure}.
@ -192,7 +204,7 @@ Each full cell stores references to its $\cd+1$ vertices and
neighbors. Its vertices and neighbors are indexed from $0$ to \cd. The indices neighbors. Its vertices and neighbors are indexed from $0$ to \cd. The indices
of its neighbors have the following meaning: the $i$-th neighbor of $\sigma$ of its neighbors have the following meaning: the $i$-th neighbor of $\sigma$
is the unique neighbor of $\sigma$ that does not contain the $i$-th vertex of is the unique neighbor of $\sigma$ that does not contain the $i$-th vertex of
$\sigma$; in other words, it is the neighbor of $\sigma$ \textbf{opposite} to $\sigma$; in other words, it is the neighbor of $\sigma$ \em{opposite} to
the $i$-th vertex of $\sigma$. the $i$-th vertex of $\sigma$.
\begin{figure}[htbp] \begin{figure}[htbp]
@ -203,24 +215,25 @@ the $i$-th vertex of $\sigma$.
\end{ccTexOnly} \end{ccTexOnly}
\begin{ccHtmlOnly} \begin{ccHtmlOnly}
<center> <center>
<img border=0 src="./fig/simplex-structure.png" align="middle" alt="Index the vertices and neighbors of a simplex"> <img border=0 src="./fig/simplex-structure.png" align="middle"
alt="Index the vertices and neighbors of a full cell">
</center> </center>
\end{ccHtmlOnly} \end{ccHtmlOnly}
\caption{Indexing the vertices and neighbors of a simplex $s$ in \caption{Indexing the vertices and neighbors of a full cell $c$ in
dimension $\cd=2$.} dimension $\cd=2$.}
\label{triangulation:fig:simplex} \label{triangulation:fig:full-cell}
\end{figure} \end{figure}
\subsubsection{Instantiating the class template} \subsubsection{Instantiating the class template}
The \ccc{Triangulation_data_structure<Dimensionality, TDSVertex, TDSFullCell>} The \ccc{Triangulation_data_structure<Dimensionality, TriangulationDSVertex, TriangulationDSFullCell>}
class template is designed in such a way that its user can choose class template is designed in such a way that its user can choose
\begin{itemize} \begin{itemize}
\item the ambient dimension of the triangulation data structure by specifying the \ccc{Dimensionality} template parameter, \item the ambient dimension of the triangulation data structure by specifying the \ccc{Dimensionality} template parameter,
\item the type used to represent vertices by specifying the \ccc{TDSVertex} \item the type used to represent vertices by specifying the \ccc{TriangulationDSVertex}
template parameter and template parameter and
\item the type used to represent simplices by specifying the \item the type used to represent full cells by specifying the
\ccc{TDSFullCell} template parameter. \ccc{TriangulationDSFullCell} template parameter.
\end{itemize} \end{itemize}
The last two parameters have default values and are thus not necessary, unless The last two parameters have default values and are thus not necessary, unless
@ -229,23 +242,23 @@ template). The first template parameter, \ccc{Dimensionality}, must be
one of the following: one of the following:
\begin{itemize} \begin{itemize}
\item \ccPureGlobalScope\ccc{Dimension_tag<D>} for some integer \ad. This \item \ccPureGlobalScope\ccc{Dimension_tag<D>} for some integer \ad. This
indicates that the pure complex can store simplices of dimension at most indicates that the triangulation can store full cells of dimension at most
\ad. The maximum dimension \ad\ is known by the compiler, which \ad. The maximum dimension \ad\ is known by the compiler, which
triggers some optimizations. triggers some optimizations.
\item \ccPureGlobalScope\ccc{Dynamic_dimension_tag}. In this case, the maximum \item \ccPureGlobalScope\ccc{Dynamic_dimension_tag}. In this case, the maximum
dimension of the simplices must be passed as an integer argument to an instance dimension of the full cells must be passed as an integer argument to an instance
constructor (see \ccc{TriangulationDataStructure}). constructor (see \ccc{TriangulationDataStructure}).
\end{itemize} \end{itemize}
The \ccc{TDSVertex} and \ccc{TDSFullCell} parameters to the class template The \ccc{TriangulationDSVertex} and \ccc{TriangulationDSFullCell} parameters to the class template
must be models of the concepts \ccc{TriangulationDSVertex} and must be models of the concepts \ccc{TriangulationDSVertex} and
\ccc{TriangulationDSFullCell} respectively. \cgal\ provides models for these \ccc{TriangulationDSFullCell} respectively. \cgal\ provides models for these
concepts: \ccc{Triangulation_ds_vertex<TDS>} and concepts: \ccc{Triangulation_ds_vertex<TriangulationDataStructure>} and
\ccc{Triangulation_ds_simplex<TDS, TDSFullCellStoragePolicy>}, which, as one \ccc{Triangulation_ds_full_cell<TriangulationDataStructure, TDSFullCellStoragePolicy>}, which, as one
can see, take the \tds\ as a template parameter in order to get access to can see, take the \tds\ as a template parameter in order to get access to
some nested types in \tds. some nested types in \tds.
\textbf{This creates a circular dependency}, which we resolve in the same way \em{This creates a circular dependency}, which we resolve in the same way
as in the \cgal\ \ccc{Triangulation_2} and \ccc{Triangulation_3} packages (see as in the \cgal\ \ccc{Triangulation_2} and \ccc{Triangulation_3} packages (see
Chapters~\ref{chapter-TDS2},~\ref{chapter-Triangulation2},~\ref{chapter-TDS3},~and~\ref{chapter-Triangulation3}). Chapters~\ref{chapter-TDS2},~\ref{chapter-Triangulation2},~\ref{chapter-TDS3},~and~\ref{chapter-Triangulation3}).
In particular, models of the concepts \ccc{TriangulationDSVertex} and In particular, models of the concepts \ccc{TriangulationDSVertex} and
@ -280,11 +293,11 @@ It is also possible to fix it at run time as in the next example.
\subsubsection{Barycentric subdivision} \subsubsection{Barycentric subdivision}
This example provides a function for computing the barycentric subdivision of a This example provides a function for computing the barycentric subdivision of a
single full cell \ccc{fc} in a triangulation data structure. The other full single full cell \ccc{c} in a triangulation data structure. The other
cells neighboring \ccc{fc} are automatically subdivided to match the full cells neighboring \ccc{c} are automatically subdivided to match the
subdivision of the cell \ccc{fc}. The barycentric subdivision of \ccc{fc} is subdivision of the full cell \ccc{c}. The barycentric subdivision of \ccc{c} is
obtained by enumerating all the faces of \ccc{fc} in order of decreasing obtained by enumerating all the faces of \ccc{c} in order of decreasing
dimension, from the dimension of~\ccc{fc} to dimension~1, and inserting a new dimension, from the dimension of~\ccc{c} to dimension~1, and inserting a new
vertex in each face. For the enumeration, we use a combinatorial enumerator, vertex in each face. For the enumeration, we use a combinatorial enumerator,
which is not documented, but provided in \cgal. which is not documented, but provided in \cgal.
@ -302,7 +315,7 @@ alt="Barycentric subdivision">
</center> </center>
\end{ccHtmlOnly} \end{ccHtmlOnly}
\caption{Barycentric subdivision in dimension $\cd=2$.} \caption{Barycentric subdivision in dimension $\cd=2$.}
\label{triangulation:fig:simplex} \label{triangulation:fig:barycentric}
\end{figure} \end{figure}
\ccIncludeExampleCode{Triangulation/barycentric_subdivision.cpp} \ccIncludeExampleCode{Triangulation/barycentric_subdivision.cpp}
@ -312,41 +325,41 @@ alt="Barycentric subdivision">
\section{Triangulations} \section{Triangulations}
The class \ccc{CGAL::Triangulation<TrTraits, TDS>} embeds an abstract The class \ccc{CGAL::Triangulation<TriangulationTraits, TriangulationDataStructure>} embeds an abstract
triangulation into Euclidean space. More precisely, it triangulation into Euclidean space. More precisely, it
maintains a triangulation (a partition into pairwise interior-disjoint full maintains a triangulation (a partition into pairwise interior-disjoint
cells) of the convex hull of the points (the embedded vertices) of the full cells) of the convex hull of the points (the embedded vertices) of the
triangulation, as well as a triangulation of the complement of the convex hull triangulation, as well as a triangulation of the complement of the convex hull
\textbf{in the affine subspace} spanned by the triangulation's points \em{in the affine subspace} spanned by the triangulation's points
using a special vertex at infinity. using a special vertex at infinity.
Methods are provided for the insertion of points in the triangulation, the Methods are provided for the insertion of points in the triangulation, the
contraction of faces, the traversal of various elements of the triangulation contraction of faces, the traversal of various elements of the triangulation
as well as the localization of a query point inside the triangulation. as well as the localization of a query point inside the triangulation.
Infinite cells outside the convex hull are each incident to Infinite full cells outside the convex hull are each incident to
a finite facet on the convex hull of the triangulation and to a unique special a finite facet on the convex hull of the triangulation and to a unique special
\textbf{vertex at infinity}. \em{vertex at infinity}.
%\note{In every infinite cell, the vertex at infinity always has index $0$.} %\note{In every infinite full cell, the vertex at infinity always has index $0$.}
%\note{SH: the above note this should go in the documentation of the %\note{SH: the above note this should go in the documentation of the
%\ccc{TriangulationDataStructure} concept, or that of the class?} %\ccc{TriangulationDataStructure} concept, or that of the class?}
As long as no \emph{advanced} class method is called, it is guaranteed that As long as no \emph{advanced} class method is called, it is guaranteed that
all finite cells have positive orientation. The infinite cells are all finite full cells have positive orientation. The infinite full cells are
oriented so that the finite vertices of the triangulation lies on the negative side of oriented so that the finite vertices of the triangulation lies on the negative side of
the oriented hyperplane defined by the cell's finite facet. the oriented hyperplane defined by the full cell's finite facet.
% - - - - - - - - - - - - - - - - - - - - - - - - - Triangulation IMPLEMENTATION % - - - - - - - - - - - - - - - - - - - - - - - - - Triangulation IMPLEMENTATION
\subsection{Implementation} \subsection{Implementation}
The class \ccc{CGAL::Triangulation<TrTraits, TDS>} stores a model \ccc{TDS} The class \ccc{CGAL::Triangulation<TriangulationTraits, TriangulationDataStructure>} stores a model \tds
of the concept \ccc{TriangulationDataStructure} which is instantiated with a of the concept \ccc{TriangulationDataStructure} which is instantiated with a
vertex type that stores a point, and a full cell type that allows the retrieval vertex type that stores a point, and a full cell type that allows the retrieval
of the point of its vertices. of the point of its vertices.
The template parameter \ccc{TrTraits} must be a model of the concept The template parameter \ccc{TriangulationTraits} must be a model of the concept
\ccc{TriangulationTraits} which provides the geometric \ccc{Point} type as well \ccc{TriangulationTraits} which provides the geometric \ccc{Point} type as well
as various geometric predicates used by the \ccc{Triangulation} class. as various geometric predicates used by the \ccc{Triangulation} class.
@ -361,7 +374,7 @@ random points. In \ccc{STEP 1}, we generate one hundred random points in
$\real^5$, which we then insert into a triangulation. In \ccc{STEP 2}, we $\real^5$, which we then insert into a triangulation. In \ccc{STEP 2}, we
%have a little fun and %have a little fun and
ask the triangulation to construct the set of edges ask the triangulation to construct the set of edges
($1$-cells) incident to the vertex at infinity. It is easy to see that ($1$ dimensional faces) incident to the vertex at infinity. It is easy to see that
these edges are in bijection with the vertices on the convex hull of the these edges are in bijection with the vertices on the convex hull of the
points. This gives us a handy way to count the convex hull vertices. points. This gives us a handy way to count the convex hull vertices.
%(Note that %(Note that
@ -377,15 +390,15 @@ points. This gives us a handy way to count the convex hull vertices.
Remember that a triangulation triangulates the convex hull of its Remember that a triangulation triangulates the convex hull of its
vertices. vertices.
In general position, each In general position, each
facet of the convex hull is incident to one finite cell and one infinite facet of the convex hull is incident to one finite full cell and one infinite
cell. In fact there is a bijection between the infinite cells and the full cell. In fact there is a bijection between the infinite full cells and the
facets of the convex hull. facets of the convex hull.
If vertices are not in general position, convex hull faces that are If vertices are not in general position, convex hull faces that are
not simplices are triangulated. not simplices are triangulated.
So, in order to traverse the convex hull facets, So, in order to traverse the convex hull facets,
there are (at least) two possibilities: there are (at least) two possibilities:
The first is to iterate over the cells of the triangulation and check if they The first is to iterate over the full cells of the triangulation and check if they
are infinite or not: are infinite or not:
\begin{ccExampleCode} \begin{ccExampleCode}
@ -393,11 +406,11 @@ are infinite or not:
typedef Triangulation::Full_cell_iterator Full_cell_iterator; typedef Triangulation::Full_cell_iterator Full_cell_iterator;
typedef Triangulation::Facet Facet; typedef Triangulation::Facet Facet;
for( Full_cell_iterator fcit = t.full_cells_begin(); for( Full_cell_iterator cit = t.full_cells_begin();
fcit != t.full_cells_end(); ++fcit ) { cit != t.full_cells_end(); ++cit ) {
if( ! t.is_infinite(fcit) ) if( ! t.is_infinite(cit) )
continue; continue;
Facet ft(fcit, fcit->index(t.infinite_vertex() ) ); Facet ft(cit, cit->index(t.infinite_vertex() ) );
++i;// |ft| is a facet of the convex hull ++i;// |ft| is a facet of the convex hull
} }
std::cout << "There are " << i << " facets on the convex hull."<< std::endl;} std::cout << "There are " << i << " facets on the convex hull."<< std::endl;}
@ -405,9 +418,9 @@ std::cout << "There are " << i << " facets on the convex hull."<< std::endl;}
\textbf{Remark}: the code example above is not self contained, it can \textbf{Remark}: the code example above is not self contained, it can
be cut and paste at STEP 2 of {\tt triangulation.cpp} program above. be cut and paste at STEP 2 of {\tt triangulation.cpp} program above.
A second possibility is to ask the triangulation to gather all the cells A second possibility is to ask the triangulation to gather all the full cells
incident to the infinite vertex: they form precisely the set of infinite incident to the infinite vertex: they form precisely the set of infinite
cells: full cells:
\begin{ccExampleCode} \begin{ccExampleCode}
{int i=0; {int i=0;
@ -431,28 +444,28 @@ std::cout << "There are " << i << " facets on the convex hull."<< std::endl;}
be cut and paste at STEP 2 of {\tt triangulation.cpp} program above. be cut and paste at STEP 2 of {\tt triangulation.cpp} program above.
One important difference between the two examples above is that the first uses One important difference between the two examples above is that the first uses
\emph{little} memory but traverses \emph{all} the cells, while the second \emph{little} memory but traverses \emph{all} the full cells, while the second
visits \emph{only} the infinite cells but stores handles to them into a visits \emph{only} the infinite full cells but stores handles to them into a
\emph{potentially big} array. \emph{potentially big} array.
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DELAUNAY TRIANGULATIONS % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DELAUNAY TRIANGULATIONS
\section{Delaunay Triangulations}%and regular triangulationes} \section{Delaunay Triangulations}%and regular triangulationes}
The class \ccc{CGAL::Delaunay_triangulation<DTTraits, TDS>} derives from The class \ccc{CGAL::Delaunay_triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>} derives from
\ccc{CGAL::Triangulation<DTTraits, TDS>} and adds further constraints to a \ccc{CGAL::Triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>} and adds further constraints to a
triangulation, in that all its full cells must have the so-called triangulation, in that all its full cells must have the so-called
\textbf{Delaunay} or \textbf{empty-ball} property: the interior of the ball \em{Delaunay} or \em{empty-ball} property: the interior of the ball
circumscribing any full cell must be free from any vertex circumscribing any full cell must be free from any vertex
of the triangulation. of the triangulation.
The \textbf{circumscribing ball} of a full cell \ccc{fc} is the ball The \em{circumscribing ball} of a full cell is the ball
having all vertices of the full cell on its boundary. having all vertices of the full cell on its boundary.
In case of degeneracies (co-spherical points) the triangulation is not In case of degeneracies (co-spherical points) the triangulation is not
uniquely defined, uniquely defined,
note however that the \cgal\ implementation computes a unique note however that the \cgal\ implementation computes a unique
triangulation even in these cases. triangulation even in these cases.
%The \textbf{circumscribing sphere} of a face \ccc{s} is the smallest sphere %The \em{circumscribing sphere} of a face \ccc{c} is the smallest sphere
%touching all vertices of the face. A triangulation of the convex %touching all vertices of the face. A triangulation of the convex
%hull of a finite point set has the Delaunay (or empty-ball) property if all %hull of a finite point set has the Delaunay (or empty-ball) property if all
%its full cells have the Delaunay (or empty-ball) property: %its full cells have the Delaunay (or empty-ball) property:
@ -462,11 +475,11 @@ triangulation even in these cases.
%interior of its circumscribing sphere. %interior of its circumscribing sphere.
When a new point \ccc{p} is inserted into a Delaunay triangulation, the When a new point \ccc{p} is inserted into a Delaunay triangulation, the
finite cells whose circumscribing sphere contain \ccc{p} are said to finite full cells whose circumscribing sphere contain \ccc{p} are said to
\textbf{be in conflict} with point \ccc{p}. The set of cells that are in \em{be in conflict} with point \ccc{p}. The set of full cells that are in
conflict with \ccc{p} form the \textbf{conflict zone}. That conflict zone is conflict with \ccc{p} form the \em{conflict zone}. That conflict zone is
augmented with the infinite cells whose finite facet does not lie augmented with the infinite full cells whose finite facet does not lie
anymore on the convex hull of the triangulation (with \ccc{p} added). The cells anymore on the convex hull of the triangulation (with \ccc{p} added). The full cells
in the conflict zone are removed, leaving a hole that contains \ccc{p}. That in the conflict zone are removed, leaving a hole that contains \ccc{p}. That
hole is then re-triangulated in a ``star shape'' centered at \ccc{p}. hole is then re-triangulated in a ``star shape'' centered at \ccc{p}.
@ -476,13 +489,13 @@ Delaunay triangulations also support vertex removal.
\subsection{Implementation} \subsection{Implementation}
The class \ccc{CGAL::Delaunay_triangulation<DTTraits, TDS>} derives from The class \ccc{CGAL::Delaunay_triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>} derives from
\ccc{CGAL::Triangulation<DTTraits, TDS>}. It thus stores a model \ccc{TDS} of \ccc{CGAL::Triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>}. It thus stores a model \tds of
the concept \ccc{TriangulationDataStructure} which is instantiated with a vertex the concept \ccc{TriangulationDataStructure} which is instantiated with a vertex
type that stores a geometric point, and a full cell type that allows the type that stores a geometric point, and a full cell type that allows the
retrieval of the points of its vertices. retrieval of the points of its vertices.
The template parameter \ccc{DTTraits} must be a model of the concept The template parameter \ccc{DelaunayTriangulationTraits} must be a model of the concept
\ccc{DelaunayTriangulationTraits} which provides the geometric \ccc{Point} type as \ccc{DelaunayTriangulationTraits} which provides the geometric \ccc{Point} type as
well as various geometric predicates used by the \ccc{Delaunay_triangulation} class. well as various geometric predicates used by the \ccc{Delaunay_triangulation} class.
The concept \ccc{DelaunayTriangulationTraits} refines the concept The concept \ccc{DelaunayTriangulationTraits} refines the concept
@ -493,14 +506,14 @@ for the computation of Delaunay triangulations.
\subsection{Examples} \subsection{Examples}
\subsubsection{Access to the conflict zone and created cells during point \subsubsection{Access to the conflict zone and created full cells during point
insertion} insertion}
When using a cell type containing additional custom information, it may be When using a full cell type containing additional custom information, it may be
useful to get an efficient access to the cells that are going to be erased useful to get an efficient access to the full cells that are going to be erased
upon the insertion of a new point in the Delaunay triangulation, and to the newly upon the insertion of a new point in the Delaunay triangulation, and to the newly
created cells. The second part of code example below shows how one can have efficient created full cells. The second part of code example below shows how one can have efficient
access to both the conflict zone and the created cells, while still access to both the conflict zone and the created full cells, while still
retaining an efficient update of the Delaunay triangulation. retaining an efficient update of the Delaunay triangulation.
\ccIncludeExampleCode{Triangulation/delaunay.cpp} \ccIncludeExampleCode{Triangulation/delaunay.cpp}

View File

@ -5,9 +5,9 @@
The concept \ccRefName\ describes the various types and functions that a class The concept \ccRefName\ describes the various types and functions that a class
has to provide as the first parameter (\ccc{DCTraits}) to the class template has to provide as the first parameter (\ccc{DCTraits}) to the class template
\ccc{Delaunay_triangulation<DTTraits, TDS>}. It brings the geometric ingredient to \ccc{Delaunay_triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>}. It brings the geometric ingredient to
the definition of a Delaunay complex, while the combinatorial ingredient is the definition of a Delaunay complex, while the combinatorial ingredient is
brought by the second template parameter, \ccc{TDS}. brought by the second template parameter, \ccc{TriangulationDataStructure}.
\ccRefines \ccRefines

View File

@ -1,4 +1,4 @@
\begin{ccRefClass}{Delaunay_triangulation<DTTraits, TDS>} \begin{ccRefClass}{Delaunay_triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>}
\ccDefinition \ccDefinition
@ -14,26 +14,26 @@ means.
\ccParameters \ccParameters
\ccc{DTTraits} is the geometric traits class that provides the geometric types \ccc{DelaunayTriangulationTraits} is the geometric traits class that provides the geometric types
and predicates needed by Delaunay triangulations. \ccc{DTTraits} must be a model of and predicates needed by Delaunay triangulations. \ccc{DelaunayTriangulationTraits} must be a model of
the concept \ccc{DelaunayTriangulationTraits}. the concept \ccc{DelaunayTriangulationTraits}.
\ccc{TDS} is the class used to store the underlying triangulation data \ccc{TriangulationDataStructure} is the class used to store the underlying triangulation data
structure. \ccc{TDS} must be a model of the concept structure. \ccc{TriangulationDataStructure} must be a model of the concept
\ccc{TriangulationDataStructure}. The class template \ccRefName\ accepts that no \ccc{TriangulationDataStructure}. The class template \ccRefName\ accepts that no
second parameter be specified. It also accepts the tag \ccc{CGAL::Default} as second parameter be specified. It also accepts the tag \ccc{CGAL::Default} as
second parameter. In both cases, \ccc{TDS} defaults to second parameter. In both cases, \ccc{TriangulationDataStructure} defaults to
\ccc{Triangulation_data_structure< \ccc{Triangulation_data_structure<
Ambient_dimension<DTTraits::Point_d>::type, Ambient_dimension<DelaunayTriangulationTraits::Point_d>::type,
Triangulation_vertex<DTTraits>, Triangulation_vertex<DelaunayTriangulationTraits>,
Triangulation_full_cell<DTTraits> >}. Triangulation_full_cell<DelaunayTriangulationTraits> >}.
\ccInheritsFrom \ccInheritsFrom
\ccc{Triangulation<DTTraits, TDS>}. \ccc{Triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>}.
The class \ccc{Delaunay_triangulation<DTTraits, TDS>} inherits all the types The class \ccc{Delaunay_triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>} inherits all the types
defined in the base class \ccc{Triangulation<DTTraits, TDS>}. Additionally, it defined in the base class \ccc{Triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>}. Additionally, it
defines or overloads the following methods: defines or overloads the following methods:
\ccCreation % - - - - - - - - - - - - - - - - - - - - - - - - - - - CREATION \ccCreation % - - - - - - - - - - - - - - - - - - - - - - - - - - - CREATION
@ -43,7 +43,7 @@ defines or overloads the following methods:
\ccConstructor{Delaunay_triangulation(const int dim, const Geom_traits k = \ccConstructor{Delaunay_triangulation(const int dim, const Geom_traits k =
Geom_traits());}{Instantiates a Delaunay triangulation with one vertex (the vertex Geom_traits());}{Instantiates a Delaunay triangulation with one vertex (the vertex
at infinity). See the description of the inherited nested type at infinity). See the description of the inherited nested type
\ccc{Triangulation<DTTraits, TDS>::Ambient_dimension} for an explanation of \ccc{Triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>::Ambient_dimension} for an explanation of
the use of the parameter \ccc{dim}. The complex stores a copy of the geometric the use of the parameter \ccc{dim}. The complex stores a copy of the geometric
traits \ccc{k}.} traits \ccc{k}.}
@ -52,7 +52,7 @@ traits \ccc{k}.}
\ccMethod{Full_cell_handle remove(Vertex_handle v);}{Remove the vertex \ccc{v} \ccMethod{Full_cell_handle remove(Vertex_handle v);}{Remove the vertex \ccc{v}
from the Delaunay triangulation. If the current dimension of the triangulation has not from the Delaunay triangulation. If the current dimension of the triangulation has not
changed after the removal, then the returned cell \ccc{c} geometrically changed after the removal, then the returned full cell \ccc{c} geometrically
contains the removed vertex \ccc{v} (\ccc{c} can be finite or infinite). contains the removed vertex \ccc{v} (\ccc{c} can be finite or infinite).
Otherwise, the default-constructed \ccc{Full_cell_handle} is returned. Otherwise, the default-constructed \ccc{Full_cell_handle} is returned.
\ccPrecond \ccc{v} is a vertex of the triangulation, different from the \ccPrecond \ccc{v} is a vertex of the triangulation, different from the
@ -62,8 +62,8 @@ Otherwise, the default-constructed \ccc{Full_cell_handle} is returned.
% the Delaunay triangulation. If a vertex is found at position \ccc{p}, it is removed % the Delaunay triangulation. If a vertex is found at position \ccc{p}, it is removed
% from it, otherwise, the default-constructed \ccc{Full_cell_handle} is returned. % from it, otherwise, the default-constructed \ccc{Full_cell_handle} is returned.
% If \ccc{p} is found and if the current dimension of the complex has not % If \ccc{p} is found and if the current dimension of the complex has not
% changed after the removal, then the returned simplex \ccc{s} geometrically % changed after the removal, then the returned full cell \ccc{c} geometrically
% contains the removed point \ccc{p} (\ccc{s} can be finite or infinite). % contains the removed point \ccc{p} (\ccc{c} can be finite or infinite).
% Otherwise, the default-constructed \ccc{Full_cell_handle} is returned.} % Otherwise, the default-constructed \ccc{Full_cell_handle} is returned.}
% \ccMethod{Full_cell_handle remove(const Point & p, Full_cell_handle hint);}{Same % \ccMethod{Full_cell_handle remove(const Point & p, Full_cell_handle hint);}{Same
@ -108,7 +108,8 @@ value of \ccc{lt}:\begin{itemize} \item[\ccc{OUTSIDE_AFFINE_HULL}] Point
triangulation. The method \ccVar.\ccc{insert_outside_affine_hull()} is called. triangulation. The method \ccVar.\ccc{insert_outside_affine_hull()} is called.
\item[\ccc{ON_VERTEX}] The position of the vertex \ccc{v} described by \ccc{f} \item[\ccc{ON_VERTEX}] The position of the vertex \ccc{v} described by \ccc{f}
is set to \ccc{p}. \ccc{v} is returned. \item[Anything else] The point \ccc{p} is set to \ccc{p}. \ccc{v} is returned. \item[Anything else] The point \ccc{p}
is inserted in the conflict zone \textbf{which is assumed} to contain cell is inserted in the conflict zone \em{which is assumed} to contain
full cell
\ccc{c}. (Roughly speaking, the method \ccVar.\ccc{insert_in_conflict_zone()} \ccc{c}. (Roughly speaking, the method \ccVar.\ccc{insert_in_conflict_zone()}
is called.)\end{itemize} \ccPrecond The parameters \ccc{lt}, \ccc{f}, \ccc{ft} is called.)\end{itemize} \ccPrecond The parameters \ccc{lt}, \ccc{f}, \ccc{ft}
and \ccc{c} must be consistent with the localization of point \ccc{p} in the and \ccc{c} must be consistent with the localization of point \ccc{p} in the
@ -133,16 +134,16 @@ must be in conflict with the full cell \ccc{c}.}
\ccMethod{bool conflict(const Point & p, Full_cell_const_handle c) \ccMethod{bool conflict(const Point & p, Full_cell_const_handle c)
const;}{Returns \ccc{true} if and only if the point \ccc{p} is in (Delaunay) const;}{Returns \ccc{true} if and only if the point \ccc{p} is in (Delaunay)
conflict with cell \ccc{c} ({i.e.}, the circumscribing ball of conflict with full cell \ccc{c} ({i.e.}, the circumscribing ball of
$c$ contains $p$ in its interior). $c$ contains $p$ in its interior).
} }
\begin{ccAdvanced} \begin{ccAdvanced}
\ccMethod{Facet compute_conflict_zone(const Point & p, const Full_cell_handle c, \ccMethod{Facet compute_conflict_zone(const Point & p, const Full_cell_handle c,
OutputIterator out) const;}{Outputs handles to the simplices in confict with OutputIterator out) const;}{Outputs handles to the full cells in confict with
point \ccc{p} into the \ccc{OutputIterator out}. The cell \ccc{c} is used point \ccc{p} into the \ccc{OutputIterator out}. The full cell \ccc{c} is used
as a starting point for gathering the cells in conflict with \ccc{p}. as a starting point for gathering the full cells in conflict with \ccc{p}.
\ccPrecond \ccc{c} is in conflict \ccPrecond \ccc{c} is in conflict
with \ccc{p}.\\ \ccVar.\ccc{current_dimension()}$\geq 2$. with \ccc{p}.\\ \ccVar.\ccc{current_dimension()}$\geq 2$.
} }

View File

@ -46,7 +46,7 @@ subspace Aff. It is guaranteed that the affine subspace Aff is given a
consistent orientation when it is called many times with simplex points (in consistent orientation when it is called many times with simplex points (in
range \ccc{[start,end)}) living in a same affine subspace.\\ range \ccc{[start,end)}) living in a same affine subspace.\\
\textbf{Important.} Information about the affine subspace Aff is computed \textbf{Important.} Information about the affine subspace Aff is computed
\textbf{once} and then stored in the predicate class, so it is wise to keep an \em{once} and then stored in the predicate class, so it is wise to keep an
instance of the predicate around as long as one is sure that the affine instance of the predicate around as long as one is sure that the affine
subspace Aff doesn't change. \ccPrecond \ccc{std::distance(start,end)>=3} and subspace Aff doesn't change. \ccPrecond \ccc{std::distance(start,end)>=3} and
\ccc{std::distance(start,end)<=start->dimension()+1}. The points in range \ccc{std::distance(start,end)<=start->dimension()+1}. The points in range

View File

@ -1,36 +1,36 @@
\begin{ccRefClass}{Triangulation<TrTraits, TDS>} \begin{ccRefClass}{Triangulation<TriangulationTraits, TriangulationDataStructure>}
\ccDefinition \ccDefinition
The class \ccRefName\ is used to store and query the cells and vertices of The class \ccRefName\ is used to store and query the full cells and vertices of
a triangulation embedded in $\real^d$. a triangulation embedded in $\real^d$.
\ccInclude{CGAL/Triangulation.h} \ccInclude{CGAL/Triangulation.h}
\ccParameters \ccParameters
\ccc{TrTraits} is the geometric traits class that provides the geometric types \ccc{TriangulationTraits} is the geometric traits class that provides the geometric types
and predicates needed by triangulations. \ccc{TrTraits} must be a model of the and predicates needed by triangulations. \ccc{TriangulationTraits} must be a model of the
concept \ccc{TriangulationTraits}. concept \ccc{TriangulationTraits}.
\ccc{TDS} is the class used to store the underlying triangulation data \ccc{TriangulationDataStructure} is the class used to store the underlying triangulation data
structure. \ccc{TDS} must be a model of the concept structure. \ccc{TriangulationDataStructure} must be a model of the concept
\ccc{TriangulationDataStructure}. The class template \ccRefName\ accepts that no \ccc{TriangulationDataStructure}. The class template \ccRefName\ accepts that no
second parameter be specified. It also accepts the tag \ccc{CGAL::Default} as second parameter be specified. It also accepts the tag \ccc{CGAL::Default} as
second parameter. In both cases, \ccc{TDS} defaults to second parameter. In both cases, \ccc{TriangulationDataStructure} defaults to
\ccc{Triangulation_data_structure<Ambient_dimension<TrTraits::Point_d>::type, \ccc{Triangulation_data_structure<Ambient_dimension<TriangulationTraits::Point_d>::type,
Triangulation_vertex<TrTraits>, Triangulation_full_cell<TrTraits>>}. Triangulation_vertex<TriangulationTraits>, Triangulation_full_cell<TriangulationTraits>>}.
\ccTypes \ccTypes
%The following types are self-explanatory: % but we are explaining anyway %The following types are self-explanatory: % but we are explaining anyway
\ccTypedef{typedef TrTraits Geom_traits;}% \ccTypedef{typedef TriangulationTraits Geom_traits;}%
{The model for the \ccc{TriangulationTraits} concept.} {The model for the \ccc{TriangulationTraits} concept.}
\ccTypedef{typedef TrTraits::Point_d Point;}{A point in Euclidean space.} \ccTypedef{typedef TriangulationTraits::Point_d Point;}{A point in Euclidean space.}
\ccTypedef{typedef Ambient_dimension<TrTraits::Point_d>::type \ccTypedef{typedef Ambient_dimension<TriangulationTraits::Point_d>::type
Ambient_dimension;}% Ambient_dimension;}%
{This indicates whether the dimension of the ambient Euclidean space is static {This indicates whether the dimension of the ambient Euclidean space is static
(\ccc{Ambient_dimension}=\ccGlobalScope\ccc{Dimension_tag<int dim>}) or (\ccc{Ambient_dimension}=\ccGlobalScope\ccc{Dimension_tag<int dim>}) or
@ -38,46 +38,40 @@ dynamic (\ccc{Ambient_dimension}=\ccGlobalScope\ccc{Dynamic_dimension_tag}).
In the latter case, the \ccc{dim} parameter passed to the class's constructor In the latter case, the \ccc{dim} parameter passed to the class's constructor
is used.} is used.}
\ccTypedef{typedef TDS Triangulation_ds;}% \ccTypedef{typedef TriangulationDataStructure Triangulation_ds;}%
{The second template parameter.} {The second template parameter.}
\ccTypedef{typedef TDS::Vertex Vertex;}{A model of the concept \ccTypedef{typedef TriangulationDataStructure::Vertex Vertex;}{A model of the concept
\ccc{TriangulationVertex}.} \ccc{TriangulationVertex}.}
\ccGlue \ccGlue
\ccTypedef{typedef TDS::Full_cell Full_cell;}{A model of the concept \ccTypedef{typedef TriangulationDataStructure::Full_cell Full_cell;}{A model of the concept
\ccc{TriangulationFullCell}.} \ccc{TriangulationFullCell}.}
\ccGlue \ccGlue
\ccTypedef{typedef TDS::Facet Facet;}{} \ccTypedef{typedef TriangulationDataStructure::Facet Facet;}{}
\ccGlue \ccGlue
\ccTypedef{typedef TDS::Face Face;}% \ccTypedef{typedef TriangulationDataStructure::Face Face;}%
{A model of the concept \ccc{TriangulationFace}.} {A model of the concept \ccc{TriangulationFace}.}
The vertices and cells of triangulations are accessed through handles, The vertices and full cells of triangulations are accessed through handles,
iterators and circulators. A handle is a model of the \ccc{Handle} concept, iterators and circulators. A handle is a model of the \ccc{Handle} concept,
and supports the two dereference operators \ccc{operator*} and and supports the two dereference operators \ccc{operator*} and
\ccc{operator->}. A circulator is a model of the concept \ccc{Circulator}. \ccc{operator->}. A circulator is a model of the concept \ccc{Circulator}.
Iterators and circulators are bidirectional and non-mutable. Iterators and circulators are bidirectional and non-mutable.
%The edges and facets of the triangulation can also be visited through
%iterators and circulators which are bidirectional and non-mutable.
Iterators and circulators are convertible to the corresponding handles, thus Iterators and circulators are convertible to the corresponding handles, thus
the user can pass them directly as arguments to the functions. the user can pass them directly as arguments to the functions.
\ccTypedef{typedef TDS::Vertex_handle Vertex_handle;}{} \ccTypedef{typedef TriangulationDataStructure::Vertex_handle Vertex_handle;}{}
\ccGlue\ccTypedef{typedef TDS::Vertex_iterator Vertex_iterator;}{} \ccGlue\ccTypedef{typedef TriangulationDataStructure::Vertex_iterator Vertex_iterator;}{}
%\ccGlue\ccTypedef{typedef TDS::Vertex_const_handle Vertex_const_handle;}{}
%\ccGlue\ccTypedef{typedef TDS::Vertex_const_iterator Vertex_const_iterator;}{}
\ccTypedef{typedef TDS::Full_cell_handle Full_cell_handle;}{} \ccTypedef{typedef TriangulationDataStructure::Full_cell_handle Full_cell_handle;}{}
\ccGlue\ccTypedef{typedef TDS::Full_cell_iterator Full_cell_iterator;}{} \ccGlue\ccTypedef{typedef TriangulationDataStructure::Full_cell_iterator Full_cell_iterator;}{}
%\ccGlue\ccTypedef{typedef TDS::Full_cell_const_handle Full_cell_const_handle;}{}
%\ccGlue\ccTypedef{typedef TDS::Full_cell_const_iterator Full_cell_const_iterator;}{}
\ccTypedef{typedef TDS::Facet_iterator Facet_iterator;}{} \ccTypedef{typedef TriangulationDataStructure::Facet_iterator Facet_iterator;}{}
\ccTypedef{typedef TDS::size_type size_type;}{Size type (an unsigned integral \ccTypedef{typedef TriangulationDataStructure::size_type size_type;}{Size type (an unsigned integral
type).} type).}
\ccGlue\ccTypedef{typedef TDS::difference_type difference_type;}{Difference \ccGlue\ccTypedef{typedef TriangulationDataStructure::difference_type difference_type;}{Difference
type (a signed integral type).} type (a signed integral type).}
The \ccRefName\ class also defines the following enum type to specify The \ccRefName\ class also defines the following enum type to specify
@ -135,19 +129,19 @@ reference to the underlying triangulation data structure.}
{Returns the number of finite vertices in the triangulation.} {Returns the number of finite vertices in the triangulation.}
\ccGlue \ccGlue
\ccMethod{size_type number_of_full_cells() const;}% \ccMethod{size_type number_of_full_cells() const;}%
{Returns the number of cells of maximal dimension in the triangulation {Returns the number of full cells of maximal dimension in the triangulation
(cells incident to the vertex at infinity are counted).} (full cells incident to the vertex at infinity are counted).}
\ccMethod{Vertex_handle infinite_vertex() const;}% \ccMethod{Vertex_handle infinite_vertex() const;}%
{Returns a handle to the vertex at infinity.} {Returns a handle to the vertex at infinity.}
\ccMethod{Full_cell_handle infinite_full_cell() const;}% \ccMethod{Full_cell_handle infinite_full_cell() const;}%
{Returns a handle to some cell incident to the vertex at infinity.} {Returns a handle to some full cell incident to the vertex at infinity.}
\ccHeading{Non-constant-time access functions} \ccHeading{Non-constant-time access functions}
\ccMethod{size_type number_of_finite_full_cells() const;}% \ccMethod{size_type number_of_finite_full_cells() const;}%
{Returns the number of cells of maximal dimension that are not {Returns the number of full cells of maximal dimension that are not
incident to the vertex at infinity.} incident to the vertex at infinity.}
\ccHeading{Tests for finite and infinite elements} \ccHeading{Tests for finite and infinite elements}
@ -173,32 +167,8 @@ vertex.
\ccMethod{bool is_infinite(const Face & f) const;}{Returns \ccc{true} if and \ccMethod{bool is_infinite(const Face & f) const;}{Returns \ccc{true} if and
only if the face \ccc{f} is incident to the infinite vertex. only if the face \ccc{f} is incident to the infinite vertex.
%\ccPrecond $2\leq$\ccVar.\ccc{current_dimension()}.
} }
% \ccMethod{bool is_finite(const Vertex_handle v) const;} {Returns \ccc{true} if
% and only if the vertex \ccc{v} is not the infinite vertex.}
% \ccGlue
% \ccMethod{bool is_finite(const Full_cell_handle s) const;}{Returns \ccc{true} if
% and only if all vertices of \ccc{s} are finite.
% %\ccPrecond\ccc{0 <=}\ccVar.\ccc{current_dimension()}.
% }
% \ccGlue
% \ccMethod{bool is_finite(const Facet & ft) const;}{Returns \ccc{true} if and
% only if all vertices of the facet \ccc{ft} are finite.
% %\ccPrecond\ccc{1 <=}\ccVar.\ccc{current_dimension()}.
% }
% \ccGlue
% \ccMethod{bool is_finite(const Face & f) const;}{Returns \ccc{true} if and
% only if all vertices of the face \ccc{f} are finite.
% %\ccPrecond{\ccc{2 <=}\ccVar.\ccc{current_dimension()}}.
% }
\ccHeading{Queries} \ccHeading{Queries}
@ -214,37 +184,37 @@ an optional parameter that is used as a hint for the point location.}
{Tests whether \ccc{v} is a vertex of \ccVar.} {Tests whether \ccc{v} is a vertex of \ccVar.}
\ccMethod{bool is_full_cell(Full_cell_handle c) const;} \ccMethod{bool is_full_cell(Full_cell_handle c) const;}
{Tests whether \ccc{c} is a cell of \ccVar.} {Tests whether \ccc{c} is a full cell of \ccVar.}
\ccMethod{Orientation orientation(Full_cell_handle c) const;} \ccMethod{Orientation orientation(Full_cell_handle c) const;}
{Returns the orientation of the finite cell \ccc{c}: {Returns the orientation of the finite full cell \ccc{c}:
\ccGlobalScope\ccc{POSITIVE}, \ccGlobalScope\ccc{NEGATIVE} or \ccGlobalScope\ccc{POSITIVE}, \ccGlobalScope\ccc{NEGATIVE} or
\ccGlobalScope\ccc{COPLANAR}. If \ccVar.\ccc{current_dimension() == 0}, then \ccGlobalScope\ccc{COPLANAR}. If \ccVar.\ccc{current_dimension() == 0}, then
\ccGlobalScope\ccc{POSITIVE} is returned. Under normal circumstances, the function \ccGlobalScope\ccc{POSITIVE} is returned. Under normal circumstances, the function
should always return \ccGlobalScope\ccc{POSITIVE}. should always return \ccGlobalScope\ccc{POSITIVE}.
\ccPrecond Full cell \ccc{c} must be finite. \ccPrecond Full cell \ccc{c} must be finite.
\note{should be removed, a valid cell is positive}\note{SH: what if user modifies the triangulation arbitrarily?} \note{should be removed, a valid full cell is positive}\note{SH: what if user modifies the triangulation arbitrarily?}
} }
\ccMethod{template< typename OutputIterator > OutputIterator \ccMethod{template< typename OutputIterator > OutputIterator
incident_full_cells(Vertex_const_handle v, OutputIterator out) const;} incident_full_cells(Vertex_const_handle v, OutputIterator out) const;}
{Insert in \ccc{out} all the cells that are incident to the vertex {Insert in \ccc{out} all the full cells that are incident to the vertex
\ccc{v}, {i.e.}, the cells that have the \ccc{Vertex v} as a vertex. \ccc{v}, {i.e.}, the full cells that have the \ccc{Vertex v} as a vertex.
Returns the (modified) output iterator. Returns the (modified) output iterator.
%\ccPrecond\ccc{is_full_cell(f.full_cell())}. %\ccPrecond\ccc{is_full_cell(f.full_cell())}.
} }
\ccMethod{template< typename OutputIterator > OutputIterator \ccMethod{template< typename OutputIterator > OutputIterator
incident_full_cells(const Face & f, OutputIterator out) const;} incident_full_cells(const Face & f, OutputIterator out) const;}
{Insert in \ccc{out} all the cells that are incident to the face \ccc{f}, {Insert in \ccc{out} all the full cells that are incident to the face \ccc{f},
{i.e.}, the cells that have the \ccc{Face f} as a subface. {i.e.}, the full cells that have the \ccc{Face f} as a subface.
Returns the (probably modified) output iterator. Returns the (probably modified) output iterator.
%\ccPrecond\ccc{is_full_cell(f.full_cell())}. %\ccPrecond\ccc{is_full_cell(f.full_cell())}.
} }
\ccMethod{template< typename OutputIterator > OutputIterator \ccMethod{template< typename OutputIterator > OutputIterator
star(const Face & f, OutputIterator out) const;} star(const Face & f, OutputIterator out) const;}
{Insert in \ccc{out} all the cells that share at least one vertex with the \ccc{Face {Insert in \ccc{out} all the full cells that share at least one vertex with the \ccc{Face
f}. Returns the (probably modified) output iterator. f}. Returns the (probably modified) output iterator.
%\ccPrecond\ccc{is_full_cell(f.full_cell())}. %\ccPrecond\ccc{is_full_cell(f.full_cell())}.
} }
@ -260,11 +230,11 @@ constructed.
\ccMethod{template< typename OutputIterator > OutputIterator \ccMethod{template< typename OutputIterator > OutputIterator
incident_upper_faces(Vertex_const_handle v, int d, OutputIterator incident_upper_faces(Vertex_const_handle v, int d, OutputIterator
out);}{Constructs all the \textbf{upper} \ccc{Face}s of dimension \ccc{d} out);}{Constructs all the \em{upper} \ccc{Face}s of dimension \ccc{d}
incident to \ccc{Vertex} v and inserts them in the \ccc{OutputIterator out}.\\ incident to \ccc{Vertex} v and inserts them in the \ccc{OutputIterator out}.\\
Assuming some total ordering on the vertices of the triangulation (which is Assuming some total ordering on the vertices of the triangulation (which is
invariant as long as no vertex is inserted in or removed from the triangulation), a invariant as long as no vertex is inserted in or removed from the triangulation), a
\ccc{Face} incident to \ccc{v} is an \emph{upper} \ccc{Face} if and only if \ccc{Face} incident to \ccc{v} is an \em{upper} \ccc{Face} if and only if
its vertices occur at \ccc{v} or beyond \ccc{v} in the ordering.\\ In its vertices occur at \ccc{v} or beyond \ccc{v} in the ordering.\\ In
particular, taking the disjoint union of the upper \ccc{Face}s of dimension particular, taking the disjoint union of the upper \ccc{Face}s of dimension
\ccc{d} incident to every vertex of the triangulation yields exactly the set of \ccc{d} incident to every vertex of the triangulation yields exactly the set of
@ -287,11 +257,11 @@ the vertex ordering to define the upper faces.}
\ccHeading{Faces and Facets} % - - - - - - - - - - - - - - - - - - - - FACETS \ccHeading{Faces and Facets} % - - - - - - - - - - - - - - - - - - - - FACETS
\ccMethod{Full_cell_handle full_cell(const Facet & f) const;} \ccMethod{Full_cell_handle full_cell(const Facet & f) const;}
{Returns a cell containing the facet \ccc{f}} {Returns a full cell containing the facet \ccc{f}}
\ccMethod{int index_of_covertex(const Facet & f) const;} \ccMethod{int index_of_covertex(const Facet & f) const;}
{Returns the index of the vertex of the cell {Returns the index of the vertex of the full cell
\ccc{c=}\ccVar.\ccc{full_cell(f)} which does \textbf{not} belong to \ccc{c}.} \ccc{c=}\ccVar.\ccc{full_cell(f)} which does {not} belong to \ccc{c}.}
%\begin{ccAdvanced} %\begin{ccAdvanced}
%\ccMethod{Face make_empty_face() const;}{Returns an empty \ccc{Face}.} %\ccMethod{Face make_empty_face() const;}{Returns an empty \ccc{Face}.}
@ -318,17 +288,17 @@ the vertex ordering to define the upper faces.}
%\ccMethod{Full_cell_const_iterator full_cells_begin()const;}{}\ccGlue %\ccMethod{Full_cell_const_iterator full_cells_begin()const;}{}\ccGlue
\ccMethod{Full_cell_iterator full_cells_begin();} \ccMethod{Full_cell_iterator full_cells_begin();}
{The first cell of \ccVar.} {The first full cell of \ccVar.}
%\ccGlue\ccMethod{Full_cell_const_iterator full_cells_end() const;}{} %\ccGlue\ccMethod{Full_cell_const_iterator full_cells_end() const;}{}
\ccGlue\ccMethod{Full_cell_iterator full_cells_end();} \ccGlue\ccMethod{Full_cell_iterator full_cells_end();}
{The beyond cell of \ccVar.} {The beyond full cell of \ccVar.}
%\ccMethod{Finite_full_cell_const_iterator finite_full_cells_begin() const;}{}\ccGlue %\ccMethod{Finite_full_cell_const_iterator finite_full_cells_begin() const;}{}\ccGlue
\ccMethod{Finite_full_cell_iterator finite_full_cells_begin();} \ccMethod{Finite_full_cell_iterator finite_full_cells_begin();}
{The first finite cell of \ccVar.} {The first finite full cell of \ccVar.}
%\ccGlue\ccMethod{Finite_full_cell_const_iterator finite_full_cells_end() const;}{} %\ccGlue\ccMethod{Finite_full_cell_const_iterator finite_full_cells_end() const;}{}
\ccGlue\ccMethod{Finite_full_cell_iterator finite_full_cells_end();} \ccGlue\ccMethod{Finite_full_cell_iterator finite_full_cells_end();}
{The beyond finite cell of \ccVar.} {The beyond finite full cell of \ccVar.}
\ccMethod{Facet_iterator facets_begin();} \ccMethod{Facet_iterator facets_begin();}
{Iterator to the first facet of the triangulation.} {Iterator to the first facet of the triangulation.}
@ -349,20 +319,20 @@ the triangulation:
\ccMethod{Full_cell_handle locate(const Point & query, \ccMethod{Full_cell_handle locate(const Point & query,
Full_cell_handle hint = Full_cell_handle()) const;} Full_cell_handle hint = Full_cell_handle()) const;}
{If the point \ccc{query} lies inside a bounded (finite) cell of \ccVar, {If the point \ccc{query} lies inside a bounded (finite) full cell of \ccVar,
the latter cell is returned.\\ the latter full cell is returned.\\
If \ccc{query} lies on the boundary of some finite cells, one of them If \ccc{query} lies on the boundary of some finite full cells, one of them
is returned.\\ is returned.\\
Let $d=$\ccVar.\ccc{current_dimension()}. If the point \ccc{query} lies Let $d=$\ccVar.\ccc{current_dimension()}. If the point \ccc{query} lies
outside the convex hull of the points, an infinite cell with vertices $\{ outside the convex hull of the points, an infinite full cell with vertices $\{
p_1, p_2, \ldots, p_d, \infty\}$ is returned such that the cell $(p_1, p_2, p_1, p_2, \ldots, p_d, \infty\}$ is returned such that the full cell $(p_1, p_2,
\ldots, p_d, query)$ is positively oriented (the rest of the triangulation lies \ldots, p_d, query)$ is positively oriented (the rest of the triangulation lies
on the other side of facet $(p_1, p_2, \ldots, p_d)$).\\ on the other side of facet $(p_1, p_2, \ldots, p_d)$).\\
The optional argument \ccc{hint} is used as a starting place for the search.} The optional argument \ccc{hint} is used as a starting place for the search.}
\ccMethod{Full_cell_handle locate(const Point & query, Vertex_handle hint) \ccMethod{Full_cell_handle locate(const Point & query, Vertex_handle hint)
const;} const;}
{Same as above but \ccc{hint} is a vertex and not a cell.} {Same as above but \ccc{hint} is a vertex and not a full cell.}
\ccMethod{Full_cell_handle locate(const Point & query, Locate_type & loc_type, \ccMethod{Full_cell_handle locate(const Point & query, Locate_type & loc_type,
Face & f, Facet & ft, Full_cell_handle hint = Full_cell_handle()) const;} Face & f, Facet & ft, Full_cell_handle hint = Full_cell_handle()) const;}
@ -370,27 +340,27 @@ Face & f, Facet & ft, Full_cell_handle hint = Full_cell_handle()) const;}
search.\\ If the \ccc{query} point lies outside the affine hull of the points, search.\\ If the \ccc{query} point lies outside the affine hull of the points,
which can happen when \ccVar.\ccc{current_dimension() < } which can happen when \ccVar.\ccc{current_dimension() < }
\ccVar.\ccc{ambient_dimension()}, \ccc{loc_type} is set to \ccVar.\ccc{ambient_dimension()}, \ccc{loc_type} is set to
\ccc{OUTSIDE_AFFINE_HULL}, and the returned cell has no meaning. As a \ccc{OUTSIDE_AFFINE_HULL}, and the returned full cell has no meaning. As a
particular case, if there is no finite vertex yet in the triangulation, particular case, if there is no finite vertex yet in the triangulation,
\ccc{loc_type} is set to \ccc{OUTSIDE_AFFINE_HULL} and \textit{locate} returns \ccc{loc_type} is set to \ccc{OUTSIDE_AFFINE_HULL} and \textit{locate} returns
\ccc{Full_cell_handle()}.\\ If the \ccc{query} point lies inside the affine hull \ccc{Full_cell_handle()}.\\ If the \ccc{query} point lies inside the affine hull
of the points, a $k$-face that contains \ccc{query} \textbf{in its relative of the points, a $k$-face that contains \ccc{query} {in its relative
interior} is returned. (If the $k$-face is finite, it is interior} is returned. (If the $k$-face is finite, it is
unique.)\begin{itemize} \item[$k=0$] \ccc{loc_type} is set to \ccc{ON_VERTEX}, unique.)\begin{itemize} \item[$k=0$] \ccc{loc_type} is set to \ccc{ON_VERTEX},
\ccc{f} is set to the vertex \ccc{v} the \ccc{query} lies on and a cell \ccc{f} is set to the vertex \ccc{v} the \ccc{query} lies on and a full cell
having \ccc{v} as a vertex is returned. having \ccc{v} as a vertex is returned.
\item[$0<k<$\ccc{c.current_dimension()-1}] \ccc{loc_type} is set to \item[$0<k<$\ccc{c.current_dimension()-1}] \ccc{loc_type} is set to
\ccc{IN_FACE}, \ccc{f} is set to the unique finite face containing the \ccc{IN_FACE}, \ccc{f} is set to the unique finite face containing the
\ccc{query} point. A cell having \ccc{f} on its boundary is returned. \ccc{query} point. A full cell having \ccc{f} on its boundary is returned.
\item[$k=$\ccc{c.current_dimension()-1}] \ccc{loc_type} is set to \item[$k=$\ccc{c.current_dimension()-1}] \ccc{loc_type} is set to
\ccc{IN_FACET}, \ccc{ft} is set to one of the two finite facets containing the \ccc{IN_FACET}, \ccc{ft} is set to one of the two finite facets containing the
\ccc{query} point. The cell of \ccc{ft} is returned. \ccc{query} point. The full cell of \ccc{ft} is returned.
\item[$k=$\ccc{c.current_dimension()}] If the \ccc{query} point lies \item[$k=$\ccc{c.current_dimension()}] If the \ccc{query} point lies
\textbf{outside} the convex hull of the points in the triangulation, then \em{outside} the convex hull of the points in the triangulation, then
\ccc{loc_type} is set to \ccc{OUTSIDE_CONVEX_HULL} and a cell is returned \ccc{loc_type} is set to \ccc{OUTSIDE_CONVEX_HULL} and a full cell is returned
as in the \ccc{locate} method above. If the \ccc{query} point lies as in the \ccc{locate} method above. If the \ccc{query} point lies
\textbf{inside} the convex hull of the points in the triangulation, then \em{inside} the convex hull of the points in the triangulation, then
\ccc{loc_type} is set to \ccc{IN_FULL_CELL} and the unique cell containing \ccc{loc_type} is set to \ccc{IN_FULL_CELL} and the unique full cell containing
the \ccc{query} point is returned. \end{itemize}} the \ccc{query} point is returned. \end{itemize}}
\ccMethod{Full_cell_handle \ccMethod{Full_cell_handle
@ -443,27 +413,27 @@ point \ccc{p} into the triangulation and returns a handle to the
The point \ccc{p} is inserted in the \ccc{Face f}. \item[\ccc{IN_FACET}] The point \ccc{p} is inserted in the \ccc{Face f}. \item[\ccc{IN_FACET}]
The point \ccc{p} is inserted in the \ccc{Facet ft}. \item[Anything else] The point \ccc{p} is inserted in the \ccc{Facet ft}. \item[Anything else]
The point \ccc{p} is inserted in the triangulation according to the value The point \ccc{p} is inserted in the triangulation according to the value
of \ccc{loc_type}, using the cell \ccc{c}.\end{itemize} This method is used of \ccc{loc_type}, using the full cell \ccc{c}.\end{itemize} This method is used
internally by the other \ccc{insert()} methods.} internally by the other \ccc{insert()} methods.}
\ccMethod{template < typename ForwardIterator, typename OutputIterator > \ccMethod{template < typename ForwardIterator, typename OutputIterator >
Vertex_handle insert_in_hole(const Point & p, ForwardIterator s, Vertex_handle insert_in_hole(const Point & p, ForwardIterator s,
ForwardIterator e, const Facet & ft, OutputIterator out);}{The cells in ForwardIterator e, const Facet & ft, OutputIterator out);}{The full cells in
the range $C=$\ccc{[s, e)} are removed, thus forming a hole. A \ccc{Vertex} is the range $C=$\ccc{[s, e)} are removed, thus forming a hole. A \ccc{Vertex} is
inserted at position \ccc{p} and connected to the boundary of the hole in inserted at position \ccc{p} and connected to the boundary of the hole in
order to ``fill it''. A \ccc{Vertex_handle} to the new \ccc{Vertex} is order to ``fill it''. A \ccc{Vertex_handle} to the new \ccc{Vertex} is
returned. The facet \ccc{ft} must lie on the boundary of $C$ and its returned. The facet \ccc{ft} must lie on the boundary of $C$ and its
defining cell, \ccVar.\ccc{full_cell(ft)} must lie inside $C$. Handles defining full cell, \ccVar.\ccc{full_cell(ft)} must lie inside $C$. Handles
to the newly created cells are output in the \ccc{out} output iterator. to the newly created full cells are output in the \ccc{out} output iterator.
\ccPrecond $C$ must be a (geometric) ball, must contain \ccc{p} in its \ccPrecond $C$ must be a (geometric) ball, must contain \ccc{p} in its
interior and not contain any vertex all of whose incident cells are in interior and not contain any vertex all of whose incident full cells are in
$C$. (This implies that \ccVar.\ccc{current_dimension()}$\geq2$ if $C$. (This implies that \ccVar.\ccc{current_dimension()}$\geq2$ if
$|C|>1$.) The boundary of $C$ must be a triangulation of the sphere $|C|>1$.) The boundary of $C$ must be a triangulation of the sphere
$\sphere^{k-1}$.} $\sphere^{k-1}$.}
\ccMethod{template < typename ForwardIterator > Vertex_handle \ccMethod{template < typename ForwardIterator > Vertex_handle
insert_in_hole(const Point & p, ForwardIterator s, ForwardIterator e, const insert_in_hole(const Point & p, ForwardIterator s, ForwardIterator e, const
Facet & ft);}{Same as above, but the newly created cells are not Facet & ft);}{Same as above, but the newly created full cells are not
retrieved.} retrieved.}
\ccMethod{Vertex_handle insert_in_face(const Point & p, const Face & f);}% \ccMethod{Vertex_handle insert_in_face(const Point & p, const Face & f);}%
@ -475,19 +445,19 @@ retrieved.}
\ccPrecond \ccc{p} must lie in the relative interior of \ccc{ft}.} \ccPrecond \ccc{p} must lie in the relative interior of \ccc{ft}.}
\ccMethod{Vertex_handle insert_in_full_cell(const Point & p, Full_cell_handle \ccMethod{Vertex_handle insert_in_full_cell(const Point & p, Full_cell_handle
s);}% c);}%
{Inserts point \ccc{p} in the triangulation. \ccPrecond \ccc{p} must lie in the {Inserts point \ccc{p} in the triangulation. \ccPrecond \ccc{p} must lie in the
interior of \ccc{s}.} interior of \ccc{c}.}
\ccMethod{Vertex_handle insert_outside_convex_hull(const Point &, \ccMethod{Vertex_handle insert_outside_convex_hull(const Point &,
Full_cell_handle s);}% Full_cell_handle c);}%
{Inserts point \ccc{p} in the triangulation. {Inserts point \ccc{p} in the triangulation.
\ccPrecond \ccc{p} must lie outside the convex hull of \ccVar. The half-space \ccPrecond \ccc{p} must lie outside the convex hull of \ccVar. The half-space
defined by the infinite cell \ccc{s} must contain \ccc{p}.} defined by the infinite full cell \ccc{c} must contain \ccc{p}.}
\ccMethod{Vertex_handle insert_outside_affine_hull(const Point &);}% \ccMethod{Vertex_handle insert_outside_affine_hull(const Point &);}%
{Inserts point \ccc{p} in the triangulation. {Inserts point \ccc{p} in the triangulation.
\ccPrecond \ccc{p} must lie outside the \textbf{affine} hull of \ccVar.} \ccPrecond \ccc{p} must lie outside the {affine} hull of \ccVar.}
\end{ccAdvanced} \end{ccAdvanced}
@ -498,14 +468,14 @@ defined by the infinite cell \ccc{s} must contain \ccc{p}.}
\ccc{true} if the combinatorial triangulation data structure's \ccc{is_valid()} \ccc{true} if the combinatorial triangulation data structure's \ccc{is_valid()}
test returns \ccc{true} and if some geometric tests are passed with success. test returns \ccc{true} and if some geometric tests are passed with success.
%\note{is it really necessary to have the following : %\note{is it really necessary to have the following :
%For each infinite cell, it is checked that the index of the infinite %For each infinite full cell, it is checked that the index of the infinite
%vertex is 0. } %vertex is 0. }
For each finite cell, it is checked that its orientation is For each finite full cell, it is checked that its orientation is
positive.} positive.}
\ccMethod{bool are_incident_full_cells_valid(Vertex_const_handle v, bool \ccMethod{bool are_incident_full_cells_valid(Vertex_const_handle v, bool
verbose = true, int level = 0) const;} {Returns \ccc{true} if and only if all verbose = true, int level = 0) const;} {Returns \ccc{true} if and only if all
finite cells incident to \ccc{v} have positive orientation.} finite full cells incident to \ccc{v} have positive orientation.}
\ccHeading{Input/Output} \ccHeading{Input/Output}
@ -514,9 +484,9 @@ finite cells incident to \ccc{v} have positive orientation.}
calling the corresponding input operator of the triangulation data calling the corresponding input operator of the triangulation data
structure class (note that the infinite vertex is numbered 0), and the structure class (note that the infinite vertex is numbered 0), and the
non-combinatorial information by calling the corresponding input non-combinatorial information by calling the corresponding input
operators of the vertex and the cell classes (such as point operators of the vertex and the full cell classes (such as point
coordinates), which are provided by overloading the stream operators coordinates), which are provided by overloading the stream operators
of the vertex and cell types. Assigns the resulting triangulation to of the vertex and full cell types. Assigns the resulting triangulation to
\ccc{t}.} \ccc{t}.}
\ccFunction{ostream& operator<< (ostream& os, const Triangulation & t);} \ccFunction{ostream& operator<< (ostream& os, const Triangulation & t);}
@ -524,16 +494,16 @@ of the vertex and cell types. Assigns the resulting triangulation to
The information in the \ccc{iostream} is: the current dimension, the number of The information in the \ccc{iostream} is: the current dimension, the number of
finite vertices, the non-combinatorial information about vertices (point, finite vertices, the non-combinatorial information about vertices (point,
\emph{etc.}), the number of cells, the indices of the vertices of each \emph{etc.}), the number of full cells, the indices of the vertices of each
cell, plus the non-combinatorial information about each cell, then the full cell, plus the non-combinatorial information about each full cell, then the
indices of the neighbors of each cell, where the index corresponds to the indices of the neighbors of each full cell, where the index corresponds to the
preceding list of cells. preceding list of full cells.
\ccSeeAlso \ccSeeAlso
\ccc{Triangulation_data_structure<Dimensionality, TDSVertex, TDSFullCell>},\\ \ccc{Triangulation_data_structure<Dimensionality, TriangulationDSVertex, TriangulationDSFullCell>},\\
\ccc{Delaunay_triangulation<DTTraits, TDS>},\\ \ccc{Delaunay_triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>},\\
%\ccc{Regular_triangulation<RTTraits, TDS>}. %\ccc{Regular_triangulation<RTTraits, TriangulationDataStructure>}.
\end{ccRefClass} \end{ccRefClass}

View File

@ -5,9 +5,9 @@
The concept \ccRefName\ describes what a full cell is in a model of the concept The concept \ccRefName\ describes what a full cell is in a model of the concept
\ccc{TriangulationDataStructure}. It sets requirements of combinatorial nature \ccc{TriangulationDataStructure}. It sets requirements of combinatorial nature
only, as geometry is not concerned here. only, as geometry is not concerned here.
In the context of triangulation, the term cell refer to a face of In the context of triangulation, the term full cell refer to a face of
\emph{maximal} dimension. We emphasize this maximality characteristic by using \emph{maximal} dimension. This maximality characteristic is emphasized by using
the term {\em full cell}. the adjective {\em full}.
A \ccRefName\ is responsible for storing handles to the vertices of a A \ccRefName\ is responsible for storing handles to the vertices of a
full cell as well as handles to its neighbors. full cell as well as handles to its neighbors.
@ -17,50 +17,50 @@ concept.
\ccHasModels \ccHasModels
\ccc{Triangulation_ds_full_cell<TDS, TDSFullCellStoragePolicy>}\\ \ccc{Triangulation_ds_full_cell<TriangulationDataStructure,DSFullCellStoragePolicy>}\\
\ccc{Triangulation_full_cell<TrTraits, Data, TDSFullCell>} \ccc{Triangulation_full_cell<TriangulationTraits, Data, TriangulationDSFullCell>}
\ccTypes \ccTypes
\ccNestedType{Vertex_handle}%{} \ccNestedType{Vertex_handle}%{}
%\ccGlue\ccNestedType{Vertex_const_handle} %\ccGlue\ccNestedType{Vertex_const_handle}
{A handle to a vertex. It must be the same as the {A handle to a vertex. It must be the same as the
nested type \ccc{TDS::Vertex_handle} of the \ccc{TDS} in which the nested type \ccc{TriangulationDataStructure::Vertex_handle} of the \ccc{TriangulationDataStructure} in which the
\ccc{TriangulationDSFullCell} is defined/used.} \ccc{TriangulationDSFullCell} is defined/used.}
\ccNestedType{Vertex_handle_iterator}{An iterator over the handles to \ccNestedType{Vertex_handle_iterator}{An iterator over the handles to
the vertices of the cell.} the vertices of the full cell.}
\ccNestedType{Full_cell_handle}%{} \ccNestedType{Full_cell_handle}%{}
%\ccGlue\ccNestedType{Full_cell_const_handle} %\ccGlue\ccNestedType{Full_cell_const_handle}
{A handle to a full cell. It must be the same as the {A handle to a full cell. It must be the same as the
nested type \ccc{TDS::Full_cell_handle} of the \ccc{TDS} in which the nested type \ccc{TriangulationDataStructure::Full_cell_handle} of the \ccc{TriangulationDataStructure} in which the
\ccc{TriangulationDSFullCell} is defined/used.} \ccc{TriangulationDSFullCell} is defined/used.}
\ccTypedef{typedef TDS::Full_cell_data TDS_data;}{} \ccTypedef{typedef TriangulationDataStructure::Full_cell_data TDS_data;}{}
\ccNestedType{template<typename TDS2> Rebind_TDS}{This nested template \ccNestedType{template<typename TDS2> Rebind_TDS}{This nested template
class must define a nested type \ccc{Other} which is the rebound cell class must define a nested type \ccc{Other} which is the rebound full cell
class template, that is: \ccc{Other == TriangulationDSFullCell<TDS2>}.} class template, that is: \ccc{Other == TriangulationDSFullCell<TDS2>}.}
\ccCreation \ccCreation
\ccCreationVariable{c} \ccCreationVariable{c}
\ccConstructor{TriangulationDSFullCell(int dmax);}{Sets the maximum possible \ccConstructor{TriangulationDSFullCell(int dmax);}{Sets the maximum possible
dimension of the cell.} dimension of the full cell.}
\ccConstructor{TriangulationDSFullCell(const TriangulationDSFullCell & fc);}% \ccConstructor{TriangulationDSFullCell(const TriangulationDSFullCell & fc);}%
{Copy constructor.} {Copy constructor.}
If you want to create a cell as part of a \ccc{TriangulationDataStructure}, If you want to create a full cell as part of a \ccc{TriangulationDataStructure},
you would rather want to call the \ccc{new_full_cell()} from the latter concept, you would rather want to call the \ccc{new_full_cell()} from the latter concept,
as it is not possible to incorporate an existing external cell into as it is not possible to incorporate an existing external full cell into
a triangulation. a triangulation.
\ccHeading{Access functions} \ccHeading{Access functions}
\ccMethod{int ambient_dimension() const;}{Returns one less than the maximum \ccMethod{int ambient_dimension() const;}{Returns one less than the maximum
number of vertices that the full cell can store. This does \textbf{not} return number of vertices that the full cell can store. This does {not} return
the dimension of the actual full cell stored in \ccVar.} the dimension of the actual full cell stored in \ccVar.}
\ccMethod{Vertex_handle_iterator vertices_begin() const;} \ccMethod{Vertex_handle_iterator vertices_begin() const;}
@ -72,29 +72,29 @@ full cell.}
the full cell.} the full cell.}
\ccMethod{Vertex_handle vertex(const int i) const;}{Returns the \ccc{i}-th vertex \ccMethod{Vertex_handle vertex(const int i) const;}{Returns the \ccc{i}-th vertex
of the cell. \ccPrecond $0\leq i\leq$\ccc{ambient_dimension()}.} of the full cell. \ccPrecond $0\leq i\leq$\ccc{ambient_dimension()}.}
\ccGlue\ccMethod{Full_cell_handle neighbor(const int i) const;}{Returns the \ccGlue\ccMethod{Full_cell_handle neighbor(const int i) const;}{Returns the
cell opposite to the \ccc{i}-th vertex of the cell \ccVar. \ccPrecond full cell opposite to the \ccc{i}-th vertex of the full cell \ccVar. \ccPrecond
$0\leq i\leq$\ccc{ambient_dimension()}.} $0\leq i\leq$\ccc{ambient_dimension()}.}
\ccMethod{int mirror_index(const int i) const;}{Returns the index \ccc{j} of \ccMethod{int mirror_index(const int i) const;}{Returns the index \ccc{j} of
the cell \ccc{s} as a neighbor in the cell \ccVar\ccc{.neighbor(i);}. If the the full cell \ccVar as a neighbor in the full cell \ccVar\ccc{.neighbor(i);}. If the
returned integer is not negative, it holds that \ccVar.% returned integer is not negative, it holds that \ccVar.%
\ccc{neighbor(i)->neighbor(j) == }\ccVar. Returns \ccc{neighbor(i)->neighbor(j) == }\ccVar. Returns
\ccc{-1} if \ccc{s} has no neighboring cell of index \ccc{i}. \ccc{-1} if \ccVar has no neighboring full cell of index \ccc{i}.
\ccPrecond $0\leq i\leq$\ccc{ambient_dimension()}.} \ccPrecond $0\leq i\leq$\ccc{ambient_dimension()}.}
\ccMethod{int index(Full_cell_handle n) const;}{Returns the index \ccc{i} \ccMethod{int index(Full_cell_handle n) const;}{Returns the index \ccc{i}
of the neighbor \ccc{n} such that \ccVar\ccc{.neighbor(i)==n}. \ccPrecond \ccc{n} of the neighbor \ccc{n} such that \ccVar\ccc{.neighbor(i)==n}. \ccPrecond \ccc{n}
must be a neighbor of \ccc{s}.} must be a neighbor of \ccVar.}
\ccGlue \ccGlue
\ccMethod{int index(Vertex_handle v) const;}{Returns the index \ccc{i} of \ccMethod{int index(Vertex_handle v) const;}{Returns the index \ccc{i} of
the vertex \ccc{v} such that \ccVar\ccc{.vertex(i)==v}. \ccPrecond \ccc{v} must be the vertex \ccc{v} such that \ccVar\ccc{.vertex(i)==v}. \ccPrecond \ccc{v} must be
a vertex of the \ccc{s}.} a vertex of the \ccVar.}
\ccMethod{const TDS_data & get_tds_data() const;}{Returns the data member of \ccMethod{const TDS_data & get_tds_data() const;}{Returns the data member of
type \ccc{TDS_data}. It is typically used to mark the cell as \emph{visited} type \ccc{TDS_data}. It is typically used to mark the full cell as \emph{visited}
during operations on a \ccc{TriangulationDataStructure}.} during operations on a \ccc{TriangulationDataStructure}.}
\ccMethod{TDS_data & get_tds_data();}{Same as above, but returns a reference to \ccMethod{TDS_data & get_tds_data();}{Same as above, but returns a reference to
@ -102,7 +102,7 @@ a non-\ccc{const} object.}
\begin{ccAdvanced} \begin{ccAdvanced}
\ccMethod{Vertex_handle mirror_vertex(const int i, const int cur_dim) const;} \ccMethod{Vertex_handle mirror_vertex(const int i, const int cur_dim) const;}
{Returns a handle to the mirror vertex of the \ccc{i}-th vertex of cell {Returns a handle to the mirror vertex of the \ccc{i}-th vertex of full cell
\ccVar. This function works even if the neighboring information stored in the \ccVar. This function works even if the neighboring information stored in the
neighbor full cell \ccc{*}\ccVar\ccc{.neighbor(i)} is corrupted. This is useful neighbor full cell \ccc{*}\ccVar\ccc{.neighbor(i)} is corrupted. This is useful
when temporary corruption is necessary during surgical operation on a when temporary corruption is necessary during surgical operation on a
@ -114,49 +114,49 @@ i,$\ccc{cur_dim}$\leq$\ccc{ambient_dimension()}.}
\ccHeading{Update functions} % - - - - - - - - - - - - - - - - - UPDATES \ccHeading{Update functions} % - - - - - - - - - - - - - - - - - UPDATES
\ccMethod{void set_vertex(const int i, Vertex_handle v);}{Sets the $i$-th \ccMethod{void set_vertex(const int i, Vertex_handle v);}{Sets the $i$-th
vertex of the cell. vertex of the full cell.
\ccPrecond $0\leq i\leq$\ccc{ambient_dimension()}.} \ccPrecond $0\leq i\leq$\ccc{ambient_dimension()}.}
\ccMethod{void set_neighbor(const int i, Full_cell_handle n);} {Sets the \ccMethod{void set_neighbor(const int i, Full_cell_handle n);} {Sets the
\ccc{i}-th neighboring cell of \ccVar\ to \ccc{n}. Full cell \ccc{n} is \ccc{i}-th neighboring full cell of \ccVar\ to \ccc{n}. Full cell \ccc{n} is
opposite to the $i$-th vertex of \ccVar. opposite to the $i$-th vertex of \ccVar.
\ccPrecond $0\leq i\leq$\ccc{ambient_dimension()}.} \ccPrecond $0\leq i\leq$\ccc{ambient_dimension()}.}
\ccMethod{void set_mirror_index(const int i, const int index);} {Sets the \ccMethod{void set_mirror_index(const int i, const int index);} {Sets the
mirror index of the $i$-th vertex of \ccVar\ to \ccc{index}. This corresponds mirror index of the $i$-th vertex of \ccVar\ to \ccc{index}. This corresponds
to the index, in \ccVar\ccc{->neighbor(i)}, of the cell \ccVar.\\ to the index, in \ccVar\ccc{->neighbor(i)}, of the full cell \ccVar.\\
Note: an implementation of the concept \ccVar\ may choose not to store mirror Note: an implementation of the concept \ccVar\ may choose not to store mirror
indices, in which case this function should do nothing. indices, in which case this function should do nothing.
\ccPrecond $0\leq i\leq$\ccc{ambient_dimension()}.} \ccPrecond $0\leq i\leq$\ccc{ambient_dimension()}.}
\ccMethod{void swap_vertices(int d1, int d2);}{Switches the orientation of the \ccMethod{void swap_vertices(int d1, int d2);}{Switches the orientation of the
cell \ccVar\ by swapping its vertices with index \ccc{d1} and \ccc{d2}. full cell \ccVar\ by swapping its vertices with index \ccc{d1} and \ccc{d2}.
\ccPrecond $0\leq d1,d2\leq$\ccc{ambient_dimension()}.} \ccPrecond $0\leq d1,d2\leq$\ccc{ambient_dimension()}.}
\ccHeading{Queries} \ccHeading{Queries}
\ccMethod{bool has_vertex(Vertex_handle v) const;}{Returns \ccc{true} \ccMethod{bool has_vertex(Vertex_handle v) const;}{Returns \ccc{true}
if the vertex \ccc{v} is a vertex of the cell \ccVar. Returns \ccc{false} if the vertex \ccc{v} is a vertex of the full cell \ccVar. Returns \ccc{false}
otherwise.} otherwise.}
\ccMethod{bool has_vertex(Vertex_handle v, int & ret) const;}% \ccMethod{bool has_vertex(Vertex_handle v, int & ret) const;}%
{Returns \ccc{true} and sets the value of \ccc{ret} to the index of \ccc{v} in {Returns \ccc{true} and sets the value of \ccc{ret} to the index of \ccc{v} in
\ccVar\ if the vertex \ccc{v} is a vertex of the cell \ccVar. Returns \ccVar\ if the vertex \ccc{v} is a vertex of the full cell \ccVar. Returns
\ccc{false} otherwise.} \ccc{false} otherwise.}
\ccMethod{bool has_neighbor(Full_cell_handle n) const;}{Returns \ccc{true} \ccMethod{bool has_neighbor(Full_cell_handle n) const;}{Returns \ccc{true}
if the cell \ccc{n} is a neighbor of the cell \ccVar. Returns if the full cell \ccc{n} is a neighbor of the full cell \ccVar. Returns
\ccc{false} otherwise.} \ccc{false} otherwise.}
\ccMethod{bool has_neighbor(Full_cell_handle n, int & ret) const;}% \ccMethod{bool has_neighbor(Full_cell_handle n, int & ret) const;}%
{Returns \ccc{true} and sets the value of \ccc{ret} to the index of \ccc{n} as {Returns \ccc{true} and sets the value of \ccc{ret} to the index of \ccc{n} as
a neighbor of \ccVar\ if the cell \ccc{n} is a neighbor of the cell a neighbor of \ccVar\ if the full cell \ccc{n} is a neighbor of the full cell
\ccVar. Returns \ccc{false} otherwise.} \ccVar. Returns \ccc{false} otherwise.}
\ccHeading{Validity check} \ccHeading{Validity check}
\ccMethod{bool is_valid(bool verbose=false, int level=0) const;}{Performs any \ccMethod{bool is_valid(bool verbose=false, int level=0) const;}{Performs any
desired test on a cell. \emph{E.g.}, checks that for each existing vertex, desired test on a full cell. \emph{E.g.}, checks that for each existing vertex,
there is an existing neighbor.} there is an existing neighbor.}
% \ccHeading{Memory management} % \ccHeading{Memory management}
@ -165,21 +165,21 @@ there is an existing neighbor.}
% \ccGlue\ccMethod{void* & for_compact_container();}{} % \ccGlue\ccMethod{void* & for_compact_container();}{}
% These member functions are required by the classes % These member functions are required by the classes
% \ccc{Triangulation_data_structure<Dimensionality, TDSVertex, TDSFullCell>} and % \ccc{Triangulation_data_structure<Dimensionality, TriangulationDSVertex, TriangulationDSFullCell>} and
% \ccc{Triangulation<TrTraits, TDS>} (and its derived classes) because they use % \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>} (and its derived classes) because they use
% \ccc{Compact_container} to store their vertices and simplices. See the % \ccc{Compact_container} to store their vertices and full cells. See the
% documentation of \ccc{Compact_container} for the exact requirements. % documentation of \ccc{Compact_container} for the exact requirements.
\ccHeading{Input/Output} \ccHeading{Input/Output}
\ccFunction{template<class TDS> istream& operator>>(istream & is, \ccFunction{template<class TriangulationDataStructure> istream& operator>>(istream & is,
Triangulation_ds_full_cell<TDS> & c);} Triangulation_ds_full_cell<TriangulationDataStructure> & c);}
{Reads (possible) non-combinatorial information about a cell from the stream \ccc{is} {Reads (possible) non-combinatorial information about a full cell from the stream \ccc{is}
into \ccc{c}.} into \ccc{c}.}
\ccFunction{template<class TDS> ostream& operator<<(ostream & os, const \ccFunction{template<class TriangulationDataStructure> ostream& operator<<(ostream & os, const
Triangulation_ds_full_cell<TDS> & c);} Triangulation_ds_full_cell<TriangulationDataStructure> & c);}
{Writes (possible) non-combinatorial information about cell \ccc{c} to the stream {Writes (possible) non-combinatorial information about full cell \ccc{c} to the stream
\ccc{os}.} \ccc{os}.}
\ccSeeAlso \ccSeeAlso

View File

@ -12,13 +12,13 @@ concept.
\ccHasModels \ccHasModels
\ccc{Triangulation_ds_vertex<TDS>}\\ \ccc{Triangulation_ds_vertex<TriangulationDataStructure>}\\
\ccc{Triangulation_vertex<TrTraits, Data, TDSVertex>} \ccc{Triangulation_vertex<TriangulationTraits, Data, TriangulationDSVertex>}
\ccTypes \ccTypes
\ccNestedType{Full_cell_handle}{A handle to a cell. It must be the same as the \ccNestedType{Full_cell_handle}{A handle to a cell. It must be the same as the
nested type \ccc{TDS::Full_cell_handle} of the \ccc{TDS} in which the nested type \ccc{TriangulationDataStructure::Full_cell_handle} of the \ccc{TriangulationDataStructure} in which the
\ccc{TriangulationDSVertex} is defined/used.} \ccc{TriangulationDSVertex} is defined/used.}
\ccNestedType{template<typename TDS2> Rebind_TDS}{This nested template \ccNestedType{template<typename TDS2> Rebind_TDS}{This nested template
@ -29,16 +29,16 @@ class template, that is: \ccc{Other == TriangulationDSVertex<TDS2>}.}
\ccCreationVariable{v} \ccCreationVariable{v}
\ccConstructor{TriangulationDSVertex();}{The default constructor (no incident \ccConstructor{TriangulationDSVertex();}{The default constructor (no incident
cell is set).} full cell is set).}
\ccGlue \ccGlue
\ccConstructor{TriangulationDSVertex(Full_cell_handle s);}{Sets the incident \ccConstructor{TriangulationDSVertex(Full_cell_handle c);}{Sets the incident
cell to \ccc{s}. \ccPrecond \ccc{s} must not be the default-constructed full cell to \ccc{c}. \ccPrecond \ccc{c} must not be the default-constructed
\ccc{Full_cell_handle}.} \ccc{Full_cell_handle}.}
\ccOperations \ccOperations
\ccMethod{void set_full_cell(Full_cell_handle c);}{Set \ccc{c} as the vertex's \ccMethod{void set_full_cell(Full_cell_handle c);}{Set \ccc{c} as the vertex's
incident cell. \ccPrecond \ccc{c} must not be the default-constructed incident full cell. \ccPrecond \ccc{c} must not be the default-constructed
\ccc{Full_cell_handle}.} \ccc{Full_cell_handle}.}
\ccMethod{Full_cell_handle full_cell() const;}{Returns a handle to a \ccMethod{Full_cell_handle full_cell() const;}{Returns a handle to a
@ -48,7 +48,7 @@ incident cell. \ccPrecond \ccc{c} must not be the default-constructed
\ccMethod{bool is_valid(bool verbose=false, int level=0) const;}{Performs any \ccMethod{bool is_valid(bool verbose=false, int level=0) const;}{Performs any
desired test on a vertex. Al least, checks that the pointer to an incident desired test on a vertex. Al least, checks that the pointer to an incident
cell is not the default constructed handle ({i.e.}, is not full cell is not the default constructed handle ({i.e.}, is not
\ccc{NULL}). The parameter \ccc{level} is not used, but can be used in derived \ccc{NULL}). The parameter \ccc{level} is not used, but can be used in derived
classes.} classes.}
@ -58,21 +58,21 @@ classes.}
% \ccGlue\ccMethod{void* & for_compact_container();}{} % \ccGlue\ccMethod{void* & for_compact_container();}{}
% These member functions are required by the classes % These member functions are required by the classes
% \ccc{Triangulation_data_structure<Dimensionality, TDSVertex, TDSFullCell>} and % \ccc{Triangulation_data_structure<Dimensionality, TriangulationDSVertex, TriangulationDSFullCell>} and
% \ccc{Triangulation<TrTraits, TDS>} (and its derived classes) because they use % \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>} (and its derived classes) because they use
% the \cgal\ container class \ccc{Compact_container} to store their vertices and % the \cgal\ container class \ccc{Compact_container} to store their vertices and
% simplices. See the documentation of \ccc{Compact_container} for the exact % full cells. See the documentation of \ccc{Compact_container} for the exact
% requirements. % requirements.
\ccHeading{Input/Output} \ccHeading{Input/Output}
\ccFunction{template<class TDS> istream& operator>>(istream & is, \ccFunction{template<class TriangulationDataStructure> istream& operator>>(istream & is,
Triangulation_ds_vertex<TDS> & v);} Triangulation_ds_vertex<TriangulationDataStructure> & v);}
{Reads (possible) non-combinatorial information about a vertex from the stream \ccc{is} {Reads (possible) non-combinatorial information about a vertex from the stream \ccc{is}
into \ccc{v}.} into \ccc{v}.}
\ccFunction{template<class TDS> ostream& operator<<(ostream & os, const \ccFunction{template<class TriangulationDataStructure> ostream& operator<<(ostream & os, const
Triangulation_ds_vertex<TDS> & v);} Triangulation_ds_vertex<TriangulationDataStructure> & v);}
{Writes (possible) non-combinatorial information about vertex \ccc{v} to the stream {Writes (possible) non-combinatorial information about vertex \ccc{v} to the stream
\ccc{os}.} \ccc{os}.}

View File

@ -19,14 +19,14 @@ Values of $d$ (the \emph{current dimension} of the complex) include \begin{itemi
\item[-2] This corresponds to the non-existence of any object in \item[-2] This corresponds to the non-existence of any object in
$\sphere^D.$ $\sphere^D.$
\item[-1] This corresponds to a single vertex and a single simplex. In a \item[-1] This corresponds to a single vertex and a single full cell. In a
geometric realization of the \ccRefName\ (\emph{e.g.}, in a geometric realization of the \ccRefName\ (\emph{e.g.}, in a
\ccc{Triangulation<TrTraits, TDS>} or a \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>} or a
\ccc{Delaunay_triangulation<DTTraits, TDS>}), this vertex \ccc{Delaunay_triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>}), this vertex
corresponds to \emph{the vertex at infinity}. corresponds to \emph{the vertex at infinity}.
\item[0] This corresponds to two vertices, each incident to one $0$-face; \item[0] This corresponds to two vertices, each incident to one $0$-face;
the two cells being neighbor of each other. This is the unique the two full cells being neighbor of each other. This is the unique
triangulation of the $0$-sphere. triangulation of the $0$-sphere.
\item[$d>0$] This corresponds to a standard triangulation of the sphere \item[$d>0$] This corresponds to a standard triangulation of the sphere
@ -34,25 +34,23 @@ $\sphere^d$.
\end{itemize} \end{itemize}
An $i$-simplex is a simplex with $i+1$ vertices. An $i$-simplex $\sigma$ is An $i$-simplex is a simplex with $i+1$ vertices. An $i$-simplex $\sigma$ is
\textbf{incident} to a $j$-simplex $\sigma'$, $j<i$, if and only if $\sigma'$ {incident} to a $j$-simplex $\sigma'$, $j<i$, if and only if $\sigma'$
is a proper face of $\sigma$. is a proper face of $\sigma$.
%Two simplices are \textbf{adjacent} if the
%intersection of their vertex-set is not empty.
\ccHasModels \ccHasModels
\ccc{Triangulation_data_structure<Dimensionality, TDSVertex, TDSFullCell>} \ccc{Triangulation_data_structure<Dimensionality, TriangulationDSVertex, TriangulationDSFullCell>}
\ccTypes \ccTypes
\ccNestedType{Vertex} \ccNestedType{Vertex}
{ {
A model of the concept \ccc{TriangulationDSVertex}. Vertex type.
} }
\ccGlue \ccGlue
\ccNestedType{Full_cell} \ccNestedType{Full_cell}
{ {
A model of the concept \ccc{TriangulationDSFullCell}. Full cell type.
} }
The concept \ccRefName\ also defines a type for describing facets of the The concept \ccRefName\ also defines a type for describing facets of the
@ -67,28 +65,25 @@ full cell \ccc{c} opposite to its \ccc{i}-th vertex}
\ccNestedType{Face} \ccNestedType{Face}
{A model of the concept \ccc{TriangulationFace}.} {A model of the concept \ccc{TriangulationFace}.}
Vertices and simplices are manipulated via \emph{handles}. Handles support the Vertices and full cells are manipulated via \emph{handles}. Handles support the
usual two dereference operators \ccc{operator*} and \ccc{operator->}. usual two dereference operators \ccc{operator*} and \ccc{operator->}.
\ccNestedType{Vertex_handle} \ccNestedType{Vertex_handle}
{ {
Handle to a \ccc{Vertex}. Handle to a \ccc{Vertex}.
} }
%\ccGlue
%\ccNestedType{Vertex_const_handle}
%{
%Handle to a \ccc{const Vertex}.
%}
\ccGlue \ccGlue
\ccNestedType{Full_cell_handle} \ccNestedType{Full_cell_handle}
{ {
Handle to a \ccc{Full_cell}. Handle to a \ccc{Full_cell}.
} }
%\ccGlue
%\ccNestedType{Full_cell_const_handle}
%{ Requirements for \ccc{Vertex} and \ccc{Full_cell} are described in concepts
%Handle to a \ccc{const Full_cell}. \ccc{TriangulationDataStructure::Vertex} and
%} \ccc{TriangulationDataStructure::FullCell} \lcTex{(
\ccRefPage{TriangulationDataStructure::Vertex} and
\ccRefPage{TriangulationDataStructure::FullCell})}.
\begin{ccAdvanced} \begin{ccAdvanced}
\ccNestedType{template <typename Vb2> struct Rebind_vertex} \ccNestedType{template <typename Vb2> struct Rebind_vertex}
@ -105,7 +100,7 @@ one whose \ccc{TriangulationDSFullCellBase} will be \ccc{Fcb2}.}
\end{ccAdvanced} \end{ccAdvanced}
Vertices, facets and cells can be iterated over using \emph{iterators}. Vertices, facets and full cells can be iterated over using \emph{iterators}.
Iterators support the usual two dereference operators \ccc{operator*} and Iterators support the usual two dereference operators \ccc{operator*} and
\ccc{operator->}. \ccc{operator->}.
@ -113,21 +108,11 @@ Iterators support the usual two dereference operators \ccc{operator*} and
{ {
Iterator over the list of vertices. Iterator over the list of vertices.
} }
%\ccGlue
%\ccNestedType{Vertex_const_iterator}
%{
%Iterator over the list of vertices (\ccc{const} casted).
%}
\ccGlue \ccGlue
\ccNestedType{Full_cell_iterator} \ccNestedType{Full_cell_iterator}
{ {
Iterator over the list of cells. Iterator over the list of full cells.
} }
%\ccGlue
%\ccNestedType{Simplex_const_iterator}
%{
%Iterator over the list of simplices (\ccc{const} casted).
%}
\ccGlue \ccGlue
\ccNestedType{Facet_iterator} \ccNestedType{Facet_iterator}
{ {
@ -142,7 +127,7 @@ Iterator over the facets of the complex.
\ccCreationVariable{tds} \ccCreationVariable{tds}
\ccConstructor{XXXXXXXXXX(const int dim);} {Creates an instance \ccVar\ of \ccConstructor{XXXXXXXXXX(const int dim);} {Creates an instance \ccVar\ of
type \ccRefName. The maximal dimension of its cells is \ccc{dim} and type \ccRefName. The maximal dimension of its full cells is \ccc{dim} and
\ccVar\ is initialized to the empty triangulation. Thus, \ccVar\ is initialized to the empty triangulation. Thus,
\ccVar.\ccc{current_dimension()} equals \ccc{-2}.} \ccVar.\ccc{current_dimension()} equals \ccc{-2}.}
@ -151,7 +136,7 @@ type \ccRefName. The maximal dimension of its cells is \ccc{dim} and
\ccHeading{Queries} % --------------------------------------------- QUERIES \ccHeading{Queries} % --------------------------------------------- QUERIES
\ccMethod{int ambient_dimension() const;} { Returns the maximal dimension of \ccMethod{int ambient_dimension() const;} { Returns the maximal dimension of
the cells that can be stored in the triangulation \ccVar. \ccPostcond the the full dimensional cells that can be stored in the triangulation \ccVar. \ccPostcond the
returned value is positive. } returned value is positive. }
\ccMethod{int current_dimension() const;} { Returns the dimension of the \ccMethod{int current_dimension() const;} { Returns the dimension of the
@ -160,14 +145,14 @@ full dimensional cells stored in the triangulation. It holds that
\ccc{true}. \ccPostcond the returned value \ccc{d} satisfies \ccc{true}. \ccPostcond the returned value \ccc{d} satisfies
$-2\leq d \leq$\ccVar.\ccc{ambient_dimension()}. } $-2\leq d \leq$\ccVar.\ccc{ambient_dimension()}. }
\ccMethod{bool empty() const;} { Returns \ccc{true} if the regular complex \ccMethod{bool empty() const;} { Returns \ccc{true} if thetriangulation
contains no simplex. Returns \ccc{false} otherwise. } contains nothing. Returns \ccc{false} otherwise. }
\ccMethod{size_type number_of_vertices() const;} \ccMethod{size_type number_of_vertices() const;}
{Returns the number of vertices in the triangulation.} {Returns the number of vertices in the triangulation.}
\ccMethod{size_type number_of_full_cells() const;} \ccMethod{size_type number_of_full_cells() const;}
{Returns the number of cells in the triangulation.} {Returns the number of full cells in the triangulation.}
\ccMethod{bool is_vertex(const Vertex_handle & v) const;} \ccMethod{bool is_vertex(const Vertex_handle & v) const;}
{} {}
@ -179,23 +164,23 @@ contains no simplex. Returns \ccc{false} otherwise. }
void full_cells(Full_cell_handle c, TraversalPredicate & tp, void full_cells(Full_cell_handle c, TraversalPredicate & tp,
OutputIterator & out) const;} OutputIterator & out) const;}
{This function computes (\emph{gathers}) a connected set of full cells {This function computes (\emph{gathers}) a connected set of full cells
satifying a common criteria. Call them \emph{good} cells. It is assumed satifying a common criteria. Call them \emph{good} full cells. It is assumed
that the argument \ccc{c} is a good cell. The cells are then that the argument \ccc{c} is a good full cell. The full cells are then
recursively explored by examining if, from a given good cell, its neighboring recursively explored by examining if, from a given good full cell, its neighboring
cells are also good.\\ full cells are also good.\\
The argument \ccc{tp} is a predicate that takes as argument a \ccc{Facet} The argument \ccc{tp} is a predicate that takes as argument a \ccc{Facet}
whose containing \ccc{Full_cell} is good. The predicate must return \ccc{true} whose containing \ccc{Full_cell} is good. The predicate must return \ccc{true}
if the traversal of that \ccc{Facet} leads to a good cell.\\ if the traversal of that \ccc{Facet} leads to a good full cell.\\
All the good cells are outputted into the last argument \ccc{out}.} All the good full cells are outputted into the last argument \ccc{out}.}
\ccMethod{template< typename OutputIterator > OutputIterator \ccMethod{template< typename OutputIterator > OutputIterator
incident_full_cells(Vertex_handle v, OutputIterator out) const;} incident_full_cells(Vertex_handle v, OutputIterator out) const;}
{Insert in \ccc{out} all the cells that are incident to the vertex {Insert in \ccc{out} all the full cells that are incident to the vertex
\ccc{v}, {i.e.}, the full cells that have the \ccc{Vertex v} as a vertex. \ccc{v}, {i.e.}, the full cells that have the \ccc{Vertex v} as a vertex.
Returns the (modified) output iterator.} Returns the (modified) output iterator.}
\ccMethod{template< typename OutputIterator > OutputIterator \ccMethod{template< typename OutputIterator > OutputIterator
incident_full_cells(const Face & f, OutputIterator out) const;} incident_full_cells(const Face & f, OutputIterator out) const;}
{Insert in \ccc{out} all the cells that are incident to the face \ccc{f}, {Insert in \ccc{out} all the full cells that are incident to the face \ccc{f},
{i.e.}, the full cells that have the \ccc{Face f} as a subface. {i.e.}, the full cells that have the \ccc{Face f} as a subface.
Returns the (probably modified) output iterator. Returns the (probably modified) output iterator.
%\ccPrecond\ccc{is_full_cell(f.full_cell())}. %\ccPrecond\ccc{is_full_cell(f.full_cell())}.
@ -219,11 +204,11 @@ f}. Returns the (probably modified) output iterator.
\ccMethod{template< typename OutputIterator > OutputIterator \ccMethod{template< typename OutputIterator > OutputIterator
incident_upper_faces(Vertex_handle v, const int d, OutputIterator incident_upper_faces(Vertex_handle v, const int d, OutputIterator
out);}{Constructs all the \textbf{upper} \ccc{Face}s of dimension \ccc{d} out);}{Constructs all the \em{upper} \ccc{Face}s of dimension \ccc{d}
incident to \ccc{Vertex} v and inserts them in the \ccc{OutputIterator out}.\\ incident to \ccc{Vertex} v and inserts them in the \ccc{OutputIterator out}.\\
Assuming some total ordering on the vertices of the complex (which is Assuming some total ordering on the vertices of the complex (which is
invariant as long as no vertex is inserted in or removed from the complex), a invariant as long as no vertex is inserted in or removed from the complex), a
\ccc{Face} incident to \ccc{v} is an \emph{upper} \ccc{Face} if and only if \ccc{Face} incident to \ccc{v} is an \em{upper} \ccc{Face} if and only if
its vertices occur at \ccc{v} or beyond \ccc{v} in the ordering.\\ In its vertices occur at \ccc{v} or beyond \ccc{v} in the ordering.\\ In
particular, taking the disjoint union of the upper \ccc{Face}s of dimension particular, taking the disjoint union of the upper \ccc{Face}s of dimension
\ccc{d} incident to every vertex of the complex yields exactly the set of \ccc{d} incident to every vertex of the complex yields exactly the set of
@ -249,9 +234,8 @@ $d\geq$\ccVar.\ccc{current_dimension()}, then no \ccc{Face} is
\ccPrecond $0\leq i\leq$\ccVar.\ccc{current_dimension()}.} \ccPrecond $0\leq i\leq$\ccVar.\ccc{current_dimension()}.}
\ccMethod{int mirror_index(Full_cell_handle c, int i) const;}%{} \ccMethod{int mirror_index(Full_cell_handle c, int i) const;}%{}
%\ccGlue\ccMethod{int mirror_index(Full_cell_const_handle s, int i) const;}
{Returns the index of the vertex mirror of the \ccc{i}-th vertex of \ccc{c}. {Returns the index of the vertex mirror of the \ccc{i}-th vertex of \ccc{c}.
Equivalently, returns the index of \ccc{s} in its \ccc{i}-th neighbor. Equivalently, returns the index of \ccc{c} in its \ccc{i}-th neighbor.
\ccPrecond $0\leq i\leq$\ccVar.\ccc{current_dimension}()\\ \ccPrecond $0\leq i\leq$\ccVar.\ccc{current_dimension}()\\
and $s$ is not the default constructed \ccc{Full_cell_handle}. } and $s$ is not the default constructed \ccc{Full_cell_handle}. }
@ -263,10 +247,6 @@ and $s$ is not the default constructed \ccc{Full_cell_handle}. }
{ {
The first vertex of \ccVar. The first vertex of \ccVar.
} }
%\ccGlue
%\ccMethod{Vertex_const_iterator vertices_end() const;}
%{
%}
\ccGlue \ccGlue
\ccMethod{Vertex_iterator vertices_end();} \ccMethod{Vertex_iterator vertices_end();}
{ {
@ -276,32 +256,21 @@ The beyond vertex of \ccVar.
\ccHeading{Accessing the full cells} % ------------------- ACCESS TO CELLS \ccHeading{Accessing the full cells} % ------------------- ACCESS TO CELLS
\ccMethod{Full_cell_handle full_cell(Vertex_handle v) const;}%{} \ccMethod{Full_cell_handle full_cell(Vertex_handle v) const;}%{}
%\ccGlue {Returns a full cell incident to \ccc{Vertex} \ccc{v}. Note that this
%\ccMethod{Full_cell_const_handle simplex(Vertex_const_handle v) const;} full cell is
{Returns a full cell incident to \ccc{Vertex} \ccc{v}. Note that this simplex is not unique (\ccc{v} is typically incident to more than one full cell).
not unique (\ccc{v} is typically incident to more than one simplex).
\ccPrecond\ccc{v} is not the default constructed \ccc{Vertex_handle}} \ccPrecond\ccc{v} is not the default constructed \ccc{Vertex_handle}}
\ccMethod{Full_cell_handle neighbor(Full_cell_handle c, int i) const;}%{} \ccMethod{Full_cell_handle neighbor(Full_cell_handle c, int i) const;}%{}
%\ccGlue
%\ccMethod{Full_cell_const_handle neighbor(Full_cell_const_handle s, int i) const;}
{ Returns a \ccc{Full_cell_handle} pointing to the \ccc{Full_cell} { Returns a \ccc{Full_cell_handle} pointing to the \ccc{Full_cell}
opposite to the \ccc{i}-th vertex of \ccc{s}. opposite to the \ccc{i}-th vertex of \ccc{c}.
\ccPrecond$0\leq i \leq$\ccVar.\ccc{current_dimension()}\\ \ccPrecond$0\leq i \leq$\ccVar.\ccc{current_dimension()}\\
and \ccc{c} is not the default constructed \ccc{Full_cell_handle}} and \ccc{c} is not the default constructed \ccc{Full_cell_handle}}
%\ccMethod{Simplex_const_iterator full_cells_begin() const;}
%{
%}
%\ccGlue
\ccMethod{Full_cell_iterator full_cells_begin();} \ccMethod{Full_cell_iterator full_cells_begin();}
{ {
The first full cell of \ccVar. The first full cell of \ccVar.
} }
%\ccGlue
%\ccMethod{Simplex_const_iterator full_cells_end() const;}
%{
%}
\ccGlue \ccGlue
\ccMethod{Full_cell_iterator full_cells_end();} \ccMethod{Full_cell_iterator full_cells_end();}
{ {
@ -320,8 +289,8 @@ The beyond full cell of \ccVar.
{Returns a full cell containing the facet \ccc{f}} {Returns a full cell containing the facet \ccc{f}}
\ccMethod{int index_of_covertex(const Facet & f) const;} \ccMethod{int index_of_covertex(const Facet & f) const;}
{Returns the index of vertex of the cell \ccc{c=}\ccVar.\ccc{full_cell(f)} {Returns the index of vertex of the full cell \ccc{c=}\ccVar.\ccc{full_cell(f)}
which does \textbf{not} belong to \ccc{c}.} which does {not} belong to \ccc{c}.}
\ccMethod{Face make_empty_face() const;}{Returns an empty \ccc{Face} \ccMethod{Face make_empty_face() const;}{Returns an empty \ccc{Face}
ready to be setup with any $k$-face of the (combinatorial) triangulation with ready to be setup with any $k$-face of the (combinatorial) triangulation with
@ -344,10 +313,11 @@ $k<$\ccVar.\ccc{current_dimension()}. See \ccc{TriangulationFace}.}
\ccHeading{Vertex insertion} % - - - - - - - - - - - - - - - - - - INSERTIONS \ccHeading{Vertex insertion} % - - - - - - - - - - - - - - - - - - INSERTIONS
\ccMethod{Vertex_handle insert_in_full_cell(Full_cell_handle c);}{Inserts a new \ccMethod{Vertex_handle insert_in_full_cell(Full_cell_handle c);}{Inserts a new
vertex \ccc{v} in the cell \ccc{c} and returns a handle to it. The cell vertex \ccc{v} in the full cell \ccc{c} and returns a handle to
\ccc{c} is subdivided into \ccVar.\ccc{current_dimension())+1} cells which it. The full cell
\ccc{c} is subdivided into \ccVar.\ccc{current_dimension())+1} full cells which
share the vertex \ccc{v}. share the vertex \ccc{v}.
\ccPrecond Current dimension is positive and \ccc{c} is a simplex of \ccVar.} \ccPrecond Current dimension is positive and \ccc{c} is a full cell of \ccVar.}
\begin{ccTexOnly} \begin{ccTexOnly}
\begin{center} \begin{center}
\includegraphics{Triangulation_ref/fig/insert-in-cell.pdf} \includegraphics{Triangulation_ref/fig/insert-in-cell.pdf}
@ -355,7 +325,7 @@ share the vertex \ccc{v}.
\end{ccTexOnly} \end{ccTexOnly}
\begin{ccHtmlOnly} \begin{ccHtmlOnly}
<center> <center>
<img border=0 src="./fig/insert-in-cell.png" align="middle" alt="The effect of insert_in_simplex()"> <img border=0 src="./fig/insert-in-cell.png" align="middle" alt="The effect of insert_in_full_cell()">
</center> </center>
\end{ccHtmlOnly} \end{ccHtmlOnly}
@ -379,18 +349,18 @@ share the vertex \ccc{v}.
\ccMethod{template< class ForwardIterator > Vertex_handle \ccMethod{template< class ForwardIterator > Vertex_handle
insert_in_hole(ForwardIterator start, ForwardIterator end, Facet f);}{The insert_in_hole(ForwardIterator start, ForwardIterator end, Facet f);}{The
simplices in the range $C=$\ccc{[start, end)} are removed, thus forming a hole. full cells in the range $C=$\ccc{[start, end)} are removed, thus forming a hole.
A \ccc{Vertex} is inserted and connected to the boundary of the hole in order A \ccc{Vertex} is inserted and connected to the boundary of the hole in order
to ``fill it''. A \ccc{Vertex_handle} to the new \ccc{Vertex} is returned. to ``fill it''. A \ccc{Vertex_handle} to the new \ccc{Vertex} is returned.
\ccPrecond $C$ must be a (combinatorial) ball and not contain any vertex \ccPrecond $C$ must be a (combinatorial) ball and not contain any vertex
all of whose incident simplices are in $C$. (This implies that all of whose incident full cells are in $C$. (This implies that
\ccVar.\ccc{current_dimension()}$\geq2$ if $|C|>1$.)\\ The boundary of \ccVar.\ccc{current_dimension()}$\geq2$ if $|C|>1$.)\\ The boundary of
$C$ must be a (combinatorial) triangulation of the sphere $C$ must be a (combinatorial) triangulation of the sphere
$\sphere^{d-1}$. $f$ must be on the boundary of $C$.} $\sphere^{d-1}$. $f$ must be on the boundary of $C$.}
\ccGlue \ccGlue
\ccMethod{template< class ForwardIterator, class OutputIterator > \ccMethod{template< class ForwardIterator, class OutputIterator >
Vertex_handle insert_in_hole(ForwardIterator start, ForwardIterator end, Facet Vertex_handle insert_in_hole(ForwardIterator start, ForwardIterator end, Facet
f, OutputIterator out);}{Same as above, but handles to the new simplices are f, OutputIterator out);}{Same as above, but handles to the new full cells are
appended to the \ccc{out} output iterator.} appended to the \ccc{out} output iterator.}
\ccMethod{Vertex_handle insert_increase_dimension(Vertex_handle star);} \ccMethod{Vertex_handle insert_increase_dimension(Vertex_handle star);}
@ -401,11 +371,11 @@ triangulation of the sphere $\sphere^{d+1}$ by adding a new vertex
$\sphere^{d+1}$ ($v$ is added as $d+2^{th}$ vertex to all $\sphere^{d+1}$ ($v$ is added as $d+2^{th}$ vertex to all
full cells) full cells)
and \ccc{star} is used to triangulate the other half-sphere and \ccc{star} is used to triangulate the other half-sphere
(all cells that do not already has star as vertex are duplicated, (all full cells that do not already has star as vertex are duplicated,
and \ccc{star} replaces \ccc{v} in these cells). and \ccc{star} replaces \ccc{v} in these full cells).
The indexing of the vertices in the The indexing of the vertices in the
full cell is such that, if \ccc{f} was a cell of maximal dimension in the full cell is such that, if \ccc{f} was a full cell of maximal dimension in the
initial complex, then \ccc{(f,v)}, in this order, is the corresponding cell initial complex, then \ccc{(f,v)}, in this order, is the corresponding full cell
in the updated triangulation. A handle to \ccc{v} is returned. in the updated triangulation. A handle to \ccc{v} is returned.
\ccPrecond\ccVar. \ccPrecond\ccVar.
If the current dimension is -2 (empty triangulation), then \ccc{star} If the current dimension is -2 (empty triangulation), then \ccc{star}
@ -418,17 +388,17 @@ and \ccc{star} must be a vertex of \ccVar.}
The following methods may destroy the integrity %(the ``purity'', one may say) The following methods may destroy the integrity %(the ``purity'', one may say)
of the data structure. They are used internally. Use at your own risks. of the data structure. They are used internally. Use at your own risks.
\ccMethod{Full_cell_handle new_full_cell();} {Adds a new cell to \ccVar\ and \ccMethod{Full_cell_handle new_full_cell();} {Adds a new full cell to \ccVar\ and
returns a handle to it. The new cell has no vertex and no neighbor yet.} returns a handle to it. The new full cell has no vertex and no neighbor yet.}
\ccMethod{Vertex_handle new_vertex();} \ccMethod{Vertex_handle new_vertex();}
{Adds a new vertex to \ccVar\ and returns a handle to it. The new vertex has {Adds a new vertex to \ccVar\ and returns a handle to it. The new vertex has
no associated cell nor index yet.} no associated full cell nor index yet.}
\ccMethod{void associate_vertex_with_full_cell(Full_cell_handle c, int i, \ccMethod{void associate_vertex_with_full_cell(Full_cell_handle c, int i,
Vertex_handle v);} Vertex_handle v);}
{Sets the \ccc{i}-th vertex of \ccc{c} to \ccc{v} and, if \ccc{v} is non-NULL, {Sets the \ccc{i}-th vertex of \ccc{c} to \ccc{v} and, if \ccc{v} is non-NULL,
sets \ccc{c} as the incident cell of \ccc{v}.} sets \ccc{c} as the incident full cell of \ccc{v}.}
\ccMethod{void set_neighbors(Full_cell_handle ci, int i, Full_cell_handle cj, int \ccMethod{void set_neighbors(Full_cell_handle ci, int i, Full_cell_handle cj, int
j);} j);}
@ -466,13 +436,13 @@ dimension is not -2.}
erasing the references to \ccc{v} in other parts of the triangulation.} erasing the references to \ccc{v} in other parts of the triangulation.}
\ccMethod{void delete_full_cell(Full_cell_handle c);} \ccMethod{void delete_full_cell(Full_cell_handle c);}
{Remove the cell \ccc{c} from the triangulation. This does not take care of {Remove the full cell \ccc{c} from the triangulation. This does not take care of
erasing the references to \ccc{c} in other parts of the triangulation.} erasing the references to \ccc{c} in other parts of the triangulation.}
\ccMethod{template< typename ForwardIterator > void \ccMethod{template< typename ForwardIterator > void
delete_full_cells(ForwardIterator start, ForwardIterator end);} delete_full_cells(ForwardIterator start, ForwardIterator end);}
{Remove the cells in the range \ccc{[start,end)} from the triangulation. {Remove the full cells in the range \ccc{[start,end)} from the triangulation.
This does not take care of erasing the references to these cells in other parts of This does not take care of erasing the references to these full cells in other parts of
the triangulation.} the triangulation.}
\end{ccAdvanced} \end{ccAdvanced}
@ -481,17 +451,17 @@ the triangulation.}
\ccMethod{bool is_valid(bool verbose = true, int level = 0) const;} \ccMethod{bool is_valid(bool verbose = true, int level = 0) const;}
{Partially checks whether \ccVar\ is a triangulation. This function {Partially checks whether \ccVar\ is a triangulation. This function
returns \ccc{true} if each vertex is a vertex of the cell of which it returns \ccc{true} if each vertex is a vertex of the full cell of which it
claims to be a vertex, if the vertices of every cell are pairwise distinct, claims to be a vertex, if the vertices of every full cell are pairwise distinct,
if the neighbor relationship is symmetric, and if neighboring cells share if the neighbor relationship is symmetric, and if neighboring full cells share
exactly \ccVar.\ccc{current_dimension()} vertices and the induced exactly \ccVar.\ccc{current_dimension()} vertices and the induced
orientation of these two cells are compatible. orientation of these two full cells are compatible.
It prints an error message It prints an error message
if one of these conditions is violated and the \ccc{verbose} parameter is if one of these conditions is violated and the \ccc{verbose} parameter is
\ccc{true}. Passing these tests does not garanty that we have a \ccc{true}. Passing these tests does not garanty that we have a
triangulation (abstract pure triangulation (abstract pure
complex). In particular, for example, it is not complex). In particular, for example, it is not
checked whether cells that share \ccVar.\ccc{current_dimension()} vertices checked whether full cells that share \ccVar.\ccc{current_dimension()} vertices
are neighbors in the data structure.} are neighbors in the data structure.}
\ccHeading{Input/Output} % ---------------------------- I/O \ccHeading{Input/Output} % ---------------------------- I/O
@ -508,10 +478,10 @@ equal to \ccVar.\ccc{ambient_dimension()}.}
The information stored in the \ccc{iostream} is: the current dimension (which The information stored in the \ccc{iostream} is: the current dimension (which
must be \ccc{<=} \ccVar.\ccc{ambient_dimension()}), the number of vertices, must be \ccc{<=} \ccVar.\ccc{ambient_dimension()}), the number of vertices,
the number of cells, the indices of the vertices of each cell and then the the number of full cells, the indices of the vertices of each full cell and then the
indices of the neighbors of each cell, where the index corresponds to the indices of the neighbors of each full cell, where the index corresponds to the
preceding list of cells. preceding list of full cells.
If the TDS vertices and full cells contains some extra information If the \ccc{TriangulationDataStructure} vertices and full cells contains some extra information
(i.e. geometric information) the classes \ccc{Vertex} and (i.e. geometric information) the classes \ccc{Vertex} and
\ccc{Full_cell} has to provide the relevant I/O operators. \ccc{Full_cell} has to provide the relevant I/O operators.
@ -519,6 +489,6 @@ If the TDS vertices and full cells contains some extra information
\ccSeeAlso \ccSeeAlso
\ccc{TriangulationDSVertex}\\ \ccc{TriangulationDSVertex}\\
\ccc{TriangulationDSSimplex} \ccc{TriangulationDSFullCell}
\end{ccRefConcept} \end{ccRefConcept}

View File

@ -5,38 +5,38 @@
A \ccRefName\ simply describes a \ccc{k}-face \ccc{f} in a triangulation. A \ccRefName\ simply describes a \ccc{k}-face \ccc{f} in a triangulation.
It gives access to a handle to a full cell \ccc{c} containing the face It gives access to a handle to a full cell \ccc{c} containing the face
\ccc{f} in its boundary, as well as the indices of the vertices of \ccc{f} in \ccc{f} in its boundary, as well as the indices of the vertices of \ccc{f} in
\ccc{c}. It must hold that \ccc{f} is a \textbf{proper} face of cell \ccc{c}. It must hold that \ccc{f} is a \em{proper} face of full cell
\ccc{c}, {i.e.}, the dimension of \ccc{f} is strictly less than \ccc{c}, {i.e.}, the dimension of \ccc{f} is strictly less than
the dimension of \ccc{c}. the dimension of \ccc{c}.
\ccTypes \ccTypes
\ccNestedType{Full_cell_handle}{Must be the same as the nested type \ccNestedType{Full_cell_handle}{Must be the same as the nested type
\ccc{TDS::Full_cell_handle} of the \ccc{TDS} in which the \ccc{TriangulationFace} is \ccc{TriangulationDataStructure::Full_cell_handle} of the \ccc{TriangulationDataStructure} in which the \ccc{TriangulationFace} is
defined/used.} defined/used.}
\ccNestedType{Vertex_handle}{Must be the same as the nested type \ccNestedType{Vertex_handle}{Must be the same as the nested type
\ccc{TDS::Vertex_handle} of the \ccc{TDS} in which the \ccc{TriangulationFace} is \ccc{TriangulationDataStructure::Vertex_handle} of the \ccc{TriangulationDataStructure} in which the \ccc{TriangulationFace} is
defined/used.} defined/used.}
\ccHasModels \ccHasModels
\ccc{Triangulation_face<TDS>}. \ccc{Triangulation_face<TriangulationDataStructure>}.
\ccCreation \ccCreation
\ccCreationVariable{f} \ccCreationVariable{f}
There is no default constructor, since the ambient dimension (the maximal There is no default constructor, since the ambient dimension (the maximal
dimension of the simplices) must be known by the constructors of a \ccRefName. dimension of the full cells) must be known by the constructors of a \ccRefName.
\ccConstructor{Triangulation_face(Triangulation_face g);}{Copy constructor.} \ccConstructor{Triangulation_face(Triangulation_face g);}{Copy constructor.}
\ccConstructor{Triangulation_face(Full_cell_handle c);}{Sets the \ccc{Face}'s \ccConstructor{Triangulation_face(Full_cell_handle c);}{Sets the \ccc{Face}'s
cell to \ccc{c}. \ccPrecond \ccc{s} must be a handle to an existing full cell to \ccc{c}. \ccPrecond \ccc{c} must be a handle to an existing
cell (not the default-constructed \ccc{Full_cell_handle()}).} full cell (not the default-constructed \ccc{Full_cell_handle()}).}
\ccConstructor{Triangulation_face(const int ad);}{Setup the \ccc{Face} knowing \ccConstructor{Triangulation_face(const int ad);}{Setup the \ccc{Face} knowing
the ambient dimension \ccc{ad}. Sets the \ccc{Face}'s cell to the the ambient dimension \ccc{ad}. Sets the \ccc{Face}'s full cell to the
default-constructed one.} default-constructed one.}
\ccHeading{Access functions} \ccHeading{Access functions}
@ -70,6 +70,6 @@ vertex of the face.
\ccSeeAlso \ccSeeAlso
\ccc{TriangulationDataStructure}, \\ \ccc{TriangulationDataStructure}, \\
\ccc{Triangulation_face<TDS>}. \ccc{Triangulation_face<TriangulationDataStructure>}.
\end{ccRefConcept} \end{ccRefConcept}

View File

@ -3,8 +3,8 @@
\ccDefinition \ccDefinition
The concept \ccRefName\ describes the requirements on the type used by the The concept \ccRefName\ describes the requirements on the type used by the
class \ccc{Triangulation<TrTraits, TDS>}, and its derived classes, to class \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>}, and its derived classes, to
represent a cell. represent a full cell.
\ccRefines \ccRefines
@ -13,41 +13,41 @@ represent a cell.
We only list below the additional specific requirements of \ccRefName. We only list below the additional specific requirements of \ccRefName.
Compared to \ccc{TriangulationDSFullCell}, the main difference is the addition of Compared to \ccc{TriangulationDSFullCell}, the main difference is the addition of
methods to access and iterate over the position of the cell's vertices as methods to access and iterate over the position of the full cell's vertices as
well as a method for constructing the center of the cell's circumsphere. well as a method for constructing the center of the full cell's circumsphere.
\ccHasModels \ccHasModels
\ccc{Triangulation_full_cell<TrTraits, TDSFullCell>} \ccc{Triangulation_full_cell<TriangulationTraits, TriangulationDSFullCell>}
\ccTypes \ccTypes
\ccNestedType{Point}% \ccNestedType{Point}%
{The type of the point stored in the cell's vertices. It must be the same {The type of the point stored in the full cell's vertices. It must be the same
as the point type \ccc{TriangulationTraits::Point} (or its refined concepts) as the point type \ccc{TriangulationTraits::Point} (or its refined concepts)
defined by the geometric traits of the \ccc{Triangulation<TrTraits, TDS>} defined by the geometric traits of the \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>}
class.} class.}
\ccNestedType{Point_const_iterator}{An iterator over the points of the \ccNestedType{Point_const_iterator}{An iterator over the points of the
cell.} full cell.}
\ccCreationVariable{c} \ccCreationVariable{c}
\ccOperations \ccOperations
\ccMethod{Point_const_iterator points_begin() const;} \ccMethod{Point_const_iterator points_begin() const;}
{Returns an iterator pointing to the first point of the cell.} {Returns an iterator pointing to the first point of the full cell.}
\ccGlue \ccGlue
\ccMethod{Point_const_iterator points_end() const;} \ccMethod{Point_const_iterator points_end() const;}
{Returns an iterator pointing beyond the last point of the cell.} {Returns an iterator pointing beyond the last point of the full cell.}
\ccMethod{Point circumcenter() const;}{Returns the center of the sphere \ccMethod{Point circumcenter() const;}{Returns the center of the sphere
circumscribing the cell.} circumscribing the full cell.}
\ccSeeAlso \ccSeeAlso
\ccc{Triangulation_full_cell<TrTraits, TDSFullCell>}\\ \ccc{Triangulation_full_cell<TriangulationTraits, TriangulationDSFullCell>}\\
\ccc{TriangulationVertex}\\ \ccc{TriangulationVertex}\\
\ccc{Triangulation<TrTraits, TDS>} \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>}
\end{ccRefConcept} \end{ccRefConcept}

View File

@ -3,14 +3,14 @@
\ccDefinition \ccDefinition
The concept \ccRefName\ describes the various types and functions that a class The concept \ccRefName\ describes the various types and functions that a class
must provide as the first parameter (\ccc{TrTraits}) to the class template must provide as the first parameter (\ccc{TriangulationTraits}) to the class template
\ccc{Triangulation<TrTraits, TDS>}. It brings the geometric ingredient to the \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>}. It brings the geometric ingredient to the
definition of a triangulation, while the combinatorial ingredient is brought by definition of a triangulation, while the combinatorial ingredient is brought by
the second template parameter, \ccc{TDS}. the second template parameter, \ccc{TriangulationDataStructure}.
Inserting a range of points in a triangulation is optimized using Inserting a range of points in a triangulation is optimized using
spatial sorting, thus besides the requirements below, spatial sorting, thus besides the requirements below,
a class provided as \ccc{TrTraits} should also satisfies the concept a class provided as \ccc{TriangulationTraits} should also satisfies the concept
\ccc{SpatialSortingTraits_d}. \ccc{SpatialSortingTraits_d}.
\ccRefines \ccRefines
@ -47,7 +47,7 @@ the templated operator\\\ccc{template<typename ForwardIterator> bool
operator()(ForwardIterator start, ForwardIterator end, const Point_d & operator()(ForwardIterator start, ForwardIterator end, const Point_d &
p)}.\\The operator returns \ccc{true} if and only if point \ccc{p} is p)}.\\The operator returns \ccc{true} if and only if point \ccc{p} is
contained in the affine space spanned by the points in the range \ccc{[start, contained in the affine space spanned by the points in the range \ccc{[start,
end)}. That affine space is also called the \textbf{affine hull} of the points end)}. That affine space is also called the \em{affine hull} of the points
in the range. in the range.
\ccPrecond The $k$ points in the range \ccPrecond The $k$ points in the range
must be affinely independent. must be affinely independent.

View File

@ -3,7 +3,7 @@
\ccDefinition \ccDefinition
The concept \ccRefName\ describes the requirements on the type used by the The concept \ccRefName\ describes the requirements on the type used by the
class \ccc{Triangulation<TrTraits, TDS>}, and its derived classes, to class \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>}, and its derived classes, to
represent a vertex. represent a vertex.
\ccRefines \ccRefines
@ -17,23 +17,23 @@ an embedding of the vertex into a geometric point.
\ccHasModels \ccHasModels
\ccc{Triangulation_vertex<TrTraits, Data, TDSVertex>} \ccc{Triangulation_vertex<TriangulationTraits, Data, TriangulationDSVertex>}
\ccTypes \ccTypes
\ccNestedType{Point}{The type of the point stored in the vertex. It must be \ccNestedType{Point}{The type of the point stored in the vertex. It must be
the same as the point type \ccc{TrTraits::Point} (or its refined the same as the point type \ccc{TriangulationTraits::Point} (or its refined
concepts) when the \ccc{TriangulationVertex} is used in the class concepts) when the \ccc{TriangulationVertex} is used in the class
\ccc{Triangulation<TrTraits, TDS>} (or its derived classes).} \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>} (or its derived classes).}
\ccCreation \ccCreation
\ccCreationVariable{v} \ccCreationVariable{v}
\ccConstructor{TriangulationVertex(Full_cell_handle s, const Point & p);}% \ccConstructor{TriangulationVertex(Full_cell_handle c, const Point & p);}%
{Constructs a vertex with incident cell \ccc{s}. The vertex is embedded at point \ccc{p}.} {Constructs a vertex with incident full cell \ccc{c}. The vertex is embedded at point \ccc{p}.}
\ccGlue\ccConstructor{TriangulationVertex(const Point & p);}% \ccGlue\ccConstructor{TriangulationVertex(const Point & p);}%
{Same as above, but without incident cell.}%{ (Who would have guessed?)} {Same as above, but without incident full cell.}%{ (Who would have guessed?)}
\ccGlue\ccConstructor{TriangulationVertex();}% \ccGlue\ccConstructor{TriangulationVertex();}%
{Same as above, but with a default-constructed \ccc{Point}.} {Same as above, but with a default-constructed \ccc{Point}.}
@ -58,8 +58,8 @@ the point and other possible information.}
\ccSeeAlso \ccSeeAlso
\ccc{Triangulation_vertex<TrTraits, Data, TDSVertex>}\\ \ccc{Triangulation_vertex<TriangulationTraits, Data, TriangulationDSVertex>}\\
\ccc{TriangulationFullCell}\\ \ccc{TriangulationFullCell}\\
\ccc{Triangulation<TrTraits, TDS>} \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>}
\end{ccRefConcept} \end{ccRefConcept}

View File

@ -1,4 +1,4 @@
\begin{ccRefClass}{Triangulation_data_structure<Dimensionality, TDSVertex, TDSFullCell>} \begin{ccRefClass}{Triangulation_data_structure<Dimensionality, TriangulationDSVertex, TriangulationDSFullCell>}
\ccDefinition \ccDefinition
This class is used for storing the combinatorial information of a triangulation This class is used for storing the combinatorial information of a triangulation
@ -19,19 +19,19 @@ triggers some optimizations. Or
dimension of the simplices (full cells) is passed as an integer argument to an instance dimension of the simplices (full cells) is passed as an integer argument to an instance
constructor (see \ccc{TriangulationDataStructure}).\end{itemize} constructor (see \ccc{TriangulationDataStructure}).\end{itemize}
\ccc{TDSVertex} is the class to be used as the base \ccc{Vertex} type in the \ccc{TriangulationDSVertex} is the class to be used as the base \ccc{Vertex} type in the
triangulation data structure. It must be a model of the concept triangulation data structure. It must be a model of the concept
\ccc{TriangulationDSVertex}. The class template \ccRefName\ accepts that no \ccc{TriangulationDSVertex}. The class template \ccRefName\ accepts that no
second parameter be specified. It also accepts the tag \ccc{CGAL::Default} as second parameter be specified. It also accepts the tag \ccc{CGAL::Default} as
second parameter. In both cases, \ccc{TDSVertex} defaults to second parameter. In both cases, \ccc{TriangulationDSVertex} defaults to
\ccc{CGAL::Triangulation_ds_vertex<>}. \ccc{CGAL::Triangulation_ds_vertex<>}.
\ccc{TDSFullCell} is the class to be used as the base \ccc{Full_cell} type in \ccc{TriangulationDSFullCell} is the class to be used as the base \ccc{Full_cell} type in
the triangulation data structure. It must be a model of the concept the triangulation data structure. It must be a model of the concept
\ccc{TriangulationDSFullCell}. The class template \ccRefName\ accepts that no \ccc{TriangulationDSFullCell}. The class template \ccRefName\ accepts that no
third parameter be specified. It also accepts the tag \ccc{CGAL::Default} as third parameter be specified. It also accepts the tag \ccc{CGAL::Default} as
third parameter. In both cases, \ccc{TDSFullCell} defaults to third parameter. In both cases, \ccc{TriangulationDSFullCell} defaults to
\ccc{CGAL::Triangulation_ds_full_cell<>}. \ccc{CGAL::Triangulation_ds_full_cell<>}.
\ccIsModel \ccIsModel
@ -53,17 +53,18 @@ In addition, the class \ccRefName\ provides the following types and methods:
\ccNestedType{Full_cell_data} \ccNestedType{Full_cell_data}
{A data member of type \ccc{Full_cell_data} is stored in every full cell (models {A data member of type \ccc{Full_cell_data} is stored in every full cell (models
of the concept \ccc{TriangulationDSFullCell}). It is used to mark some full of the concept \ccc{TriangulationDSFullCell}). It is used to mark
cells, during modifications of the triangulation data structure.} some
full cells, during modifications of the triangulation data structure.}
\ccHeading{Vertex insertion} % - - - - - - - - - - - - - - - - - - INSERTIONS \ccHeading{Vertex insertion} % - - - - - - - - - - - - - - - - - - INSERTIONS
\ccMethod{template< OutputIterator > Full_cell_handle insert_in_tagged_hole( \ccMethod{template< OutputIterator > Full_cell_handle insert_in_tagged_hole(
Vertex_handle v, Facet f, OutputIterator new_simplices);} Vertex_handle v, Facet f, OutputIterator new_full_cells);}
{A set \ccc{C} of simplices satisfying the same condition as in method {A set \ccc{C} of full cells satisfying the same condition as in method
\ccRefName\ccc{::insert_in_hole()} is assumed to be marked. This \ccRefName\ccc{::insert_in_hole()} is assumed to be marked. This
method creates new simplices from \ccc{Vertex} v to the boundary of \ccc{C}. method creates new full cells from \ccc{Vertex} v to the boundary of \ccc{C}.
The boundary is recognized by checking the mark of the simplices. The boundary is recognized by checking the mark of the full cells.
This method is used by \ccRefName\ccc{::insert_in_hole()}.} This method is used by \ccRefName\ccc{::insert_in_hole()}.}
\end{ccAdvanced} \end{ccAdvanced}

View File

@ -1,10 +1,10 @@
\begin{ccRefClass}{Triangulation_ds_full_cell<TDS, TDSFullCellStoragePolicy>} \begin{ccRefClass}{Triangulation_ds_full_cell<TriangulationDataStructure, TDSFullCellStoragePolicy>}
\ccDefinition \ccDefinition
The class \ccRefName\ serves as the default full cell template parameter in the The class \ccRefName\ serves as the default full cell template parameter in the
class \ccc{Triangulation_data_structure<Dimensionality, TDSVertex, class \ccc{Triangulation_data_structure<Dimensionality, TriangulationDSVertex,
TDSFullCell>}. TriangulationDSFullCell>}.
This class does not provide any geometric capabilities but only combinatorial This class does not provide any geometric capabilities but only combinatorial
(adjacency) information. Thus, if the \ccc{Triangulation_data_structure} is (adjacency) information. Thus, if the \ccc{Triangulation_data_structure} is
@ -19,7 +19,7 @@ with some additional attributes tuned for a specific application.
\ccParameters \ccParameters
The first template parameter, \ccc{TDS}, must be a model of the The first template parameter, \ccc{TriangulationDataStructure}, must be a model of the
\ccc{TriangulationDataStructure} concept. It defaults to \ccc{void}, which is \ccc{TriangulationDataStructure} concept. It defaults to \ccc{void}, which is
used to break some dependency cycles. used to break some dependency cycles.
@ -36,11 +36,11 @@ equivalent to setting \ccc{TDSFullCellStoragePolicy} to
When the second parameter is specified, its possible ``values'' When the second parameter is specified, its possible ``values''
are:\begin{itemize} are:\begin{itemize}
\item \ccc{CGAL::Default}, which is the \textbf{default} value. In that case, the \item \ccc{CGAL::Default}, which is the \em{default} value. In that case, the
policy \ccc{CGAL::TDS_full_cell_default_storage_policy} is used. policy \ccc{CGAL::TDS_full_cell_default_storage_policy} is used.
\item \ccc{CGAL::TDS_full_cell_default_storage_policy}. In that case, the mirror \item \ccc{CGAL::TDS_full_cell_default_storage_policy}. In that case, the mirror
indices are \textbf{not stored}. indices are {not stored}.
\item \ccc{CGAL::TDS_full_cell_mirror_storage_policy}. In that case, the mirror \item \ccc{CGAL::TDS_full_cell_mirror_storage_policy}. In that case, the mirror
indices are stored. indices are stored.
@ -53,6 +53,6 @@ See the user manual \note{TODO} for how to choose the second option.
\ccSeeAlso \ccSeeAlso
\ccc{Triangulation_ds_vertex<TDS>} \ccc{Triangulation_ds_vertex<TriangulationDataStructure>}
\end{ccRefClass} \end{ccRefClass}

View File

@ -1,10 +1,10 @@
\begin{ccRefClass}{Triangulation_ds_vertex<TDS>} \begin{ccRefClass}{Triangulation_ds_vertex<TriangulationDataStructure>}
\ccDefinition \ccDefinition
The class \ccRefName\ serves as the default vertex template parameter in the The class \ccRefName\ serves as the default vertex template parameter in the
class \ccc{Triangulation_data_structure<Dimensionality, TDSVertex, class \ccc{Triangulation_data_structure<Dimensionality, TriangulationDSVertex,
TDSFullCell>}. TriangulationDSFullCell>}.
This class does not contain any geometric information but only combinatorial This class does not contain any geometric information but only combinatorial
(adjacency) information. Thus, if the \ccc{Triangulation_data_structure} is (adjacency) information. Thus, if the \ccc{Triangulation_data_structure} is
@ -20,7 +20,7 @@ example).
\ccParameters \ccParameters
The template parameter \ccc{TDS} must be a model of the The template parameter \ccc{TriangulationDataStructure} must be a model of the
\ccc{TriangulationDataStructure} concept. It defaults to \ccc{void}, which is \ccc{TriangulationDataStructure} concept. It defaults to \ccc{void}, which is
used to break some dependency cycles. used to break some dependency cycles.
@ -30,6 +30,6 @@ used to break some dependency cycles.
\ccSeeAlso \ccSeeAlso
\ccc{Triangulation_ds_full_cell<TDS, TDSFullCellStoragePolicy>} \ccc{Triangulation_ds_full_cell<TriangulationDataStructure, TDSFullCellStoragePolicy>}
\end{ccRefClass} \end{ccRefClass}

View File

@ -1,4 +1,4 @@
\begin{ccRefClass}{Triangulation_face<TDS>} \begin{ccRefClass}{Triangulation_face<TriangulationDataStructure>}
\ccDefinition \ccDefinition
@ -6,7 +6,7 @@ A \ccRefName\ is a model of the concept \ccc{TriangulationFace}.
\ccParameters \ccParameters
\ccc{TDS} must be a \textbf{very loose} model of the concept Parameter \ccc{TriangulationDataStructure} must be a \em{very loose} model of the concept
\ccc{TriangulationDataStructure} in that it must only provide the \ccc{TriangulationDataStructure} in that it must only provide the
types\begin{itemize} types\begin{itemize}
\item \ccc{Full_cell_handle}, \item \ccc{Full_cell_handle},

View File

@ -1,10 +1,10 @@
\begin{ccRefClass}{Triangulation_full_cell<TrTraits, Data, TDSFullCell>} \begin{ccRefClass}{Triangulation_full_cell<TriangulationTraits, Data, TriangulationDSFullCell>}
\ccDefinition \ccDefinition
The class \ccRefName\ is a model of the concept \ccc{TriangulationFullCell}. It The class \ccRefName\ is a model of the concept \ccc{TriangulationFullCell}. It
is used by default for representing full cells in the class is used by default for representing full cells in the class
\ccc{Triangulation<TrTraits, TDS>}. \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>}.
A \ccRefName\ stores handles to the vertices of the cell as well as handles A \ccRefName\ stores handles to the vertices of the cell as well as handles
to its neighboring cells. to its neighboring cells.
@ -13,22 +13,23 @@ to its neighboring cells.
\ccParameters \ccParameters
\ccc{TrTraits} must be a model of the concept \ccc{TriangulationTraits}. It \ccc{TriangulationTraits} must be a model of the concept \ccc{TriangulationTraits}. It
provides geometric types and predicates for use in the provides geometric types and predicates for use in the
\ccc{Triangulation<TrTraits, TDS>} class. \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>} class.
\ccc{Data} is an optional type of data to be stored in the vertex class. The \ccc{Data} is an optional type of data to be stored in the vertex class. The
class template \ccRefName\ accepts that no second parameter be specified. In class template \ccRefName\ accepts that no second parameter be specified. In
this case, \ccc{Data} defaults to \ccc{CGAL::No_full_cell_data}. this case, \ccc{Data} defaults to \ccc{CGAL::No_full_cell_data}.
\ccc{TDSFullCell} must be a model of the concept \ccc{TriangulationDSFullCell}. Parameter \ccc{TriangulationDSFullCell} must be a model of the concept
\ccc{TriangulationDSFullCell}.
The class template \ccRefName\ accepts that no third parameter be specified. The class template \ccRefName\ accepts that no third parameter be specified.
It also accepts the tag \ccc{CGAL::Default} as third parameter. In both It also accepts the tag \ccc{CGAL::Default} as third parameter. In both
cases, \ccc{TDSFullCell} defaults to \ccc{CGAL::Triangulation_ds_full_cell<>}. cases, \ccc{TriangulationDSFullCell} defaults to \ccc{CGAL::Triangulation_ds_full_cell<>}.
\ccInheritsFrom \ccInheritsFrom
\ccc{TDSFullCell} (the third template parameter) \ccc{TriangulationDSFullCell} (the third template parameter)
\ccIsModel \ccIsModel
@ -61,15 +62,15 @@ The parameter \ccc{t} is passed to the \ccc{Data} constructor.}
\ccFunction{istream & operator>>(istream & is, Triangulation_full_cell & v);}% \ccFunction{istream & operator>>(istream & is, Triangulation_full_cell & v);}%
{Inputs the non-combinatorial information given by the cell, {i.e.}, {Inputs the non-combinatorial information given by the cell, {i.e.},
the point and other possible information. The data of type \ccc{Data} is the point and other possible information. The data of type \ccc{Data} is
\textbf{also} read.} {also} read.}
\ccFunction{ostream & operator<<(ostream & os, const Triangulation_full_cell & v);}% \ccFunction{ostream & operator<<(ostream & os, const Triangulation_full_cell & v);}%
{Outputs the non-combinatorial information given by the cell, {i.e.}, {Outputs the non-combinatorial information given by the cell, {i.e.},
the point and other possible information. The data of type \ccc{Data} is the point and other possible information. The data of type \ccc{Data} is
\textbf{also} written.} {also} written.}
\ccSeeAlso \ccSeeAlso
\ccc{Triangulation_vertex<TrTraits, Data, TDSVertex>} \ccc{Triangulation_vertex<TriangulationTraits, Data, TriangulationDSVertex>}
\end{ccRefClass} \end{ccRefClass}

View File

@ -4,7 +4,7 @@
\ccDefinition \ccDefinition
The enum \ccRefName\ is defined by the class \ccc{Triangulation} to specify The enum \ccRefName\ is defined by the class \ccc{Triangulation} to specify
in what kind of simplex a point has been located in a triangulation. in what kind of face a point has been located in a triangulation.
\ccEnum{enum Locate_type {ON_VERTEX, IN_FACE, IN_FACET, IN_FULL_CELL, \ccEnum{enum Locate_type {ON_VERTEX, IN_FACE, IN_FACET, IN_FULL_CELL,
OUTSIDE_CONVEX_HULL, OUTSIDE_AFFINE_HULL};} OUTSIDE_CONVEX_HULL, OUTSIDE_AFFINE_HULL};}

View File

@ -1,10 +1,10 @@
\begin{ccRefClass}{Triangulation_vertex<TrTraits, Data, TDSVertex>} \begin{ccRefClass}{Triangulation_vertex<TriangulationTraits, Data, TriangulationDSVertex>}
\ccDefinition \ccDefinition
The class \ccRefName\ is a model of the concept \ccc{TriangulationVertex}. It is The class \ccRefName\ is a model of the concept \ccc{TriangulationVertex}. It is
used by default for representing vertices in the class used by default for representing vertices in the class
\ccc{Triangulation<TrTraits, TDS>}. \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>}.
A \ccRefName\ stores a point and an incident full cell. A \ccRefName\ stores a point and an incident full cell.
@ -12,23 +12,24 @@ A \ccRefName\ stores a point and an incident full cell.
\ccParameters \ccParameters
\ccc{TrTraits} must be a model of the concept \ccc{TriangulationTraits}. It \ccc{TriangulationTraits} must be a model of the concept \ccc{TriangulationTraits}. It
provides geometric types and predicates for use in the provides geometric types and predicates for use in the
\ccc{Triangulation<TrTraits, TDS>} class. It is of interest here for its \ccc{Triangulation<TriangulationTraits, TriangulationDataStructure>} class. It is of interest here for its
declaration of the \ccc{Point} type. declaration of the \ccc{Point} type.
\ccc{Data} is an optional type of data to be stored in the vertex class. The \ccc{Data} is an optional type of data to be stored in the vertex class. The
class template \ccRefName\ accepts that no second parameter be specified. In class template \ccRefName\ accepts that no second parameter be specified. In
this case, \ccc{Data} defaults to \ccc{CGAL::No_vertex_data}. this case, \ccc{Data} defaults to \ccc{CGAL::No_vertex_data}.
\ccc{TDSVertex} must be a model of the concept \ccc{TriangulationDSVertex}. The Parameter
\ccc{TriangulationDSVertex} must be a model of the concept \ccc{TriangulationDSVertex}. The
class template \ccRefName\ accepts that no third parameter be specified. It class template \ccRefName\ accepts that no third parameter be specified. It
also accepts the tag \ccc{CGAL::Default} as third parameter. In both cases, also accepts the tag \ccc{CGAL::Default} as third parameter. In both cases,
\ccc{TDSVertex} defaults to \ccc{CGAL::Triangulation_ds_vertex<>}. \ccc{TriangulationDSVertex} defaults to \ccc{CGAL::Triangulation_ds_vertex<>}.
\ccInheritsFrom \ccInheritsFrom
\ccc{TDSVertex} (the third template parameter) \ccc{TriangulationDSVertex} (the third template parameter)
\ccIsModel \ccIsModel
@ -49,12 +50,12 @@ type.}
\ccConstructor{template< typename T> \ccConstructor{template< typename T>
Triangulation_vertex(Full_cell_handle c, Triangulation_vertex(Full_cell_handle c,
const Point & p, const T & t);}{Constructs a vertex with incident cell const Point & p, const T & t);}{Constructs a vertex with incident full cell
\ccc{c}. The vertex is embedded at point \ccc{p} and the parameter \ccc{t} is \ccc{c}. The vertex is embedded at point \ccc{p} and the parameter \ccc{t} is
passed to the \ccc{Data} constructor.} passed to the \ccc{Data} constructor.}
\ccGlue\ccConstructor{template< typename T> Triangulation_vertex(const Point \ccGlue\ccConstructor{template< typename T> Triangulation_vertex(const Point
& p, const T & t);}{Same as above, but without incident cell.} & p, const T & t);}{Same as above, but without incident full cell.}
\ccGlue\ccConstructor{Triangulation_vertex();}% \ccGlue\ccConstructor{Triangulation_vertex();}%
{Same as above, but with default-constructed \ccc{Point} and \ccc{Data}.} {Same as above, but with default-constructed \ccc{Point} and \ccc{Data}.}
@ -69,15 +70,15 @@ passed to the \ccc{Data} constructor.}
\ccFunction{istream & operator>>(istream & is, Triangulation_vertex & v);}% \ccFunction{istream & operator>>(istream & is, Triangulation_vertex & v);}%
{Inputs the non-combinatorial information given by the vertex, {i.e.}, {Inputs the non-combinatorial information given by the vertex, {i.e.},
the point and other possible information. The data of type \ccc{Data} is the point and other possible information. The data of type \ccc{Data} is
\textbf{also} read.} {also} read.}
\ccFunction{ostream & operator<<(ostream & os, const Triangulation_vertex & v);}% \ccFunction{ostream & operator<<(ostream & os, const Triangulation_vertex & v);}%
{Outputs the non-combinatorial information given by the vertex, {i.e.}, {Outputs the non-combinatorial information given by the vertex, {i.e.},
the point and other possible information. The data of type \ccc{Data} is the point and other possible information. The data of type \ccc{Data} is
\textbf{also} written.} {also} written.}
\ccSeeAlso \ccSeeAlso
\ccc{Triangulation_full_cell<TrTraits, Data, TDSFullCell>} \ccc{Triangulation_full_cell<TriangulationTraits, Data, TriangulationDSFullCell>}
\end{ccRefClass} \end{ccRefClass}

View File

@ -13,27 +13,28 @@ The basic triangulation class of \cgal\ is primarily designed to
represent the triangulations of a set of points $A$ in $\R^d$. represent the triangulations of a set of points $A$ in $\R^d$.
It can be It can be
viewed as a partition of the convex hull of $A$ into simplices whose viewed as a partition of the convex hull of $A$ into simplices whose
vertices are the points of $A$. Together with the unbounded cells having vertices are the points of $A$. Together with the unbounded full cells having
the convex hull boundary as its frontier, the triangulation forms a the convex hull boundary as its frontier, the triangulation forms a
partition of $\R^d$. partition of $\R^d$.
In order to deal only with full dimensional simplices (full cells), In order to deal only with full dimensional simplices (full cells),
which is convenient for many which is convenient for many
applications, the space outside the convex hull is subdivided into simplices by applications, the space outside the convex hull is subdivided into
full cells by
considering that each convex hull facet is incident to an infinite considering that each convex hull facet is incident to an infinite
cell having as vertex an auxiliary vertex called the infinite full cell having as vertex an auxiliary vertex called the infinite
vertex. In that way, each facet is incident to exactly two cells and vertex. In that way, each facet is incident to exactly two full cells and
special cases at the boundary of the convex hull are simple to deal special cases at the boundary of the convex hull are simple to deal
with. with.
A triangulation is a collection of vertices and cells that are linked A triangulation is a collection of vertices and full cells that are linked
together through incidence and adjacency relations. Each cell gives together through incidence and adjacency relations. Each full cell gives
access to its its incident vertices and to its its adjacent access to its its incident vertices and to its its adjacent
cells. Each vertex gives access to one of its incident cells. full cells. Each vertex gives access to one of its incident full cells.
The vertices of a cell are indexed in positive The vertices of a full cell are indexed in positive
orientation, the positive orientation being defined by the orientation orientation, the positive orientation being defined by the orientation
of the underlying Euclidean space $\R^d$. The neighbors of a cell are also of the underlying Euclidean space $\R^d$. The neighbors of a full cell are also
indexed in such a way that the neighbor indexed by $i$ indexed in such a way that the neighbor indexed by $i$
is opposite to the vertex with the same index. is opposite to the vertex with the same index.
@ -47,7 +48,7 @@ is opposite to the vertex with the same index.
\ccRefConceptPage{TriangulationDataStructure} \ccRefConceptPage{TriangulationDataStructure}
The above concept is also abbreviated as \ccc{TDS}. It defines three types, The above concept is also abbreviated as \ccc{TriangulationDataStructure}. It defines three types,
\ccc{Vertex}, \ccc{Full_cell} and \ccc{Face}, that must respectively fulfill the \ccc{Vertex}, \ccc{Full_cell} and \ccc{Face}, that must respectively fulfill the
following concepts: following concepts:
@ -55,9 +56,6 @@ following concepts:
\ccRefConceptPage{TriangulationDSFullCell}\\ \ccRefConceptPage{TriangulationDSFullCell}\\
\ccRefConceptPage{TriangulationFace} \ccRefConceptPage{TriangulationFace}
The above first two concepts are also abbreviated respectively as
\ccc{TDSVertex} and \ccc{TDSFullCell}.
\subsubsection*{(Geometric) triangulations} \subsubsection*{(Geometric) triangulations}
\ccRefConceptPage{TriangulationTraits}\\ \ccRefConceptPage{TriangulationTraits}\\
@ -67,8 +65,8 @@ The above first two concepts are also abbreviated respectively as
\ccRefConceptPage{TriangulationVertex}\\ \ccRefConceptPage{TriangulationVertex}\\
\ccRefConceptPage{TriangulationFullCell} \ccRefConceptPage{TriangulationFullCell}
The above concepts are also abbreviated respectively as \ccc{TrTraits}, The above concepts are also abbreviated respectively as \ccc{TriangulationTraits},
\ccc{DTTraits}, \ccc{DelaunayTriangulationTraits},
%\ccc{RTTraits}, %\ccc{RTTraits},
\ccc{TrVertex} and \ccc{TrFullCell}. \ccc{TrVertex} and \ccc{TrFullCell}.
@ -76,20 +74,20 @@ The above concepts are also abbreviated respectively as \ccc{TrTraits},
\subsubsection*{Triangulation data structure} \subsubsection*{Triangulation data structure}
\ccRefIdfierPage{CGAL::Triangulation_data_structure<Dimensionality, TDSVertex, TDSFullCell>}\\ \ccRefIdfierPage{CGAL::Triangulation_data_structure<Dimensionality, TriangulationDSVertex, TriangulationDSFullCell>}\\
\ccRefIdfierPage{CGAL::Triangulation_ds_vertex<TDS>}\\ \ccRefIdfierPage{CGAL::Triangulation_ds_vertex<TriangulationDataStructure>}\\
\ccRefIdfierPage{CGAL::Triangulation_ds_full_cell<TDS, TDSFullCellStoragePolicy>} \ccRefIdfierPage{CGAL::Triangulation_ds_full_cell<TriangulationDataStructure, TDSFullCellStoragePolicy>}
\ccRefIdfierPage{CGAL::Triangulation_face<TDS>} \ccRefIdfierPage{CGAL::Triangulation_face<TriangulationDataStructure>}
\subsubsection*{(Geometric) triangulations} \subsubsection*{(Geometric) triangulations}
\ccRefIdfierPage{CGAL::Triangulation<TrTraits, TDS>}\\ \ccRefIdfierPage{CGAL::Triangulation<TriangulationTraits, TriangulationDataStructure>}\\
\ccRefIdfierPage{CGAL::Delaunay_triangulation<DTTraits, TDS>} \ccRefIdfierPage{CGAL::Delaunay_triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>}
%\ccRefIdfierPage{CGAL::Regular_triangulation<RCTraits, TDS>} %\ccRefIdfierPage{CGAL::Regular_triangulation<RCTraits, TriangulationDataStructure>}
\ccRefIdfierPage{CGAL::Triangulation_vertex<TrTraits, Data, TDSVertex>}\\ \ccRefIdfierPage{CGAL::Triangulation_vertex<TriangulationTraits, Data, TriangulationDSVertex>}\\
\ccRefIdfierPage{CGAL::Triangulation_full_cell<TrTraits, Data, TDSFullCell>} \ccRefIdfierPage{CGAL::Triangulation_full_cell<TriangulationTraits, Data, TriangulationDSFullCell>}
\subsection{Enums} \subsection{Enums}

View File

@ -6,6 +6,8 @@
% Concepts % Concepts
\input{Triangulation_ref/TriangulationDataStructure.tex} \input{Triangulation_ref/TriangulationDataStructure.tex}
\input{Triangulation_ref/Tds_vertex.tex}
\input{Triangulation_ref/Tds_full_cell.tex}
\input{Triangulation_ref/TriangulationDSVertex.tex} \input{Triangulation_ref/TriangulationDSVertex.tex}
\input{Triangulation_ref/TriangulationDSFullCell.tex} \input{Triangulation_ref/TriangulationDSFullCell.tex}