Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Bug in CGAL regular_triangulations?

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Bug in CGAL regular_triangulations?


Chronological Thread 
  • From: "Sebastien Loriot (GeometryFactory)" <>
  • To:
  • Subject: Re: [cgal-discuss] Bug in CGAL regular_triangulations?
  • Date: Fri, 18 Apr 2014 12:06:58 +0200
  • Organization: GeometryFactory

On 04/14/2014 08:48 PM, Sebastien Loriot (GeometryFactory) wrote:
On 04/14/2014 04:22 PM, Philip Moseley wrote:
Hello,

I'm using CGAL triangulations to mesh a set of points, and in some
circumstances I get the following error:

terminate called after throwing an instance of
'CGAL::Precondition_exception'
what(): CGAL ERROR: precondition violation!
Expr: orientation(p0, p1, p2, p3) == POSITIVE
File: /usr/include/CGAL/Regular_triangulation_3.h
Line: 1010
Aborted

I'm running Debian unstable, and this problem appears with the version
4.4-1 in the repositories, as well as the 4.4 release I downloaded
manually from the CGAL website. However, the code works as expected with
the older 4.0-5 in the Debian repos.

Attached is a short example which fails with this error. I receive the
error when itr==164. With CGAL=4.0-5 this test program ends when
itr==219, which I believe to be correct.

Is this a bug, or am I doing something foolish? Thanks!
Philip

Your code is working with CGAL-4.2 but not with CGAL-4.3 nor CGAL-4.4.
I'll investigate and let you know.

Sebastien.

Got it!
It was a nasty one.

Please try again and let me know if you experience another issue.

Best regards,

Sebastien.
diff --git a/include/CGAL/Lazy.h b/include/CGAL/Lazy.h
index 20725ea..8bcd623 100644
--- a/Filtered_kernel/include/CGAL/Lazy.h
+++ b/Filtered_kernel/include/CGAL/Lazy.h
@@ -1596,6 +1596,7 @@ struct Lazy_construction_variant {
                                          typename Type_mapper<L3, LK, EK>::type)>::type ET;
 
     CGAL_BRANCH_PROFILER(std::string(" failures/calls to   : ") + std::string(CGAL_PRETTY_FUNCTION), tmp);
+    Protect_FPU_rounding<Protection> P;
     try {
       Lazy<AT, ET, EFT, E2A> lazy(new Lazy_rep_3<AT, ET, AC, EC, E2A, L1, L2, L3>(AC(), EC(), l1, l2, l3));
 



Archive powered by MHonArc 2.6.18.

Top of Page