mirror of https://github.com/CGAL/cgal
Allow removing degree 2 vertices incident to a triangle face
This commit is contained in:
parent
9e5dcbf548
commit
2db11f6a2c
|
|
@ -1869,7 +1869,6 @@ bool satisfies_link_condition(typename boost::graph_traits<Graph>::edge_descript
|
||||||
|
|
||||||
/// removes the target vertex of `h`, merging its incident edges into a single edge.
|
/// removes the target vertex of `h`, merging its incident edges into a single edge.
|
||||||
/// \pre `degree(target(h, g), g) == 2`.
|
/// \pre `degree(target(h, g), g) == 2`.
|
||||||
/// \pre there is no pre-existing edge between source(h, g) and target(next(h, g), g)
|
|
||||||
template <typename Graph>
|
template <typename Graph>
|
||||||
typename boost::graph_traits<Graph>::halfedge_descriptor
|
typename boost::graph_traits<Graph>::halfedge_descriptor
|
||||||
remove_degree_2_vertex(const typename boost::graph_traits<Graph>::halfedge_descriptor h,
|
remove_degree_2_vertex(const typename boost::graph_traits<Graph>::halfedge_descriptor h,
|
||||||
|
|
@ -1895,13 +1894,18 @@ remove_degree_2_vertex(const typename boost::graph_traits<Graph>::halfedge_descr
|
||||||
bool exists;
|
bool exists;
|
||||||
halfedge_descriptor huv;
|
halfedge_descriptor huv;
|
||||||
std::tie(huv, exists) = halfedge(v1, v2, g);
|
std::tie(huv, exists) = halfedge(v1, v2, g);
|
||||||
if(exists)
|
|
||||||
return boost::graph_traits<Graph>::null_halfedge();
|
|
||||||
|
|
||||||
if(is_border(h2, g))
|
if(is_border(h2, g))
|
||||||
{
|
{
|
||||||
CGAL_assertion(!is_border(h1, g));
|
CGAL_assertion(!is_border(h1, g));
|
||||||
|
|
||||||
|
if(exists)
|
||||||
|
{
|
||||||
|
Euler::remove_face(h1, g);
|
||||||
|
return huv;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
halfedge_descriptor oh1 = opposite(h1, g);
|
halfedge_descriptor oh1 = opposite(h1, g);
|
||||||
halfedge_descriptor nnh1 = next(next(h1, g), g);
|
halfedge_descriptor nnh1 = next(next(h1, g), g);
|
||||||
halfedge_descriptor ph2 = prev(h2, g);
|
halfedge_descriptor ph2 = prev(h2, g);
|
||||||
|
|
@ -1918,6 +1922,7 @@ remove_degree_2_vertex(const typename boost::graph_traits<Graph>::halfedge_descr
|
||||||
|
|
||||||
return h1;
|
return h1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CGAL_assertion(!is_border(h1, g) && !is_border(h2, g));
|
CGAL_assertion(!is_border(h1, g) && !is_border(h2, g));
|
||||||
|
|
@ -1925,6 +1930,10 @@ remove_degree_2_vertex(const typename boost::graph_traits<Graph>::halfedge_descr
|
||||||
halfedge_descriptor ph1 = prev(h1, g);
|
halfedge_descriptor ph1 = prev(h1, g);
|
||||||
halfedge_descriptor ph2 = prev(h2, g);
|
halfedge_descriptor ph2 = prev(h2, g);
|
||||||
Euler::remove_center_vertex(h, g);
|
Euler::remove_center_vertex(h, g);
|
||||||
|
|
||||||
|
if(exists)
|
||||||
|
return huv;
|
||||||
|
else
|
||||||
return Euler::split_face(ph1, ph2, g);
|
return Euler::split_face(ph1, ph2, g);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue