diff --git a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Edge_collapse_impl.h b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Edge_collapse_impl.h index 88a81af352c..a2c7b0c0ff4 100644 --- a/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Edge_collapse_impl.h +++ b/Surface_mesh_simplification/include/CGAL/Surface_mesh_simplification/Detail/Edge_collapse_impl.h @@ -111,6 +111,8 @@ void EdgeCollapse::Collect() CGAL_SURF_SIMPL_TEST_assertion_code ( size_type lInserted = 0 ) ; CGAL_SURF_SIMPL_TEST_assertion_code ( size_type lNotInserted = 0 ) ; + std::vector zero_length_edges; + undirected_edge_iterator eb, ee ; for ( boost::tie(eb,ee) = undirected_edges(mSurface); eb!=ee; ++eb ) { @@ -134,6 +136,7 @@ void EdgeCollapse::Collect() } else { + zero_length_edges.push_back(lProfile); CGAL_SURF_SIMPL_TEST_assertion_code ( ++ lNotInserted ) ; } @@ -145,6 +148,12 @@ void EdgeCollapse::Collect() CGAL_SURF_SIMPL_TEST_assertion ( lInserted + lNotInserted == mInitialEdgeCount ) ; + for (typename std::vector::iterator it=zero_length_edges.begin(),it_end=zero_length_edges.end();it!=it_end;++it) + { + Placement_type lPlacement = get_placement(*it); + Collapse(*it,lPlacement); + } + CGAL_ECMS_TRACE(0,"Initial edge count: " << mInitialEdgeCount ) ; }