From 179c89803b86b58dbecbf4ba3380101e8a649ffb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 24 Mar 2020 10:48:54 +0100 Subject: [PATCH] use default initialzed vertex index map there is no named param in Euler so do not introduce it here --- .../CGAL/boost/graph/Euler_operations.h | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/Euler_operations.h b/BGL/include/CGAL/boost/graph/Euler_operations.h index 31ed9a05a2a..de9a992571e 100644 --- a/BGL/include/CGAL/boost/graph/Euler_operations.h +++ b/BGL/include/CGAL/boost/graph/Euler_operations.h @@ -21,6 +21,7 @@ #include #include #include +#include namespace CGAL { @@ -756,7 +757,6 @@ add_face(const VertexRange& vr, Graph& g) // TODO: Try to replace the handwritten flat_map implementation by Small_unordered_map // - can no longer sort with v1::value_type Vertex_range; + typedef typename CGAL::GetInitializedVertexIndexMap::type Vid_map; + Vid_map vid = CGAL::get_initialized_vertex_index_map(pm); + typedef typename boost::property_traits::value_type Vid; + // TODO: add also this lambda as an Euler function? auto add_new_edge = [&pm](vertex_descriptor v1, vertex_descriptor v2) { @@ -808,7 +812,7 @@ void add_faces(const RangeofVertexRange& faces_to_add, PolygonMesh& pm) // because the outgoing edge from the smallest vertex is on the patch boundary if (edge_and_bool.second && is_border(halfedge(edge_and_bool.first, pm), pm)) { - outgoing_hedges[v2].push_back(opposite(halfedge(edge_and_bool.first, pm), pm)); + outgoing_hedges[get(vid,v2)].push_back(opposite(halfedge(edge_and_bool.first, pm), pm)); former_border_hedges.push_back(halfedge(edge_and_bool.first, pm)); } continue; @@ -816,14 +820,14 @@ void add_faces(const RangeofVertexRange& faces_to_add, PolygonMesh& pm) if (edge_and_bool.second) { halfedge_descriptor h = halfedge(edge_and_bool.first, pm); - outgoing_hedges[v1].push_back(h); + outgoing_hedges[get(vid,v1)].push_back(h); if (is_border(h, pm)) former_border_hedges.push_back(h); } else - outgoing_hedges[v1].push_back(add_new_edge(v1,v2)); - CGAL_assertion( source(outgoing_hedges[v1].back(), pm)==v1 ); - CGAL_assertion( target(outgoing_hedges[v1].back(), pm)==v2 ); + outgoing_hedges[get(vid,v1)].push_back(add_new_edge(v1,v2)); + CGAL_assertion( source(outgoing_hedges[get(vid,v1)].back(), pm)==v1 ); + CGAL_assertion( target(outgoing_hedges[get(vid,v1)].back(), pm)==v2 ); } } @@ -896,15 +900,16 @@ void add_faces(const RangeofVertexRange& faces_to_add, PolygonMesh& pm) }); } std::vector new_border_halfedges; - auto get_hedge = [&pm, &add_new_edge, &new_border_halfedges, &outgoing_hedges](vertex_descriptor v1, vertex_descriptor v2) + auto get_hedge = [&pm, &add_new_edge, &new_border_halfedges, &outgoing_hedges,&vid](vertex_descriptor v1, vertex_descriptor v2) { bool return_opposite = v2 < v1; if (return_opposite) std::swap(v1,v2); - typename std::vector::iterator it_find = - std::lower_bound(outgoing_hedges[v1].begin(), - outgoing_hedges[v1].end(), + const std::vector& v1_outgoing_hedges = outgoing_hedges[get(vid,v1)]; + typename std::vector::const_iterator it_find = + std::lower_bound(v1_outgoing_hedges.begin(), + v1_outgoing_hedges.end(), v2, [&pm](halfedge_descriptor h, vertex_descriptor v){return target(h,pm) < v;}); - if (it_find!=outgoing_hedges[v1].end() && target(*it_find, pm)==v2) + if (it_find!=v1_outgoing_hedges.end() && target(*it_find, pm)==v2) { return return_opposite ? opposite(*it_find, pm) : *it_find; }