From 0d76fac839cbc72ef8a6cab5a0ed67f1656e3bdf Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Fri, 30 Dec 2016 17:17:26 +0100 Subject: [PATCH] Try to deal with borders but border vertex coordinates are wrong --- .../include/CGAL/Subdivision_method_impl_3.h | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/Subdivision_method_3/include/CGAL/Subdivision_method_impl_3.h b/Subdivision_method_3/include/CGAL/Subdivision_method_impl_3.h index 8c99c3d0699..70a67573e14 100644 --- a/Subdivision_method_3/include/CGAL/Subdivision_method_impl_3.h +++ b/Subdivision_method_3/include/CGAL/Subdivision_method_impl_3.h @@ -47,6 +47,7 @@ namespace Subdivision_method_3 { typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; + typedef typename boost::graph_traits::edge_descriptor edge_descriptor; typedef typename boost::graph_traits::vertex_iterator vertex_iterator; typedef typename boost::graph_traits::edge_iterator edge_iterator; @@ -93,8 +94,8 @@ namespace Subdivision_method_3 { for (size_t i = 0; i < num_facet; i++, ++fitr) mask.facet_node(*fitr, face_point_buffer[i]); +#if 0 size_t sb = 0; // AF p.size_of_border_edges(); - edge_iterator eitr = edges(p).first; for (size_t i = 0; i < num_edge-sb; i++, ++eitr) mask.edge_node(halfedge(*eitr,p), edge_point_buffer[i]); @@ -103,10 +104,25 @@ namespace Subdivision_method_3 { v_onborder[v] = true; mask.border_node(halfedge(*eitr,p), edge_point_buffer[i], vertex_point_buffer[v]); } - +#else + { + std::size_t i = 0; + BOOST_FOREACH(edge_descriptor ed, edges(p)){ + if(is_border(ed,p)){ + int v = v_index[target(ed,p)]; + v_onborder[v] = true; + mask.border_node(halfedge(ed,p), edge_point_buffer[i], vertex_point_buffer[v]); + + }else{ + mask.edge_node(halfedge(ed,p), edge_point_buffer[i]); + } + ++i; + } + } +#endif vertex_iterator vitr = vertices(p).first; for (size_t i = 0; i < num_vertex; i++, ++vitr) - if (!v_onborder[i]) mask.vertex_node(*vitr, vertex_point_buffer[i]); + if (!v_onborder[v_index[*vitr]]) mask.vertex_node(*vitr, vertex_point_buffer[i]); // Build the connectivity using insert_vertex() and insert_edge() // 1. insert_vertex() to all edges and set them to new positions @@ -116,7 +132,7 @@ namespace Subdivision_method_3 { // 4. insert_edge() between all other new inserted vertices of step 1 and // the new inserted vertex of step 3 // Step 1. - eitr = edges(p).first; + edge_iterator eitr = edges(p).first; for (size_t i = 0; i < num_edge; i++, ++eitr) { vertex_descriptor vh = PD::insert_vertex(p, halfedge(*eitr,p)); put(vpm, vh, edge_point_buffer[i]);