Properly document SDG storage traits + many other SDG2 doc fixes

This commit is contained in:
Mael Rouxel-Labbé 2020-12-05 15:20:31 +01:00
parent 472dd09a02
commit 74e8414241
19 changed files with 419 additions and 302 deletions

View File

@ -13,18 +13,21 @@ Currently it only supports the insertions of sites.
\tparam St must be a model of `SegmentDelaunayGraphStorageTraits_2`.
By default, the storage traits is instantiated by `Segment_Delaunay_graph_storage_traits_2<Gt>`.
\tparam DS must be a model of `SegmentDelaunayGraphDataStructure_2`.
`DS` defaults to `CGAL::Triangulation_data_structure_2< CGAL::Segment_Delaunay_graph_vertex_base_2<St>, CGAL::Segment_Delaunay_graph_face_base_2<Gt> >`.
Any custom type can be used instead of `Segment_Delaunay_graph_vertex_base_2`
and `Segment_Delaunay_graph_face_base_2`, provided that they are models of the
concepts `SegmentDelaunayGraphVertexBase_2` and `TriangulationFaceBase_2`, respectively.
\tparam DS must be a model of `SegmentDelaunayGraphDataStructure_2` whose vertex and face are
models of the concepts `SegmentDelaunayGraphVertexBase_2` and `TriangulationFaceBase_2`, respectively.
It defaults to:
\code
`CGAL::Triangulation_data_structure_2<
CGAL::Segment_Delaunay_graph_vertex_base_2<St>,
CGAL::Segment_Delaunay_graph_face_base_2<Gt> >`
\endcode
\cgalHeading{Storage}
To avoid redundancy in the storage of points, input points are stored in a container,
and the various types of sites (input points and segments, points of intersection,
subsegments with one or two points of intersection as endpoints) only store handles to the points
in the container.
in the container. See Section \ref Segment_Delaunay_graph_2StronglyIntersecting for more information.
\cgalHeading{Traversal of the Segment Delaunay Graph}
@ -32,45 +35,34 @@ A segment Delaunay graph can be seen as a container of faces and
vertices. Therefore the `Segment_Delaunay_graph_2` class provides several iterators
and circulators that allow to traverse it (completely or partially).
\cgalModels `DelaunayGraph_2`
\sa `DelaunayGraph_2`
\sa `SegmentDelaunayGraphTraits_2`
\sa `SegmentDelaunayGraphDataStructure_2`
\sa `SegmentDelaunayGraphVertexBase_2`
\sa `TriangulationFaceBase_2`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,DS>`
\sa `CGAL::Segment_Delaunay_graph_traits_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_traits_without_intersections_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_without_intersections_2<CK,CM,EK,EM,FK,FM>`
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
\sa `CGAL::Segment_Delaunay_graph_vertex_base_2<Gt,SSTag>`
\sa `CGAL::Triangulation_face_base_2<Gt>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,St,STag,DS>`
*/
template< typename Gt, typename DS >
template< typename Gt, typename St, typename DS >
class Segment_Delaunay_graph_2 {
public:
/// \name Types
/// @{
/*!
A type for the geometric traits.
Type for the geometric traits.
*/
typedef Gt Geom_traits;
/*!
A type for the underlying
data structure.
Type for the storage traits.
*/
typedef St Storage_traits;
/*!
Type for the underlying data structure.
*/
typedef DS Data_structure;
@ -86,26 +78,29 @@ Size type (an unsigned integral type)
typedef typename DS::size_type size_type;
/*!
A type for the
point defined in the geometric traits.
Type for the point defined in the geometric traits.
*/
typedef typename Gt::Point_2 Point_2;
/*!
A type for the segment Delaunay graph site, defined in the geometric
traits.
Type for the segment Delaunay graph site, defined in the geometric traits.
*/
typedef typename Gt::Site_2 Site_2;
/*!
A type for the container of points.
Type for the segment Delaunay storage site, defined in the storage traits.
*/
typedef unspecified_type Point_container;
typedef typename Storage_traits::Storage_site_2 Storage_site_2;
/*!
A handle for points in the point container.
Type for the container of points.
*/
typedef typename Point_container::iterator Point_handle;
typedef typename Storage_traits::Point_container Point_container;
/*!
Handle type for points in the point container.
*/
typedef typename Storage_traits::Point_handle Point_handle;
/// @}
@ -138,67 +133,67 @@ The `Edge(f,i)` is the edge common to faces `f` and
typedef typename DS::Edge Edge;
/*!
A type for a vertex.
Type for a vertex.
*/
typedef typename DS::Vertex Vertex;
/*!
A type for a face.
Type for a face.
*/
typedef typename DS::Face Face;
/*!
A type for a handle to a vertex.
Type for a handle to a vertex.
*/
typedef typename DS::Vertex_handle Vertex_handle;
/*!
A type for a handle to a face.
Type for a handle to a face.
*/
typedef typename DS::Face_handle Face_handle;
/*!
A type for a circulator over vertices incident to a given vertex.
Type for a circulator over vertices incident to a given vertex.
*/
typedef typename DS::Vertex_circulator Vertex_circulator;
/*!
A type for a circulator over faces incident to a given vertex.
Type for a circulator over faces incident to a given vertex.
*/
typedef typename DS::Face_circulator Face_circulator;
/*!
A type for a circulator over edges incident to a given vertex.
Type for a circulator over edges incident to a given vertex.
*/
typedef typename DS::Edge_circulator Edge_circulator;
/*!
A type for an iterator over all vertices.
Type for an iterator over all vertices.
*/
typedef typename DS::Vertex_iterator All_vertices_iterator;
/*!
A type for an iterator over all faces.
Type for an iterator over all faces.
*/
typedef typename DS::Face_iterator All_faces_iterator;
/*!
A type for an iterator over all edges.
Type for an iterator over all edges.
*/
typedef typename DS::Edge_iterator All_edges_iterator;
/*!
A type for an iterator over finite vertices.
Type for an iterator over finite vertices.
*/
typedef unspecified_type Finite_vertices_iterator;
/*!
A type for an iterator over finite faces.
Type for an iterator over finite faces.
*/
typedef unspecified_type Finite_faces_iterator;
/*!
A type for an iterator over finite edges.
Type for an iterator over finite edges.
*/
typedef unspecified_type Finite_edges_iterator;
@ -217,12 +212,12 @@ typedef unspecified_type Finite_edges_iterator;
/// @{
/*!
A type for a bidirectional iterator over all input sites.
Type for a bidirectional iterator over all input sites.
*/
typedef unspecified_type Input_sites_iterator;
/*!
A type for a bidirectional iterator over all output sites (the sites
Type for a bidirectional iterator over all output sites (the sites
in the Delaunay graph).
*/
typedef unspecified_type Output_sites_iterator;
@ -235,8 +230,7 @@ typedef unspecified_type Output_sites_iterator;
/// @{
/*!
Creates the
segment Delaunay graph using `gt` as geometric traits.
Creates the segment Delaunay graph using `gt` as geometric traits.
*/
Segment_Delaunay_graph_2(Gt gt=Gt());
@ -246,8 +240,7 @@ and inserts all sites in the range [`first`, `beyond`).
\pre `Input_iterator` must be a model of `InputIterator`. The value type of `Input_iterator` must be either `Point_2` or `Site_2`.
*/
template< class Input_iterator >
Segment_Delaunay_graph_2(Input_iterator first, Input_iterator beyond,
Gt gt=Gt());
Segment_Delaunay_graph_2(Input_iterator first, Input_iterator beyond, Gt gt = Gt());
/// @}
@ -255,9 +248,30 @@ Gt gt=Gt());
/// @{
/*!
Returns a reference to the segment Delaunay graph traits object.
Returns a reference to the segment Delaunay graph geometric traits object.
*/
Geom_traits geom_traits();
const Geom_traits& geom_traits() const;
/*!
Returns a reference to the segment Delaunay graph storage traits object.
*/
const Storage_traits& storage_traits() const;
/*!
Returns a reference to the point container object.
*/
Point_container point_container();
/*!
Returns a reference to the
segment Delaunay graph data structure object.
*/
Data_structure data_structure();
/*!
Same as `data_structure()`. It has been added for compliance to the `DelaunayGraph_2` concept.
*/
Data_structure tds();
/*!
Returns the dimension of the segment Delaunay graph. The dimension
@ -305,24 +319,6 @@ Returns a vertex distinct from the `infinite_vertex`.
*/
Vertex_handle finite_vertex();
/*!
Returns a reference to the
segment Delaunay graph data structure object.
*/
Data_structure data_structure();
/*!
Same as `data_structure()`. It
has been added for compliance to the `DelaunayGraph_2` concept.
*/
Data_structure tds();
/*!
Returns a reference to
the point container object.
*/
Point_container point_container();
/// @}
/// \name Finite Face, Edge and Vertex Iterators
@ -533,41 +529,38 @@ bool is_infinite(Edge_circulator ec) const;
/// @{
/*!
Inserts the sites in the range
[`first`,`beyond`). The number of additional sites inserted in
the Delaunay graph is returned. `Input_iterator` must be a model of
`InputIterator` and its value type must be
either `Point_2` or `Site_2`.
Iteratively inserts the sites in the range [`first`,`beyond`).
\tparam Input_iterator must be a model of `InputIterator` and its value type must be either `Point_2` or `Site_2`.
\return the number of sites inserted in the Delaunay graph
*/
template< class Input_iterator >
size_type insert(Input_iterator first, Input_iterator beyond);
/*!
Same as the previous method. `Input_iterator` must be a model of
`InputIterator` and its value type must be
either `Point_2` or `Site_2`.
Iteratively inserts the sites in the range [`first`,`beyond`).
\tparam Input_iterator must be a model of `InputIterator` and its value type must be either `Point_2` or `Site_2`.
\return the number of sites inserted in the Delaunay graph
*/
template< class Input_iterator >
size_type insert(Input_iterator first, Input_iterator beyond, Tag_false);
size_type insert(Input_iterator first, Input_iterator beyond, CGAL::Tag_false);
/*!
Decomposes the range [first,beyond) into a range of input points and a range of input segments
that are respectively passed to `insert_segments()` and `insert_points()`.
Non-input sites are first random_shuffled and then inserted one by one.
`Input_iterator` must be a model of `InputIterator` and its value type must be
either `Point_2`, `Segment_2` or `Site_2`.
\return the number of sites inserted in the Delaunay graph
\tparam Input_iterator must be a model of `InputIterator` and its value type must be either `Point_2`, `Segment_2` or `Site_2`.
\return the number of sites inserted in the Delaunay graph
*/
template< class Input_iterator >
size_type insert(Input_iterator first, Input_iterator beyond, Tag_true);
size_type insert(Input_iterator first, Input_iterator beyond, CGAL::Tag_true);
/*!
Inserts the points in the range [first,beyond) as sites.
Note that this function is not guaranteed to insert the points
following the order of `PointInputIterator`, as `spatial_sort()`
is used to improve efficiency.
\return the number of points inserted in the Delaunay graph
\tparam PointIterator must be an input iterator `Point_2` or `Site_2` as value_type.
\return the number of points inserted in the Delaunay graph
*/
template <class PointIterator>
std::size_t insert_points(PointIterator first, PointIterator beyond);
@ -577,8 +570,8 @@ Inserts the segments in the range [first,beyond) as sites.
Note that this function is not guaranteed to insert the segments
following the order of `SegmentIterator`, as `spatial_sort()`
is used to improve efficiency.
\return the number of segments inserted in the Delaunay graph
\tparam SegmentIterator must be an input iterator with `Site_2`, `Segment_2` or `std::pair<Point_2,Point_2>` as value type.
\return the number of segments inserted in the Delaunay graph
*/
template <class SegmentIterator>
std::size_t insert_segments(SegmentIterator first, SegmentIterator beyond);
@ -588,33 +581,30 @@ Same as above except that each segment is given as a pair of indices of the poin
in the range [points_first, points_beyond). The indices must start from 0 to `std::distance(points_first, points_beyond)`
\tparam PointIterator is an input iterator with `Point_2` as value type.
\tparam IndicesIterator is an input iterator with `std::pair<std::size_t, std::size_t>` as value type.
\return the number of segments inserted in the Delaunay graph
*/
template <class PointIterator, class IndicesIterator>
std::size_t insert_segments(PointIterator points_first, PointIterator points_beyond,
IndicesIterator indices_first, IndicesIterator indices_beyond);
/*!
Inserts the
point `p` in the segment Delaunay graph. If `p` has already
been inserted, then the vertex handle of its already inserted copy is
returned. If `p` has not been inserted yet, the vertex handle of
`p` is returned.
Inserts the point `p` in the segment Delaunay graph.
If `p` has already been inserted, then the vertex handle of its already inserted copy is returned.
If `p` has not been inserted yet, the vertex handle of `p` is returned.
*/
Vertex_handle insert(Point_2 p);
/*!
Inserts `p` in the segment Delaunay graph using the site
associated with `vnear` as an estimate for the nearest neighbor
of `p`. The vertex handle returned has the same semantics as
the vertex handle returned by the method
Inserts `p` in the segment Delaunay graph using the site associated with `vnear`
as an estimate for the nearest neighbor of `p`.
The vertex handle returned has the same semantics as the vertex handle returned by the method
`Vertex_handle insert(Point_2 p)`.
*/
Vertex_handle insert(Point_2 p, Vertex_handle vnear);
/*!
Inserts the
closed segment with endpoints `p1` and `p2` in the segment
Delaunay graph. If the segment has already been inserted in the
Inserts the closed segment with endpoints `p1` and `p2` in the segment Delaunay graph.
If the segment has already been inserted in the
Delaunay graph then the vertex handle of its already inserted copy is
returned. If the segment does not intersect any segment in the
existing diagram, the vertex handle corresponding to its
@ -625,37 +615,31 @@ vertex handle to one of its open subsegments is returned.
Vertex_handle insert(Point_2 p1, Point_2 p2);
/*!
Inserts the segment whose endpoints are `p1` and `p2`
in the segment Delaunay graph using the site
associated with `vnear` as an estimate for the nearest neighbor
of `p1`. The vertex handle returned has the same semantics as the
vertex handle returned by the method
Inserts the segment whose endpoints are `p1` and `p2` in the segment Delaunay graph using the site
associated with `vnear` as an estimate for the nearest neighbor of `p1`.
The vertex handle returned has the same semantics as the vertex handle returned by the method
`Vertex_handle insert(Point_2 p1, Point_2 p2)`.
*/
Vertex_handle insert(Point_2 p1, Point_2 p2, Vertex_handle
vnear);
Vertex_handle insert(Point_2 p1, Point_2 p2, Vertex_handle vnear);
/*!
Inserts the site `s` in the
segment Delaunay graph. The vertex handle returned has the same
semantics as the vertex handle returned by the methods
`Vertex_handle insert(Point_2 p)` and `Vertex_handle insert(Point_2 p1, Point_2 p2)`, depending on whether `s`
represents a point or a segment respectively.
Inserts the site `s` in the segment Delaunay graph.
The vertex handle returned has the same semantics as the vertex handle returned by the methods
`Vertex_handle insert(Point_2 p)` and `Vertex_handle insert(Point_2 p1, Point_2 p2)`,
depending on whether `s` represents a point or a segment respectively.
\pre `s.is_input()` must be `true`.
*/
Vertex_handle insert(Site_2 s);
/*!
Inserts `s` in the segment Delaunay graph using the site
associated with `vnear` as an estimate for the nearest neighbor of
`s`, if `s` is a point, or the first endpoint of `s`, if
`s` is a segment. The vertex handle returned has the same
semantics as the vertex handle returned by the method
Inserts `s` in the segment Delaunay graph using the site associated with `vnear`
as an estimate for the nearest neighbor of `s`, if `s` is a point, or the first endpoint of `s`, if
`s` is a segment.
The vertex handle returned has the same semantics as the vertex handle returned by the method
`Vertex_handle insert(Site_2 s)`.
\pre `s.is_input()` must be `true`.
*/
Vertex_handle insert(Site_2 s, Vertex_handle
vnear);
Vertex_handle insert(Site_2 s, Vertex_handle vnear);
/// @}
@ -679,8 +663,7 @@ arbitrarily and one of the nearest neighbors of `p` is
returned. If there are no sites in the segment Delaunay graph
`Vertex_handle()` is returned.
*/
Vertex_handle nearest_neighbor(Point_2 p,
Vertex_handle vnear);
Vertex_handle nearest_neighbor(Point_2 p, Vertex_handle vnear);
/// @}
@ -787,20 +770,19 @@ combinatorial data structure.
void file_output(std::ostream& os);
/*!
Reads the state of the
segment Delaunay graph from an input stream.
Reads the state of the segment Delaunay graph from an input stream.
*/
void file_input(std::istream& is);
/*!
Writes the current state of the segment Delaunay graph to an output stream.
*/
std::ostream& operator<<(std::ostream& os, Segment_Delaunay_graph_2<Gt,DS> sdg);
std::ostream& operator<<(std::ostream& os, const Segment_Delaunay_graph_2<Gt,St,DS>& sdg);
/*!
Reads the state of the segment Delaunay graph from an input stream.
*/
std::istream& operator>>(std::istream& is, Segment_Delaunay_graph_2<Gt,DS> sdg);
std::istream& operator>>(std::istream& is, Segment_Delaunay_graph_2<Gt,St,DS>& sdg);
/// @}
@ -829,13 +811,12 @@ Clears all contents of the segment Delaunay graph.
void clear();
/*!
The segment Delaunay graphs
`other` and `*this` are swapped. For a segment Delaunay graph `sdg`, the operation
The segment Delaunay graphs `other` and `*this` are swapped.
For a segment Delaunay graph `sdg`, the operation
`sdg`.`swap(other)` should be preferred to `sdg``= other` or to `sdg``(other)` if
`other` is deleted afterwards.
*/
void swap(Segment_Delaunay_graph_2<Gt,DS>
other);
void swap(Segment_Delaunay_graph_2<Gt,St,DS>& other);
/// @}

View File

@ -0,0 +1,27 @@
namespace CGAL {
/*!
\ingroup PkgSegmentDelaunayGraph2Ref
\cgalModels `SegmentDelaunayGraphFaceBase_2`
The class `Segment_Delaunay_graph_face_base_2` provides a model for the
`SegmentDelaunayGraphFaceBase_2` concept which is the face
base required by the `SegmentDelaunayGraphDataStructure_2`
concept.
\tparam Gt must be a model of the concept `SegmentDelaunayGraphTraits_2`.
This type must be identical to the template parameter used for `CGAL::Segment_Delaunay_graph_2`.
\tparam Fb is a face base class from which `Segment_Delaunay_graph_face_base_2` derives.
It must be a model of the `TriangulationFaceBase_2` concept.
It has the default value `CGAL::Triangulation_face_base_2<Gt>`.
*/
template< typename Gt, typename Fb >
class Segment_Delaunay_graph_face_base_2 {
public:
}; /* end Segment_Delaunay_graph_face_base_2 */
} /* end namespace CGAL */

View File

@ -8,7 +8,7 @@ The class `Segment_Delaunay_graph_filtered_traits_2` provides a model for the
`SegmentDelaunayGraphTraits_2` concept.
The class `Segment_Delaunay_graph_filtered_traits_2` uses the filtering technique \cgalCite{cgal:bbp-iayed-01}
to achieve traits for the `Segment_Delaunay_graph_2<Gt,DS>`
to achieve traits for the `Segment_Delaunay_graph_2<Gt,St,DS>`
class with efficient and exact predicates given an exact
kernel `EK` and a filtering kernel `FK`. The geometric
constructions associated provided by this class are equivalent
@ -58,12 +58,11 @@ The default values for the template parameters are as follows:
\cgalModels `CopyConstructible`
\cgalModels `Assignable`
\sa `Kernel`
\sa `SegmentDelaunayGraphTraits_2`
\sa `CGAL::Field_tag`
\sa `CGAL::Field_with_sqrt_tag`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,DS>`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,St,STag,DS>`
\sa `CGAL::Segment_Delaunay_graph_traits_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_traits_without_intersections_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_without_intersections_2<CK,CM,EK,EM,FK,FM>`
@ -156,7 +155,7 @@ The class `Segment_Delaunay_graph_filtered_traits_without_intersections_2` provi
`SegmentDelaunayGraphTraits_2` concept.
The class `Segment_Delaunay_graph_filtered_traits_without_intersections_2` uses the filtering technique \cgalCite{cgal:bbp-iayed-01}
to achieve traits for the `Segment_Delaunay_graph_2<Gt,DS>`
to achieve traits for the `Segment_Delaunay_graph_2<Gt,St,DS>`
class with efficient and exact predicates given an exact
kernel `EK` and a filtering kernel `FK`. The geometric
constructions associated provided by this class are equivalent
@ -221,8 +220,8 @@ default value is
\sa `SegmentDelaunayGraphTraits_2`
\sa `CGAL::Euclidean_ring_tag`
\sa `CGAL::Field_with_sqrt_tag`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,DS>`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,St,STag,DS>`
\sa `CGAL::Segment_Delaunay_graph_traits_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_traits_without_intersections_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`

View File

@ -5,8 +5,9 @@ namespace CGAL {
\ingroup PkgSegmentDelaunayGraph2Ref
We provide an alternative to the class
`Segment_Delaunay_graph_2<Gt,DS>` for the incremental
construction of the segment Delaunay graph. The `Segment_Delaunay_graph_hierarchy_2` class
`Segment_Delaunay_graph_2<Gt,St,DS>` for the incremental
construction of the segment Delaunay graph.
The `Segment_Delaunay_graph_hierarchy_2` class
maintains a hierarchy of Delaunay graphs. There are two possibilities
as to how this hierarchy is constructed.
@ -21,44 +22,49 @@ In the second case the upper levels of the hierarchy contains not only
points but also segments. A site that is in level \f$ i\f$, is in level
\f$ i+1\f$ with probability \f$ 1/\beta\f$ where \f$ \beta > 1\f$ is some constant.
The difference between the `Segment_Delaunay_graph_2<Gt,DS>`
The difference between the `Segment_Delaunay_graph_2<Gt,St,DS>`
class and the `Segment_Delaunay_graph_hierarchy_2` class (both versions of it) is on how the
nearest neighbor location is done. Given a point \f$ p\f$ the location is
done as follows: at the top most level we find the nearest neighbor of
\f$ p\f$ as in the `Segment_Delaunay_graph_2<Gt,DS>` class. At
\f$ p\f$ as in the `Segment_Delaunay_graph_2<Gt,St,DS>` class. At
every subsequent level \f$ i\f$ we use the nearest neighbor found at level
\f$ i+1\f$ to find the nearest neighbor at level \f$ i\f$. This is a variant of
the corresponding hierarchy for points found in \cgalCite{cgal:d-dh-02}. The
details are described in \cgalCite{cgal:k-reisv-04}.
The class has three template parameters. The first and third
have essentially the same semantics as in the
`Segment_Delaunay_graph_2<Gt,DS>` class.
The class has four template parameters. The first and fourth
have essentially the same semantics as in the `Segment_Delaunay_graph_2<Gt,St,DS>` class.
\tparam Gt must be a model of the
`SegmentDelaunayGraphTraits_2` concept.
\tparam STag The second template
\tparam St must be a model of `SegmentDelaunayGraphStorageTraits_2`.
By default, the storage traits is instantiated by `Segment_Delaunay_graph_storage_traits_2<Gt>`.
\tparam STag The third template
parameter controls whether or not segments are added in the upper
levels of the hierarchy. It's possible values are `Tag_true`
and `Tag_false`. If it is set to `Tag_true`,
segments are also inserted in the upper levels of the hierarchy. The
value `Tag_false` indicates that only points are to be
inserted in the upper levels of the hierarchy. The default value for
the second template parameter is `Tag_false`.
the third template parameter is `Tag_false`.
\tparam DS must be a model of the
`SegmentDelaunayGraphDataStructure_2` concept. However, the
vertex base class that is to be used in the segment Delaunay graph
data structure must be a model of the
`SegmentDelaunayGraphHierarchyVertexBase_2`
concept. The third template parameter defaults to
`Triangulation_data_structure_2< Segment_Delaunay_graph_hierarchy_vertex_base_2< Segment_Delaunay_graph_vertex_base_2<Gt> >, Triangulation_face_base_2<Gt> >`.
concept. The fourth template parameter defaults to:
\code
`CGAL::Triangulation_data_structure_2<
CGAL::Segment_Delaunay_graph_hierarchy_vertex_base_2<
CGAL::Segment_Delaunay_graph_vertex_base_2<St>,
CGAL::Segment_Delaunay_graph_face_base_2<Gt> >`
\endcode
The `Segment_Delaunay_graph_hierarchy_2` class derives publicly from the
`Segment_Delaunay_graph_2<Gt,DS>` class. The interface is
`Segment_Delaunay_graph_2<Gt,St,DS>` class. The interface is
the same with its base class. In the sequel only additional types
and methods defined are documented.
@ -66,10 +72,7 @@ and methods defined are documented.
\cgalModels `CopyConstructible`
\cgalModels `Assignable`
\sa `SegmentDelaunayGraphDataStructure_2`
\sa `SegmentDelaunayGraphTraits_2`
\sa `SegmentDelaunayGraphHierarchyVertexBase_2`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,DS>`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>`
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
\sa `CGAL::Segment_Delaunay_graph_traits_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_traits_without_intersections_2<K,MTag>`
@ -78,14 +81,15 @@ and methods defined are documented.
\sa `CGAL::Segment_Delaunay_graph_hierarchy_vertex_base_2<Vbb>`
*/
template< typename Gt, typename STag, typename DS >
class Segment_Delaunay_graph_hierarchy_2 : public CGAL::Segment_Delaunay_graph_2<Gt,DS> {
template< typename Gt, typename St, typename STag, typename DS >
class Segment_Delaunay_graph_hierarchy_2
: public CGAL::Segment_Delaunay_graph_2<Gt,St,DS> {
public:
/// \name Types
/// `Segment_Delaunay_graph_hierarchy_2` introduces the following
/// types in addition to those introduced by its base class
/// `Segment_Delaunay_graph_2<Gt,DS>`.
/// `Segment_Delaunay_graph_2<Gt,St,DS>`.
/// @{
/*!
@ -97,7 +101,7 @@ typedef STag Segments_in_hierarchy_tag;
/*!
A type for the base class.
*/
typedef CGAL::Segment_Delaunay_graph_2<Gt,DS> Base;
typedef CGAL::Segment_Delaunay_graph_2<Gt,St,DS> Base;
/// @}
@ -110,8 +114,7 @@ typedef CGAL::Segment_Delaunay_graph_2<Gt,DS> Base;
Creates a hierarchy of segment Delaunay graphs using
`gt` as geometric traits.
*/
Segment_Delaunay_graph_hierarchy_2(Gt
gt=Gt());
Segment_Delaunay_graph_hierarchy_2(Gt gt=Gt());
/*!
Creates a segment Delaunay graph hierarchy using
@ -121,9 +124,7 @@ model of `InputIterator`. The value type of `Input_iterator`
must be either `Point_2` or `Site_2`.
*/
template< class Input_iterator >
Segment_Delaunay_graph_hierarchy_2<Gt,STag,DS>(Input_iterator
first, Input_iterator beyond, Gt gt=Gt());
Segment_Delaunay_graph_hierarchy_2(Input_iterator first, Input_iterator beyond, Gt gt=Gt());
/// @}
@ -136,13 +137,13 @@ written to the stream (represented through appropriate input sites),
as well as the underlying combinatorial hierarchical data structure.
\relates Segment_Delaunay_graph_hierarchy_2
*/
std::ostream& operator<<(std::ostream& os, Segment_Delaunay_graph_hierarchy_2<Gt,STag,DS> svdh);
std::ostream& operator<<(std::ostream& os, const Segment_Delaunay_graph_hierarchy_2<Gt,St,STag,DS>& svdh);
/*!
Reads the state of the segment Delaunay graph hierarchy from an
input stream.
\relates Segment_Delaunay_graph_hierarchy_2
*/
std::istream& operator>>(std::istream& is, Segment_Delaunay_graph_hierarchy_2<Gt,STag,DS> svdh);
std::istream& operator>>(std::istream& is, const Segment_Delaunay_graph_hierarchy_2<Gt,St,STag,DS>& svdh);
} /* end namespace CGAL */

View File

@ -7,7 +7,7 @@ namespace CGAL {
The class `Segment_Delaunay_graph_hierarchy_vertex_base_2` provides a model for the
`SegmentDelaunayGraphHierarchyVertexBase_2` concept, which is the
vertex base required by the
`Segment_Delaunay_graph_hierarchy_2<Gt,DS>` class.
`Segment_Delaunay_graph_hierarchy_2<Gt,St,STag,DS>` class.
\tparam Vbb must be a model of the `SegmentDelaunayGraphVertexBase_2` concept.
@ -16,9 +16,9 @@ vertex base required by the
\sa `SegmentDelaunayGraphVertexBase_2`
\sa `SegmentDelaunayGraphHierarchyVertexBase_2`
\sa `SegmentDelaunayGraphDataStructure_2`
\sa `CGAL::Segment_Delaunay_graph_vertex_base_2<Gt,SSTag>`
\sa `CGAL::Segment_Delaunay_graph_vertex_base_2<St,Vb>`
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,St,STag,DS>`
*/
template< typename Vbb >

View File

@ -7,20 +7,13 @@ namespace CGAL {
The class `Segment_Delaunay_graph_storage_site_2` is a model for the concept
`SegmentDelaunayGraphStorageSite_2`.
\tparam Gt must be a model of the `SegmentDelaunayGraphTraits_2` concept.
\tparam Gt must be a model of the `SegmentDelaunayGraphStorageTraits_2` concept.
\cgalModels `SegmentDelaunayGraphStorageSite_2`
\sa `SegmentDelaunayGraphSite_2`
\sa `SegmentDelaunayGraphTraits_2`
\sa `CGAL::Segment_Delaunay_graph_site_2<K>`
\sa `CGAL::Segment_Delaunay_graph_traits_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_traits_without_intersections_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_without_intersections_2<CK,CM,EK,EM,FK,FM>`
*/
template< typename Gt >
template< typename St >
class Segment_Delaunay_graph_storage_site_2 {
public:
@ -31,9 +24,9 @@ public:
/// @{
/*!
A type for the template parameter `Gt`.
A type for the template parameter `St`.
*/
typedef Gt Geom_traits;
typedef St Storage_traits;
/// @}

View File

@ -0,0 +1,34 @@
namespace CGAL {
/*!
\ingroup PkgSegmentDelaunayGraph2Ref
The class `Segment_Delaunay_graph_storage_traits_2` provides a model for the
`SegmentDelaunayGraphStorageTraits_2` concept.
To avoid redundancy in the storage of points, the input points of a segment Delaunay graph
are stored in a container, and the various types of sites (input points and segments,
points of intersection, subsegments with one or two points of intersection as endpoints)
only store handles to the points in the container.
See section \ref Segment_Delaunay_graph_2StronglyIntersecting for more information.
\tparam Gt must be a model of the concept `SegmentDelaunayGraphTraits_2`.
\cgalModels `SegmentDelaunayGraphStorageTraits_2`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,St,STag,DS>`
\sa `CGAL::Segment_Delaunay_graph_traits_without_intersections_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_without_intersections_2<CK,CM,EK,EM,FK,FM>`
*/
template<class Gt>
class Segment_Delaunay_graph_storage_traits_2
{
public:
/*!
*/
typedef unspecified_type Storage_site_2;
};
} //namespace CGAL

View File

@ -28,8 +28,8 @@ part).
\sa `SegmentDelaunayGraphTraits_2`
\sa `CGAL::Field_tag`
\sa `CGAL::Field_with_sqrt_tag`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,DS>`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,St,STag,DS>`
\sa `CGAL::Segment_Delaunay_graph_traits_without_intersections_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_without_intersections_2<CK,CM,EK,EM,FK,FM>`
@ -101,8 +101,8 @@ part).
\sa `SegmentDelaunayGraphTraits_2`
\sa `CGAL::Euclidean_ring_tag`
\sa `CGAL::Field_with_sqrt_tag`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,DS>`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,St,STag,DS>`
\sa `CGAL::Segment_Delaunay_graph_traits_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_without_intersections_2<CK,CM,EK,EM,FK,FM>`

View File

@ -4,33 +4,23 @@ namespace CGAL {
/*!
\ingroup PkgSegmentDelaunayGraph2Ref
\cgalModels `SegmentDelaunayGraphVertexBase_2`
The class `Segment_Delaunay_graph_vertex_base_2` provides a model for the
`SegmentDelaunayGraphVertexBase_2` concept which is the vertex
base required by the `SegmentDelaunayGraphDataStructure_2`
concept.
\tparam Gt must be a model of the concept `SegmentDelaunayGraphTraits_2`.
\tparam SSTag indicates whether
or not to use the simple storage site that does not support
intersecting segments, or the full storage site, that supports
intersecting segments. The possible values are `Tag_true`
and `Tag_false`. `Tag_true` indicates that the
full storage site is to be used, whereas `Tag_false`
indicates that the simple storage site is to be used.
\tparam St must be a model of the concept `SegmentDelaunayGraphStorageTraits_2`.
This type must be template parameter used for `CGAL::Segment_Delaunay_graph_2`.
\cgalModels `SegmentDelaunayGraphVertexBase_2`
\sa `SegmentDelaunayGraphVertexBase_2`
\sa `SegmentDelaunayGraphDataStructure_2`
\sa `SegmentDelaunayGraphTraits_2`
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
\sa `CGAL::Segment_Delaunay_graph_traits_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_traits_without_intersections_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_without_intersections_2<CK,CM,EK,EM,FK,FM>`
\tparam Vb is a vertex base class from which `Segment_Delaunay_graph_vertex_base_2` derives.
It must be a model of the `TriangulationVertexBase_2` concept.
It has the default value `CGAL::Triangulation_vertex_base_2<St::Geom_traits>`.
\sa `CGAL::Segment_Delaunay_graph_hierarchy_vertex_base_2<Vb>`
*/
template< typename Gt, typename SSTag >
template< typename St, typename Vb >
class Segment_Delaunay_graph_vertex_base_2 {
public:

View File

@ -0,0 +1,22 @@
/*!
\ingroup PkgSegmentDelaunayGraph2Concepts
\cgalConcept
The concept `SegmentDelaunayGraphFaceBase_2` describes the
requirements for the face base class of the
`SegmentDelaunayGraphDataStructure_2` concept.
\cgalRefines `TriangulationFaceBase_2`
\cgalHasModel `CGAL::Segment_Delaunay_graph_face_base_2<Gt>`
\sa `SegmentDelaunayGraphDataStructure_2`
\sa `SegmentDelaunayGraphTraits_2`
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
*/
class SegmentDelaunayGraphFaceBase_2 {
public:
}; /* end SegmentDelaunayGraphFaceBase_2 */

View File

@ -26,13 +26,13 @@ The `SegmentDelaunayGraphHierarchyVertexBase_2` concept does not
introduce any constructors in addition to those of the
`SegmentDelaunayGraphVertexBase_2` concept.
\cgalHasModel CGAL::Segment_Delaunay_graph_hierarchy_vertex_base_2<CGAL::Segment_Delaunay_graph_vertex_base_2<Gt,SSTag> >
\cgalHasModel CGAL::Segment_Delaunay_graph_hierarchy_vertex_base_2<CGAL::Segment_Delaunay_graph_vertex_base_2<St> >
\sa `SegmentDelaunayGraphDataStructure_2`
\sa `SegmentDelaunayGraphVertexBase_2`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,St,SSTag,DS>`
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
\sa `CGAL::Segment_Delaunay_graph_vertex_base_2<Gt,SSTag>`
\sa `CGAL::Segment_Delaunay_graph_vertex_base_2<St,Vb>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_vertex_base_2<Vbb>`
*/

View File

@ -51,7 +51,7 @@ typedef unspecified_type RT;
/// \name Creation
/// In addition to the default and copy constructors the following
/// static methods are available for constructing sites:
/// static methods must be available for constructing sites:
/// @{
/*!

View File

@ -0,0 +1,92 @@
/*!
\ingroup PkgSegmentDelaunayGraph2Concepts
\cgalConcept
The concept `SegmentDelaunayGraphStorageTraits_2` provides the
requirements for the storage traits of a segment Delaunay graph.
To avoid redundancy in the storage of points, the input points of a segment Delaunay graph
are stored in a container, and the various types of sites (input points and segments,
points of intersection, subsegments with one or two points of intersection as endpoints)
only store handles to the points in the container.
See section \ref Segment_Delaunay_graph_2StronglyIntersecting for more information.
\cgalRefines `DefaultConstructible`
\cgalRefines `CopyConstructible`
\cgalRefines `Assignable`
\cgalHasModel `CGAL::Segment_Delaunay_graph_storage_traits_2<K>`
\sa `SegmentDelaunayGraphTraits_2`
*/
class SegmentDelaunayGraphStorageTraits_2 {
public:
/// \name Types
/// @{
/*!
The geometric traits type. It must be a model of `SegmentDelaunayGraphTraits_2`.
*/
typedef unspecified_type Geom_traits;
/*!
A container of unique points, used to associate a unique handle to each
unique input geometric position.
*/
typedef std::set<typename Geom_traits::Point_2> Point_container;
/*!
*/
typedef Point_container::iterator Point_handle;
/*!
*/
typedef Point_container::const_iterator const_Point_handle;
/*!
Type for the storage site. It must be a model of `SegmentDelaunayGraphStorageSite_2`.
*/
typedef unspecified_type Storage_site_2;
/*!
Type of the storage site construction functor.
*/
typedef CGAL::SegmentDelaunayGraph_2::Construct_storage_site_2<Self> Construct_storage_site_2;
/// @}
/// \name Creation
/// @{
/*!
Constructor.
*/
SegmentDelaunayGraphStorageTraits_2(const Geom_traits& gt = Geom_traits());
/// @}
/// \name Access Functions
/// @{
/*!
returns the geometric traits.
*/
const Geom_traits& geom_traits() const;
/// @}
/// \name Constructions
/// @{
/*!
returns a functor of type `Construct_storage_site_2`.
*/
Construct_storage_site_2 construct_storage_site_2_object() const
/// @}
}; /* end SegmentDelaunayGraphStorageTraits_2 */

View File

@ -1,14 +1,15 @@
/*!
\ingroup PkgSegmentDelaunayGraph2Concepts
\cgalConcept
\cgalRefines `TriangulationTraits_2`
The concept `SegmentDelaunayGraphTraits_2` provides the traits
requirements for the `CGAL::Segment_Delaunay_graph_2<Gt,DS>` and
`CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,DS>` classes. In
particular, it provides a type `Site_2`, which must be a model of
requirements for the `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>` and
`CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,St,STag,DS>` classes.
In particular, it provides a type `Site_2`, which must be a model of
the concept `SegmentDelaunayGraphSite_2`. It also provides
constructions for sites and several function object
types for the predicates.
@ -19,8 +20,8 @@ types for the predicates.
\cgalHasModel `CGAL::Segment_Delaunay_graph_filtered_traits_without_intersections_2<CK,CM,EK,EM,FK,FM>`
\sa `SegmentDelaunayGraphSite_2`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,DS>`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,St,STag,DS>`
\sa `CGAL::Segment_Delaunay_graph_traits_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_traits_without_intersections_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`

View File

@ -11,19 +11,15 @@ requirements for the vertex base class of the
site of the segment Delaunay graph and provides access to one of its
incident faces through a `Face_handle`.
\cgalHasModel `CGAL::Segment_Delaunay_graph_vertex_base_2<Gt>`
\cgalHasModel `CGAL::Segment_Delaunay_graph_vertex_base_2<St>`
\sa `SegmentDelaunayGraphDataStructure_2`
\sa `SegmentDelaunayGraphTraits_2`
\sa `SegmentDelaunayGraphSite_2`
\sa `SegmentDelaunayGraphStorageSite_2`
\sa `CGAL::Segment_Delaunay_graph_vertex_base_2<Gt>`
\sa `CGAL::Segment_Delaunay_graph_site_2<K>`
\sa `CGAL::Segment_Delaunay_graph_storage_site_2<Gt,SSTag>`
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
*/
class SegmentDelaunayGraphVertexBase_2 {
public:
@ -31,46 +27,40 @@ public:
/// @{
/*!
A type for the geometric traits that defines
the site. \pre The type `Geom_traits` must define the type `Site_2`.
A type for the geometric traits that defines the site.
\pre The type `Geom_traits` must define the type `Site_2`.
*/
typedef unspecified_type Geom_traits;
/*!
A type for the site. This type must coincide
with the type `Geom_traits::Site_2`.
A type for the site. This type must coincide with the type `Geom_traits::Site_2`.
*/
typedef unspecified_type Site_2;
/*!
A type that indicates what kind of
storage type to use. `Storage_site_tag` must either be
`CGAL::Tag_true` or `CGAL::Tag_false`.
A type that indicates what kind of storage type to use.
`Storage_site_tag` must either be `CGAL::Tag_true` or `CGAL::Tag_false`.
*/
typedef unspecified_type Storage_site_tag;
/*!
A type for the internal representation
of sites. This type must satisfy the requirements of the concept
`SegmentDelaunayGraphStorageSite_2`.
A type for the internal representation of sites.
This type must satisfy the requirements of the concept `SegmentDelaunayGraphStorageSite_2`.
*/
typedef unspecified_type Storage_site_2;
/*!
A type for the
underlying data structure, to which the vertex belongs to.
A type for the underlying data structure, to which the vertex belongs to.
*/
typedef unspecified_type Data_structure;
/*!
A type for the vertex handle of the
segment Delaunay graph data structure.
A type for the vertex handle of the segment Delaunay graph data structure.
*/
typedef unspecified_type Vertex_handle;
/*!
A type for the face handle of the
segment Delaunay graph data structure.
A type for the face handle of the segment Delaunay graph data structure.
*/
typedef unspecified_type Face_handle;
@ -82,18 +72,15 @@ typedef unspecified_type Face_handle;
/// @{
/*!
Constructs a vertex associated with the site represented by the
storage site `ss`.
Constructs a vertex associated with the site represented by the storage site `ss`.
*/
SegmentDelaunayGraphVertexBase_2(Storage_site_2 ss);
SegmentDelaunayGraphVertexBase_2(const Storage_site_2& ss);
/*!
Constructs a vertex associated with
the site represented by the storage site `ss`,
Constructs a vertex associated with the site represented by the storage site `ss`,
and pointing to the face associated with the face handle `f`.
*/
SegmentDelaunayGraphVertexBase_2(Storage_site_2 ss,
Face_handle f);
SegmentDelaunayGraphVertexBase_2(const Storage_site_2& ss, Face_handle f);
/// @}
@ -103,7 +90,7 @@ Face_handle f);
/*!
Returns the storage site representing the site.
*/
Storage_site_2 storage_site();
const Storage_site_2& storage_site();
/*!
Returns the site.
@ -123,7 +110,7 @@ Face_handle face();
/*!
Sets the storage site.
*/
void set_site(Storage_site_2 ss);
void set_site(const Storage_site_2& ss);
/*!
Sets the incident face.

View File

@ -20,7 +20,7 @@
\cgalPkgShortInfoEnd
\cgalPkgDescriptionEnd
\cgal provides the class `CGAL::Segment_Delaunay_graph_2<Gt,DS>` for
\cgal provides the class `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>` for
computing the 2D Delaunay graph of segments and points. The two
template parameters must be models of the
`SegmentDelaunayGraphTraits_2` and
@ -44,6 +44,7 @@ the class
- `SegmentDelaunayGraphSite_2`
- `SegmentDelaunayGraphStorageSite_2`
- `SegmentDelaunayGraphStorageTraits_2`
- `SegmentDelaunayGraphDataStructure_2`
- `SegmentDelaunayGraphVertexBase_2`
- `SegmentDelaunayGraphTraits_2`
@ -51,15 +52,17 @@ the class
\cgalCRPSection{Classes}
- `CGAL::Segment_Delaunay_graph_2<Gt,DS>`
- `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>`
- `CGAL::Segment_Delaunay_graph_site_2<K>`
- `CGAL::Segment_Delaunay_graph_storage_site_2<Gt>`
- `CGAL::Segment_Delaunay_graph_vertex_base_2<Gt,SSTag>`
- `CGAL::Segment_Delaunay_graph_storage_traits_2<Gt>`
- `CGAL::Segment_Delaunay_graph_vertex_base_2<St,Vb>`
- `CGAL::Segment_Delaunay_graph_face_base_2<Gt,Fb>`
- `CGAL::Segment_Delaunay_graph_traits_2<K,MTag>`
- `CGAL::Segment_Delaunay_graph_traits_without_intersections_2<K,MTag>`
- `CGAL::Segment_Delaunay_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>`
- `CGAL::Segment_Delaunay_graph_filtered_traits_without_intersections_2<CK,CM,EK,EM,FK,FM>`
- `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,DS>`
- `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,St,STag,DS>`
- `CGAL::Segment_Delaunay_graph_hierarchy_vertex_base_2<Vbb>`
*/

View File

@ -294,8 +294,8 @@ points of intersection. To avoid this redundancy, input points are
stored in a container, and the various types of sites (input points
and segments, points of intersection, subsegments with one or two
points of intersection as endpoints) only store handles to the points
in the container. This is achieved by the
`Segment_Delaunay_graph_storage_site_2<Gt>` class which is a
in the container. This is achieved with the
`Segment_Delaunay_graph_storage_site_2<Gt>` class, which is a
model of the corresponding concept:
`SegmentDelaunayGraphStorageSite_2`. This concept enforces a site
to be represented by up to 6 handles (which are very lightweight
@ -449,9 +449,8 @@ class is used, the possible values are `Field_with_sqrt_tag` and
\section secsdg2hierarchy The Segment Delaunay Graph Hierarchy
The
`Segment_Delaunay_graph_hierarchy_2<SegmentDelaunayGraphTraits_2, SSTag, SegmentDelaunayGraphDataStructure_2>` class is the analogue
of the `Triangulation_hierarchy_2` or the
The `Segment_Delaunay_graph_hierarchy_2<SegmentDelaunayGraphTraits_2, SegmentDelaunayGraphStorageTraits_2, SSTag, SegmentDelaunayGraphDataStructure_2>`
class is the analogue of the `Triangulation_hierarchy_2` or the
`Apollonius_graph_hierarchy_2` classes, applied to the segment
Delaunay graph. It consists of a hierarchy of
segment Delaunay graphs constructed in a manner analogous to the
@ -480,9 +479,9 @@ Delaunay graphs. If `SSTag` is set to `true`, we have segment
Delaunay graphs at all levels of the hierarchy.
The class
`Segment_Delaunay_graph_hierarchy_2<SegmentDelaunayGraphTraits_2, SSTag, SegmentDelaunayGraphDataStructure_2>`
`Segment_Delaunay_graph_hierarchy_2<SegmentDelaunayGraphTraits_2, SegmentDelaunayGraphStorageTraits_2, SSTag, SegmentDelaunayGraphDataStructure_2>`
has exactly the same interface and functionality as the
`Segment_Delaunay_graph_2<SegmentDelaunayGraphTraits_2,SegmentDelaunayGraphDataStructure_2>`
`Segment_Delaunay_graph_2<SegmentDelaunayGraphTraits_2,SegmentDelaunayGraphStorageTraits_2,SegmentDelaunayGraphDataStructure_2>`
class. Using the segment Delaunay graph hierarchy involves an
additional cost in space and time for maintaining the hierarchy. Our
experiments have shown that it usually pays off to use the hierarchy

View File

@ -22,15 +22,15 @@
#include <CGAL/Segment_Delaunay_graph_2/basic.h>
#include <CGAL/Triangulation_ds_vertex_base_2.h>
#include <CGAL/Triangulation_vertex_base_2.h>
#include <CGAL/Segment_Delaunay_graph_storage_site_2.h>
#include <CGAL/Segment_Delaunay_graph_simple_storage_site_2.h>
namespace CGAL {
template < class STraits, class Vb = Triangulation_ds_vertex_base_2<> >
template < class STraits,
class Vb = Triangulation_vertex_base_2<
typename STraits::Geom_traits> >
class Segment_Delaunay_graph_vertex_base_2
: public Vb
{

View File

@ -40,8 +40,6 @@ guarantee the combinatorial validity of the resulting data structure.
template< typename VertexBase, typename FaceBase >
class Triangulation_data_structure_2 {
public:
/// \name Types
/// @{
@ -60,10 +58,9 @@ public:
/// @}
/// \name
/// \name Ranges
/// \cgalAdvancedBegin
/// In addition to the interface documented in the concept,
/// the class offers the following types.
/// In addition to the interface documented in the concept, the class offers the following types.
/// \cgalAdvancedEnd
/// @{
@ -87,24 +84,24 @@ typedef Compact_container<Face> Face_range;
/// @{
/*!
Returns a reference to the container of faces.
returns a reference to the container of faces.
*/
Face_range & faces() const;
Face_range& faces() const;
/*!
Returns a reference to the container of faces.
returns a reference to the container of faces.
*/
Face_range & faces();
Face_range& faces();
/*!
Returns a reference to the container of vertices.
returns a reference to the container of vertices.
*/
Vertex_range & vertices() const;
Vertex_range& vertices() const;
/*!
Returns a reference to the container of vertices.
returns a reference to the container of vertices.
*/
Vertex_range & vertices();
Vertex_range& vertices();
/// @}
@ -112,67 +109,58 @@ Vertex_range & vertices();
/// @{
/*!
Joins
the vertices that are endpoints of the edge `(f,i)`, and returns
a vertex handle to common vertex (see
Fig.\ \ref figtdssplitjoin).
joins the vertices that are endpoints of the edge `(f,i)`, and returns a vertex handle to common vertex
(see Fig.\ \ref figtdssplitjoin).
\pre `f` must be different from `Face_handle()` and `i` must be `0`, `1` or `2`.
*/
Vertex_handle join_vertices(Face_handle f, int i);
/*!
Joins
the vertices that are endpoints of the edge `e`, and returns
a vertex handle to common vertex.
joins the vertices that are endpoints of the edge `e`, and returns a vertex handle to common vertex.
*/
Vertex_handle join_vertices(Edge e);
/*!
Joins
the vertices that are endpoints of the edge `*eit`, and returns
a vertex handle to common vertex.
joins the vertices that are endpoints of the edge `*eit`, and returns a vertex handle to common vertex.
*/
Vertex_handle join_vertices(Edge_iterator eit);
/*!
Joins
the vertices that are endpoints of the edge `*ec`, and returns
a vertex handle to common vertex.
joins the vertices that are endpoints of the edge `*ec`, and returns a vertex handle to common vertex.
*/
Vertex_handle join_vertices(Edges_circulator ec);
/*!
Splits the vertex `v` into two vertices `v1` and
`v2`. The common faces `f` and `g` of `v1` and
`v2` are created after (in the counter-clockwise sense) the
faces `f1` and `f2`. The 4-tuple `(v1,v2,f,g)` is
returned (see Fig. \ref figtdssplitjoin).
splits the vertex `v` into two vertices `v1` and `v2`.
The common faces `f` and `g` of `v1` and `v2` are created after (in the counter-clockwise sense) the
faces `f1` and `f2`. The 4-tuple `(v1,v2,f,g)` is returned (see Fig. \ref figtdssplitjoin).
\pre `dimension()` must be equal to `2`, `f1` and `f2` must be different from `Face_handle()` and `v` must be a vertex of both `f1` and `f2`.
*/
boost::tuples::tuple<Vertex_handle, Vertex_handle, Face_handle,
Face_handle>
split_vertex(Vertex_handle v, Face_handle f1, Face_handle
f2);
boost::tuples::tuple<Vertex_handle, Vertex_handle, Face_handle, Face_handle>
split_vertex(Vertex_handle v, Face_handle f1, Face_handle f2);
/*!
Inserts
a degree two vertex and two faces adjacent to it that have two common
edges. The edge defined by the face handle `f` and the integer
`i` is duplicated. It returns a handle to the vertex created
(see Fig. \ref figtdsirdeg2).
inserts a degree two vertex and two faces adjacent to it that have two common edges.
The edge defined by the face handle `f` and the integer `i` is duplicated. It returns a handle
to the vertex created (see Fig. \ref figtdsirdeg2).
*/
Vertex_handle insert_degree_2(Face_handle f, int i);
Vertex_handle insert_degree_2(Face_handle f, int i); // @fixme Missing from SDG concept. Remove from here? Picture in Apollonius and SDG?
/*!
Removes a degree 2
vertex and the two faces adjacent to it. The two edges of the star of
`v` that are not incident to it are collapsed
(see Fig. \ref figtdsirdeg2).
removes a degree 2 vertex and the two faces adjacent to it.
The two edges of the star of `v` that are not incident to it are collapsed (see Fig. \ref figtdsirdeg2).
\pre The degree of `v` must be equal to 2.
*/
void remove_degree_2(Vertex_handle v);
void remove_degree_2(Vertex_handle v); // @fixme Missing from SDG concept. Remove from here? Picture in Apollonius and SDG?
/// @}
}; /* end Triangulation_data_structure_2 */
} /* end namespace CGAL */