diff --git a/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h b/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h index 67006e8bbea..819ff13f88b 100644 --- a/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h +++ b/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h @@ -373,16 +373,23 @@ private: if(nearest_is_a_segment) { - if(compare_distance(p, seg, nearest_segment) == CGAL::SMALLER) - { - nearest_segment = seg; - result = previous; - } if(compare_distance(p, *it, nearest_segment) == CGAL::SMALLER) { nearest_vertex = it; nearest_is_a_segment = false; result = it; + if (possibly(angle(*previous, *it, p) == CGAL::ACUTE) && + compare_distance(p, seg, *nearest_vertex) == CGAL::SMALLER) + { + nearest_segment = seg; + nearest_is_a_segment = true; + result = previous; + } + } + else if(compare_distance(p, seg, nearest_segment) == CGAL::SMALLER) + { + nearest_segment = seg; + result = previous; } } else { @@ -391,7 +398,9 @@ private: nearest_vertex = it; result = it; } - if(compare_distance(p, seg, *nearest_vertex) == CGAL::SMALLER) + if ((nearest_vertex != it || + possibly(angle(*previous, *it, p) == CGAL::ACUTE)) && + compare_distance(p, seg, *nearest_vertex) == CGAL::SMALLER) { nearest_segment = seg; nearest_is_a_segment = true;