mirror of https://github.com/CGAL/cgal
Documentation for BGL and SMP
- Fixed the boost::graph_traits tables - Seam mesh documentation - Some minor changes to surface_mesh_parameterization's and ARAP's docs
This commit is contained in:
parent
7ce8fdf3f6
commit
40655269a2
|
|
@ -10,8 +10,6 @@
|
|||
related to it. Models of the concept and their related functions
|
||||
must be in the same namespace (they will be found by Koenig lookup).
|
||||
|
||||
|
||||
|
||||
\dot
|
||||
digraph example {
|
||||
node [shape=record, fontname=Helvetica, fontsize=10];
|
||||
|
|
@ -54,8 +52,6 @@ Associated Type | Description
|
|||
`boost::graph_traits<G>::%vertex_iterator` | %Iterator over all vertices.
|
||||
`boost::graph_traits<G>::%vertices_size_type` | Unsigned integer type for number of vertices.
|
||||
|
||||
|
||||
|
||||
Valid Expression | returns | Description
|
||||
----------------- | --------------- | -----------------------
|
||||
`vertices(g)` | `std::pair<vertex_iterator, vertex_iterator>` | An iterator range over all vertices.
|
||||
|
|
@ -71,7 +67,6 @@ Associated Type | Description
|
|||
`boost::graph_traits<G>::%edge_iterator` | %Iterator over all edges.
|
||||
`boost::graph_traits<G>::%edges_size_type` | Unsigned integer type for number of edges.
|
||||
|
||||
|
||||
Valid Expression | returns | Description
|
||||
----------------- | --------------- | -----------------------
|
||||
`edges(g)` | `std::pair<edge_iterator, edge_iterator>` | An iterator range over all edges.
|
||||
|
|
@ -130,7 +125,6 @@ Associated Type | Description
|
|||
`boost::graph_traits<G>::%halfedge_iterator` | A `BidirectionalIterator` over all halfedges in a graph. Must be `DefaultConstructible`, `Assignable`, `EqualityComparable`.
|
||||
`boost::graph_traits<G>::%halfedges_size_type` | A size type.
|
||||
|
||||
|
||||
Valid Expression | Returns | Description
|
||||
------------------------------------- | ------------------------------------------| -----------
|
||||
`num_halfedges(g)` | `halfedges_size_type` | An upper bound of the number of halfedges of the graph.
|
||||
|
|
@ -148,7 +142,6 @@ Associated Type | Description
|
|||
-------------------------------------------- | ------------
|
||||
`boost::graph_traits<G>::%face_descriptor` | A `face_descriptor` corresponds to a unique face in a graph. Must be `DefaultConstructible`, `Assignable`, `EqualityComparable` and `LessThanComparable`.
|
||||
|
||||
|
||||
Valid Expression | Returns | Description
|
||||
-------------------------------------- | ------------------------------------------------------------------------ | ------------------------
|
||||
`face(h, g)` | `face_descriptor` | The face incident to halfedge `h`.
|
||||
|
|
@ -156,7 +149,6 @@ Valid Expression | Returns
|
|||
`degree(f,g)` | `degree_size_type` | The number of halfedges incident to face `f`.
|
||||
`boost::graph_traits<G>::%null_face()` | `face_descriptor` | A special face that is not equal to any other face.
|
||||
|
||||
|
||||
\cgalHeading{%MutableFaceGraph}
|
||||
|
||||
The concept `MutableFaceGraph` refines the concepts `FaceGraph` and `MutableHalfedgeGraph` and adds
|
||||
|
|
@ -180,15 +172,11 @@ Associated Type | Description
|
|||
`boost::graph_traits<G>::%face_iterator` | %Iterator over all faces.
|
||||
`boost::graph_traits<G>::%faces_size_type` | Unsigned integer type for number of faces.
|
||||
|
||||
|
||||
|
||||
|
||||
Valid Expression | returns | Description
|
||||
----------------- | --------------- | -----------------------
|
||||
`faces(g)` | `std::pair<face_iterator, face_iterator>` | An iterator range over all faces.
|
||||
`num_faces(g)` | `faces_size_type` | An upper bound of the number of faces of the graph.
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/// The property tags model of the boost concept <a href="http://www.boost.org/libs/graph/doc/PropertyTag.html"><code>PropertyTag</code></a>.
|
||||
|
|
@ -297,8 +285,9 @@ adapted types are listed here. The pages document which concepts they
|
|||
model, the properties they support, and any possible caveats that a
|
||||
user might encounter.
|
||||
|
||||
- `boost::graph_traits< CGAL::Surface_mesh<P> >`
|
||||
- \link BGLSMGT `boost::graph_traits< CGAL::Surface_mesh<P> >` \endlink
|
||||
- \link BGLPolyGT `boost::graph_traits< CGAL::Polyhedron_3<T> >` \endlink
|
||||
- \link BGLSeam_meshGT `boost::graph_traits< CGAL::Seam_mesh<T> >` \endlink
|
||||
- \link BGLT2GT `boost::graph_traits< CGAL::Triangulation_2<GT, TDS> >` \endlink
|
||||
- \link BGLArgtGT `boost::graph_traits< CGAL::Arrangement_2<T,DC> >` \endlink
|
||||
- \link BGLOMPAK `boost::graph_traits<OpenMesh::PolyMesh_ArrayKernelT<K> >` \endlink
|
||||
|
|
|
|||
|
|
@ -3,25 +3,13 @@
|
|||
|
||||
\ingroup PkgBGL
|
||||
|
||||
\sc{Bgl} defines the class template
|
||||
The \sc{Bgl} defines the class template
|
||||
<A HREF="http://www.boost.org/libs/graph/doc/graph_traits.html">`boost::graph_traits`</A>
|
||||
as a uniform interface to the properties and types of %graph types.
|
||||
|
||||
We provide specializations of this class template for several \cgal data structures.
|
||||
|
||||
|
||||
\section BGLSeam_meshGT Specialization for the Seam_mesh Class
|
||||
|
||||
The traits class `boost::graph_traits< CGAL::Seam_mesh<T> >` provides the following types:
|
||||
|
||||
| Member | Value | Description |
|
||||
| :----------------------- | :----: | :---------- |
|
||||
| `vertex_descriptor` | `Surface_mesh::Vertex_index` | The vertex descriptor |
|
||||
|
||||
\section BGLSMGT Specialization for the Surface_mesh Class
|
||||
We provide partial specialization for the class `CGAL::Surface_mesh`, so that it is
|
||||
model of the graph concept `FaceGraph`.
|
||||
|
||||
Defined in `<CGAL/boost/graph/graph_traits_Surface_mesh.h>`
|
||||
|
||||
We provide partial specialization for the class `CGAL::Surface_mesh` so that it is a model
|
||||
|
|
@ -37,25 +25,23 @@ The traits class `boost::graph_traits< CGAL::Surface_mesh<T> >` provides the fol
|
|||
|
||||
| Member | Value | Description |
|
||||
| :----------------------- | :----: | :---------- |
|
||||
| `vertex_descriptor` | `Surface_mesh::Vertex_index` | The vertex descriptor |
|
||||
| `edge_descriptor` | `Surface_mesh::Edge_index` | The edge descriptor |
|
||||
| `halfedge_descriptor` | `Surface_mesh::Halfedge_index` | The halfedge descriptor |
|
||||
| `face_descriptor` | `Surface_mesh::Face_index` | The face descriptor |
|
||||
| `adjacency_iterator` | `CGAL::Vertex_around_target_iterator<Surface_mesh<P> >` | Iterates through adjacent vertices|
|
||||
| `out_edge_iterator` | `CGAL::Out_edge_iterator<Surface_mesh<P> >` | Iterate through the out-edges of a vertex. |
|
||||
| `in_edge_iterator` | `CGAL::Out_edge_iterator<Surface_mesh<P> >` | Iterate through the in-edges of a vertex. |
|
||||
| `vertex_iterator` | `Surface_mesh::Vertex_iterator` | Iterate through the vertices of a polyhedron.|
|
||||
| `edge_iterator` | `Surface_mesh::Edge_iterator` | Iterate through the edges of a polyhedron.|
|
||||
| `halfedge_iterator` | `Surface_mesh::Halfedge_iterator` | Iterate through the halfedges of a polyhedron.|
|
||||
| `face_iterator` | `Surface_mesh::Face_iterator` | Iterate through the faces of a polyhedron.|
|
||||
| `directed_category` | Inherits from `boost::bidirectional_graph_tag`, `boost::vertex_list_graph_tag` and `boost::edge_list_graph_tag` | |
|
||||
| `edge_parallel_category` | `boost::disallow_parallel_edge_tag` | Indicates that this graph does not support multiedges |
|
||||
| `traversal_category` | `boost::bidirectional_graph_tag` | Indicates that this graph is bidirectional |
|
||||
| `vertices_size_type` | `Surface_mesh::vertices_size_type` | The size type of the vertex list |
|
||||
| `edges_size_type` | `Surface_mesh::edges_size_type` | The size type of the edge list |
|
||||
| `degree_size_type` | `Surface_mesh::degree_size_type` | The size type of the adjacency list |
|
||||
|
||||
|
||||
| `vertex_descriptor` | `Surface_mesh::Vertex_index` | Identify vertices in the graph. |
|
||||
| `edge_descriptor` | `Surface_mesh::Edge_index` | Identify edges in the graph. |
|
||||
| `halfedge_descriptor` | `Surface_mesh::Halfedge_index` | Identify halfedges in the graph. |
|
||||
| `face_descriptor` | `Surface_mesh::Face_index` | Identify faces in the graph. |
|
||||
| `adjacency_iterator` | `CGAL::Vertex_around_target_iterator<Surface_mesh<P> >` | An iterator to traverse through the vertices adjacent to a vertex. Its value type is `vertex_descriptor`. |
|
||||
| `out_edge_iterator` | `CGAL::Out_edge_iterator<Surface_mesh<P> >` | An iterator to traverse through the outgoing edges incident to a vertex. Its value type is `edge_descriptor`. |
|
||||
| `in_edge_iterator` | `CGAL::In_edge_iterator<Surface_mesh<P> >` | An iterator to traverse through the incoming edges incident to a vertex. Its value type is `edge_descriptor`. |
|
||||
| `vertex_iterator` | `Surface_mesh::Vertex_iterator` | An iterator to traverse through the vertices of the graph. Its value type is `vertex_descriptor`. |
|
||||
| `edge_iterator` | `Surface_mesh::Edge_iterator` | An iterator to traverse through the edges of the graph. Its value type is `edge_descriptor`. |
|
||||
| `halfedge_iterator` | `Surface_mesh::Halfedge_iterator` | An iterator to traverse through the halfedges of the graph. Its value type is `halfedge_descriptor`. |
|
||||
| `face_iterator` | `Surface_mesh::Face_iterator` | An iterator to traverse through the faces of the graph. Its value type is `face_descriptor`. |
|
||||
| `directed_category` | `boost::undirected_tag` | This graph is not directed. |
|
||||
| `edge_parallel_category` | `boost::disallow_parallel_edge_tag` | This graph does not support multiedges. |
|
||||
| `traversal_category` | Inherits from `boost::bidirectional_graph_tag`, `boost::vertex_list_graph_tag`, and `boost::edge_list_graph_tag` | The ways in which the vertices in the graph can be traversed. |
|
||||
| `vertices_size_type` | `Surface_mesh::vertices_size_type` | The size type of the vertex list. |
|
||||
| `edges_size_type` | `Surface_mesh::edges_size_type` | The size type of the edge list. |
|
||||
| `degree_size_type` | `Surface_mesh::degree_size_type` | The size type of the adjacency list. |
|
||||
|
||||
\section BGLPolyGT Specialization for the Polyhedron Class
|
||||
|
||||
|
|
@ -74,94 +60,58 @@ The traits class `boost::graph_traits< CGAL::Polyhedron_3<T> >` provides the fol
|
|||
|
||||
| Member | Value | Description |
|
||||
| :----------------------- | :----: | :---------- |
|
||||
| `vertex_descriptor` | `Polyhedron_3::Vertex_handle` | The vertex descriptor |
|
||||
| `edge_descriptor` | `unspecified_type` | The edge descriptor |
|
||||
| `halfedge_descriptor` | `Polyhedron_3::Halfedge_handle` | The halfedge descriptor |
|
||||
| `face_descriptor` | `Polyhedron_3::Face_handle` | The face descriptor |
|
||||
| `adjacency_iterator` | `CGAL::Vertex_around_target_iterator<Polyhedron_3<T> >` | Iterates through adjacent vertices|
|
||||
| `out_edge_iterator` | `CGAL::Out_edge_iterator<Polyhedron_3<T> >` | Iterate through the out-edges of a vertex. |
|
||||
| `in_edge_iterator` | `CGAL::Out_edge_iterator<Polyhedron_3<T> >` | Iterate through the in-edges of a vertex. |
|
||||
| `vertex_iterator` | `unspecified_type` | Iterate through the vertices of a polyhedron.|
|
||||
| `edge_iterator` | `unspecified_type` | Iterate through the edges of a polyhedron.|
|
||||
| `halfedge_iterator` | `unspecified_type` | Iterate through the halfedges of a polyhedron.|
|
||||
| `face_iterator` | `unspecified_type` | Iterate through the faces of a polyhedron.|
|
||||
| `directed_category` | Inherits from `boost::bidirectional_graph_tag`, `boost::vertex_list_graph_tag` and `boost::edge_list_graph_tag` | |
|
||||
| `edge_parallel_category` | `boost::disallow_parallel_edge_tag` | Indicates that this graph does not support multiedges |
|
||||
| `traversal_category` | `boost::bidirectional_graph_tag` | Indicates that this graph is bidirectional |
|
||||
| `vertices_size_type` | `Polyhedron_3::size_type` | The size type of the vertex list |
|
||||
| `edges_size_type` | `Polyhedron_3::size_type` | The size type of the edge list |
|
||||
| `degree_size_type` | `Polyhedron_3::size_type` | The size type of the adjacency list |
|
||||
| `vertex_descriptor` | `Polyhedron_3::Vertex_handle` | Identify vertices in the graph. |
|
||||
| `edge_descriptor` | `unspecified_type` | Identify edges in the graph. |
|
||||
| `halfedge_descriptor` | `Polyhedron_3::Halfedge_handle` | Identify halfedges in the graph. |
|
||||
| `face_descriptor` | `Polyhedron_3::Face_handle` | Identify faces in the graph. |
|
||||
| `adjacency_iterator` | `CGAL::Vertex_around_target_iterator<Polyhedron_3<T> >` | An iterator to traverse through the vertices adjacent to a vertex. Its value type is `vertex_descriptor`. |
|
||||
| `out_edge_iterator` | `CGAL::Out_edge_iterator<Polyhedron_3<T> >` | An iterator to traverse through the outgoing edges incident to a vertex. Its value type is `edge_descriptor`. |
|
||||
| `in_edge_iterator` | `CGAL::In_edge_iterator<Polyhedron_3<T> >` | An iterator to traverse through the incoming edges incident to a vertex. Its value type is `edge_descriptor`. |
|
||||
| `vertex_iterator` | `unspecified_type` | An iterator to traverse through the vertices of the graph. Its value type is `vertex_descriptor`. |
|
||||
| `edge_iterator` | `unspecified_type` | An iterator to traverse through the edges of the graph. Its value type is `edge_descriptor`. |
|
||||
| `halfedge_iterator` | `unspecified_type` | An iterator to traverse through the halfedges of the graph. Its value type is `halfedge_descriptor`. |
|
||||
| `face_iterator` | `unspecified_type` | An iterator to traverse through the faces of the graph. Its value type is `face_descriptor`. |
|
||||
| `directed_category` | `boost::undirected_tag` | This graph is not directed. |
|
||||
| `edge_parallel_category` | `boost::disallow_parallel_edge_tag` | This graph does not support multiedges. |
|
||||
| `traversal_category` | Inherits from `boost::bidirectional_graph_tag`, `boost::vertex_list_graph_tag`, and `boost::edge_list_graph_tag` | The ways in which the vertices in the graph can be traversed. |
|
||||
| `vertices_size_type` | `Polyhedron_3::size_type` | The size type of the vertex list. |
|
||||
| `edges_size_type` | `Polyhedron_3::size_type` | The size type of the edge list. |
|
||||
| `degree_size_type` | `Polyhedron_3::size_type` | The size type of the adjacency list. |
|
||||
|
||||
For convenience, the type `edge_descriptor` is hashable using the functor `CGAL::Handle_hash_function`
|
||||
that is the default hash functor of `CGAL::Unique_hash_map`.
|
||||
For convenience, the type `edge_descriptor` is hashable using the functor `CGAL::Handle_hash_function`,
|
||||
which is the default hash functor of `CGAL::Unique_hash_map`.
|
||||
|
||||
\section BGLSeam_meshGT Specialization for the Seam_mesh Class
|
||||
|
||||
\section BGLOMPAK Specialization for the OpenMesh::PolyMesh_ArrayKernelT Class
|
||||
Defined in `<CGAL/boost/graph/graph_traits_Seam_mesh.h>`
|
||||
|
||||
Defined in `<CGAL/boost/graph/graph_traits_PolyMesh_ArrayKernelT.h>`
|
||||
|
||||
We provide partial specialization for the class `OpenMesh::PolyMesh_ArrayKernelT` so that it is a model
|
||||
We provide partial specialization for the class `CGAL::Seam_mesh` so that it is a model
|
||||
of the graph concepts
|
||||
<A HREF="http://www.boost.org/libs/graph/doc/BidirectionalGraph.html">`BidirectionalGraph`</A> and
|
||||
<A HREF="http://www.boost.org/libs/graph/doc/VertexAndEdgeListGraph.html">`VertexAndEdgeListGraph`</A>
|
||||
and of the concept `MutableFaceGraph`.
|
||||
|
||||
The traits class `boost::graph_traits<OpenMesh::PolyMesh_ArrayKernelT<K> >` provides the following types:
|
||||
The traits class `boost::graph_traits< CGAL::Seam_mesh<T> >` provides the following types:
|
||||
|
||||
| Member | Value | Description |
|
||||
| :----------------------- | :----: | :---------- |
|
||||
| `vertex_descriptor` | `OpenMesh::PolyMesh_ArrayKernelT::VertexHandle` | The vertex descriptor |
|
||||
| `edge_descriptor` | `unspecified_type` | The edge descriptor |
|
||||
| `halfedge_descriptor` | `OpenMesh::PolyMesh_ArrayKernelT::HalfedgeHandle` | The halfedge descriptor |
|
||||
| `face_descriptor` | `Surface_mesh::FaceHande` | The face descriptor |
|
||||
| `adjacency_iterator` | `unspecified_type` | Iterates through adjacent vertices|
|
||||
| `out_edge_iterator` | `unspecified_type` | Iterate through the out-edges of a vertex. |
|
||||
| `in_edge_iterator` | `unspecified_type` | Iterate through the in-edges of a vertex. |
|
||||
| `vertex_iterator` | `unspecified_type` | Iterate through the vertices of a polyhedron.|
|
||||
| `edge_iterator` | `unspecified_type` | Iterate through the edges of a polyhedron.|
|
||||
| `halfedge_iterator` | `OpenMesh::PolyMesh_ArrayKernelT::HalfedgeIter` | Iterate through the halfedges of a polyhedron.|
|
||||
| `face_iterator` | `OpenMesh::PolyMesh_ArrayKernelT::FaceIter` | Iterate through the faces of a polyhedron.|
|
||||
| `directed_category` | Inherits from `boost::bidirectional_graph_tag`, `boost::vertex_list_graph_tag` and `boost::edge_list_graph_tag` | |
|
||||
| `edge_parallel_category` | `boost::disallow_parallel_edge_tag` | Indicates that this graph does not support multiedges |
|
||||
| `traversal_category` | `boost::bidirectional_graph_tag` | Indicates that this graph is bidirectional |
|
||||
| `vertices_size_type` | `unsigned int` | The size type of the vertex list |
|
||||
| `edges_size_type` | `unsigned int` | The size type of the edge list |
|
||||
| `degree_size_type` | `unsigned` | The size type of the adjacency list |
|
||||
|
||||
|
||||
\section BGLOMTMAK Specialization for the OpenMesh::TriMesh_ArrayKernelT Class
|
||||
|
||||
Defined in `<CGAL/boost/graph/graph_traits_TriMesh_ArrayKernelT.h>`
|
||||
|
||||
We provide partial specialization for the class `OpenMesh::TriMesh_ArrayKernelT` so that it is a model
|
||||
of the graph concepts
|
||||
<A HREF="http://www.boost.org/libs/graph/doc/BidirectionalGraph.html">`BidirectionalGraph`</A> and
|
||||
<A HREF="http://www.boost.org/libs/graph/doc/VertexAndEdgeListGraph.html">`VertexAndEdgeListGraph`</A>
|
||||
and of the concept `MutableFaceGraph`.
|
||||
|
||||
The traits class `boost::graph_traits<OpenMesh::TriMesh_ArrayKernelT<K> >` provides the following types:
|
||||
|
||||
| Member | Value | Description |
|
||||
| :----------------------- | :----: | :---------- |
|
||||
| `vertex_descriptor` | `OpenMesh::TriMesh_ArrayKernelT::VertexHandle` | The vertex descriptor |
|
||||
| `edge_descriptor` | `unspecified_type` | The edge descriptor |
|
||||
| `halfedge_descriptor` | `OpenMesh::TriMesh_ArrayKernelT::HalfedgeHandle` | The halfedge descriptor |
|
||||
| `face_descriptor` | `Surface_mesh::FaceHande` | The face descriptor |
|
||||
| `adjacency_iterator` | `unspecified_type` | Iterates through adjacent vertices|
|
||||
| `out_edge_iterator` | `unspecified_type` | Iterate through the out-edges of a vertex. |
|
||||
| `in_edge_iterator` | `unspecified_type` | Iterate through the in-edges of a vertex. |
|
||||
| `vertex_iterator` | `unspecified_type` | Iterate through the vertices of a polyhedron.|
|
||||
| `edge_iterator` | `unspecified_type` | Iterate through the edges of a polyhedron.|
|
||||
| `halfedge_iterator` | `OpenMesh::TriMesh_ArrayKernelT::HalfedgeIter` | Iterate through the halfedges of a polyhedron.|
|
||||
| `face_iterator` | `OpenMesh::TriMesh_ArrayKernelT::FaceIter` | Iterate through the faces of a polyhedron.|
|
||||
| `directed_category` | Inherits from `boost::bidirectional_graph_tag`, `boost::vertex_list_graph_tag` and `boost::edge_list_graph_tag` | |
|
||||
| `edge_parallel_category` | `boost::disallow_parallel_edge_tag` | Indicates that this graph does not support multiedges |
|
||||
| `traversal_category` | `boost::bidirectional_graph_tag` | Indicates that this graph is bidirectional |
|
||||
| `vertices_size_type` | `unsigned int` | The size type of the vertex list |
|
||||
| `edges_size_type` | `unsigned int` | The size type of the edge list |
|
||||
| `degree_size_type` | `unsigned` | The size type of the adjacency list |
|
||||
|
||||
|
||||
| `vertex_descriptor` | `Seam_mesh::vertex_descriptor` | Identify vertices in the graph. |
|
||||
| `edge_descriptor` | `Seam_mesh::edge_descriptor` | Identify edges in the graph. |
|
||||
| `halfedge_descriptor` | `Seam_mesh::halfedge_descriptor` | Identify halfedges in the graph. |
|
||||
| `face_descriptor` | `Seam_mesh::face_descriptor` | Identify faces in the graph. |
|
||||
| `adjacency_iterator` | `CGAL::Vertex_around_target_iterator<CGAL::Seam_mesh<T> >` | An iterator to traverse through the vertices adjacent to a vertex. Its value type is `vertex_descriptor`. |
|
||||
| `out_edge_iterator` | `CGAL::Out_edge_iterator<CGAL::Seam_mesh<T> >` | An iterator to traverse through the outgoing edges incident to a vertex. Its value type is `edge_descriptor`. |
|
||||
| `in_edge_iterator` | `CGAL::In_edge_iterator<CGAL::Seam_mesh<T> >` | An iterator to traverse through the incoming edges incident to a vertex. Its value type is `edge_descriptor`. |
|
||||
| `vertex_iterator` | `Seam_mesh::vertex_iterator` | An iterator to traverse through the vertices of the graph. Its value type is `vertex_descriptor`. |
|
||||
| `edge_iterator` | `Seam_mesh::edge_iterator` | An iterator to traverse through the edges of the graph. Its value type is `edge_descriptor`. |
|
||||
| `halfedge_iterator` | `Seam_mesh::halfedge_iterator` | An iterator to traverse through the halfedges of the graph. Its value type is `halfedge_descriptor`. |
|
||||
| `face_iterator` | `Seam_mesh::face_iterator` | An iterator to traverse through the faces of the graph. Its value type is `face_descriptor`. |
|
||||
| `directed_category` | `boost::undirected_tag` | This graph is not directed. |
|
||||
| `edge_parallel_category` | `boost::disallow_parallel_edge_tag` | This graph does not support multiedges. |
|
||||
| `traversal_category` | Inherits from `boost::bidirectional_graph_tag`, `boost::vertex_list_graph_tag`, and `boost::edge_list_graph_tag` | The ways in which the vertices in the graph can be traversed. |
|
||||
| `vertices_size_type` | `Seam_mesh::vertices_size_type` | The size type of the vertex list. |
|
||||
| `edges_size_type` | `Seam_mesh::edges_size_type` | The size type of the edge list. |
|
||||
| `degree_size_type` | `Seam_mesh::degree_size_type` | The size type of the adjacency list. |
|
||||
|
||||
\section BGLT2GT Specializations for the 2D Triangulation Classes
|
||||
|
||||
|
|
@ -182,7 +132,6 @@ so that they are model of the graph concepts
|
|||
<A HREF="http://www.boost.org/libs/graph/doc/BidirectionalGraph.html">`BidirectionalGraph`</A> and
|
||||
<A HREF="http://www.boost.org/libs/graph/doc/VertexAndEdgeListGraph.html">`VertexAndEdgeListGraph`</A>.
|
||||
|
||||
|
||||
The mapping between vertices and edges of the triangulation and the
|
||||
graph is rather straightforward, but there are some subtleties. The
|
||||
value type of the \sc{Bgl} iterators is the vertex or edge descriptor,
|
||||
|
|
@ -194,41 +143,41 @@ finite and infinite vertices and edges. As the edge weight computed
|
|||
with the default property map of \sc{Bgl} algorithms (obtained with
|
||||
`get(t, boost::edge_weight)`) is the length of the edge,
|
||||
the edge weight is not well defined for infinite edges. For algorithms
|
||||
that make use of the edge weight the user must therefore
|
||||
that make use of the edge weight, the user must therefore
|
||||
define a <A HREF="http://www.boost.org/libs/graph/doc/filtered_graph.html">`boost::filtered_graph`</A> or pass a property map to the
|
||||
algorithm that returns "infinity" for infinite edges.
|
||||
|
||||
Note also that when you derive from the class `CGAL::Triangulation_2`
|
||||
Note also that when you derive from the class `CGAL::Triangulation_2`,
|
||||
you must upcast the object in order to use this partial specialization.
|
||||
|
||||
For the user convenience, \cgal provides the partial specializations
|
||||
for all 2D triangulation classes.
|
||||
|
||||
The traits class `boost::graph_traits< CGAL::Triangulation_2<GT, TDS> >` and
|
||||
The traits classes `boost::graph_traits< CGAL::Triangulation_2<GT, TDS> >` and
|
||||
`boost::graph_traits< CGAL::Delaunay_triangulation_2<GT, TDS> >`
|
||||
provide the following types:
|
||||
|
||||
| Member | Value | Description |
|
||||
| :----------------------- | :----: | :---------- |
|
||||
| `vertex_descriptor` | `Triangulation::Vertex_handle` | The vertex descriptor |
|
||||
| `edge_descriptor` | `unspecified_type` | It is constructible from and convertible to `Triangulation::Edge`. The edge descriptor is not a simple typedef, but a proper class, because in an undirected graph the edges `(u,v)` and `(v,u)` must be equal. This is not the case for the Edge type of the triangulation. |
|
||||
| `adjacency_iterator` | `unspecified_type` | An iterator for the vertices adjacent to a vertex. Its value type is `vertex_descriptor` |
|
||||
| `out_edge_iterator` | `unspecified_type` | An iterator for the outgoing edges incident to a vertex. Its value type is `edge_descriptor`. |
|
||||
| `in_edge_iterator` | `unspecified_type` | An iterator for the incoming edges incident to a vertex. Its value type is `edge_descriptor`. |
|
||||
| `vertex_iterator` | `unspecified_type` | The vertex iterator type. Its value type is `vertex_descriptor` |
|
||||
| `edge_iterator` | `unspecified_type` | The edge iterator type, Its value type is `edge_descriptor` |
|
||||
| `directed_category` | `boost::undirected_tag` | |
|
||||
| `edge_parallel_category` | `boost::disallow_parallel_edge_tag` | Indicates that this graph does not support multiedges |
|
||||
| `traversal_category` | `boost::bidirectional_graph_tag` | Indicates that this graph is bidirectional |
|
||||
| `vertices_size_type` | `Triangulation::size_type` | The size type of the vertex list |
|
||||
| `edges_size_type` | `Triangulation::size_type` | The size type of the edge list |
|
||||
| `degree_size_type` | `Triangulation::size_type` | The size type of the adjacency list |
|
||||
| `vertex_descriptor` | `Triangulation::Vertex_handle` | Identify vertices in the graph. |
|
||||
| `edge_descriptor` | `unspecified_type` | Identify edges in the graph. It is constructible from and convertible to `Triangulation::Edge`. It is not a simple typedef, but a proper class, because in an undirected graph the edges `(u,v)` and `(v,u)` must be equal. This is not the case for the Edge type of the triangulation. |
|
||||
| `adjacency_iterator` | `unspecified_type` | An iterator to traverse through the vertices adjacent to a vertex. Its value type is `vertex_descriptor`. |
|
||||
| `out_edge_iterator` | `unspecified_type` | An iterator to traverse through the outgoing edges incident to a vertex. Its value type is `edge_descriptor`. |
|
||||
| `in_edge_iterator` | `unspecified_type` | An iterator to traverse through the incoming edges incident to a vertex. Its value type is `edge_descriptor`. |
|
||||
| `vertex_iterator` | `unspecified_type` | An iterator to traverse through the vertices of the graph. Its value type is `vertex_descriptor`. |
|
||||
| `edge_iterator` | `unspecified_type` | An iterator to traverse through the edges of the graph. Its value type is `edge_descriptor`. |
|
||||
| `directed_category` | `boost::undirected_tag` | This graph is not directed. |
|
||||
| `edge_parallel_category` | `boost::disallow_parallel_edge_tag` | This graph does not support multiedges. |
|
||||
| `traversal_category` | Inherits from `boost::bidirectional_graph_tag`, `boost::adjacency_graph_tag`, `boost::vertex_list_graph_tag`, and `boost::edge_list_graph_tag` | The ways in which the vertices in the graph can be traversed.. |
|
||||
| `vertices_size_type` | `Triangulation::size_type` | The size type of the vertex list. |
|
||||
| `edges_size_type` | `Triangulation::size_type` | The size type of the edge list. |
|
||||
| `degree_size_type` | `Triangulation::size_type` | The size type of the adjacency list. |
|
||||
|
||||
\section BGLArgtGT Specialization for the Arrangement Classes
|
||||
|
||||
Defined in `<CGAL/boost/graph/graph_traits_Arrangement_2.h>`
|
||||
|
||||
We provide partial specialization for the class `Arrangement_2`
|
||||
We provide partial specialization for the class `CGAL::Arrangement_2`
|
||||
so that it is model of the graph concepts
|
||||
<A HREF="http://www.boost.org/libs/graph/doc/BidirectionalGraph.html">`BidirectionalGraph`</A> and
|
||||
<A HREF="http://www.boost.org/libs/graph/doc/VertexAndEdgeListGraph.html">`VertexAndEdgeListGraph`</A>.
|
||||
|
|
@ -236,22 +185,87 @@ so that it is model of the graph concepts
|
|||
The const specialization, `boost::graph_traits< CGAL::Arrangement_2<Traits, Dcel> const>`
|
||||
is also defined, using the constant handles in the arrangement.
|
||||
|
||||
The traits class `boost::graph_traits< CGAL::Arrangement_2<T, DC> >`
|
||||
The traits class `boost::graph_traits< CGAL::Arrangement_2<T, Dcel> >`
|
||||
provides the following types:
|
||||
|
||||
| Member | Value | Description |
|
||||
| :----------------------- | :----: | :---------- |
|
||||
| `vertex_descriptor` | `Arrangement_2::Vertex_handle` | The vertex descriptor |
|
||||
| `edge_descriptor` | `Arrangement_2::Halfedge_handle` | The edge descriptor |
|
||||
| `vertex_descriptor` | `Arrangement_2::Vertex_handle` | Identify vertices in the graph. |
|
||||
| `edge_descriptor` | `Arrangement_2::Halfedge_handle` | Identify edges in the graph. |
|
||||
| `adjacency_iterator` | Not provided| |
|
||||
| `out_edge_iterator` | `unspecified_type` | An edge iterator which only iterates over the outgoing halfedges around a vertex. It corresponds to a `Arrangement_2::Halfedge_around_vertex_circulator` with the difference that its value type is an edge descriptor and not `Arrangement_2::Halfedge`|
|
||||
| `in_edge_iterator` | `unspecified_type` | An edge iterator which only iterates over the incoming edges around a vertex. It corresponds to a `Arrangement_2::Halfedge_around_vertex_circulator` with the difference that its value type is an edge descriptor and not `Arrangement_2::Halfedge`|
|
||||
| `vertex_iterator` | `unspecified_type` | An iterator corresponding to `Arrangement_2::Vertex_iterator`, with the difference that its value type is a vertex descriptor and not `Arrangement_2::Vertex` |
|
||||
| `edge_iterator` | `unspecified_type` | An iterator corresponding to `Arrangement_2::Halfedge_iterator` with the difference that its value type is an edge descriptor and not `Arrangement_2::Halfedge`|
|
||||
| `directed_category` | `boost::directed_tag` | |
|
||||
| `edge_parallel_category` | `boost::disallow_parallel_edge_tag` | Indicates that this graph does support multiedges |
|
||||
| `traversal_category` | `boost::bidirectional_graph_tag` | Indicates that this graph is bidirectional |
|
||||
| `vertices_size_type` | `Arrangement_2::size_type` | The size type of the vertex list |
|
||||
| `edges_size_type` | `Arrangement_2::size_type` | The size type of the edge list |
|
||||
| `degree_size_type` | `Arrangement_2::size_type` | The size type of the adjacency list |
|
||||
| `directed_category` | `boost::directed_tag` | This graph is directed. |
|
||||
| `edge_parallel_category` | `boost::allow_parallel_edge_tag` | This graph supports multiedges. |
|
||||
| `traversal_category` | Inherits from `boost::bidirectional_graph_tag`, `boost::vertex_list_graph_tag`, and `boost::edge_list_graph_tag` | The ways in which the vertices in the graph can be traversed. |
|
||||
| `vertices_size_type` | `Arrangement_2::Size` | The size type of the vertex list. |
|
||||
| `edges_size_type` | `Arrangement_2::Size` | The size type of the edge list. |
|
||||
| `degree_size_type` | `Arrangement_2::Size` | The size type of the adjacency list. |
|
||||
|
||||
\section BGLOMPAK Specialization for the OpenMesh::PolyMesh_ArrayKernelT Class
|
||||
|
||||
Defined in `<CGAL/boost/graph/graph_traits_PolyMesh_ArrayKernelT.h>`
|
||||
|
||||
We provide partial specialization for the class `OpenMesh::PolyMesh_ArrayKernelT` so that it is a model
|
||||
of the graph concepts
|
||||
<A HREF="http://www.boost.org/libs/graph/doc/BidirectionalGraph.html">`BidirectionalGraph`</A> and
|
||||
<A HREF="http://www.boost.org/libs/graph/doc/VertexAndEdgeListGraph.html">`VertexAndEdgeListGraph`</A>
|
||||
and of the concept `MutableFaceGraph`.
|
||||
|
||||
The traits class `boost::graph_traits<OpenMesh::PolyMesh_ArrayKernelT<K> >` provides the following types:
|
||||
|
||||
| Member | Value | Description |
|
||||
| :----------------------- | :----: | :---------- |
|
||||
| `vertex_descriptor` | `OpenMesh::PolyMesh_ArrayKernelT::VertexHandle` | Identify vertices in the graph. |
|
||||
| `edge_descriptor` | `unspecified_type` | Identify edges in the graph. |
|
||||
| `halfedge_descriptor` | `OpenMesh::PolyMesh_ArrayKernelT::HalfedgeHandle` | Identify halfedges in the graph. |
|
||||
| `face_descriptor` | `OpenMesh::PolyMesh_ArrayKernelT::FaceHandle` | Identify faces in the graph. |
|
||||
| `adjacency_iterator` | `unspecified_type` | An iterator to traverse through the vertices adjacent to a vertex. Its value type is `vertex_descriptor`. |
|
||||
| `out_edge_iterator` | `CGAL::Out_edge_iterator<OpenMesh::PolyMesh_ArrayKernelT<K> >` | An iterator to traverse through the outgoing edges incident to a vertex. Its value type is `edge_descriptor`. |
|
||||
| `in_edge_iterator` | `CGAL::In_edge_iterator<OpenMesh::PolyMesh_ArrayKernelT<K> >` | An iterator to traverse through the incoming edges incident to a vertex. Its value type is `edge_descriptor`. |
|
||||
| `vertex_iterator` | `OpenMesh::PolyMesh_ArrayKernelT::VertexIter` | An iterator to traverse through the vertices of the graph. Its value type is `vertex_descriptor`. |
|
||||
| `edge_iterator` | `unspecified_type` | An iterator to traverse through the edges of the graph. Its value type is `edge_descriptor`. |
|
||||
| `halfedge_iterator` | `OpenMesh::PolyMesh_ArrayKernelT::HalfedgeIter` | An iterator to traverse through the halfedges of the graph. Its value type is `halfedge_descriptor`. |
|
||||
| `face_iterator` | `OpenMesh::PolyMesh_ArrayKernelT::FaceIter` | An iterator to traverse through the faces of the graph. Its value type is `face_descriptor`. |
|
||||
| `directed_category` | `boost::undirected_tag` | This graph is not directed. |
|
||||
| `edge_parallel_category` | `boost::disallow_parallel_edge_tag` | This graph does not support multiedges. |
|
||||
| `traversal_category` | Inherits from `boost::bidirectional_graph_tag`, `boost::vertex_list_graph_tag`, and `boost::edge_list_graph_tag` | The ways in which the vertices in the graph can be traversed. |
|
||||
| `vertices_size_type` | `unsigned int` | The size type of the vertex list. |
|
||||
| `edges_size_type` | `unsigned int` | The size type of the edge list. |
|
||||
| `degree_size_type` | `unsigned int` | The size type of the adjacency list. |
|
||||
|
||||
\section BGLOMTMAK Specialization for the OpenMesh::TriMesh_ArrayKernelT Class
|
||||
|
||||
Defined in `<CGAL/boost/graph/graph_traits_TriMesh_ArrayKernelT.h>`
|
||||
|
||||
We provide partial specialization for the class `OpenMesh::TriMesh_ArrayKernelT` so that it is a model
|
||||
of the graph concepts
|
||||
<A HREF="http://www.boost.org/libs/graph/doc/BidirectionalGraph.html">`BidirectionalGraph`</A> and
|
||||
<A HREF="http://www.boost.org/libs/graph/doc/VertexAndEdgeListGraph.html">`VertexAndEdgeListGraph`</A>
|
||||
and of the concept `MutableFaceGraph`.
|
||||
|
||||
The traits class `boost::graph_traits<OpenMesh::TriMesh_ArrayKernelT<K> >` provides the following types:
|
||||
|
||||
| Member | Value | Description |
|
||||
| :----------------------- | :----: | :---------- |
|
||||
| `vertex_descriptor` | `OpenMesh::TriMesh_ArrayKernelT::VertexHandle` | Identify vertices in the graph. |
|
||||
| `edge_descriptor` | `unspecified_type` | Identify edges in the graph. |
|
||||
| `halfedge_descriptor` | `OpenMesh::TriMesh_ArrayKernelT::HalfedgeHandle` | Identify halfedges in the graph. |
|
||||
| `face_descriptor` | `OpenMesh::TriMesh_ArrayKernelT::FaceHandle` | Identify faces in the graph. |
|
||||
| `adjacency_iterator` | `unspecified_type` | An iterator to traverse through the vertices adjacent to a vertex. Its value type is `vertex_descriptor`. |
|
||||
| `out_edge_iterator` | `CGAL::Out_edge_iterator<OpenMesh::TriMesh_ArrayKernelT<K> >` | An iterator to traverse through the outgoing edges incident to a vertex. Its value type is `edge_descriptor`. |
|
||||
| `in_edge_iterator` | `CGAL::In_edge_iterator<OpenMesh::TriMesh_ArrayKernelT<K> >` | An iterator to traverse through the incoming edges incident to a vertex. Its value type is `edge_descriptor`. |
|
||||
| `vertex_iterator` | `OpenMesh::PolyMesh_ArrayKernelT::VertexIter` | An iterator to traverse through the vertices of the graph. Its value type is `vertex_descriptor`. |
|
||||
| `edge_iterator` | `unspecified_type` | An iterator to traverse through the edges of the graph. Its value type is `edge_descriptor`. |
|
||||
| `halfedge_iterator` | `OpenMesh::TriMesh_ArrayKernelT::HalfedgeIter` | An iterator to traverse through the halfedges of the graph. Its value type is `halfedge_descriptor`. |
|
||||
| `face_iterator` | `OpenMesh::TriMesh_ArrayKernelT::FaceIter` | An iterator to traverse through the faces of the graph. Its value type is `face_descriptor`. |
|
||||
| `directed_category` | `boost::undirected_tag` | This graph is not directed. |
|
||||
| `edge_parallel_category` | `boost::disallow_parallel_edge_tag` | This graph does not support multiedges. |
|
||||
| `traversal_category` | Inherits from `boost::bidirectional_graph_tag`, `boost::vertex_list_graph_tag`, and `boost::edge_list_graph_tag` | The ways in which the vertices in the graph can be traversed. |
|
||||
| `vertices_size_type` | `unsigned int` | The size type of the vertex list. |
|
||||
| `edges_size_type` | `unsigned int` | The size type of the edge list. |
|
||||
| `degree_size_type` | `unsigned int` | The size type of the adjacency list. |
|
||||
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
|
||||
namespace CGAL {
|
||||
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
template <typename HD>
|
||||
struct Seam_mesh_halfedge_descriptor
|
||||
{
|
||||
|
|
@ -91,24 +92,22 @@ struct Seam_mesh_halfedge_descriptor
|
|||
return 2 * hash_value(hd.tmhd) + static_cast<std::size_t>(hd.seam);
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
/*!
|
||||
\ingroup PkgBGLHelper
|
||||
|
||||
An adaptor for a triangle mesh which turns some marked edges into
|
||||
boundary edges when exploring the seam mesh with the generic BGL style
|
||||
functions.
|
||||
|
||||
\cgalModels `FaceGraph`
|
||||
|
||||
\tparam TM a model of `FaceGraph`
|
||||
\tparam SEM a model of `ReadablePropertyMap` with `boost::graph_traits<TM>::%edge_descriptor` as key type and `bool` as value type.
|
||||
\tparam SVM a model of `ReadablePropertyMap` with `boost::graph_traits<TM>::%vertex_descriptor` as key type and `bool` as value type.
|
||||
|
||||
\sa \link BGLSeam_meshGT `boost::graph_traits<Seam_mesh<TM> >` \endlink
|
||||
|
||||
*/
|
||||
|
||||
/// \ingroup PkgBGLHelper
|
||||
///
|
||||
/// This class is a data structure that takes a triangle mesh, further refered
|
||||
/// to as `underlying mesh` and turns some marked edges of that mesh into
|
||||
/// virtual boundary edges.
|
||||
///
|
||||
/// \cgalModels `FaceGraph`
|
||||
///
|
||||
/// \tparam TM a model of `FaceGraph`
|
||||
/// \tparam SEM a model of `ReadablePropertyMap` with `boost::graph_traits<TM>::%edge_descriptor` as key type and `bool` as value type.
|
||||
/// \tparam SVM a model of `ReadablePropertyMap` with `boost::graph_traits<TM>::%vertex_descriptor` as key type and `bool` as value type.
|
||||
///
|
||||
/// \sa \link BGLSeam_meshGT `boost::graph_traits<Seam_mesh<TM> >` \endlink
|
||||
///
|
||||
template <class TM, class SEM, class SVM>
|
||||
class Seam_mesh
|
||||
{
|
||||
|
|
@ -125,13 +124,11 @@ class Seam_mesh
|
|||
typedef boost::associative_property_map<Seam_vertex_uhm> Seam_vertex_pmap;
|
||||
|
||||
public:
|
||||
/// @cond CGAL_DOCUMENT_INTERNALS
|
||||
typedef typename boost::graph_traits<TM>::degree_size_type degree_size_type;
|
||||
typedef typename boost::graph_traits<TM>::vertices_size_type vertices_size_type;
|
||||
typedef typename boost::graph_traits<TM>::edges_size_type edges_size_type;
|
||||
typedef typename boost::graph_traits<TM>::halfedges_size_type halfedges_size_type;
|
||||
typedef typename boost::graph_traits<TM>::faces_size_type faces_size_type;
|
||||
/// @endcond
|
||||
|
||||
private:
|
||||
const TM& tm;
|
||||
|
|
@ -145,19 +142,47 @@ private:
|
|||
mutable vertices_size_type number_of_vertices;
|
||||
|
||||
public:
|
||||
/// Return the underlying mesh.
|
||||
/// returns the underlying mesh.
|
||||
const TM& mesh() const
|
||||
{
|
||||
return tm;
|
||||
}
|
||||
|
||||
/// @cond CGAL_DOCUMENT_INTERNALS
|
||||
#ifdef DOXYGEN_RUNNING
|
||||
/// This class represents a halfedge of the seam mesh.
|
||||
///
|
||||
/// It is composed of a halfedge of the mesh and a boolean to indicate whether
|
||||
/// this halfedge is on the virtual border or not.
|
||||
///
|
||||
/// \cgalModels `descriptor`
|
||||
/// \cgalModels `LessThanComparable`
|
||||
/// \cgalModels `Hashable`
|
||||
///
|
||||
class halfedge_descriptor
|
||||
{
|
||||
public:
|
||||
TM_halfedge_descriptor tmhd;
|
||||
bool seam;
|
||||
|
||||
/// A halfedge
|
||||
// descriptor
|
||||
/// %Default constructor
|
||||
halfedge_descriptor() : tmhd(), seam(false) { }
|
||||
|
||||
halfedge_descriptor(TM_halfedge_descriptor tmhd, bool seam = false)
|
||||
: tmhd(tmhd), seam(seam)
|
||||
{ }
|
||||
|
||||
/// Print the halfedge and if it is on a seam.
|
||||
friend std::ostream& operator<<(std::ostream& os, const halfedge_descriptor& hd)
|
||||
{
|
||||
os << hd.tmhd << ((hd.seam)?" on seam":"");
|
||||
return os;
|
||||
}
|
||||
};
|
||||
#else
|
||||
typedef Seam_mesh_halfedge_descriptor<TM_halfedge_descriptor> halfedge_descriptor;
|
||||
#endif
|
||||
|
||||
// iterator
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
struct halfedge_iterator
|
||||
: public boost::iterator_facade<halfedge_iterator,
|
||||
halfedge_descriptor,
|
||||
|
|
@ -212,13 +237,23 @@ public:
|
|||
return halfedge_descriptor(*hd, seam);
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
/// A vertex
|
||||
// descriptor
|
||||
/// This class represents a vertex of the seam mesh.
|
||||
///
|
||||
/// Implementation note: to properly duplicate vertices that are on seams,
|
||||
/// a vertex_descriptor is in fact represented as an halfedge of the underlying
|
||||
/// mesh.
|
||||
///
|
||||
/// \cgalModels `descriptor`
|
||||
/// \cgalModels `LessThanComparable`
|
||||
/// \cgalModels `Hashable`
|
||||
///
|
||||
struct vertex_descriptor
|
||||
{
|
||||
halfedge_descriptor hd;
|
||||
|
||||
/// %Default constructor
|
||||
vertex_descriptor() { }
|
||||
|
||||
vertex_descriptor(const halfedge_descriptor& h)
|
||||
|
|
@ -262,6 +297,7 @@ public:
|
|||
};
|
||||
|
||||
// iterator
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
class vertex_iterator
|
||||
: public boost::iterator_facade<vertex_iterator,
|
||||
vertex_descriptor,
|
||||
|
|
@ -354,9 +390,12 @@ public:
|
|||
return vertex_descriptor(*hd);
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
/// An edge
|
||||
// descriptor
|
||||
/// This class represents an edge of the seam mesh.
|
||||
///
|
||||
/// \cgalModels `descriptor`
|
||||
///
|
||||
struct edge_descriptor
|
||||
{
|
||||
halfedge_descriptor hd;
|
||||
|
|
@ -373,6 +412,7 @@ public:
|
|||
{ }
|
||||
};
|
||||
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
// iterator
|
||||
struct edge_iterator
|
||||
: public boost::iterator_facade<edge_iterator,
|
||||
|
|
@ -452,25 +492,35 @@ public:
|
|||
return edge_descriptor(halfedge_descriptor(*hd, false));
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
/// A face
|
||||
// descriptor
|
||||
/// This class represents a face of the seam mesh.
|
||||
///
|
||||
/// \cgalModels `descriptor`
|
||||
///
|
||||
typedef typename boost::graph_traits<TM>::face_descriptor face_descriptor;
|
||||
// iterator
|
||||
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
typedef typename boost::graph_traits<TM>::face_iterator face_iterator;
|
||||
#endif
|
||||
|
||||
public:
|
||||
/// Seam-related functions
|
||||
/// \name Seam-related functions
|
||||
/// @{
|
||||
|
||||
/// returns `true` if the vertex is on the seam.
|
||||
bool has_on_seam(TM_vertex_descriptor vd) const
|
||||
{
|
||||
return get(svm, vd);
|
||||
}
|
||||
|
||||
/// returns `true` if the edge is on the seam.
|
||||
bool has_on_seam(TM_edge_descriptor ed) const
|
||||
{
|
||||
return get(sem, ed);
|
||||
}
|
||||
|
||||
/// returns `true` if the halfedge is on the seam.
|
||||
bool has_on_seam(TM_halfedge_descriptor tmhd) const
|
||||
{
|
||||
return get(sem, CGAL::edge(tmhd, tm));
|
||||
|
|
@ -482,21 +532,41 @@ public:
|
|||
return has_on_seam(CGAL::edge(hd, tm));
|
||||
}
|
||||
|
||||
/// Return the number of seam edges in the seam mesh.
|
||||
edges_size_type number_of_seam_edges() const
|
||||
{
|
||||
return number_of_seams;
|
||||
}
|
||||
|
||||
/// Set the number of seam edges.
|
||||
void set_seam_edges_number(const edges_size_type sn) const
|
||||
{
|
||||
number_of_seams = sn;
|
||||
}
|
||||
/// @}
|
||||
|
||||
public:
|
||||
/// Iterators
|
||||
// vertices()
|
||||
/// \name Range Types
|
||||
///
|
||||
///@{
|
||||
|
||||
/// @cond CGAL_BEGIN_END
|
||||
/// Start iterator for vertices.
|
||||
vertex_iterator vertices_begin() const
|
||||
{
|
||||
Iterator_range<TM_halfedge_iterator> ir = CGAL::halfedges(tm);
|
||||
return vertex_iterator(ir, this);
|
||||
}
|
||||
|
||||
/// End iterator for vertices.
|
||||
vertex_iterator vertices_end() const
|
||||
{
|
||||
Iterator_range<TM_halfedge_iterator> ir = CGAL::halfedges(tm);
|
||||
return vertex_iterator(ir.second, this);
|
||||
}
|
||||
/// @endcond
|
||||
|
||||
/// returns the iterator range of the vertices of the mesh.
|
||||
Iterator_range<vertex_iterator> vertices() const
|
||||
{
|
||||
Iterator_range<TM_halfedge_iterator> ir = CGAL::halfedges(tm);
|
||||
|
|
@ -505,19 +575,24 @@ public:
|
|||
return make_range(beg, end);
|
||||
}
|
||||
|
||||
// halfedges()
|
||||
/// @cond CGAL_BEGIN_END
|
||||
/// Start iterator for halfedges.
|
||||
halfedge_iterator halfedges_begin() const
|
||||
{
|
||||
Iterator_range<TM_halfedge_iterator> ir = CGAL::halfedges(tm);
|
||||
return halfedge_iterator(ir, this);
|
||||
}
|
||||
|
||||
|
||||
/// End iterator for halfedges.
|
||||
halfedge_iterator halfedges_end() const
|
||||
{
|
||||
Iterator_range<TM_halfedge_iterator> ir = CGAL::halfedges(tm);
|
||||
return halfedge_iterator(ir.second, this);
|
||||
}
|
||||
/// @endcond
|
||||
|
||||
/// returns the iterator range of the halfedges of the mesh.
|
||||
Iterator_range<halfedge_iterator> halfedges() const
|
||||
{
|
||||
Iterator_range<TM_halfedge_iterator> ir = CGAL::halfedges(tm);
|
||||
|
|
@ -526,19 +601,23 @@ public:
|
|||
return make_range(beg, end);
|
||||
}
|
||||
|
||||
// edges()
|
||||
/// @cond CGAL_BEGIN_END
|
||||
/// Start iterator for edges.
|
||||
edge_iterator edges_begin() const
|
||||
{
|
||||
Iterator_range<TM_halfedge_iterator> ir = CGAL::halfedges(tm);
|
||||
return edge_iterator(ir, this);
|
||||
}
|
||||
|
||||
/// End iterator for edges.
|
||||
edge_iterator edges_end() const
|
||||
{
|
||||
Iterator_range<TM_halfedge_iterator> ir = CGAL::halfedges(tm);
|
||||
return edge_iterator(ir.second, this);
|
||||
}
|
||||
/// @endcond
|
||||
|
||||
/// returns the iterator range of the edges of the mesh.
|
||||
Iterator_range<edge_iterator> edges() const
|
||||
{
|
||||
Iterator_range<TM_halfedge_iterator> ir = CGAL::halfedges(tm);
|
||||
|
|
@ -547,24 +626,32 @@ public:
|
|||
return make_range(beg, end);
|
||||
}
|
||||
|
||||
// faces()
|
||||
/// @cond CGAL_BEGIN_END
|
||||
/// Start iterator for faces.
|
||||
face_iterator faces_begin() const
|
||||
{
|
||||
return CGAL::faces(tm).begin();
|
||||
}
|
||||
|
||||
/// End iterator for faces.
|
||||
face_iterator faces_end() const
|
||||
{
|
||||
return CGAL::faces(tm).end();
|
||||
}
|
||||
/// @endcond
|
||||
|
||||
/// returns the iterator range of the faces of the mesh.
|
||||
Iterator_range<face_iterator> faces() const
|
||||
{
|
||||
return CGAL::faces(tm);
|
||||
}
|
||||
///@}
|
||||
|
||||
public:
|
||||
/// Numbering
|
||||
/// \name Memory Management
|
||||
/// @{
|
||||
|
||||
/// returns the number of vertices in the seam mesh.
|
||||
vertices_size_type num_vertices() const
|
||||
{
|
||||
if(number_of_vertices == static_cast<vertices_size_type>(-1)) {
|
||||
|
|
@ -574,22 +661,30 @@ public:
|
|||
return number_of_vertices;
|
||||
}
|
||||
|
||||
/// returns the number of halfedges in the seam mesh.
|
||||
halfedges_size_type num_halfedges() const
|
||||
{
|
||||
return CGAL::num_halfedges(tm) + 2 * number_of_seams;
|
||||
}
|
||||
|
||||
/// returns the number of edges in the seam mesh.
|
||||
halfedges_size_type num_edges() const
|
||||
{
|
||||
return CGAL::num_edges(tm) + number_of_seams;
|
||||
}
|
||||
|
||||
/// returns the number of faces in the seam mesh.
|
||||
faces_size_type num_faces() const
|
||||
{
|
||||
return CGAL::num_faces(tm);
|
||||
}
|
||||
/// @}
|
||||
|
||||
public:
|
||||
/// \name Degree Functions
|
||||
/// @{
|
||||
|
||||
/// returns the number of incident halfedges of vertex `v`.
|
||||
degree_size_type degree(vertex_descriptor v) const
|
||||
{
|
||||
degree_size_type count(0);
|
||||
|
|
@ -604,25 +699,41 @@ public:
|
|||
|
||||
return count;
|
||||
}
|
||||
/// @}
|
||||
|
||||
public:
|
||||
/// Descriptors
|
||||
/// \name Switching between Halfedges and Edges
|
||||
///@{
|
||||
|
||||
/// returns the edge that contains halfedge `h` as one of its two halfedges.
|
||||
edge_descriptor edge(halfedge_descriptor h) const
|
||||
{
|
||||
return h;
|
||||
}
|
||||
|
||||
/// returns the halfedge corresponding to the edge `e`.
|
||||
halfedge_descriptor halfedge(edge_descriptor e) const
|
||||
{
|
||||
return e.hd;
|
||||
}
|
||||
/// @}
|
||||
|
||||
/// \name Low-Level Connectivity Convenience Functions
|
||||
///@{
|
||||
|
||||
/// returns an incoming halfedge of vertex `v`.
|
||||
/// If `v` is a seam vertex, this will be a halfedge that points to `v` and
|
||||
/// whose opposite is a seam halfedge.
|
||||
/// Otherwise, the rules of the underlying meshes are followed.
|
||||
/// \invariant `target(halfedge(v)) == v`
|
||||
halfedge_descriptor halfedge(vertex_descriptor v) const
|
||||
{
|
||||
TM_halfedge_descriptor h(v);
|
||||
return halfedge_descriptor(h, false /*not on seam*/);
|
||||
}
|
||||
|
||||
/// finds a halfedge between two vertices. Returns a default constructed
|
||||
/// `halfedge_descriptor`, if `source` and `target` are not connected.
|
||||
std::pair<halfedge_descriptor, bool> halfedge(vertex_descriptor u,
|
||||
vertex_descriptor v) const
|
||||
{
|
||||
|
|
@ -662,18 +773,22 @@ public:
|
|||
return std::make_pair(halfedge_descriptor(), false/*invalid*/);
|
||||
}
|
||||
|
||||
/// finds an edge between two vertices. Returns a default constructed
|
||||
/// `edge`, if `source` and `target` are not connected.
|
||||
std::pair<edge_descriptor, bool> edge(vertex_descriptor u, vertex_descriptor v) const
|
||||
{
|
||||
std::pair<halfedge_descriptor, bool> he = halfedge(u, v);
|
||||
return std::make_pair(he.first, he.second);
|
||||
}
|
||||
|
||||
/// returns a halfedge of face `f`.
|
||||
halfedge_descriptor halfedge(face_descriptor f) const
|
||||
{
|
||||
TM_halfedge_descriptor hd = CGAL::halfedge(f, tm);
|
||||
return halfedge_descriptor(hd, false/*not on seam*/);
|
||||
}
|
||||
|
||||
/// returns the face incident to halfedge `h`.
|
||||
face_descriptor face(halfedge_descriptor h) const
|
||||
{
|
||||
if(h.seam)
|
||||
|
|
@ -683,7 +798,7 @@ public:
|
|||
}
|
||||
|
||||
public:
|
||||
/// halfedge traveling
|
||||
/// returns the next halfedge within the incident face.
|
||||
halfedge_descriptor next(const halfedge_descriptor& hd) const
|
||||
{
|
||||
if((!hd.seam) && (!is_border(hd.tmhd, tm)))
|
||||
|
|
@ -698,6 +813,7 @@ public:
|
|||
!is_border(CGAL::opposite(*hatc, tm), tm));
|
||||
}
|
||||
|
||||
/// returns the previous halfedge within the incident face.
|
||||
halfedge_descriptor prev(const halfedge_descriptor& hd) const
|
||||
{
|
||||
if((!hd.seam) && (!is_border(hd.tmhd, tm)))
|
||||
|
|
@ -712,6 +828,7 @@ public:
|
|||
!is_border(CGAL::opposite(*hatc, tm), tm));
|
||||
}
|
||||
|
||||
/// returns the opposite halfedge of `hd`.
|
||||
halfedge_descriptor opposite(const halfedge_descriptor& hd) const
|
||||
{
|
||||
if(!hd.seam)
|
||||
|
|
@ -720,6 +837,7 @@ public:
|
|||
return halfedge_descriptor(CGAL::opposite(hd.tmhd, tm), false /*not on seam*/);
|
||||
}
|
||||
|
||||
/// returns the vertex the halfedge `h` emanates from.
|
||||
vertex_descriptor target(halfedge_descriptor hd) const
|
||||
{
|
||||
TM_halfedge_descriptor tmhd(hd);
|
||||
|
|
@ -739,6 +857,7 @@ public:
|
|||
return vertex_descriptor(halfedge_descriptor(tmhd));
|
||||
}
|
||||
|
||||
/// returns the vertex the halfedge `h` emanates from.
|
||||
vertex_descriptor source(const halfedge_descriptor& hd) const
|
||||
{
|
||||
return target(opposite(hd));
|
||||
|
|
@ -754,29 +873,18 @@ public:
|
|||
return target(e.hd);
|
||||
}
|
||||
|
||||
/// @endcond
|
||||
/// @}
|
||||
|
||||
/// Return the number of seam edges in the seam mesh.
|
||||
edges_size_type number_of_seam_edges() const
|
||||
{
|
||||
return number_of_seams;
|
||||
}
|
||||
|
||||
/// Set the number of seam edges.
|
||||
void set_seam_edges_number(const edges_size_type sn) const
|
||||
{
|
||||
number_of_seams = sn;
|
||||
}
|
||||
|
||||
/// Add seams to the property maps of the seam mesh.
|
||||
/// Add the seams to the property maps of the seam mesh.
|
||||
///
|
||||
/// In input, a seam edge is described by the pair of integers that correspond
|
||||
/// to the indices of the extremeties (vertices) of the edge that one wishes
|
||||
/// to mark as seam edge.
|
||||
/// to the indices of the extremeties (vertices) of the edge that should be
|
||||
/// marked as seam edge.
|
||||
///
|
||||
/// @pre filename should be the name of a CGAL selection file: seam edges
|
||||
/// are given as pairs of integers, on the third line of the file
|
||||
/// @pre A seam edge must be an edge of the graph
|
||||
/// are given as pairs of integers, on the third line of the file.
|
||||
/// @pre A seam edge must be an edge of the graph that is not on the boundary
|
||||
/// of the mesh.
|
||||
TM_halfedge_descriptor add_seams(const char* filename)
|
||||
{
|
||||
TM_halfedge_descriptor tmhd;
|
||||
|
|
|
|||
|
|
@ -230,6 +230,12 @@ namespace Polygon_mesh_processing {
|
|||
}
|
||||
|
||||
|
||||
/// Count the number of borders in the mesh.
|
||||
///
|
||||
/// @tparam PolygonMesh model of `HalfedgeGraph`.
|
||||
///
|
||||
/// @param pmesh the polygon mesh to which `faces` belong
|
||||
///
|
||||
template<typename PolygonMesh>
|
||||
unsigned int number_of_borders(const PolygonMesh& pmesh)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -89,17 +89,11 @@ The package performs the next checks:
|
|||
- the border is mapped onto a convex polygon.
|
||||
- the input mesh is triangular.
|
||||
- the input mesh is a surface with one connected component.
|
||||
- Postconditions:
|
||||
- one-to-one mapping.
|
||||
|
||||
- For <i>free</i> border parameterizations:
|
||||
- Preconditions:
|
||||
- the input mesh is triangular.
|
||||
- the input mesh is a surface with one connected component.
|
||||
- Postconditions:
|
||||
- one-to-one mapping.
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/// \defgroup PkgSurfaceParameterizationMainFunction Main Function
|
||||
|
|
@ -146,11 +140,5 @@ This package implements all common border parameterization methods:
|
|||
vertices).
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -244,10 +244,13 @@ Left: Julius Cesar mask parameterization with Authalic/circular border. Right: J
|
|||
|
||||
All combinations of uniform/arc-length and circle/square are provided by
|
||||
the following classes:
|
||||
`Circular_border_arc_length_parameterizer_3<TriangleMesh>`
|
||||
`Circular_border_uniform_parameterizer_3<TriangleMesh>`
|
||||
`Square_border_arc_length_parameterizer_3<TriangleMesh>`
|
||||
`Square_border_uniform_parameterizer_3<TriangleMesh>`
|
||||
|
||||
<UL>
|
||||
<LI>`Circular_border_arc_length_parameterizer_3<TriangleMesh>`
|
||||
<LI>`Circular_border_uniform_parameterizer_3<TriangleMesh>`
|
||||
<LI>`Square_border_arc_length_parameterizer_3<TriangleMesh>`
|
||||
<LI>`Square_border_uniform_parameterizer_3<TriangleMesh>`
|
||||
</UL>
|
||||
|
||||
\subsection Surface_mesh_parameterizationFreeBorderSurface Free Border Surface Parameterizations
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue