Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Bug: Missing Compare_distance_2 in CGAL::Triangulation_euclidean_traits_xy_3

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Bug: Missing Compare_distance_2 in CGAL::Triangulation_euclidean_traits_xy_3


Chronological Thread 
  • From: "Sebastien Loriot (GeometryFactory)" <>
  • To:
  • Subject: Re: [cgal-discuss] Bug: Missing Compare_distance_2 in CGAL::Triangulation_euclidean_traits_xy_3
  • Date: Thu, 24 Jun 2010 10:08:00 +0200

Dear Lehtonen,

Thanks for you bug report.

Here is the patch and modified files that will be included in the 3.6.1 bug-fix release of CGAL.


Best,

S.

Lehtonen, Matti/HIIT wrote:
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef CGAL::Triangulation_euclidean_traits_xy_3<Kernel> Gt;
typedef CGAL::Delaunay_triangulation_2<Gt> DTr;

Call tr.nearest_vertex( Point_3(p), ... ) causes error
error: no type named �Compare_distance_2� in �class
CGAL::Triangulation_euclidean_traits_xy_3<CGAL::Filtered_kernel<CGAL::Simple_cartesian<double>


And it cannot be replaced with (error-prone, think ..._xz_3 trait) call
tr.nearest_vertex( Point_2( p.x(), p.y() ), ... )

Triangulation_euclidean_traits_xy_3.h:
// $URL:
svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.5-branch/Triangulation_2/include/CGAL/Triangulation_euclidean_traits_xy_3.h
$
// $Id: Triangulation_euclidean_traits_xy_3.h 48844 2009-04-21 18:28:04Z
spion $


Lehtonen, Matti

Researcher, head programmer - Helsinki Institute for Information Technology
HIIT
http://www.hiit.fi/

Index: include/CGAL/Triangulation_euclidean_traits_xy_3.h
===================================================================
--- include/CGAL/Triangulation_euclidean_traits_xy_3.h	(revision 57042)
+++ include/CGAL/Triangulation_euclidean_traits_xy_3.h	(working copy)
@@ -65,6 +65,31 @@
     }
 };
 
+template <class R>
+class Compare_distance_xy_3
+{
+public:
+  typedef typename R::Point_3   Point_3; 
+  typedef typename R::Point_2   Point_2;   
+  typedef typename R::FT        RT;
+  typename R::FT x(const Point_3 &p) const { return p.x(); }
+  typename R::FT y(const Point_3 &p) const { return p.y(); }
+
+  Point_2 project(const Point_3& p)
+  {
+    return Point_2(x(p),y(p));
+  }
+
+  Comparison_result operator()(const Point_3& p,const Point_3& q,const Point_3& r)
+  {
+    Point_2 p2 = project(p);
+    Point_2 q2 = project(q);
+    Point_2 r2 = project(r);
+    return compare_distance_to_point(p2,q2,r2);
+  }
+};
+
+
 template < class R >
 class Triangulation_euclidean_traits_xy_3 {
 public:
@@ -80,6 +105,7 @@
   typedef typename Rp::Compare_y_3          Compare_y_2;
   typedef Orientation_xy_3<Rp>              Orientation_2;
   typedef Side_of_oriented_circle_xy_3<Rp>  Side_of_oriented_circle_2;
+  typedef Compare_distance_xy_3<Rp>         Compare_distance_2;
   typedef typename Rp::Construct_segment_3   Construct_segment_2;
   typedef typename Rp::Construct_triangle_3  Construct_triangle_2;
 
@@ -128,6 +154,11 @@
   Construct_triangle_2  construct_triangle_2_object() const
     {return Construct_triangle_2();}
 
+  Compare_distance_2
+  compare_distance_2_object() const
+  {
+    return Compare_distance_2();
+  }    
 };
   
 
Index: include/CGAL/Triangulation_euclidean_traits_xz_3.h
===================================================================
--- include/CGAL/Triangulation_euclidean_traits_xz_3.h	(revision 57042)
+++ include/CGAL/Triangulation_euclidean_traits_xz_3.h	(working copy)
@@ -65,6 +65,31 @@
     }
 };
 
+template <class R>
+class Compare_distance_xz_3
+{
+public:
+  typedef typename R::Point_3   Point_3; 
+  typedef typename R::Point_2   Point_2;   
+  typedef typename R::FT        RT;
+  typename R::FT x(const Point_3 &p) const { return p.x(); }
+  typename R::FT y(const Point_3 &p) const { return p.z(); }
+
+  Point_2 project(const Point_3& p)
+  {
+    return Point_2(x(p),y(p));
+  }
+
+  Comparison_result operator()(const Point_3& p,const Point_3& q,const Point_3& r)
+  {
+    Point_2 p2 = project(p);
+    Point_2 q2 = project(q);
+    Point_2 r2 = project(r);
+    return compare_distance_to_point(p2,q2,r2);
+  }
+};
+
+
 template < class R >
 class Triangulation_euclidean_traits_xz_3 {
 public:
@@ -80,6 +105,7 @@
   typedef typename Rp::Compare_z_3          Compare_y_2;
   typedef Orientation_xz_3<Rp>              Orientation_2;
   typedef Side_of_oriented_circle_xz_3<Rp>  Side_of_oriented_circle_2;
+  typedef Compare_distance_xz_3<Rp>         Compare_distance_2;
   typedef typename Rp::Construct_segment_3   Construct_segment_2;
   typedef typename Rp::Construct_triangle_3  Construct_triangle_2;
 
@@ -126,6 +152,12 @@
 
   Construct_triangle_2  construct_triangle_2_object() const
     {return Construct_triangle_2();}
+
+  Compare_distance_2
+  compare_distance_2_object() const
+  {
+    return Compare_distance_2();
+  }    
 };
 
 CGAL_END_NAMESPACE
Index: include/CGAL/Triangulation_euclidean_traits_yz_3.h
===================================================================
--- include/CGAL/Triangulation_euclidean_traits_yz_3.h	(revision 57042)
+++ include/CGAL/Triangulation_euclidean_traits_yz_3.h	(working copy)
@@ -66,6 +66,31 @@
     }
 };
 
+template <class R>
+class Compare_distance_yz_3
+{
+public:
+  typedef typename R::Point_3   Point_3; 
+  typedef typename R::Point_2   Point_2;   
+  typedef typename R::FT        RT;
+  typename R::FT x(const Point_3 &p) const { return p.y(); }
+  typename R::FT y(const Point_3 &p) const { return p.z(); }
+
+  Point_2 project(const Point_3& p)
+  {
+    return Point_2(x(p),y(p));
+  }
+
+  Comparison_result operator()(const Point_3& p,const Point_3& q,const Point_3& r)
+  {
+    Point_2 p2 = project(p);
+    Point_2 q2 = project(q);
+    Point_2 r2 = project(r);
+    return compare_distance_to_point(p2,q2,r2);
+  }
+};
+
+
 template < class R >
 class Triangulation_euclidean_traits_yz_3 {
 public:
@@ -81,6 +106,7 @@
   typedef typename Rp::Compare_z_3          Compare_y_2;
   typedef Orientation_yz_3<Rp>              Orientation_2;
   typedef Side_of_oriented_circle_yz_3<Rp>  Side_of_oriented_circle_2;
+  typedef Compare_distance_yz_3<Rp>         Compare_distance_2;
   typedef typename Rp::Construct_segment_3   Construct_segment_2;
   typedef typename Rp::Construct_triangle_3  Construct_triangle_2;
 
@@ -128,6 +154,12 @@
 
   Construct_triangle_2  construct_triangle_2_object() const
     {return Construct_triangle_2();}
+
+  Compare_distance_2
+  compare_distance_2_object() const
+  {
+    return Compare_distance_2();
+  }    
 };
 
 

Attachment: patch.tgz
Description: application/compressed-tar




Archive powered by MHonArc 2.6.16.

Top of Page