diff --git a/Triangulation/doc/Triangulation/CGAL/Triangulation.h b/Triangulation/doc/Triangulation/CGAL/Triangulation.h
index ff09454570b..9c7bdbce752 100644
--- a/Triangulation/doc/Triangulation/CGAL/Triangulation.h
+++ b/Triangulation/doc/Triangulation/CGAL/Triangulation.h
@@ -4,10 +4,14 @@ namespace CGAL {
/*!
\ingroup PkgTriangulations
+\cgalModifBegin
The class `Triangulation` is used to store and query the full cells and vertices of
-a triangulationin dimension \f$ d\f$. A special vertex, named
+a triangulationin dimension \f$ d\f$(see the
+\ref Chapter_Triangulations "User Manual" for
+a definition of "triangulation"). A special vertex, named
infinite vertex, is used to triangulate the outside of the convex
hull of the points in so called infinite cells.
+\cgalModifEnd
Parameters
--------------
@@ -55,7 +59,7 @@ A point in Euclidean space.
typedef TriangulationTraits::Point_d Point;
/*!
-This indicates whether the dimension of the underlying space is static
+This indicates whether the maximal dimension is static
(i.e.\ if the type of `Maximal_dimension` is `CGAL::Dimension_tag`)
or dynamic (i.e.\ if the type of `Maximal_dimension` is
`CGAL::Dynamic_dimension_tag`).
@@ -542,7 +546,7 @@ to the newly created full cells are output in the `out` output iterator.
interior and not contain any vertex all of whose incident full cells are in
\f$C\f$ . (This implies that `t.current_dimension()`\f$ \geq 2\f$ if
\f$|C|>1\f$ .) The boundary of \f$C\f$ must be a triangulation of the sphere
-\f$ \mathcal S ^k-1\f$.
+\f$ \mathcal S ^d-1\f$.
\cgalAdvancedEnd
*/
template < typename ForwardIterator, typename OutputIterator >
diff --git a/Triangulation/doc/Triangulation/CGAL/Triangulation_data_structure.h b/Triangulation/doc/Triangulation/CGAL/Triangulation_data_structure.h
index a1ae58c3273..7183e779549 100644
--- a/Triangulation/doc/Triangulation/CGAL/Triangulation_data_structure.h
+++ b/Triangulation/doc/Triangulation/CGAL/Triangulation_data_structure.h
@@ -5,16 +5,16 @@ namespace CGAL {
\ingroup PkgTriangulations
This class is used for storing the combinatorial information of a triangulation
-of dimension \f$ k\leq d\f$.
+of dimension \f$ d\leq D\f$ (`D` is the maximal dimension).
Parameters
--------------
`Dimensionality` can be either
-- CGAL::`Dimension_tag` for some integer `d`. This
+
- CGAL::`Dimension_tag` for some integer `D`. This
indicates that the triangulation data structure can store simplices (full cells) of dimension at most
-`d`. The maximum dimension `d` is known by the compiler, which
+`D`. The maximal dimension `D` is known by the compiler, which
triggers some optimizations. Or
- CGAL::`Dynamic_dimension_tag`. In this case, the maximum
@@ -78,16 +78,6 @@ bool is_valid(bool verbose = true) const;
/// \name Types
/// @{
-/*!
-\cgalAdvancedBegin
-A data member of type `Full_cell_data` is stored in every full cell
-(models of the concept `TriangulationDSFullCell`). It is used to mark
-some full cells, during modifications of the triangulation data
-structure.
-\cgalAdvancedEnd
-*/
-typedef Hidden_type Full_cell_data;
-
/// @}
/// \name Vertex insertion
diff --git a/Triangulation/doc/Triangulation/Concepts/DelaunayTriangulationTraits.h b/Triangulation/doc/Triangulation/Concepts/DelaunayTriangulationTraits.h
index 330e180e2d9..e1f74172c59 100644
--- a/Triangulation/doc/Triangulation/Concepts/DelaunayTriangulationTraits.h
+++ b/Triangulation/doc/Triangulation/Concepts/DelaunayTriangulationTraits.h
@@ -36,9 +36,10 @@ defined by the points in range `[start,end)`.
If the simplex is positively
oriented, then the positive side of sphere corresponds geometrically
to its bounded side.
-\pre `std::distance(start,end)=D+1`, where
-`Point_dimension_d(*it)` is \f$ D\f$ for all `it` in
-`[start,end)`. `Point_dimension_d(p)` is also \f$ D\f$.
+\cgalModifBegin
+\pre If `Dimension`=`CGAL::``Dimension_tag`,
+then `std::distance(start,end)=D+1`.
+\cgalModifEnd
The points in range
`[start,end)` must be affinely independent, i.e., the simplex must
not be flat.
@@ -65,12 +66,9 @@ The points in range `[start,end)` and `p` are supposed to belong to the lower di
whose orientation is given by `orient`.
\pre `std::distance(start,end)=k+1` where \f$ k\f$ is the number of
points used to construct `orient`.
-`Point_dimension_d(*it)` is \f$ D\f$ for all `it` in
-`[start,end)`. `Point_dimension_d(p)` is also \f$ D\f$.
The points in range
`[start,end)` must be affinely independent, i.e., the simplex must
-not be flat.
-
+not be flat. `p` must be in the flat generated by this simplex.
*/
typedef Hidden_type In_flat_side_of_oriented_sphere_d;
diff --git a/Triangulation/doc/Triangulation/Concepts/FullCellData.h b/Triangulation/doc/Triangulation/Concepts/FullCellData.h
new file mode 100644
index 00000000000..b43239d84d5
--- /dev/null
+++ b/Triangulation/doc/Triangulation/Concepts/FullCellData.h
@@ -0,0 +1,40 @@
+
+/*!
+\ingroup PkgTriangulationsConcepts
+\cgalConcept
+
+\cgalModifBegin
+The concept `FullCellData` describes the requirements on the type which
+is used to mark some full cells, during modifications of the triangulation data
+structure.
+\cgalModifEnd
+
+\sa `TriangulationDataStructure`
+\sa `TriangulationDSFullCell`
+*/
+
+class FullCellData
+{
+public:
+/*!
+Clear all data.
+*/
+void clear();
+/*!
+Mark the full cell as visited.
+*/
+void mark_visited();
+/*!
+Mark the full cell as not visited.
+*/
+void clear_visited();
+/*!
+Returns `true` if the full cell is not marked as visited, `false` otherwise.
+*/
+bool is_clear() const;
+/*!
+Returns `true` if the full cell is marked as visited, `false` otherwise.
+*/
+bool is_visited() const;
+
+}; /* end FullCellData */
diff --git a/Triangulation/doc/Triangulation/Concepts/TriangulationDSFace.h b/Triangulation/doc/Triangulation/Concepts/TriangulationDSFace.h
index 0f085388034..82b34129bcc 100644
--- a/Triangulation/doc/Triangulation/Concepts/TriangulationDSFace.h
+++ b/Triangulation/doc/Triangulation/Concepts/TriangulationDSFace.h
@@ -31,16 +31,23 @@ public:
/// @{
/*!
-Must be the same as the nested type
-`TriangulationDataStructure::Full_cell_handle` of the `TriangulationDataStructure` in which the `TriangulationDSFace` is
+\cgalModifBegin
+The `Triangulation_data_structure` in which the `TriangulationDSFace` is
defined/used.
+Must be a model of the `TriangulationDataStructure` concept.
+\cgalModifEnd
+*/
+typedef Hidden_type Triangulation_data_structure;
+
+/*!
+Must be the same as the nested type
+`Triangulation_data_structure::Full_cell_handle`.
*/
typedef Hidden_type Full_cell_handle;
/*!
Must be the same as the nested type
-`TriangulationDataStructure::Vertex_handle` of the `TriangulationDataStructure` in which the `TriangulationDSFace` is
-defined/used.
+`Triangulation_data_structure::Vertex_handle`.
*/
typedef Hidden_type Vertex_handle;
diff --git a/Triangulation/doc/Triangulation/Concepts/TriangulationDSFullCell.h b/Triangulation/doc/Triangulation/Concepts/TriangulationDSFullCell.h
index a41f3f3fc74..40efd31add0 100644
--- a/Triangulation/doc/Triangulation/Concepts/TriangulationDSFullCell.h
+++ b/Triangulation/doc/Triangulation/Concepts/TriangulationDSFullCell.h
@@ -34,11 +34,19 @@ public:
/// \name Types
/// @{
+
+/*!
+\cgalModifBegin
+The `Triangulation_data_structure` in which the `TriangulationDSFullCell` is
+defined/used.
+Must be a model of the `TriangulationDataStructure` concept.
+\cgalModifEnd
+*/
+typedef Hidden_type Triangulation_data_structure;
/*!
A handle to a vertex. It must be the same as the
-nested type `TriangulationDataStructure::Vertex_handle` of the `TriangulationDataStructure` in which the
-`TriangulationDSFullCell` is defined/used.
+nested type `TriangulationDataStructure::Vertex_handle`.
*/
typedef Hidden_type Vertex_handle;
@@ -50,8 +58,7 @@ typedef Hidden_type Vertex_handle_iterator;
/*!
A handle to a full cell. It must be the same as the
-nested type `TriangulationDataStructure::Full_cell_handle` of the `TriangulationDataStructure` in which the
-`TriangulationDSFullCell` is defined/used.
+nested type `TriangulationDataStructure::Full_cell_handle`.
*/
typedef Hidden_type Full_cell_handle;
@@ -299,19 +306,23 @@ void * for_compact_container() const;
void * & for_compact_container();
/*!
-Reads (possibly) non-combinatorial information about a full cell from the stream `is`
-into `c`.
-*/
-template
-std::istream& operator>>(std::istream & is, Triangulation_ds_full_cell & c);
-
-/*!
+\cgalModifBegin
Writes (possibly) non-combinatorial information about full cell `c` to the stream
`os`.
+\cgalModifEnd
*/
template
std::ostream& operator<<(std::ostream & os, const Triangulation_ds_full_cell & c);
+/*!
+\cgalModifBegin
+Reads from stream `is` the full cell information written
+by `operator<<`.
+\cgalModifEnd
+*/
+template
+std::istream& operator>>(std::istream & is, Triangulation_ds_full_cell & c);
+
/// @}
}; /* end TriangulationDSFullCell */
diff --git a/Triangulation/doc/Triangulation/Concepts/TriangulationDSVertex.h b/Triangulation/doc/Triangulation/Concepts/TriangulationDSVertex.h
index 69d189f8644..44527e5b34b 100644
--- a/Triangulation/doc/Triangulation/Concepts/TriangulationDSVertex.h
+++ b/Triangulation/doc/Triangulation/Concepts/TriangulationDSVertex.h
@@ -29,11 +29,19 @@ public:
/// \name Types
/// @{
+
+/*!
+\cgalModifBegin
+The `Triangulation_data_structure` in which the `TriangulationDSVertex` is
+defined/used.
+Must be a model of the `TriangulationDataStructure` concept.
+\cgalModifEnd
+*/
+typedef Hidden_type Triangulation_data_structure;
/*!
A handle to a cell. It must be the same as the
-nested type `TriangulationDataStructure::Full_cell_handle` of the `TriangulationDataStructure` in which the
-`TriangulationDSVertex` is defined/used.
+nested type `TriangulationDataStructure::Full_cell_handle`.
*/
typedef Hidden_type Full_cell_handle;
@@ -121,19 +129,22 @@ void * for_compact_container() const;
void * & for_compact_container();
/*!
-Reads (possibly) non-combinatorial information about a vertex from the stream `is`
-into `v`.
-*/
-template
-std::istream& operator>>(std::istream & is, Triangulation_ds_vertex & v);
-
-/*!
+\cgalModifBegin
Writes (possibly) non-combinatorial information about vertex `v` to the stream
`os`.
+\cgalModifEnd
*/
template
std::ostream& operator<<(std::ostream & os, const Triangulation_ds_vertex & v);
+/*!
+\cgalModifBegin
+Reads from stream `is` the vertex information written by `operator<<`.
+\cgalModifEnd
+*/
+template
+std::istream& operator>>(std::istream & is, Triangulation_ds_vertex & v);
+
/// @}
}; /* end TriangulationDSVertex */
diff --git a/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h b/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h
index eacac8f6452..1582778bfd1 100644
--- a/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h
+++ b/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h
@@ -95,6 +95,12 @@ The full cell type. A model of the concept `TriangulationDSFullCell`.
*/
typedef Hidden_type Full_cell;
+/*!
+\cgalModifBegin
+A model of the concept `FullCellData`.
+\cgalModifEnd
+*/
+typedef Hidden_type Full_cell_data;
/*!
The concept `TriangulationDataStructure` also defines a type for
diff --git a/Triangulation/doc/Triangulation/Concepts/TriangulationTraits.h b/Triangulation/doc/Triangulation/Concepts/TriangulationTraits.h
index 1cb5038e90b..582adb3d357 100644
--- a/Triangulation/doc/Triangulation/Concepts/TriangulationTraits.h
+++ b/Triangulation/doc/Triangulation/Concepts/TriangulationTraits.h
@@ -9,14 +9,11 @@ It brings the geometric ingredient to the
definition of a triangulation, while the combinatorial ingredient is brought by
the second template parameter, `TriangulationDataStructure`.
-Inserting a range of points in a triangulation is optimized using
-spatial sorting, thus besides the requirements below,
-a class provided as `TriangulationTraits` should also satisfy the concept
-`SpatialSortingTraits_d`.
-
-\cgalRefines ::SpatialSortingTraits_d If a range of points is inserted, the
-traits must refine `SpatialSortingTraits_d`. This is not needed
-if the points are inserted one by one.
+\cgalModifBegin
+\cgalRefines `SpatialSortingTraits_d` If a range of points is inserted, the
+traits must refine `SpatialSortingTraits_d` (this operation is optimized using
+spatial sorting). This is not required if the points are inserted one by one.
+\cgalModifEnd
\cgalHasModel `CGAL::Cartesian_d`
\cgalHasModel `CGAL::Epick_d` (recommended)
@@ -31,13 +28,13 @@ public:
/// \name Types
/// @{
-/*!
-A type representing the dimension of the underlying space. it can be static
-(`Maximal_dimension`=`CGAL::``Dimension_tag`) or
-dynamic (`Maximal_dimension`=`CGAL::``Dynamic_dimension_tag`).
-This dimension must match the dimension of the predicate
-`Orientation_d` but not necessarily the one of `Point_d`.
-
+/*!
+\cgalModifBegin
+A type representing the dimension of the `Orientation_d` predicate
+(but not necessarily the one of `Point_d`).
+Tt can be static (`Dimension`=`CGAL::``Dimension_tag`) or
+dynamic (`Dimension`=`CGAL::``Dynamic_dimension_tag`).
+\cgalModifEnd
*/
typedef Hidden_type Dimension;
@@ -46,24 +43,16 @@ A type representing a point in Euclidean space.
*/
typedef Hidden_type Point_d;
-/*!
-Functor returning the dimension of a `Point_d`.
-Must provide
-`int operator()(Point_d p)` returning the dimension of \f$ p\f$.
-
-*/
-typedef Hidden_type Point_dimension_d;
-
/*!
A predicate object that must provide the
templated operator
-`template Orientation operator()(ForwardIterator start, ForwardIterator end)`.
-The operator returns
-`CGAL::POSITIVE`, `CGAL::NEGATIVE` or `CGAL::COPLANAR` depending on
-the orientation of the simplex defined by the points in the range `[start, end)`.
-\pre `std::distance(start,end)=D+1`, where
-`Point_dimension_d(*it)` is \f$ D\f$ for all `it` in `[start,end)`.
-
+`template Orientation operator()(ForwardIterator start, ForwardIterator end)`.
+\cgalModifBegin
+The operator returns the orientation of the simplex defined by the points
+in the range `[start, end)`; the value can be
+`CGAL::POSITIVE`, `CGAL::NEGATIVE` or `CGAL::COPLANAR`.
+\pre If `Dimension`=`CGAL::``Dimension_tag`, then `std::distance(start,end)=D+1`.
+\cgalModifEnd
*/
typedef Hidden_type Orientation_d;
@@ -73,11 +62,13 @@ the templated operator
`template bool operator()(ForwardIterator start, ForwardIterator end, const Point_d & p)`.
The operator returns `true` if and only if point `p` is
contained in the affine space spanned by the points in the range `[start, end)`. That affine space is also called the affine hull of the points
-in the range.
-\pre The \f$ k\f$ points in the range
+in the range.
+\cgalModifBegin
+\pre If `Dimension`=`CGAL::``Dimension_tag`,
+then `std::distance(start,end)=D+1`.
+The points in the range
must be affinely independent.
-`Point_dimension_d(*it)` is \f$ D\f$ for all `it` in
-`[start,end)`, for some \f$ D\f$.
+\cgalModifEnd
\f$ 2\leq k\leq D\f$.
*/
@@ -112,11 +103,13 @@ The flat spanned by the points in
the range `R=[start, end)` can be oriented in two different ways,
the operator
returns an object that allow to orient that flat so that `R=[start, end)`
-defines a positive simplex.
-\pre The \f$ k\f$ points in the range
-must be affinely independent.
-`Point_dimension_d(*it)` is \f$ D\f$ for all `it` in `R` for
-some \f$ D\f$.
+defines a positive simplex.
+\cgalModifBegin
+\pre If `Dimension`=`CGAL::``Dimension_tag`,
+then `std::distance(start,end)=D+1`.
+The points in range
+`[start,end)` must be affinely independent.
+\cgalModifEnd
\f$ 2\leq k\leq D\f$.
*/
@@ -124,8 +117,6 @@ typedef Hidden_type Construct_flat_orientation_d;
/*!
-CJTODO: update this?
-
A predicate object that must provide the
templated operator
`template Orientation operator()(Flat_orientation_d orient,ForwardIterator start, ForwardIterator end)`.
@@ -136,11 +127,7 @@ the orientation of the simplex defined by the points in the range `[start, end)`
The points are supposed to belong to the lower dimensional flat
whose orientation is given by `orient`.
\pre `std::distance(start,end)=k` where \f$ k\f$ is the number of
-points
-used to construct `orient`.
-`Point_dimension_d(*it)` is \f$ D\f$ for all `it` in
-`[start,end)` where \f$ D\f$ is the dimension of the points used to
-construct `orient`.
+points used to construct `orient`.
\f$ 2\leq k\leq D\f$.
*/
diff --git a/Triangulation/doc/Triangulation/PackageDescription.txt b/Triangulation/doc/Triangulation/PackageDescription.txt
index 6d88f229dc8..db27dfa2679 100644
--- a/Triangulation/doc/Triangulation/PackageDescription.txt
+++ b/Triangulation/doc/Triangulation/PackageDescription.txt
@@ -73,6 +73,8 @@ following concepts:
`TriangulationDSFace`
+`FullCellData`
+
## Triangulations ##
`TriangulationTraits`
@@ -89,26 +91,26 @@ The latter two concepts are also abbreviated respectively as `TrVertex` and `TrF
## Triangulation data structure ##
-\ref ::CGAL::Triangulation_data_structure
+- `CGAL::Triangulation_data_structure`
-\ref ::CGAL::Triangulation_ds_vertex
+- `CGAL::Triangulation_ds_vertex`
-\ref ::CGAL::Triangulation_ds_full_cell
+- `CGAL::Triangulation_ds_full_cell`
-\ref ::CGAL::Triangulation_face
+- `CGAL::Triangulation_face`
## (Geometric) triangulations ##
-\ref ::CGAL::Triangulation
+- `CGAL::Triangulation`
-\ref ::CGAL::Delaunay_triangulation
+- `CGAL::Delaunay_triangulation`
-\ref ::CGAL::Triangulation_vertex
+- `CGAL::Triangulation_vertex`
-\ref ::CGAL::Triangulation_full_cell
+- `CGAL::Triangulation_full_cell`
## Enums ##
-\ref ::CGAL::Triangulation::Locate_type
+- `CGAL::Triangulation::Locate_type`
*/
diff --git a/Triangulation/include/CGAL/Triangulation_ds_full_cell.h b/Triangulation/include/CGAL/Triangulation_ds_full_cell.h
index 6a116a9d71c..8221bacb620 100644
--- a/Triangulation/include/CGAL/Triangulation_ds_full_cell.h
+++ b/Triangulation/include/CGAL/Triangulation_ds_full_cell.h
@@ -36,6 +36,7 @@ class Triangulation_ds_full_cell
typedef typename TDS::Maximal_dimension Maximal_dimension;
public:
+ typedef typename TDS Triangulation_data_structure;
typedef typename TDS::Face Face;
typedef typename TDS::Vertex_handle Vertex_handle; /* Concept */
typedef typename TDS::Vertex_const_handle Vertex_const_handle;
@@ -287,6 +288,7 @@ class Triangulation_ds_full_cell
{
public:
typedef internal::Triangulation::Dummy_TDS TDS;
+ typedef typename TDS Triangulation_data_structure;
typedef TDS::Vertex_handle Vertex_handle;
typedef TDS::Vertex_const_handle Vertex_const_handle;
typedef TDS::Full_cell_handle Full_cell_handle;
diff --git a/Triangulation/include/CGAL/Triangulation_ds_vertex.h b/Triangulation/include/CGAL/Triangulation_ds_vertex.h
index ad3fb76dda3..3bd78745ff7 100644
--- a/Triangulation/include/CGAL/Triangulation_ds_vertex.h
+++ b/Triangulation/include/CGAL/Triangulation_ds_vertex.h
@@ -33,6 +33,7 @@ class Triangulation_ds_vertex
typedef Triangulation_ds_vertex Self;
public:
+ typedef typename TDS Triangulation_data_structure;
typedef typename TDS::Full_cell_handle Full_cell_handle; /* Concept */
template
@@ -137,9 +138,9 @@ operator<<(std::ostream & os, const Triangulation_ds_vertex & v) /* Concept
template<>
class Triangulation_ds_vertex
{
- typedef internal::Triangulation::Dummy_TDS Triangulation_ds;
public:
- typedef Triangulation_ds::Full_cell_handle Full_cell_handle; /* Concept */
+ typedef internal::Triangulation::Dummy_TDS Triangulation_data_structure;
+ typedef Triangulation_data_structure::Full_cell_handle Full_cell_handle; /* Concept */
template
struct Rebind_TDS /* Concept */
{
diff --git a/Triangulation/include/CGAL/Triangulation_face.h b/Triangulation/include/CGAL/Triangulation_face.h
index 1bbd77919da..d8809e1b7b3 100644
--- a/Triangulation/include/CGAL/Triangulation_face.h
+++ b/Triangulation/include/CGAL/Triangulation_face.h
@@ -28,6 +28,7 @@ class Triangulation_face
{
typedef typename internal::Dimen_plus_one::type Dimen_plus;
public:
+ typedef typename TDS Triangulation_data_structure;
typedef typename TDS::Full_cell_handle Full_cell_handle; /* Concept */
typedef typename TDS::Vertex_handle Vertex_handle; /* Concept */
typedef internal::S_or_D_array Indices;