Merge branch 'releases/CGAL-4.14-branch'

# Conflicts:
#	Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Corefinement/Face_graph_output_builder.h
This commit is contained in:
Laurent Rineau 2019-07-01 11:13:42 +02:00
commit b18a17eba7
3 changed files with 17 additions and 8 deletions

View File

@ -798,9 +798,9 @@ int main()
{
CGAL::Set_ieee_double_precision pfr;
Test< CGAL::Simple_cartesian<typename CGAL::internal::Exact_field_selector<void*>::Type > >().run();
Test< CGAL::Simple_cartesian<CGAL::internal::Exact_field_selector<void*>::Type > >().run();
Test< CGAL::Cartesian<double> >().run();
Test< CGAL::Homogeneous<typename CGAL::internal::Exact_field_selector<void*>::Type > >().run();
Test< CGAL::Homogeneous<CGAL::internal::Exact_field_selector<void*>::Type > >().run();
Test< CGAL::Exact_predicates_inexact_constructions_kernel >().run();
Test< CGAL::Exact_predicates_exact_constructions_kernel >().run();
}

View File

@ -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.

View File

@ -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;