mirror of https://github.com/CGAL/cgal
Properly document SDG storage traits + many other SDG2 doc fixes
This commit is contained in:
parent
472dd09a02
commit
74e8414241
|
|
@ -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);
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
@ -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>`
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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 >
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/// @}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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>`
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
||||
|
|
@ -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>`
|
||||
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
||||
|
|
@ -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>`
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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>`
|
||||
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Reference in New Issue