diff --git a/Intersections_2/test/Intersections_2/test_intersections_2.cpp b/Intersections_2/test/Intersections_2/test_intersections_2.cpp index f501bf75211..073adae0846 100644 --- a/Intersections_2/test/Intersections_2/test_intersections_2.cpp +++ b/Intersections_2/test/Intersections_2/test_intersections_2.cpp @@ -798,9 +798,9 @@ int main() { CGAL::Set_ieee_double_precision pfr; - Test< CGAL::Simple_cartesian::Type > >().run(); + Test< CGAL::Simple_cartesian::Type > >().run(); Test< CGAL::Cartesian >().run(); - Test< CGAL::Homogeneous::Type > >().run(); + Test< CGAL::Homogeneous::Type > >().run(); Test< CGAL::Exact_predicates_inexact_constructions_kernel >().run(); Test< CGAL::Exact_predicates_exact_constructions_kernel >().run(); } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Corefinement/Face_graph_output_builder.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Corefinement/Face_graph_output_builder.h index ed08eaef152..0dd34e1753b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Corefinement/Face_graph_output_builder.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Corefinement/Face_graph_output_builder.h @@ -579,12 +579,12 @@ public: if ( opposite(next(h1, tm1), tm1) == prev(opposite(h1, tm1), tm1) ) { inter_edges_to_remove1.insert(edge(next(h1, tm1),tm1)); - inter_edges_to_remove1.insert(edge(next(h2, tm2),tm2)); + inter_edges_to_remove2.insert(edge(next(h2, tm2),tm2)); } if ( opposite(prev(h1, tm1), tm1) == next(opposite(h1, tm1), tm1) ) { inter_edges_to_remove1.insert(edge(prev(h1, tm1), tm1)); - inter_edges_to_remove1.insert(edge(prev(h2, tm2), tm2)); + inter_edges_to_remove2.insert(edge(prev(h2, tm2), tm2)); } } // same but for h2 @@ -598,12 +598,12 @@ public: if ( opposite(next(h2, tm2), tm2) == prev(opposite(h2, tm2), tm2) ) { inter_edges_to_remove1.insert(edge(next(h1, tm1),tm1)); - inter_edges_to_remove1.insert(edge(next(h2, tm2),tm2)); + inter_edges_to_remove2.insert(edge(next(h2, tm2),tm2)); } if ( opposite(prev(h2, tm2), tm2) == next(opposite(h2, tm2), tm2) ) { inter_edges_to_remove1.insert(edge(prev(h1, tm1), tm1)); - inter_edges_to_remove1.insert(edge(prev(h2, tm2), tm2)); + inter_edges_to_remove2.insert(edge(prev(h2, tm2), tm2)); } } } @@ -611,9 +611,15 @@ public: ++epp_it; } for(edge_descriptor ed : inter_edges_to_remove1) + { + put(marks_on_input_edges.ecm1, ed, false); intersection_edges1.erase(ed); + } for(edge_descriptor ed : inter_edges_to_remove2) + { + put(marks_on_input_edges.ecm2, ed, false); intersection_edges2.erase(ed); + } // (1) Assign a patch id to each facet indicating in which connected // component limited by intersection edges of the surface they are. diff --git a/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Basic_predicates_C2.h b/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Basic_predicates_C2.h index fab693cce20..6eb2fd2e803 100644 --- a/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Basic_predicates_C2.h +++ b/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Basic_predicates_C2.h @@ -143,8 +143,11 @@ public: static FT to_ft(const Sqrt_3& x) { - FT sqrt_e = compute_sqrt( to_ft(x.e()), FT_Has_sqrt() ); - FT sqrt_f = compute_sqrt( to_ft(x.f()), FT_Has_sqrt() ); + // If the number type does not offer a square root, x.e() and x.f() (which are of type sqrt_1) + // might be negative after (approximately) evaluating them. Taking the max sanitize these values + // to ensure that we do not take the square root of a negative number. + FT sqrt_e = compute_sqrt( (std::max)(FT(0), to_ft(x.e())), FT_Has_sqrt() ); + FT sqrt_f = compute_sqrt( (std::max)(FT(0), to_ft(x.f())), FT_Has_sqrt() ); FT sqrt_ef = sqrt_e * sqrt_f; return to_ft(x.a()) + to_ft(x.b()) * sqrt_e + to_ft(x.c()) * sqrt_f + to_ft(x.d()) * sqrt_ef;