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/RegularTriangulationTraits.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/TriangulationDSVertex.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/TriangulationTraits.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"
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
has to provide as the first parameter (\ccc{DCTraits}) to the class template
\ccc{Delaunay_triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>}. It brings the geometric ingredient to
the definition of a Delaunay complex, while the combinatorial ingredient is
\ccc{Delaunay_triangulation<DelaunayTriangulationTraits, TriangulationDataStructure>}. It brings the geometric ingredients to
the definition of a Delaunay complex, while the combinatorial
ingredients are
brought by the second template parameter, \ccc{TriangulationDataStructure}.
\ccRefines
@ -15,6 +16,8 @@ brought by the second template parameter, \ccc{TriangulationDataStructure}.
\ccTypes
\ccTwo{DelaunayTriangulationTraits ::}{}
%\ccNestedType{Point_d}{This nested type is defined in the ``parent'' concept
%\ccc{TriangulationTraits}.}
@ -35,7 +38,7 @@ to its bounded side.
\ccPrecond
\ccc{std::distance(start,end)=D+1}, where
\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
\ccc{[start,end)} must be affinely independent, i.e., the simplex must
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
whose orientation is given by \ccc{orient}.
\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}.
\ccc{Point_dimension_d(*it)} is $D$ for all \ccc{it} in
\ccc{[start,end)}. \ccc{Point_dimension_d(p)} is also $D$.
@ -85,6 +88,9 @@ not be flat.
\ccConstructor{DelaunayTriangulationTraits();}{The default constructor.}
\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:
@ -95,20 +101,16 @@ The following methods permit access to the traits class's predicates:
const;}
{}
%%%%%%% unused !
%\ccGlue
%\ccMethod{ Center_of_sphere_d center_of_sphere_d_object()
%const;}%
%{}
\ccHasModels
\ccc{CGAL::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
\ccc{TriangulationTraits}
\ccc{TriangulationTraits}\\
\ccc{DelaunayTriangulation}
\end{ccRefConcept}

View File

@ -50,7 +50,7 @@ is used.}
\ccTypedef{typedef TriangulationDataStructure::Facet Facet;}{}
\ccGlue
\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,
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}
\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
\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.
@ -469,7 +469,7 @@ For each finite full cell, it is checked that its orientation is
positive.}
\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.}
\ccHeading{Input/Output}

View File

@ -1,8 +1,8 @@
\begin{ccRefConcept}{TriangulationFace}
\begin{ccRefConcept}{TriangulationDSFace}
\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
\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
@ -12,11 +12,11 @@ the dimension of \ccc{c}.
\ccTypes
\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.}
\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.}
\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(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 (not the default-constructed \ccc{Full_cell_handle()}).}
full cell to \ccc{c} and the ambient dimension to
\ccc{c.ambient_dimension()}.
\ccPrecond \ccc{c!=Full_cell_handle()}
}
\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
@ -44,32 +46,37 @@ default-constructed one.}
\ccMethod{Full_cell_handle full_cell() const;}{Returns a handle to a cell that
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).}
\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
\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}
\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
\ccc{c}. \ccPrecond \ccc{c} must not be the default-constructed
\ccc{Full_cell_handle}.}
\ccc{c}.
\ccPrecond \ccc{c!=Full_cell_handle()}
}
\ccMethod{void set_index(int i, int j);}{Sets the index of the \ccc{i}-th
vertex of the face.
\ccPrecond $0\leq i<$\ccVar.\ccc{full_cell()->ambient_dimension()}.
vertex of the face to be the \ccc{j}-th vertex of the full cell.
\ccPrecond $0\leq i\leq$\ccVar.\ccc{full_cell()->face_dimension()}.
\ccPrecond $0\leq j\leq$\ccVar.\ccc{full_cell()->ambient_dimension()}.}
\ccSeeAlso
\ccc{TriangulationDataStructure}, \\
\ccc{Triangulation_face<TriangulationDataStructure>}.
\ccc{TriangulationDataStructure::FullCell} \\
\ccc{TriangulationDataStructure::Vertex} \\
\ccc{TriangulationDataStructure}\\
\ccc{Triangulation}
\end{ccRefConcept}

View File

@ -5,15 +5,13 @@
The concept \ccRefName\ describes what a full cell is in a model of the concept
\ccc{TriangulationDataStructure}. It sets requirements of combinatorial nature
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
the adjective {\em full}.
A \ccRefName\ is responsible for storing handles to the vertices of a
full cell as well as handles to its neighbors.
This concept is a \emph{sub-concept} of the \ccc{TriangulationDataStructure}
concept.
\ccHasModels
@ -22,6 +20,10 @@ concept.
\ccTypes
\ccThree{Full_cell_handle}{v. set_full_cell(Full_cell_handle c);}{}
\ccThreeToTwo
\ccNestedType{Vertex_handle}%{}
%\ccGlue\ccNestedType{Vertex_const_handle}
{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
\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
\ccCreationVariable{c}
@ -86,7 +103,7 @@ returned integer is not negative, it holds that \ccVar.%
\ccPrecond $0\leq i\leq$\ccc{ambient_dimension()}.}
\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.}
\ccGlue
\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
\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
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
\ccVar. Returns \ccc{false} otherwise.}
\begin{ccDebug}
\ccHeading{Validity check}
\ccMethod{bool is_valid(bool verbose=false, int level=0) const;}{Performs any
desired test on a full cell. \emph{E.g.}, checks that for each existing vertex,
there is an existing neighbor.}
\ccMethod{bool is_valid(bool verbose=false) const;}{Performs any
desired test on a full cell. \emph{E.g.}, checks that for each
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;}{}
% \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
% 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}
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,
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}.}
\ccFunction{template<class TriangulationDataStructure> ostream& operator<<(ostream & os, const
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}.}
\ccSeeAlso
\ccc{TriangulationDSVertex}\\
\ccc{TriangulationDataStructure}
\ccc{TriangulationDSFace}\\
\ccc{TriangulationDataStructure}\\
\ccc{Triangulation}
\end{ccRefConcept}

View File

@ -5,10 +5,9 @@
The concept \ccRefName\ describes what a vertex is in a model of the concept
\ccc{TriangulationDataStructure}. It sets requirements of combinatorial nature
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
@ -16,14 +15,21 @@ concept.
\ccc{CGAL::Triangulation_vertex<TriangulationTraits, Data, TriangulationDSVertex>}
\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
nested type \ccc{TriangulationDataStructure::Full_cell_handle} of the \ccc{TriangulationDataStructure} in which the
\ccc{TriangulationDSVertex} is defined/used.}
\ccNestedType{template<typename TDS2> Rebind_TDS}{This nested template
class must define a nested type \ccc{Other} which is the rebound vertex
class template, that is: \ccc{Other == TriangulationDSVertex<TDS2>}.}
\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::Vertex}.}
\ccCreation
\ccCreationVariable{v}
@ -36,6 +42,7 @@ full cell to \ccc{c}. \ccPrecond \ccc{c} must not be the default-constructed
\ccc{Full_cell_handle}.}
\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
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
full cell incident to the vertex.}
\begin{ccDebug}
\ccHeading{Validity check}
\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
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
classes.}
\ccMethod{bool is_valid(bool verbose=false) const;}{Performs any
desired test on a vertex. Should check if the incident full cell
actually contains the vertex.
}
\end{ccDebug}
% \ccHeading{Memory management}
@ -64,21 +72,35 @@ classes.}
% full cells. See the documentation of \ccc{Compact_container} for the exact
% 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}
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,
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}.}
\ccFunction{template<class TriangulationDataStructure> ostream& operator<<(ostream & os, const
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}.}
\ccSeeAlso
\ccc{TriangulationDSFullCell}\\
\ccc{TriangulationDataStructure}
\ccc{TriangulationDSFace}\\
\ccc{TriangulationDataStructure}\\
\ccc{Triangulation}
\end{ccRefConcept}

View File

@ -81,7 +81,7 @@ full cell \ccc{c} opposite to its \ccc{i}-th vertex.
\ccThreeToTwo
\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
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
file, the user cannot control it.
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).
\ccSeeAlso
\ccc{TriangulationDSVertex}\\
\ccc{TriangulationDSFullCell}
\ccc{TriangulationDSFullCell}\\
\ccc{TriangulationDSFace}\\
\ccc{Triangulation}
\end{ccRefConcept}

View File

@ -13,8 +13,9 @@ represent a full cell.
We only list below the additional specific requirements of \ccRefName.
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
well as a method for constructing the center of the full cell's circumsphere.
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 full cell's circumsphere.
\ccHasModels
@ -34,6 +35,8 @@ full cell.}
\ccCreationVariable{c}
\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;}
{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;}
{Returns an iterator pointing beyond the last point of the full cell.}
\ccMethod{Point circumcenter() const;}{Returns the center of the sphere
circumscribing the full cell.}
\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, 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

View File

@ -10,24 +10,26 @@ the second template parameter, \ccc{TriangulationDataStructure}.
Inserting a range of points in a triangulation is optimized using
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}.
\ccRefines
\ccc{SpatialSortingTraits_d}
{If range of points are inserted, the
traits must refine \ccc{SpatialSortingTraits_d}, this is not needed
{If a range of points is inserted, the
traits must refine \ccc{SpatialSortingTraits_d}, This is not needed
if the points are inserted one by one.}
\ccTypes
\ccTwo{TriangulationTraits ::Compare_lexicographically_d}{}
\ccNestedType{Point_d}%
{A type representing a point in Euclidean space.}
\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
\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
templated operator\\\ccc{template<typename ForwardIterator> Orientation
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,
end)}.
\ccPrecond \ccc{std::distance(start,end)=D+1}, where
@ -52,24 +54,37 @@ in the range.
\ccPrecond The $k$ points in the range
must be affinely independent.
\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$.
}
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}{
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}{
A construction object that must
provide the templated operator\\\ccc{template<typename ForwardIterator> Flat_orientation_d
operator()(ForwardIterator start, ForwardIterator end)}.\\The operator
return an orientation of the flat spanned by the points in
the range \ccc{R=[start, end)}. \ccPrecond The $k$ points in the range
operator()(ForwardIterator start, ForwardIterator end)}.\\
The flat spanned by the points in
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.
\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$.
}
@ -80,7 +95,7 @@ templated operator\\\ccc{template<typename ForwardIterator> Orientation
operator()(Flat_orientation_d orient,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,
end)}.
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
used to construct \ccc{orient}.
\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$.
}
@ -116,6 +132,7 @@ the same and \ccc{LARGER} otherwise.}
\ccConstructor{TriangulationTraits();}{The default constructor.}
\ccOperations
\ccThree{Construct_flat_orientation_d}{construct_flat_orientation_d_object() const}{}
The following methods permit access to the traits class's predicates:
@ -149,6 +166,7 @@ const;}%
\ccSeeAlso
\ccc{DelaunayTriangulationTraits}
\ccc{Triangulation}
\end{ccRefConcept}

View File

@ -13,13 +13,15 @@ represent a vertex.
We only list below the additional specific requirements of \ccRefName.
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
\ccc{CGAL::Triangulation_vertex<TriangulationTraits, Data, TriangulationDSVertex>}
\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
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}
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);}%
{Inputs the non-combinatorial information given by the vertex, {i.e.},
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
triangulation data structure. It must be a model of the concept
\ccc{TriangulationDSVertex}. The class template \ccRefName\ accepts that no
second parameter be specified. It also accepts the tag \ccc{CGAL::Default} as
\ccc{TriangulationDSVertex}. The class template \ccRefName\ can be
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
\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);}
{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
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.
This method is used by \ccRefName\ccc{::insert_in_hole()}.}
\end{ccAdvanced}
\ccSeeAlso
\ccc{Triangulation_ds_vertex}\\
\ccc{Triangulation_ds_full_cell}\\
\ccc{Triangulation}
\end{ccRefClass}

View File

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

View File

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

View File

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

View File

@ -399,7 +399,7 @@ public:
if( is_infinite(s) )
{
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;
}
return false;

View File

@ -524,7 +524,7 @@ public:
const Face & f)
: f_(f), tds_(tds)
{
dim_ = f.feature_dimension();
dim_ = f.face_dimension();
}
bool operator()(const Facet & facet) const
{
@ -549,7 +549,7 @@ public:
const Face & f)
: f_(f), tds_(tds)
{
dim_ = f.feature_dimension();
dim_ = f.face_dimension();
}
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>
::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()));
std::vector<Full_cell_handle> simps;
// save the Face's vertices:

View File

@ -38,14 +38,14 @@ protected:
public:
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 );
clear();
}
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();
}
@ -54,7 +54,7 @@ public:
: full_cell_(f.full_cell_), indices_(f.indices_)
{}
int feature_dimension() const /* Concept */
int face_dimension() const /* Concept */
{
int i(0);
while( -1 != indices_[i] ) ++i;
@ -68,7 +68,7 @@ public:
int index(const int i) const /* Concept */
{
CGAL_precondition( (0 <= i) && (i <= feature_dimension()) );
CGAL_precondition( (0 <= i) && (i <= face_dimension()) );
return indices_[i];
}