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`. \tparam St must be a model of `SegmentDelaunayGraphStorageTraits_2`.
By default, the storage traits is instantiated by `Segment_Delaunay_graph_storage_traits_2<Gt>`. By default, the storage traits is instantiated by `Segment_Delaunay_graph_storage_traits_2<Gt>`.
\tparam DS must be a model of `SegmentDelaunayGraphDataStructure_2`. \tparam DS must be a model of `SegmentDelaunayGraphDataStructure_2` whose vertex and face are
`DS` defaults to `CGAL::Triangulation_data_structure_2< CGAL::Segment_Delaunay_graph_vertex_base_2<St>, CGAL::Segment_Delaunay_graph_face_base_2<Gt> >`. models of the concepts `SegmentDelaunayGraphVertexBase_2` and `TriangulationFaceBase_2`, respectively.
Any custom type can be used instead of `Segment_Delaunay_graph_vertex_base_2` It defaults to:
and `Segment_Delaunay_graph_face_base_2`, provided that they are models of the \code
concepts `SegmentDelaunayGraphVertexBase_2` and `TriangulationFaceBase_2`, respectively. `CGAL::Triangulation_data_structure_2<
CGAL::Segment_Delaunay_graph_vertex_base_2<St>,
CGAL::Segment_Delaunay_graph_face_base_2<Gt> >`
\endcode
\cgalHeading{Storage} \cgalHeading{Storage}
To avoid redundancy in the storage of points, input points are stored in a container, 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, 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 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} \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 vertices. Therefore the `Segment_Delaunay_graph_2` class provides several iterators
and circulators that allow to traverse it (completely or partially). and circulators that allow to traverse it (completely or partially).
\cgalModels `DelaunayGraph_2` \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_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_traits_without_intersections_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_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::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_hierarchy_2<Gt,St,STag,DS>`
\sa `CGAL::Segment_Delaunay_graph_vertex_base_2<Gt,SSTag>`
\sa `CGAL::Triangulation_face_base_2<Gt>`
*/ */
template< typename Gt, typename DS > template< typename Gt, typename St, typename DS >
class Segment_Delaunay_graph_2 { class Segment_Delaunay_graph_2 {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
/*! /*!
A type for the geometric traits. Type for the geometric traits.
*/ */
typedef Gt Geom_traits; typedef Gt Geom_traits;
/*! /*!
A type for the underlying Type for the storage traits.
data structure. */
typedef St Storage_traits;
/*!
Type for the underlying data structure.
*/ */
typedef DS Data_structure; typedef DS Data_structure;
@ -86,26 +78,29 @@ Size type (an unsigned integral type)
typedef typename DS::size_type size_type; typedef typename DS::size_type size_type;
/*! /*!
A type for the Type for the point defined in the geometric traits.
point defined in the geometric traits.
*/ */
typedef typename Gt::Point_2 Point_2; typedef typename Gt::Point_2 Point_2;
/*! /*!
A type for the segment Delaunay graph site, defined in the geometric Type for the segment Delaunay graph site, defined in the geometric traits.
traits.
*/ */
typedef typename Gt::Site_2 Site_2; 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; typedef typename DS::Edge Edge;
/*! /*!
A type for a vertex. Type for a vertex.
*/ */
typedef typename DS::Vertex Vertex; typedef typename DS::Vertex Vertex;
/*! /*!
A type for a face. Type for a face.
*/ */
typedef typename DS::Face 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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). in the Delaunay graph).
*/ */
typedef unspecified_type Output_sites_iterator; typedef unspecified_type Output_sites_iterator;
@ -235,8 +230,7 @@ typedef unspecified_type Output_sites_iterator;
/// @{ /// @{
/*! /*!
Creates the Creates the segment Delaunay graph using `gt` as geometric traits.
segment Delaunay graph using `gt` as geometric traits.
*/ */
Segment_Delaunay_graph_2(Gt gt=Gt()); 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`. \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 > template< class Input_iterator >
Segment_Delaunay_graph_2(Input_iterator first, Input_iterator beyond, Segment_Delaunay_graph_2(Input_iterator first, Input_iterator beyond, Gt gt = Gt());
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 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(); 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 /// \name Finite Face, Edge and Vertex Iterators
@ -533,41 +529,38 @@ bool is_infinite(Edge_circulator ec) const;
/// @{ /// @{
/*! /*!
Inserts the sites in the range Iteratively inserts the sites in the range [`first`,`beyond`).
[`first`,`beyond`). The number of additional sites inserted in \tparam Input_iterator must be a model of `InputIterator` and its value type must be either `Point_2` or `Site_2`.
the Delaunay graph is returned. `Input_iterator` must be a model of \return the number of sites inserted in the Delaunay graph
`InputIterator` and its value type must be
either `Point_2` or `Site_2`.
*/ */
template< class Input_iterator > template< class Input_iterator >
size_type insert(Input_iterator first, Input_iterator beyond); size_type insert(Input_iterator first, Input_iterator beyond);
/*! /*!
Same as the previous method. `Input_iterator` must be a model of Iteratively inserts the sites in the range [`first`,`beyond`).
`InputIterator` and its value type must be \tparam Input_iterator must be a model of `InputIterator` and its value type must be either `Point_2` or `Site_2`.
either `Point_2` or `Site_2`. \return the number of sites inserted in the Delaunay graph
*/ */
template< class Input_iterator > 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 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()`. that are respectively passed to `insert_segments()` and `insert_points()`.
Non-input sites are first random_shuffled and then inserted one by one. 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 \tparam Input_iterator must be a model of `InputIterator` and its value type must be either `Point_2`, `Segment_2` or `Site_2`.
either `Point_2`, `Segment_2` or `Site_2`. \return the number of sites inserted in the Delaunay graph
\return the number of sites inserted in the Delaunay graph
*/ */
template< class Input_iterator > 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. Inserts the points in the range [first,beyond) as sites.
Note that this function is not guaranteed to insert the points Note that this function is not guaranteed to insert the points
following the order of `PointInputIterator`, as `spatial_sort()` following the order of `PointInputIterator`, as `spatial_sort()`
is used to improve efficiency. 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. \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> template <class PointIterator>
std::size_t insert_points(PointIterator first, PointIterator beyond); 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 Note that this function is not guaranteed to insert the segments
following the order of `SegmentIterator`, as `spatial_sort()` following the order of `SegmentIterator`, as `spatial_sort()`
is used to improve efficiency. 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. \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> template <class SegmentIterator>
std::size_t insert_segments(SegmentIterator first, SegmentIterator beyond); 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)` 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 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. \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> template <class PointIterator, class IndicesIterator>
std::size_t insert_segments(PointIterator points_first, PointIterator points_beyond, std::size_t insert_segments(PointIterator points_first, PointIterator points_beyond,
IndicesIterator indices_first, IndicesIterator indices_beyond); IndicesIterator indices_first, IndicesIterator indices_beyond);
/*! /*!
Inserts the Inserts the point `p` in the segment Delaunay graph.
point `p` in the segment Delaunay graph. If `p` has already If `p` has already been inserted, then the vertex handle of its already inserted copy is returned.
been inserted, then the vertex handle of its already inserted copy is If `p` has not been inserted yet, the vertex handle of `p` is returned.
returned. If `p` has not been inserted yet, the vertex handle of
`p` is returned.
*/ */
Vertex_handle insert(Point_2 p); Vertex_handle insert(Point_2 p);
/*! /*!
Inserts `p` in the segment Delaunay graph using the site Inserts `p` in the segment Delaunay graph using the site associated with `vnear`
associated with `vnear` as an estimate for the nearest neighbor as an estimate for the nearest neighbor of `p`.
of `p`. The vertex handle returned has the same semantics as The vertex handle returned has the same semantics as the vertex handle returned by the method
the vertex handle returned by the method
`Vertex_handle insert(Point_2 p)`. `Vertex_handle insert(Point_2 p)`.
*/ */
Vertex_handle insert(Point_2 p, Vertex_handle vnear); Vertex_handle insert(Point_2 p, Vertex_handle vnear);
/*! /*!
Inserts the Inserts the closed segment with endpoints `p1` and `p2` in the segment Delaunay graph.
closed segment with endpoints `p1` and `p2` in the segment If the segment has already been inserted in the
Delaunay graph. If the segment has already been inserted in the
Delaunay graph then the vertex handle of its already inserted copy is Delaunay graph then the vertex handle of its already inserted copy is
returned. If the segment does not intersect any segment in the returned. If the segment does not intersect any segment in the
existing diagram, the vertex handle corresponding to its 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); Vertex_handle insert(Point_2 p1, Point_2 p2);
/*! /*!
Inserts the segment whose endpoints are `p1` and `p2` Inserts the segment whose endpoints are `p1` and `p2` in the segment Delaunay graph using the site
in the segment Delaunay graph using the site associated with `vnear` as an estimate for the nearest neighbor of `p1`.
associated with `vnear` as an estimate for the nearest neighbor The vertex handle returned has the same semantics as the vertex handle returned by the method
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 insert(Point_2 p1, Point_2 p2, Vertex_handle Vertex_handle insert(Point_2 p1, Point_2 p2, Vertex_handle vnear);
vnear);
/*! /*!
Inserts the site `s` in the Inserts the site `s` in the segment Delaunay graph.
segment Delaunay graph. The vertex handle returned has the same The vertex handle returned has the same semantics as the vertex handle returned by the methods
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)`,
`Vertex_handle insert(Point_2 p)` and `Vertex_handle insert(Point_2 p1, Point_2 p2)`, depending on whether `s` depending on whether `s` represents a point or a segment respectively.
represents a point or a segment respectively.
\pre `s.is_input()` must be `true`. \pre `s.is_input()` must be `true`.
*/ */
Vertex_handle insert(Site_2 s); Vertex_handle insert(Site_2 s);
/*! /*!
Inserts `s` in the segment Delaunay graph using the site Inserts `s` in the segment Delaunay graph using the site associated with `vnear`
associated with `vnear` as an estimate for the nearest neighbor of as an estimate for the nearest neighbor of `s`, if `s` is a point, or the first endpoint of `s`, if
`s`, if `s` is a point, or the first endpoint of `s`, if `s` is a segment.
`s` is a segment. The vertex handle returned has the same The vertex handle returned has the same semantics as the vertex handle returned by the method
semantics as the vertex handle returned by the method
`Vertex_handle insert(Site_2 s)`. `Vertex_handle insert(Site_2 s)`.
\pre `s.is_input()` must be `true`. \pre `s.is_input()` must be `true`.
*/ */
Vertex_handle insert(Site_2 s, Vertex_handle Vertex_handle insert(Site_2 s, Vertex_handle vnear);
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 returned. If there are no sites in the segment Delaunay graph
`Vertex_handle()` is returned. `Vertex_handle()` is returned.
*/ */
Vertex_handle nearest_neighbor(Point_2 p, Vertex_handle nearest_neighbor(Point_2 p, Vertex_handle vnear);
Vertex_handle vnear);
/// @} /// @}
@ -787,20 +770,19 @@ combinatorial data structure.
void file_output(std::ostream& os); void file_output(std::ostream& os);
/*! /*!
Reads the state of the Reads the state of the segment Delaunay graph from an input stream.
segment Delaunay graph from an input stream.
*/ */
void file_input(std::istream& is); void file_input(std::istream& is);
/*! /*!
Writes the current state of the segment Delaunay graph to an output stream. 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. 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(); void clear();
/*! /*!
The segment Delaunay graphs The segment Delaunay graphs `other` and `*this` are swapped.
`other` and `*this` are swapped. For a segment Delaunay graph `sdg`, the operation For a segment Delaunay graph `sdg`, the operation
`sdg`.`swap(other)` should be preferred to `sdg``= other` or to `sdg``(other)` if `sdg`.`swap(other)` should be preferred to `sdg``= other` or to `sdg``(other)` if
`other` is deleted afterwards. `other` is deleted afterwards.
*/ */
void swap(Segment_Delaunay_graph_2<Gt,DS> void swap(Segment_Delaunay_graph_2<Gt,St,DS>& other);
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. `SegmentDelaunayGraphTraits_2` concept.
The class `Segment_Delaunay_graph_filtered_traits_2` uses the filtering technique \cgalCite{cgal:bbp-iayed-01} 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 class with efficient and exact predicates given an exact
kernel `EK` and a filtering kernel `FK`. The geometric kernel `EK` and a filtering kernel `FK`. The geometric
constructions associated provided by this class are equivalent 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 `CopyConstructible`
\cgalModels `Assignable` \cgalModels `Assignable`
\sa `Kernel`
\sa `SegmentDelaunayGraphTraits_2` \sa `SegmentDelaunayGraphTraits_2`
\sa `CGAL::Field_tag` \sa `CGAL::Field_tag`
\sa `CGAL::Field_with_sqrt_tag` \sa `CGAL::Field_with_sqrt_tag`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,DS>` \sa `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,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_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_traits_without_intersections_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>` \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. `SegmentDelaunayGraphTraits_2` concept.
The class `Segment_Delaunay_graph_filtered_traits_without_intersections_2` uses the filtering technique \cgalCite{cgal:bbp-iayed-01} 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 class with efficient and exact predicates given an exact
kernel `EK` and a filtering kernel `FK`. The geometric kernel `EK` and a filtering kernel `FK`. The geometric
constructions associated provided by this class are equivalent constructions associated provided by this class are equivalent
@ -221,8 +220,8 @@ default value is
\sa `SegmentDelaunayGraphTraits_2` \sa `SegmentDelaunayGraphTraits_2`
\sa `CGAL::Euclidean_ring_tag` \sa `CGAL::Euclidean_ring_tag`
\sa `CGAL::Field_with_sqrt_tag` \sa `CGAL::Field_with_sqrt_tag`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,DS>` \sa `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,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_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_traits_without_intersections_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_2<CK,CM,EK,EM,FK,FM>`

View File

@ -5,8 +5,9 @@ namespace CGAL {
\ingroup PkgSegmentDelaunayGraph2Ref \ingroup PkgSegmentDelaunayGraph2Ref
We provide an alternative to the class We provide an alternative to the class
`Segment_Delaunay_graph_2<Gt,DS>` for the incremental `Segment_Delaunay_graph_2<Gt,St,DS>` for the incremental
construction of the segment Delaunay graph. The `Segment_Delaunay_graph_hierarchy_2` class construction of the segment Delaunay graph.
The `Segment_Delaunay_graph_hierarchy_2` class
maintains a hierarchy of Delaunay graphs. There are two possibilities maintains a hierarchy of Delaunay graphs. There are two possibilities
as to how this hierarchy is constructed. 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 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. \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 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 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 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 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 \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 the corresponding hierarchy for points found in \cgalCite{cgal:d-dh-02}. The
details are described in \cgalCite{cgal:k-reisv-04}. details are described in \cgalCite{cgal:k-reisv-04}.
The class has three template parameters. The first and third The class has four template parameters. The first and fourth
have essentially the same semantics as in the have essentially the same semantics as in the `Segment_Delaunay_graph_2<Gt,St,DS>` class.
`Segment_Delaunay_graph_2<Gt,DS>` class.
\tparam Gt must be a model of the \tparam Gt must be a model of the
`SegmentDelaunayGraphTraits_2` concept. `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 parameter controls whether or not segments are added in the upper
levels of the hierarchy. It's possible values are `Tag_true` levels of the hierarchy. It's possible values are `Tag_true`
and `Tag_false`. If it is set to `Tag_true`, and `Tag_false`. If it is set to `Tag_true`,
segments are also inserted in the upper levels of the hierarchy. The segments are also inserted in the upper levels of the hierarchy. The
value `Tag_false` indicates that only points are to be value `Tag_false` indicates that only points are to be
inserted in the upper levels of the hierarchy. The default value for 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 \tparam DS must be a model of the
`SegmentDelaunayGraphDataStructure_2` concept. However, the `SegmentDelaunayGraphDataStructure_2` concept. However, the
vertex base class that is to be used in the segment Delaunay graph vertex base class that is to be used in the segment Delaunay graph
data structure must be a model of the data structure must be a model of the
`SegmentDelaunayGraphHierarchyVertexBase_2` `SegmentDelaunayGraphHierarchyVertexBase_2`
concept. The third template parameter defaults to concept. The fourth 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> >`. \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 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 the same with its base class. In the sequel only additional types
and methods defined are documented. and methods defined are documented.
@ -66,10 +72,7 @@ and methods defined are documented.
\cgalModels `CopyConstructible` \cgalModels `CopyConstructible`
\cgalModels `Assignable` \cgalModels `Assignable`
\sa `SegmentDelaunayGraphDataStructure_2` \sa `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>`
\sa `SegmentDelaunayGraphTraits_2`
\sa `SegmentDelaunayGraphHierarchyVertexBase_2`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,DS>`
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>` \sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
\sa `CGAL::Segment_Delaunay_graph_traits_2<K,MTag>` \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_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>` \sa `CGAL::Segment_Delaunay_graph_hierarchy_vertex_base_2<Vbb>`
*/ */
template< typename Gt, typename STag, typename DS > template< typename Gt, typename St, typename STag, typename DS >
class Segment_Delaunay_graph_hierarchy_2 : public CGAL::Segment_Delaunay_graph_2<Gt,DS> { class Segment_Delaunay_graph_hierarchy_2
: public CGAL::Segment_Delaunay_graph_2<Gt,St,DS> {
public: public:
/// \name Types /// \name Types
/// `Segment_Delaunay_graph_hierarchy_2` introduces the following /// `Segment_Delaunay_graph_hierarchy_2` introduces the following
/// types in addition to those introduced by its base class /// 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. 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 Creates a hierarchy of segment Delaunay graphs using
`gt` as geometric traits. `gt` as geometric traits.
*/ */
Segment_Delaunay_graph_hierarchy_2(Gt Segment_Delaunay_graph_hierarchy_2(Gt gt=Gt());
gt=Gt());
/*! /*!
Creates a segment Delaunay graph hierarchy using 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`. must be either `Point_2` or `Site_2`.
*/ */
template< class Input_iterator > template< class Input_iterator >
Segment_Delaunay_graph_hierarchy_2<Gt,STag,DS>(Input_iterator Segment_Delaunay_graph_hierarchy_2(Input_iterator first, Input_iterator beyond, Gt gt=Gt());
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. as well as the underlying combinatorial hierarchical data structure.
\relates Segment_Delaunay_graph_hierarchy_2 \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 Reads the state of the segment Delaunay graph hierarchy from an
input stream. input stream.
\relates Segment_Delaunay_graph_hierarchy_2 \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 */ } /* 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 The class `Segment_Delaunay_graph_hierarchy_vertex_base_2` provides a model for the
`SegmentDelaunayGraphHierarchyVertexBase_2` concept, which is the `SegmentDelaunayGraphHierarchyVertexBase_2` concept, which is the
vertex base required by 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. \tparam Vbb must be a model of the `SegmentDelaunayGraphVertexBase_2` concept.
@ -16,9 +16,9 @@ vertex base required by the
\sa `SegmentDelaunayGraphVertexBase_2` \sa `SegmentDelaunayGraphVertexBase_2`
\sa `SegmentDelaunayGraphHierarchyVertexBase_2` \sa `SegmentDelaunayGraphHierarchyVertexBase_2`
\sa `SegmentDelaunayGraphDataStructure_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::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 > 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 The class `Segment_Delaunay_graph_storage_site_2` is a model for the concept
`SegmentDelaunayGraphStorageSite_2`. `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` \cgalModels `SegmentDelaunayGraphStorageSite_2`
\sa `SegmentDelaunayGraphSite_2`
\sa `SegmentDelaunayGraphTraits_2`
\sa `CGAL::Segment_Delaunay_graph_site_2<K>` \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 { class Segment_Delaunay_graph_storage_site_2 {
public: 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 `SegmentDelaunayGraphTraits_2`
\sa `CGAL::Field_tag` \sa `CGAL::Field_tag`
\sa `CGAL::Field_with_sqrt_tag` \sa `CGAL::Field_with_sqrt_tag`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,DS>` \sa `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,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_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_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::Segment_Delaunay_graph_filtered_traits_without_intersections_2<CK,CM,EK,EM,FK,FM>`
@ -101,8 +101,8 @@ part).
\sa `SegmentDelaunayGraphTraits_2` \sa `SegmentDelaunayGraphTraits_2`
\sa `CGAL::Euclidean_ring_tag` \sa `CGAL::Euclidean_ring_tag`
\sa `CGAL::Field_with_sqrt_tag` \sa `CGAL::Field_with_sqrt_tag`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,DS>` \sa `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,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_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_filtered_traits_2<CK,CM,EK,EM,FK,FM>` \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::Segment_Delaunay_graph_filtered_traits_without_intersections_2<CK,CM,EK,EM,FK,FM>`

View File

@ -4,33 +4,23 @@ namespace CGAL {
/*! /*!
\ingroup PkgSegmentDelaunayGraph2Ref \ingroup PkgSegmentDelaunayGraph2Ref
\cgalModels `SegmentDelaunayGraphVertexBase_2`
The class `Segment_Delaunay_graph_vertex_base_2` provides a model for the The class `Segment_Delaunay_graph_vertex_base_2` provides a model for the
`SegmentDelaunayGraphVertexBase_2` concept which is the vertex `SegmentDelaunayGraphVertexBase_2` concept which is the vertex
base required by the `SegmentDelaunayGraphDataStructure_2` base required by the `SegmentDelaunayGraphDataStructure_2`
concept. concept.
\tparam Gt must be a model of the concept `SegmentDelaunayGraphTraits_2`. \tparam St must be a model of the concept `SegmentDelaunayGraphStorageTraits_2`.
\tparam SSTag indicates whether This type must be template parameter used for `CGAL::Segment_Delaunay_graph_2`.
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.
\cgalModels `SegmentDelaunayGraphVertexBase_2` \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.
\sa `SegmentDelaunayGraphVertexBase_2` It has the default value `CGAL::Triangulation_vertex_base_2<St::Geom_traits>`.
\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>`
\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 { class Segment_Delaunay_graph_vertex_base_2 {
public: 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 introduce any constructors in addition to those of the
`SegmentDelaunayGraphVertexBase_2` concept. `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 `SegmentDelaunayGraphDataStructure_2`
\sa `SegmentDelaunayGraphVertexBase_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::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>` \sa `CGAL::Segment_Delaunay_graph_hierarchy_vertex_base_2<Vbb>`
*/ */

View File

@ -51,7 +51,7 @@ typedef unspecified_type RT;
/// \name Creation /// \name Creation
/// In addition to the default and copy constructors the following /// 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 \ingroup PkgSegmentDelaunayGraph2Concepts
\cgalConcept \cgalConcept
\cgalRefines `TriangulationTraits_2` \cgalRefines `TriangulationTraits_2`
The concept `SegmentDelaunayGraphTraits_2` provides the traits The concept `SegmentDelaunayGraphTraits_2` provides the traits
requirements for the `CGAL::Segment_Delaunay_graph_2<Gt,DS>` and requirements for the `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>` and
`CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,DS>` classes. In `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,St,STag,DS>` classes.
particular, it provides a type `Site_2`, which must be a model of In particular, it provides a type `Site_2`, which must be a model of
the concept `SegmentDelaunayGraphSite_2`. It also provides the concept `SegmentDelaunayGraphSite_2`. It also provides
constructions for sites and several function object constructions for sites and several function object
types for the predicates. 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>` \cgalHasModel `CGAL::Segment_Delaunay_graph_filtered_traits_without_intersections_2<CK,CM,EK,EM,FK,FM>`
\sa `SegmentDelaunayGraphSite_2` \sa `SegmentDelaunayGraphSite_2`
\sa `CGAL::Segment_Delaunay_graph_2<Gt,DS>` \sa `CGAL::Segment_Delaunay_graph_2<Gt,St,DS>`
\sa `CGAL::Segment_Delaunay_graph_hierarchy_2<Gt,STag,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_2<K,MTag>`
\sa `CGAL::Segment_Delaunay_graph_traits_without_intersections_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_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 site of the segment Delaunay graph and provides access to one of its
incident faces through a `Face_handle`. 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 `SegmentDelaunayGraphTraits_2`
\sa `SegmentDelaunayGraphSite_2` \sa `SegmentDelaunayGraphSite_2`
\sa `SegmentDelaunayGraphStorageSite_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_site_2<K>`
\sa `CGAL::Segment_Delaunay_graph_storage_site_2<Gt,SSTag>` \sa `CGAL::Segment_Delaunay_graph_storage_site_2<Gt,SSTag>`
\sa `CGAL::Triangulation_data_structure_2<Vb,Fb>` \sa `CGAL::Triangulation_data_structure_2<Vb,Fb>`
*/ */
class SegmentDelaunayGraphVertexBase_2 { class SegmentDelaunayGraphVertexBase_2 {
public: public:
@ -31,46 +27,40 @@ public:
/// @{ /// @{
/*! /*!
A type for the geometric traits that defines A type for the geometric traits that defines the site.
the site. \pre The type `Geom_traits` must define the type `Site_2`. \pre The type `Geom_traits` must define the type `Site_2`.
*/ */
typedef unspecified_type Geom_traits; typedef unspecified_type Geom_traits;
/*! /*!
A type for the site. This type must coincide A type for the site. This type must coincide with the type `Geom_traits::Site_2`.
with the type `Geom_traits::Site_2`.
*/ */
typedef unspecified_type Site_2; typedef unspecified_type Site_2;
/*! /*!
A type that indicates what kind of A type that indicates what kind of storage type to use.
storage type to use. `Storage_site_tag` must either be `Storage_site_tag` must either be `CGAL::Tag_true` or `CGAL::Tag_false`.
`CGAL::Tag_true` or `CGAL::Tag_false`.
*/ */
typedef unspecified_type Storage_site_tag; typedef unspecified_type Storage_site_tag;
/*! /*!
A type for the internal representation A type for the internal representation of sites.
of sites. This type must satisfy the requirements of the concept This type must satisfy the requirements of the concept `SegmentDelaunayGraphStorageSite_2`.
`SegmentDelaunayGraphStorageSite_2`.
*/ */
typedef unspecified_type Storage_site_2; typedef unspecified_type Storage_site_2;
/*! /*!
A type for the A type for the underlying data structure, to which the vertex belongs to.
underlying data structure, to which the vertex belongs to.
*/ */
typedef unspecified_type Data_structure; typedef unspecified_type Data_structure;
/*! /*!
A type for the vertex handle of the A type for the vertex handle of the segment Delaunay graph data structure.
segment Delaunay graph data structure.
*/ */
typedef unspecified_type Vertex_handle; typedef unspecified_type Vertex_handle;
/*! /*!
A type for the face handle of the A type for the face handle of the segment Delaunay graph data structure.
segment Delaunay graph data structure.
*/ */
typedef unspecified_type Face_handle; typedef unspecified_type Face_handle;
@ -82,18 +72,15 @@ typedef unspecified_type Face_handle;
/// @{ /// @{
/*! /*!
Constructs a vertex associated with the site represented by the Constructs a vertex associated with the site represented by the storage site `ss`.
storage site `ss`.
*/ */
SegmentDelaunayGraphVertexBase_2(Storage_site_2 ss); SegmentDelaunayGraphVertexBase_2(const Storage_site_2& ss);
/*! /*!
Constructs a vertex associated with Constructs a vertex associated with the site represented by the storage site `ss`,
the site represented by the storage site `ss`,
and pointing to the face associated with the face handle `f`. and pointing to the face associated with the face handle `f`.
*/ */
SegmentDelaunayGraphVertexBase_2(Storage_site_2 ss, SegmentDelaunayGraphVertexBase_2(const Storage_site_2& ss, Face_handle f);
Face_handle f);
/// @} /// @}
@ -103,7 +90,7 @@ Face_handle f);
/*! /*!
Returns the storage site representing the site. Returns the storage site representing the site.
*/ */
Storage_site_2 storage_site(); const Storage_site_2& storage_site();
/*! /*!
Returns the site. Returns the site.
@ -123,7 +110,7 @@ Face_handle face();
/*! /*!
Sets the storage site. Sets the storage site.
*/ */
void set_site(Storage_site_2 ss); void set_site(const Storage_site_2& ss);
/*! /*!
Sets the incident face. Sets the incident face.

View File

@ -20,7 +20,7 @@
\cgalPkgShortInfoEnd \cgalPkgShortInfoEnd
\cgalPkgDescriptionEnd \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 computing the 2D Delaunay graph of segments and points. The two
template parameters must be models of the template parameters must be models of the
`SegmentDelaunayGraphTraits_2` and `SegmentDelaunayGraphTraits_2` and
@ -44,6 +44,7 @@ the class
- `SegmentDelaunayGraphSite_2` - `SegmentDelaunayGraphSite_2`
- `SegmentDelaunayGraphStorageSite_2` - `SegmentDelaunayGraphStorageSite_2`
- `SegmentDelaunayGraphStorageTraits_2`
- `SegmentDelaunayGraphDataStructure_2` - `SegmentDelaunayGraphDataStructure_2`
- `SegmentDelaunayGraphVertexBase_2` - `SegmentDelaunayGraphVertexBase_2`
- `SegmentDelaunayGraphTraits_2` - `SegmentDelaunayGraphTraits_2`
@ -51,15 +52,17 @@ the class
\cgalCRPSection{Classes} \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_site_2<K>`
- `CGAL::Segment_Delaunay_graph_storage_site_2<Gt>` - `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_2<K,MTag>`
- `CGAL::Segment_Delaunay_graph_traits_without_intersections_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_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_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>` - `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 stored in a container, and the various types of sites (input points
and segments, points of intersection, subsegments with one or two and segments, points of intersection, subsegments with one or two
points of intersection as endpoints) only store handles to the points points of intersection as endpoints) only store handles to the points
in the container. This is achieved by the in the container. This is achieved with the
`Segment_Delaunay_graph_storage_site_2<Gt>` class which is a `Segment_Delaunay_graph_storage_site_2<Gt>` class, which is a
model of the corresponding concept: model of the corresponding concept:
`SegmentDelaunayGraphStorageSite_2`. This concept enforces a site `SegmentDelaunayGraphStorageSite_2`. This concept enforces a site
to be represented by up to 6 handles (which are very lightweight 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 \section secsdg2hierarchy The Segment Delaunay Graph Hierarchy
The The `Segment_Delaunay_graph_hierarchy_2<SegmentDelaunayGraphTraits_2, SegmentDelaunayGraphStorageTraits_2, SSTag, SegmentDelaunayGraphDataStructure_2>`
`Segment_Delaunay_graph_hierarchy_2<SegmentDelaunayGraphTraits_2, SSTag, SegmentDelaunayGraphDataStructure_2>` class is the analogue class is the analogue of the `Triangulation_hierarchy_2` or the
of the `Triangulation_hierarchy_2` or the
`Apollonius_graph_hierarchy_2` classes, applied to the segment `Apollonius_graph_hierarchy_2` classes, applied to the segment
Delaunay graph. It consists of a hierarchy of Delaunay graph. It consists of a hierarchy of
segment Delaunay graphs constructed in a manner analogous to the 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. Delaunay graphs at all levels of the hierarchy.
The class 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 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 class. Using the segment Delaunay graph hierarchy involves an
additional cost in space and time for maintaining the hierarchy. Our additional cost in space and time for maintaining the hierarchy. Our
experiments have shown that it usually pays off to use the hierarchy 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/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_storage_site_2.h>
#include <CGAL/Segment_Delaunay_graph_simple_storage_site_2.h> #include <CGAL/Segment_Delaunay_graph_simple_storage_site_2.h>
namespace CGAL { 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 class Segment_Delaunay_graph_vertex_base_2
: public Vb : public Vb
{ {

View File

@ -40,8 +40,6 @@ guarantee the combinatorial validity of the resulting data structure.
template< typename VertexBase, typename FaceBase > template< typename VertexBase, typename FaceBase >
class Triangulation_data_structure_2 { class Triangulation_data_structure_2 {
public: public:
/// \name Types /// \name Types
/// @{ /// @{
@ -60,10 +58,9 @@ public:
/// @} /// @}
/// \name /// \name Ranges
/// \cgalAdvancedBegin /// \cgalAdvancedBegin
/// In addition to the interface documented in the concept, /// In addition to the interface documented in the concept, the class offers the following types.
/// the class offers the following types.
/// \cgalAdvancedEnd /// \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 joins the vertices that are endpoints of the edge `(f,i)`, and returns a vertex handle to common vertex
the vertices that are endpoints of the edge `(f,i)`, and returns (see Fig.\ \ref figtdssplitjoin).
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`. \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); Vertex_handle join_vertices(Face_handle f, int i);
/*! /*!
Joins joins the vertices that are endpoints of the edge `e`, and returns a vertex handle to common vertex.
the vertices that are endpoints of the edge `e`, and returns
a vertex handle to common vertex.
*/ */
Vertex_handle join_vertices(Edge e); Vertex_handle join_vertices(Edge e);
/*! /*!
Joins joins the vertices that are endpoints of the edge `*eit`, and returns a vertex handle to common vertex.
the vertices that are endpoints of the edge `*eit`, and returns
a vertex handle to common vertex.
*/ */
Vertex_handle join_vertices(Edge_iterator eit); Vertex_handle join_vertices(Edge_iterator eit);
/*! /*!
Joins joins the vertices that are endpoints of the edge `*ec`, and returns a vertex handle to common vertex.
the vertices that are endpoints of the edge `*ec`, and returns
a vertex handle to common vertex.
*/ */
Vertex_handle join_vertices(Edges_circulator ec); Vertex_handle join_vertices(Edges_circulator ec);
/*! /*!
Splits the vertex `v` into two vertices `v1` and splits the vertex `v` into two vertices `v1` and `v2`.
`v2`. The common faces `f` and `g` of `v1` and
`v2` are created after (in the counter-clockwise sense) the 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 faces `f1` and `f2`. The 4-tuple `(v1,v2,f,g)` is returned (see Fig. \ref figtdssplitjoin).
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`. \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, boost::tuples::tuple<Vertex_handle, Vertex_handle, Face_handle, Face_handle>
Face_handle> split_vertex(Vertex_handle v, Face_handle f1, Face_handle f2);
split_vertex(Vertex_handle v, Face_handle f1, Face_handle
f2);
/*! /*!
Inserts inserts a degree two vertex and two faces adjacent to it that have two common edges.
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 The edge defined by the face handle `f` and the integer `i` is duplicated. It returns a handle
`i` is duplicated. It returns a handle to the vertex created to the vertex created (see Fig. \ref figtdsirdeg2).
(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 removes a degree 2 vertex and the two faces adjacent to it.
vertex and the two faces adjacent to it. The two edges of the star of
`v` that are not incident to it are collapsed The two edges of the star of `v` that are not incident to it are collapsed (see Fig. \ref figtdsirdeg2).
(see Fig. \ref figtdsirdeg2).
\pre The degree of `v` must be equal to 2. \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 Triangulation_data_structure_2 */
} /* end namespace CGAL */ } /* end namespace CGAL */