implementing the reviews

This commit is contained in:
Olivier Devillers 2012-06-08 12:26:30 +00:00
parent 53d5c41759
commit 78a3224468
18 changed files with 216 additions and 97 deletions

2
.gitattributes vendored
View File

@ -4227,10 +4227,10 @@ Triangulation/doc_tex/Triangulation_ref/Delaunay_triangulation.tex -text
Triangulation/doc_tex/Triangulation_ref/RegularTriangulation.tex -text Triangulation/doc_tex/Triangulation_ref/RegularTriangulation.tex -text
Triangulation/doc_tex/Triangulation_ref/RegularTriangulationTraits.tex -text Triangulation/doc_tex/Triangulation_ref/RegularTriangulationTraits.tex -text
Triangulation/doc_tex/Triangulation_ref/Triangulation.tex -text Triangulation/doc_tex/Triangulation_ref/Triangulation.tex -text
Triangulation/doc_tex/Triangulation_ref/TriangulationDSFace.tex -text
Triangulation/doc_tex/Triangulation_ref/TriangulationDSFullCell.tex -text Triangulation/doc_tex/Triangulation_ref/TriangulationDSFullCell.tex -text
Triangulation/doc_tex/Triangulation_ref/TriangulationDSVertex.tex -text Triangulation/doc_tex/Triangulation_ref/TriangulationDSVertex.tex -text
Triangulation/doc_tex/Triangulation_ref/TriangulationDataStructure.tex -text Triangulation/doc_tex/Triangulation_ref/TriangulationDataStructure.tex -text
Triangulation/doc_tex/Triangulation_ref/TriangulationFace.tex -text
Triangulation/doc_tex/Triangulation_ref/TriangulationFullCell.tex -text Triangulation/doc_tex/Triangulation_ref/TriangulationFullCell.tex -text
Triangulation/doc_tex/Triangulation_ref/TriangulationTraits.tex -text Triangulation/doc_tex/Triangulation_ref/TriangulationTraits.tex -text
Triangulation/doc_tex/Triangulation_ref/TriangulationVertex.tex -text Triangulation/doc_tex/Triangulation_ref/TriangulationVertex.tex -text

View File

@ -20,6 +20,12 @@ check all is_valid function, precise in the doc what they are doing.
small feature with iterator "all tuples" small feature with iterator "all tuples"
make the code and doc agree on Flat_* stuff (orientation in a flat)
iterator on points in concept TriangulationVertex should be removed to keep requirements minimal

View File

@ -5,8 +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<DelaunayTriangulationTraits, TriangulationDataStructure>}. It brings the geometric ingredient to \ccc{Delaunay_triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>}. It brings the geometric ingredients to
the definition of a Delaunay complex, while the combinatorial ingredient is the definition of a Delaunay complex, while the combinatorial
ingredients are
brought by the second template parameter, \ccc{TriangulationDataStructure}. brought by the second template parameter, \ccc{TriangulationDataStructure}.
\ccRefines \ccRefines
@ -15,6 +16,8 @@ brought by the second template parameter, \ccc{TriangulationDataStructure}.
\ccTypes \ccTypes
\ccTwo{DelaunayTriangulationTraits ::}{}
%\ccNestedType{Point_d}{This nested type is defined in the ``parent'' concept %\ccNestedType{Point_d}{This nested type is defined in the ``parent'' concept
%\ccc{TriangulationTraits}.} %\ccc{TriangulationTraits}.}
@ -35,7 +38,7 @@ to its bounded side.
\ccPrecond \ccPrecond
\ccc{std::distance(start,end)=D+1}, where \ccc{std::distance(start,end)=D+1}, where
\ccc{Point_dimension_d(*it)} is $D$ for all \ccc{it} in \ccc{Point_dimension_d(*it)} is $D$ for all \ccc{it} in
\ccc{[start,end)}. \ccc{Point_dimension_d(p)} is also $D$ \ccc{[start,end)}. \ccc{Point_dimension_d(p)} is also $D$.
The points in range The points in range
\ccc{[start,end)} must be affinely independent, i.e., the simplex must \ccc{[start,end)} must be affinely independent, i.e., the simplex must
not be flat.} not be flat.}
@ -58,7 +61,7 @@ to its bounded side.
The points in range \ccc{[start,end)} and \ccc{p} are supposed to belong to the lower dimensional flat The points in range \ccc{[start,end)} and \ccc{p} are supposed to belong to the lower dimensional flat
whose orientation is given by \ccc{orient}. whose orientation is given by \ccc{orient}.
\ccPrecond \ccPrecond
\ccc{std::distance(start,end)=k} where $k$ is the number of \ccc{std::distance(start,end)=k+1} where $k$ is the number of
points used to construct \ccc{orient}. points used to construct \ccc{orient}.
\ccc{Point_dimension_d(*it)} is $D$ for all \ccc{it} in \ccc{Point_dimension_d(*it)} is $D$ for all \ccc{it} in
\ccc{[start,end)}. \ccc{Point_dimension_d(p)} is also $D$. \ccc{[start,end)}. \ccc{Point_dimension_d(p)} is also $D$.
@ -85,6 +88,9 @@ not be flat.
\ccConstructor{DelaunayTriangulationTraits();}{The default constructor.} \ccConstructor{DelaunayTriangulationTraits();}{The default constructor.}
\ccOperations \ccOperations
\ccThree{In_flat_side_of_oriented_sphere_d}{in_flat_side_of_oriented_sphere_d_object()
const;}{}
The following methods permit access to the traits class's predicates: The following methods permit access to the traits class's predicates:
@ -95,20 +101,16 @@ The following methods permit access to the traits class's predicates:
const;} const;}
{} {}
%%%%%%% unused !
%\ccGlue
%\ccMethod{ Center_of_sphere_d center_of_sphere_d_object()
%const;}%
%{}
\ccHasModels \ccHasModels
\ccc{CGAL::Cartesian_d<FT, Dim, LA>},\\ \ccc{CGAL::Cartesian_d<FT, Dim, LA>},\\
\ccc{CGAL::Simple_cartesian_d<FT, Dim, LA>},\\ \ccc{CGAL::Simple_cartesian_d<FT, Dim, LA>},\\
\ccc{CGAL::Filtered_kernel_d} (recommended) \ccc{CGAL::New_kernel_d} (recommended when available)
\ccSeeAlso \ccSeeAlso
\ccc{TriangulationTraits} \ccc{TriangulationTraits}\\
\ccc{DelaunayTriangulation}
\end{ccRefConcept} \end{ccRefConcept}

View File

@ -50,7 +50,7 @@ is used.}
\ccTypedef{typedef TriangulationDataStructure::Facet Facet;}{} \ccTypedef{typedef TriangulationDataStructure::Facet Facet;}{}
\ccGlue \ccGlue
\ccTypedef{typedef TriangulationDataStructure::Face Face;}% \ccTypedef{typedef TriangulationDataStructure::Face Face;}%
{A model of the concept \ccc{TriangulationFace}.} {A model of the concept \ccc{TriangulationDSFace}.}
The vertices and full 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,
@ -458,7 +458,7 @@ defined by the infinite full cell \ccc{c} must contain \ccc{p}.}
\ccHeading{Validity check} \ccHeading{Validity check}
\ccMethod{bool is_valid(bool verbose = true, int level = 0) const;} \ccMethod{bool is_valid(bool verbose = true) const;}
{Partially checks whether \ccVar\ is a triangulation. This function returns {Partially checks whether \ccVar\ is a triangulation. This function returns
\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.
@ -469,7 +469,7 @@ 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) const;} {Returns \ccc{true} if and only if all
finite full cells incident to \ccc{v} have positive orientation.} finite full cells incident to \ccc{v} have positive orientation.}
\ccHeading{Input/Output} \ccHeading{Input/Output}

View File

@ -1,8 +1,8 @@
\begin{ccRefConcept}{TriangulationFace} \begin{ccRefConcept}{TriangulationDSFace}
\ccDefinition \ccDefinition
A \ccRefName\ simply describes a \ccc{k}-face \ccc{f} in a triangulation. A \ccRefName\ 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 {\em proper} face of full cell \ccc{c}. It must hold that \ccc{f} is a {\em proper} face of full cell
@ -12,11 +12,11 @@ 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{TriangulationDataStructure::Full_cell_handle} of the \ccc{TriangulationDataStructure} in which the \ccc{TriangulationFace} is \ccc{TriangulationDataStructure::Full_cell_handle} of the \ccc{TriangulationDataStructure} in which the \ccc{TriangulationDSFace} 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{TriangulationDataStructure::Vertex_handle} of the \ccc{TriangulationDataStructure} in which the \ccc{TriangulationFace} is \ccc{TriangulationDataStructure::Vertex_handle} of the \ccc{TriangulationDataStructure} in which the \ccc{TriangulationDSFace} is
defined/used.} defined/used.}
\ccHasModels \ccHasModels
@ -32,8 +32,10 @@ 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
full cell to \ccc{c}. \ccPrecond \ccc{c} must be a handle to an existing full cell to \ccc{c} and the ambient dimension to
full cell (not the default-constructed \ccc{Full_cell_handle()}).} \ccc{c.ambient_dimension()}.
\ccPrecond \ccc{c!=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 full cell to the the ambient dimension \ccc{ad}. Sets the \ccc{Face}'s full cell to the
@ -44,32 +46,37 @@ default-constructed one.}
\ccMethod{Full_cell_handle full_cell() const;}{Returns a handle to a cell that \ccMethod{Full_cell_handle full_cell() const;}{Returns a handle to a cell that
has the face in its boundary.} has the face in its boundary.}
\ccMethod{int feature_dimension() const;}{Returns the dimension of the face \ccMethod{int face_dimension() const;}{Returns the dimension of the face
(one less than the number of vertices).} (one less than the number of vertices).}
\ccMethod{int index(int i) const;}{Returns the index of the \ccc{i}-th vertex \ccMethod{int index(int i) const;}{Returns the index of the \ccc{i}-th vertex
of the face in the cell \ccVar.\ccc{full_cell()}. \ccPrecond $0\leq i\leq$\ccVar.\ccc{feature_dimension()}.} of the face in the cell \ccVar.\ccc{full_cell()}. \ccPrecond $0\leq i\leq$\ccVar.\ccc{face_dimension()}.}
\ccMethod{Vertex_handle vertex(int i) const;}{Returns a handle to the \ccMethod{Vertex_handle vertex(int i) const;}{Returns a handle to the
\ccc{i}-th \ccc{Vertex} of the face in the cell \ccVar.\ccc{full_cell()}. \ccc{i}-th \ccc{Vertex} of the face in the cell \ccVar.\ccc{full_cell()}.
\ccPrecond $0\leq i\leq$\ccVar.\ccc{feature_dimension()}.} \ccPrecond $0\leq i\leq$\ccVar.\ccc{face_dimension()}.}
\ccHeading{Update functions} \ccHeading{Update functions}
\ccMethod{void clear();}{Sets the facet to the empty set.} \ccMethod{void clear();}{Sets the facet to the empty set. Ambient
dimension remains unchanged.}
\ccMethod{void set_full_cell(Full_cell_handle c);}{Sets the cell of the face to \ccMethod{void set_full_cell(Full_cell_handle c);}{Sets the cell of the face to
\ccc{c}. \ccPrecond \ccc{c} must not be the default-constructed \ccc{c}.
\ccc{Full_cell_handle}.} \ccPrecond \ccc{c!=Full_cell_handle()}
}
\ccMethod{void set_index(int i, int j);}{Sets the index of the \ccc{i}-th \ccMethod{void set_index(int i, int j);}{Sets the index of the \ccc{i}-th
vertex of the face. vertex of the face to be the \ccc{j}-th vertex of the full cell.
\ccPrecond $0\leq i<$\ccVar.\ccc{full_cell()->ambient_dimension()}. \ccPrecond $0\leq i\leq$\ccVar.\ccc{full_cell()->face_dimension()}.
\ccPrecond $0\leq j\leq$\ccVar.\ccc{full_cell()->ambient_dimension()}.} \ccPrecond $0\leq j\leq$\ccVar.\ccc{full_cell()->ambient_dimension()}.}
\ccSeeAlso \ccSeeAlso
\ccc{TriangulationDataStructure}, \\
\ccc{Triangulation_face<TriangulationDataStructure>}. \ccc{TriangulationDataStructure::FullCell} \\
\ccc{TriangulationDataStructure::Vertex} \\
\ccc{TriangulationDataStructure}\\
\ccc{Triangulation}
\end{ccRefConcept} \end{ccRefConcept}

View File

@ -5,15 +5,13 @@
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 full cell refer to a face of In the context of triangulation, the term full cell refers to a face of
\emph{maximal} dimension. This maximality characteristic is emphasized by using \emph{maximal} dimension. This maximality characteristic is emphasized by using
the adjective {\em full}. 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.
This concept is a \emph{sub-concept} of the \ccc{TriangulationDataStructure}
concept.
\ccHasModels \ccHasModels
@ -22,6 +20,10 @@ concept.
\ccTypes \ccTypes
\ccThree{Full_cell_handle}{v. set_full_cell(Full_cell_handle c);}{}
\ccThreeToTwo
\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
@ -37,11 +39,26 @@ the vertices of the full cell.}
nested type \ccc{TriangulationDataStructure::Full_cell_handle} of the \ccc{TriangulationDataStructure} 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 TriangulationDataStructure::Full_cell_data TDS_data;}{} \ccThree{Full_cell_handle}{TriangulationDataStructure::Full_cell_data TDS_data}{}
\ccThreeToTwo
\ccTypedef{typedef TriangulationDataStructure::Full_cell_data
TDS_data;}{A data member of this type has to be stored and accessible through
access function below.}
\ccThree{Full_cell_handle}{v. set_full_cell(Full_cell_handle c);}{}
\ccThreeToTwo
\ccNestedType{
template <typename TDS2>
Rebind_TDS}
{This nested template class has to define a type \ccc{Other} which is the
{\it rebound} vertex, that is, the one whose \ccc{Triangulation_data_structure}
will be the actually used one. The \ccc{Other} type will be the real base
class of \ccc{Triangulation_data_structure::Full_cell}.}
\ccNestedType{template<typename TDS2> Rebind_TDS}{This nested template
class must define a nested type \ccc{Other} which is the rebound full cell
class template, that is: \ccc{Other == TriangulationDSFullCell<TDS2>}.}
\ccCreation \ccCreation
\ccCreationVariable{c} \ccCreationVariable{c}
@ -86,7 +103,7 @@ returned integer is not negative, it holds that \ccVar.%
\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} such that \ccVar\ccc{.neighbor(i)==n}. \ccPrecond \ccc{n}
must be a neighbor of \ccVar.} 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
@ -112,6 +129,7 @@ i,$\ccc{cur_dim}$\leq$\ccc{ambient_dimension()}.}
\ccHeading{Update functions} % - - - - - - - - - - - - - - - - - UPDATES \ccHeading{Update functions} % - - - - - - - - - - - - - - - - - UPDATES
\ccThree{ostream&}{c. set_mirror_index(const int i, const int index)}{}
\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 full cell. vertex of the full cell.
@ -153,13 +171,18 @@ if the full cell \ccc{n} is a neighbor of the full cell \ccVar. Returns
a neighbor of \ccVar\ if the full cell \ccc{n} is a neighbor of the full 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.}
\begin{ccDebug}
\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) const;}{Performs any
desired test on a full cell. \emph{E.g.}, checks that for each existing vertex, desired test on a full cell. \emph{E.g.}, checks that for each
there is an existing neighbor.} existing neighbor \ccc{n}, \ccVar\ and \ccc{n} share relevant vertices
and \ccVar\ is the relevant neighbor of \ccc{n}.
}
\end{ccDebug}
% \ccHeading{Memory management} \ccHeading{Memory management}
% \ccMethod{void* for_compact_container() const;}{} % \ccMethod{void* for_compact_container() const;}{}
% \ccGlue\ccMethod{void* & for_compact_container();}{} % \ccGlue\ccMethod{void* & for_compact_container();}{}
@ -170,21 +193,33 @@ there is an existing neighbor.}
% \ccc{Compact_container} to store their vertices and full cells. 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.
\ccMethod{void * for_compact_container() const;}{}
\ccGlue
\ccMethod{void * & for_compact_container();}{}
{ These member functions are required by \ccc{Triangulation_data_structure}
because it uses \ccc{Compact_container} to store its cells. See the
documentation of \ccc{Compact_container} for the exact requirements.}
\ccHeading{Input/Output} \ccHeading{Input/Output}
These operators can be used directly and are called by the I/O
operator of class \ccc{TriangulationDataStructure}.
\ccFunction{template<class TriangulationDataStructure> istream& operator>>(istream & is, \ccFunction{template<class TriangulationDataStructure> istream& operator>>(istream & is,
Triangulation_ds_full_cell<TriangulationDataStructure> & c);} Triangulation_ds_full_cell<TriangulationDataStructure> & c);}
{Reads (possible) non-combinatorial information about a full cell from the stream \ccc{is} {Reads (possibly) non-combinatorial information about a full cell from the stream \ccc{is}
into \ccc{c}.} into \ccc{c}.}
\ccFunction{template<class TriangulationDataStructure> ostream& operator<<(ostream & os, const \ccFunction{template<class TriangulationDataStructure> ostream& operator<<(ostream & os, const
Triangulation_ds_full_cell<TriangulationDataStructure> & c);} Triangulation_ds_full_cell<TriangulationDataStructure> & c);}
{Writes (possible) non-combinatorial information about full cell \ccc{c} to the stream {Writes (possibly) non-combinatorial information about full cell \ccc{c} to the stream
\ccc{os}.} \ccc{os}.}
\ccSeeAlso \ccSeeAlso
\ccc{TriangulationDSVertex}\\ \ccc{TriangulationDSVertex}\\
\ccc{TriangulationDataStructure} \ccc{TriangulationDSFace}\\
\ccc{TriangulationDataStructure}\\
\ccc{Triangulation}
\end{ccRefConcept} \end{ccRefConcept}

View File

@ -5,10 +5,9 @@
The concept \ccRefName\ describes what a vertex is in a model of the concept The concept \ccRefName\ describes what a vertex 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. In particular, we only require that only, as geometry is not concerned here. In particular, we only require that
the vertex hold a handle to a full cell incident to it in the triangulation. the vertex holds a handle to a full cell incident to it in the triangulation.
This concept is a \emph{sub-concept} of the \ccc{TriangulationDataStructure}
concept.
\ccHasModels \ccHasModels
@ -16,14 +15,21 @@ concept.
\ccc{CGAL::Triangulation_vertex<TriangulationTraits, Data, TriangulationDSVertex>} \ccc{CGAL::Triangulation_vertex<TriangulationTraits, Data, TriangulationDSVertex>}
\ccTypes \ccTypes
\ccThree{Full_cell_handle}{v. set_full_cell(Full_cell_handle c);}{}
\ccThreeToTwo
\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{TriangulationDataStructure::Full_cell_handle} of the \ccc{TriangulationDataStructure} 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{
class must define a nested type \ccc{Other} which is the rebound vertex template <typename TDS2>
class template, that is: \ccc{Other == TriangulationDSVertex<TDS2>}.} Rebind_TDS}
{This nested template class has to define a type \ccc{Other} which is the
{\it rebound} vertex, that is, the one whose \ccc{Triangulation_data_structure}
will be the actually used one. The \ccc{Other} type will be the real base
class of \ccc{Triangulation_data_structure::Vertex}.}
\ccCreation \ccCreation
\ccCreationVariable{v} \ccCreationVariable{v}
@ -36,6 +42,7 @@ full cell to \ccc{c}. \ccPrecond \ccc{c} must not be the default-constructed
\ccc{Full_cell_handle}.} \ccc{Full_cell_handle}.}
\ccOperations \ccOperations
\ccThree{Full_cell_handle}{v. set_full_cell(Full_cell_handle c);}{}
\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 full cell. \ccPrecond \ccc{c} must not be the default-constructed incident full cell. \ccPrecond \ccc{c} must not be the default-constructed
@ -44,13 +51,14 @@ incident full cell. \ccPrecond \ccc{c} must not be the default-constructed
\ccMethod{Full_cell_handle full_cell() const;}{Returns a handle to a \ccMethod{Full_cell_handle full_cell() const;}{Returns a handle to a
full cell incident to the vertex.} full cell incident to the vertex.}
\begin{ccDebug}
\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) const;}{Performs any
desired test on a vertex. Al least, checks that the pointer to an incident desired test on a vertex. Should check if the incident full cell
full cell is not the default constructed handle ({i.e.}, is not actually contains the vertex.
\ccc{NULL}). The parameter \ccc{level} is not used, but can be used in derived }
classes.} \end{ccDebug}
% \ccHeading{Memory management} % \ccHeading{Memory management}
@ -64,21 +72,35 @@ classes.}
% full cells. 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{Memory management}
\ccMethod{void * for_compact_container() const;}{}
\ccGlue
\ccMethod{void * & for_compact_container();}{}
{ These member functions are required by \ccc{Triangulation_data_structure}
because it uses \ccc{Compact_container} to store its cells. See the
documentation of \ccc{Compact_container} for the exact requirements.}
\ccHeading{Input/Output} \ccHeading{Input/Output}
These operators can be used directly and are called by the I/O
operator of class \ccc{TriangulationDataStructure}.
\ccFunction{template<class TriangulationDataStructure> istream& operator>>(istream & is, \ccFunction{template<class TriangulationDataStructure> istream& operator>>(istream & is,
Triangulation_ds_vertex<TriangulationDataStructure> & v);} Triangulation_ds_vertex<TriangulationDataStructure> & v);}
{Reads (possible) non-combinatorial information about a vertex from the stream \ccc{is} {Reads (possibly) non-combinatorial information about a vertex from the stream \ccc{is}
into \ccc{v}.} into \ccc{v}.}
\ccFunction{template<class TriangulationDataStructure> ostream& operator<<(ostream & os, const \ccFunction{template<class TriangulationDataStructure> ostream& operator<<(ostream & os, const
Triangulation_ds_vertex<TriangulationDataStructure> & v);} Triangulation_ds_vertex<TriangulationDataStructure> & v);}
{Writes (possible) non-combinatorial information about vertex \ccc{v} to the stream {Writes (possibly) non-combinatorial information about vertex \ccc{v} to the stream
\ccc{os}.} \ccc{os}.}
\ccSeeAlso \ccSeeAlso
\ccc{TriangulationDSFullCell}\\ \ccc{TriangulationDSFullCell}\\
\ccc{TriangulationDataStructure} \ccc{TriangulationDSFace}\\
\ccc{TriangulationDataStructure}\\
\ccc{Triangulation}
\end{ccRefConcept} \end{ccRefConcept}

View File

@ -81,7 +81,7 @@ full cell \ccc{c} opposite to its \ccc{i}-th vertex.
\ccThreeToTwo \ccThreeToTwo
\ccNestedType{Face} \ccNestedType{Face}
{A model of the concept \ccc{TriangulationFace}.} {A model of the concept \ccc{TriangulationDSFace}.}
Vertices and full cells 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->}.
@ -599,13 +599,15 @@ The information stored in the \ccc{iostream} is:
The indices of vertices and full cells correspond to the order in the The indices of vertices and full cells correspond to the order in the
file, the user cannot control it. file, the user cannot control it.
The classes \ccc{Vertex} and The classes \ccc{Vertex} and
\ccc{Full_cell} has to provide the relevant I/O operators \ccc{Full_cell} have to provide the relevant I/O operators
(possibly empty). (possibly empty).
\ccSeeAlso \ccSeeAlso
\ccc{TriangulationDSVertex}\\ \ccc{TriangulationDSVertex}\\
\ccc{TriangulationDSFullCell} \ccc{TriangulationDSFullCell}\\
\ccc{TriangulationDSFace}\\
\ccc{Triangulation}
\end{ccRefConcept} \end{ccRefConcept}

View File

@ -13,8 +13,9 @@ represent a full 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 full cell's vertices as methods to access and iterate over the position of the full cell's
well as a method for constructing the center of the full cell's circumsphere. vertices.
% as well as a method for constructing the center of the full cell's circumsphere.
\ccHasModels \ccHasModels
@ -34,6 +35,8 @@ full cell.}
\ccCreationVariable{c} \ccCreationVariable{c}
\ccOperations \ccOperations
These operators can be used directly and are called by the I/O
operator of class \ccc{Triangulation}.
\ccMethod{Point_const_iterator points_begin() const;} \ccMethod{Point_const_iterator points_begin() const;}
{Returns an iterator pointing to the first point of the full cell.} {Returns an iterator pointing to the first point of the full cell.}
@ -41,8 +44,20 @@ full cell.}
\ccMethod{Point_const_iterator points_end() const;} \ccMethod{Point_const_iterator points_end() const;}
{Returns an iterator pointing beyond the last point of the full cell.} {Returns an iterator pointing beyond the last point of the full cell.}
\ccMethod{Point circumcenter() const;}{Returns the center of the sphere \ccHeading{Input/Output}
circumscribing the full cell.}
These operators can be used directly and are called by the I/O
operator of class \ccc{Triangulation}.
\ccFunction{istream & operator>>(istream & is, TriangulationFullCell & c);}%
{Inputs additional information stored in the full cell.}
\ccFunction{ostream & operator<<(ostream & os, const TriangulationFullCell & c);}%
{Outputs additional information stored in the full cell.}
%\ccMethod{Point circumcenter() const;}{Returns the center of the sphere
%circumscribing the full cell.}
\ccSeeAlso \ccSeeAlso

View File

@ -10,24 +10,26 @@ 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{TriangulationTraits} should also satisfies the concept a class provided as \ccc{TriangulationTraits} should also satisfy the concept
\ccc{SpatialSortingTraits_d}. \ccc{SpatialSortingTraits_d}.
\ccRefines \ccRefines
\ccc{SpatialSortingTraits_d} \ccc{SpatialSortingTraits_d}
{If range of points are inserted, the {If a range of points is inserted, the
traits must refine \ccc{SpatialSortingTraits_d}, this is not needed traits must refine \ccc{SpatialSortingTraits_d}, This is not needed
if the points are inserted one by one.} if the points are inserted one by one.}
\ccTypes \ccTypes
\ccTwo{TriangulationTraits ::Compare_lexicographically_d}{}
\ccNestedType{Point_d}% \ccNestedType{Point_d}%
{A type representing a point in Euclidean space.} {A type representing a point in Euclidean space.}
\ccNestedType{Point_dimension_d}% \ccNestedType{Point_dimension_d}%
{Functor object type returning the dimension of a \ccc{Point_d}. {Functor returning the dimension of a \ccc{Point_d}.
Must provide Must provide
\ccc{int operator()(Point_d p)} returning the dimension of $p$. \ccc{int operator()(Point_d p)} returning the dimension of $p$.
} }
@ -35,7 +37,7 @@ a class provided as \ccc{TriangulationTraits} should also satisfies the concept
\ccNestedType{Orientation_d}{A predicate object that must provide the \ccNestedType{Orientation_d}{A predicate object that must provide the
templated operator\\\ccc{template<typename ForwardIterator> Orientation templated operator\\\ccc{template<typename ForwardIterator> Orientation
operator()(ForwardIterator start, ForwardIterator end)}.\\The operator returns operator()(ForwardIterator start, ForwardIterator end)}.\\The operator returns
\ccc{POSITIVE}, \ccc{NEGATIVE} or \ccc{COPLANAR} depending on \ccc{CGAL::POSITIVE}, \ccc{CGAL::NEGATIVE} or \ccc{CGAL::COPLANAR} depending on
the orientation of the simplex defined by the points in the range \ccc{[start, the orientation of the simplex defined by the points in the range \ccc{[start,
end)}. end)}.
\ccPrecond \ccc{std::distance(start,end)=D+1}, where \ccPrecond \ccc{std::distance(start,end)=D+1}, where
@ -52,24 +54,37 @@ 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.
\ccc{Point_dimension_d(*it)} is $D$ for all \ccc{it} in \ccc{Point_dimension_d(*it)} is $D$ for all \ccc{it} in
\ccc{[start,end)}. \ccc{[start,end)}, for some $D$.
$2\leq k\leq D$. $2\leq k\leq D$.
} }
In the $D$-dimensional oriented space, a $k-1$ dimensional subspace (flat)
define by $k$ points can be oriented in two different ways.
Choosing the orientation of any simplex defined by $k$ points fix the
orientation of all other simplices. To be able to orient lower
dimensional flats, we use the following classes:
\ccNestedType{Flat_orientation_d}{ \ccNestedType{Flat_orientation_d}{
A type representing an orientation of an affine subspace of A type representing an orientation of an affine subspace of
dimension $k$ strictly smaller than the ambiant dimension. dimension $k$ strictly smaller than the ambient dimension.
} }
\ccNestedType{Construct_flat_orientation_d}{ \ccNestedType{Construct_flat_orientation_d}{
A construction object that must A construction object that must
provide the templated operator\\\ccc{template<typename ForwardIterator> Flat_orientation_d provide the templated operator\\\ccc{template<typename ForwardIterator> Flat_orientation_d
operator()(ForwardIterator start, ForwardIterator end)}.\\The operator operator()(ForwardIterator start, ForwardIterator end)}.\\
return an orientation of the flat spanned by the points in The flat spanned by the points in
the range \ccc{R=[start, end)}. \ccPrecond The $k$ points in the range the range \ccc{R=[start, end)} can be oriented in two different ways,
the operator
returns an object that allow to orient that flat so that \ccc{R=[start, end)}
defines a positive simplex.
\ccPrecond The $k$ points in the range
must be affinely independent. must be affinely independent.
\ccc{Point_dimension_d(*it)} is $D$ for all \ccc{it} in \ccc{R}. \ccc{Point_dimension_d(*it)} is $D$ for all \ccc{it} in \ccc{R} for
some $D$.
$2\leq k\leq D$. $2\leq k\leq D$.
} }
@ -80,7 +95,7 @@ templated operator\\\ccc{template<typename ForwardIterator> Orientation
operator()(Flat_orientation_d orient,ForwardIterator start, operator()(Flat_orientation_d orient,ForwardIterator start,
ForwardIterator end)}.\\ ForwardIterator end)}.\\
The operator returns The operator returns
\ccc{POSITIVE}, \ccc{NEGATIVE} or \ccc{COPLANAR} depending on \ccc{CGAL::POSITIVE}, \ccc{CGAL::NEGATIVE} or \ccc{CGAL::COPLANAR} depending on
the orientation of the simplex defined by the points in the range \ccc{[start, the orientation of the simplex defined by the points in the range \ccc{[start,
end)}. end)}.
The points are supposed to belong to the lower dimensional flat The points are supposed to belong to the lower dimensional flat
@ -89,7 +104,8 @@ The points are supposed to belong to the lower dimensional flat
points points
used to construct \ccc{orient}. used to construct \ccc{orient}.
\ccc{Point_dimension_d(*it)} is $D$ for all \ccc{it} in \ccc{Point_dimension_d(*it)} is $D$ for all \ccc{it} in
\ccc{[start,end)}. \ccc{[start,end)} where $D$ is the dimension of the points used to
construct \ccc{orient}.
$2\leq k\leq D$. $2\leq k\leq D$.
} }
@ -116,6 +132,7 @@ the same and \ccc{LARGER} otherwise.}
\ccConstructor{TriangulationTraits();}{The default constructor.} \ccConstructor{TriangulationTraits();}{The default constructor.}
\ccOperations \ccOperations
\ccThree{Construct_flat_orientation_d}{construct_flat_orientation_d_object() const}{}
The following methods permit access to the traits class's predicates: The following methods permit access to the traits class's predicates:
@ -149,6 +166,7 @@ const;}%
\ccSeeAlso \ccSeeAlso
\ccc{DelaunayTriangulationTraits} \ccc{DelaunayTriangulationTraits}
\ccc{Triangulation}
\end{ccRefConcept} \end{ccRefConcept}

View File

@ -13,13 +13,15 @@ represent a vertex.
We only list below the additional specific requirements of \ccRefName. We only list below the additional specific requirements of \ccRefName.
Compared to \ccc{TriangulationDSVertex}, the main difference is the addition of Compared to \ccc{TriangulationDSVertex}, the main difference is the addition of
an embedding of the vertex into a geometric point. an association of the vertex into a geometric point.
\ccHasModels \ccHasModels
\ccc{CGAL::Triangulation_vertex<TriangulationTraits, Data, TriangulationDSVertex>} \ccc{CGAL::Triangulation_vertex<TriangulationTraits, Data, TriangulationDSVertex>}
\ccTypes \ccTypes
\ccThree{TriangulationVertex}{v(Full_cell_handle c, const Point & p);}{}
\ccThreeToTwo
\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{TriangulationTraits::Point} (or its refined the same as the point type \ccc{TriangulationTraits::Point} (or its refined
@ -48,6 +50,9 @@ concepts) when the \ccc{TriangulationVertex} is used in the class
\ccHeading{Input/Output} \ccHeading{Input/Output}
These operators can be used directly and are called by the I/O
operator of class \ccc{Triangulation}.
\ccFunction{istream & operator>>(istream & is, TriangulationVertex & v);}% \ccFunction{istream & operator>>(istream & is, TriangulationVertex & 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 point and other possible information.}

View File

@ -21,8 +21,9 @@ constructor (see \ccc{TriangulationDataStructure}).\end{itemize}
\ccc{TriangulationDSVertex} 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\ can be
second parameter be specified. It also accepts the tag \ccc{CGAL::Default} as defined by specifying
only the first parameter. It also accepts the tag \ccc{CGAL::Default} as
second parameter. In both cases, \ccc{TriangulationDSVertex} defaults to second parameter. In both cases, \ccc{TriangulationDSVertex} defaults to
\ccc{CGAL::Triangulation_ds_vertex<>}. \ccc{CGAL::Triangulation_ds_vertex<>}.
@ -63,10 +64,16 @@ full cells, during modifications of the triangulation data structure.}
Vertex_handle v, Facet f, OutputIterator new_full_cells);} Vertex_handle v, Facet f, OutputIterator new_full_cells);}
{A set \ccc{C} of full cells 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 full cells from \ccc{Vertex} v to the boundary of \ccc{C}. method creates new full cells from vertex \ccc{v} to the boundary of \ccc{C}.
The boundary is recognized by checking the mark of the full cells. 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}
\ccSeeAlso
\ccc{Triangulation_ds_vertex}\\
\ccc{Triangulation_ds_full_cell}\\
\ccc{Triangulation}
\end{ccRefClass} \end{ccRefClass}

View File

@ -2,7 +2,7 @@
\ccDefinition \ccDefinition
A \ccRefName\ is a model of the concept \ccc{TriangulationFace}. A \ccRefName\ is a model of the concept \ccc{TriangulationDSFace}.
\ccParameters \ccParameters
@ -17,11 +17,11 @@ types\begin{itemize}
\ccIsModel \ccIsModel
\ccc{TriangulationFace}. \ccc{TriangulationDSFace}.
\ccSeeAlso \ccSeeAlso
\ccc{TriangulationFace},\\ \ccc{TriangulationDSFace},\\
\ccc{TriangulationDataStructure}. \ccc{TriangulationDataStructure}.
\end{ccRefClass} \end{ccRefClass}

View File

@ -54,7 +54,7 @@ following concepts:
\ccRefConceptPage{TriangulationDSVertex}\\ \ccRefConceptPage{TriangulationDSVertex}\\
\ccRefConceptPage{TriangulationDSFullCell}\\ \ccRefConceptPage{TriangulationDSFullCell}\\
\ccRefConceptPage{TriangulationFace} \ccRefConceptPage{TriangulationDSFace}
\subsubsection*{(Geometric) triangulations} \subsubsection*{(Geometric) triangulations}

View File

@ -11,7 +11,7 @@
\input{Triangulation_ref/TriangulationDSVertex.tex} \input{Triangulation_ref/TriangulationDSVertex.tex}
\input{Triangulation_ref/TriangulationDSFullCell.tex} \input{Triangulation_ref/TriangulationDSFullCell.tex}
\input{Triangulation_ref/TriangulationFace.tex} \input{Triangulation_ref/TriangulationDSFace.tex}
\input{Triangulation_ref/TriangulationTraits.tex} \input{Triangulation_ref/TriangulationTraits.tex}
\input{Triangulation_ref/DelaunayTriangulationTraits.tex} \input{Triangulation_ref/DelaunayTriangulationTraits.tex}

View File

@ -399,7 +399,7 @@ public:
if( is_infinite(s) ) if( is_infinite(s) )
{ {
Vertex_handle v; Vertex_handle v;
for( int i(0); i<= f.feature_dimension(); ++i) for( int i(0); i<= f.face_dimension(); ++i)
if ( is_infinite( f.vertex(i) )) return true; if ( is_infinite( f.vertex(i) )) return true;
} }
return false; return false;

View File

@ -524,7 +524,7 @@ public:
const Face & f) const Face & f)
: f_(f), tds_(tds) : f_(f), tds_(tds)
{ {
dim_ = f.feature_dimension(); dim_ = f.face_dimension();
} }
bool operator()(const Facet & facet) const bool operator()(const Facet & facet) const
{ {
@ -549,7 +549,7 @@ public:
const Face & f) const Face & f)
: f_(f), tds_(tds) : f_(f), tds_(tds)
{ {
dim_ = f.feature_dimension(); dim_ = f.face_dimension();
} }
bool operator()(const Facet & facet) const bool operator()(const Facet & facet) const
{ {
@ -780,7 +780,7 @@ typename Triangulation_data_structure<Dim, Vb, Fcb>::Vertex_handle
Triangulation_data_structure<Dim, Vb, Fcb> Triangulation_data_structure<Dim, Vb, Fcb>
::collapse_face(const Face & f) /* Concept */ ::collapse_face(const Face & f) /* Concept */
{ {
const int fd = f.feature_dimension(); const int fd = f.face_dimension();
CGAL_precondition( (1 <= fd ) && (fd < current_dimension())); CGAL_precondition( (1 <= fd ) && (fd < current_dimension()));
std::vector<Full_cell_handle> simps; std::vector<Full_cell_handle> simps;
// save the Face's vertices: // save the Face's vertices:

View File

@ -38,14 +38,14 @@ protected:
public: public:
explicit Triangulation_face(Full_cell_handle s) /* Concept */ explicit Triangulation_face(Full_cell_handle s) /* Concept */
: full_cell_(s), indices_(s->ambient_dimension()+1) // FIXME: +2 to allow for arbitrary dimensioned Face : full_cell_(s), indices_(s->ambient_dimension()+2)
{ {
CGAL_assertion( Full_cell_handle() != s ); CGAL_assertion( Full_cell_handle() != s );
clear(); clear();
} }
explicit Triangulation_face(const int ambient_dim) /* Concept */ explicit Triangulation_face(const int ambient_dim) /* Concept */
: full_cell_(), indices_(ambient_dim+1) // FIXME: +2 to allow for arbitrary dimensioned Face : full_cell_(), indices_(ambient_dim+2)
{ {
clear(); clear();
} }
@ -54,7 +54,7 @@ public:
: full_cell_(f.full_cell_), indices_(f.indices_) : full_cell_(f.full_cell_), indices_(f.indices_)
{} {}
int feature_dimension() const /* Concept */ int face_dimension() const /* Concept */
{ {
int i(0); int i(0);
while( -1 != indices_[i] ) ++i; while( -1 != indices_[i] ) ++i;
@ -68,7 +68,7 @@ public:
int index(const int i) const /* Concept */ int index(const int i) const /* Concept */
{ {
CGAL_precondition( (0 <= i) && (i <= feature_dimension()) ); CGAL_precondition( (0 <= i) && (i <= face_dimension()) );
return indices_[i]; return indices_[i];
} }