CGAL 4.4 - Triangulated Surface Mesh Simplification
|
The concept EdgeCollapsableSurfaceMesh
describes the requirements for the type of triangulated surface mesh that can be passed to the simplification algorithm.
The surface mesh must be structurally equivalent to a polyhedral surface having only triangular faces. It can have any number of connected components, boundaries (borders and holes) and handles (arbitrary genus).
Valid Expressions
Let v0v1
an edge of the triangulated surface mesh ecm
and v0
and v1
being the source and target vertices of that edge. The surface mesh simplification algorithm requires the call to the function halfedge_collapse(v0v1,ecm)
to be valid and to return the vertex not removed after collapsing the undirected edge (v0v1,v1v0)
.
For e
\( \in \{\) v0v1,v1v0
\( \}\), let en
and ep
be the next and previous edges, that is en = next_edge(e, surface_mesh)
, ep = prev_edge(e,surface_mesh)
, and let eno
and epo
be their opposite edges, that is eno = opposite_edge(en, surface_mesh)
and epo = opposite_edge(ep,surface_mesh)
.
Then, after the collapse of (v0v1,v1v0)
the following holds:
e
is no longer in surface_mesh
. v0,v1
\( \}\) is no longer in surface_mesh
while the other remains. Most of the time v0 is the vertex being removed but in some cases removing the edge e requires v1 to be removed. See Figure CollapseFigure5. Let vgone
be the removed vertex and vkept
be the remaining vertex. e
was a border edge, that is get(is_border, e, surface_mesh) == true
, then next_edge(ep) == en
, and prev_edge(en) == ep
. e
was not a border edge, that is get(is_border, e, surface_mesh) == false
, then ep
and epo
are no longer in surface_mesh
while en
and eno
are kept in surface_mesh
. ie
in in_edges(vgone,surface_mesh)
, target(ie,surface_mesh) == vkept
and source(opposite_edge(ie),surface_mesh) == vkept
. surface_mesh
. CGAL::Polyhedron_3<Traits>
(If it has only triangular faces), using the specialization boost::graph_traits< CGAL::Polyhedron_3<Traits> >
.Related Functions | |
(Note that these are not member functions.) | |
template<class EdgeCollapsableSurfaceMesh > | |
boost::graph_traits < EdgeCollapsableSurfaceMesh > ::vertex_descriptor | halfedge_collapse (typename boost::graph_traits< EdgeCollapsableSurfaceMesh >::edge_descriptor const &ue, EdgeCollapsableSurfaceMesh &surface_mesh) |
Collapses the undirected edge (v0v1,v1v0) replacing it with v0 or v1 , as described in the paragraph above. More... | |
|
related |
Collapses the undirected edge (v0v1,v1v0)
replacing it with v0
or v1
, as described in the paragraph above.
surface_mesh
to be an oriented 2-manifold with or without boundaries. Furthermore, the undirected edge (v0v1,v1v0)
must satisfy the link condition [1], which guarantees that the surface mesh is also 2-manifold after the edge collapse.