From eacf880034f5913359c034c09a5636f486585e04 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Wed, 10 Oct 2018 11:55:23 +0200 Subject: [PATCH 1/6] Add a const function datum() to AABB_tree and test. --- AABB_tree/include/CGAL/AABB_tree.h | 12 +++++ AABB_tree/test/AABB_tree/aabb_test_datum.cpp | 52 ++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 AABB_tree/test/AABB_tree/aabb_test_datum.cpp diff --git a/AABB_tree/include/CGAL/AABB_tree.h b/AABB_tree/include/CGAL/AABB_tree.h index d4275852147..f2deef7522a 100644 --- a/AABB_tree/include/CGAL/AABB_tree.h +++ b/AABB_tree/include/CGAL/AABB_tree.h @@ -646,6 +646,18 @@ public: else return this->any_reference_point_and_id(); } + + //! + //! \brief datum + //! \param p + //! \return + //! + typename internal::Primitive_helper::Datum_type + datum(Primitive& p)const + { + return internal::Primitive_helper:: + get_datum(p, this->traits()); + } private: //Traits class diff --git a/AABB_tree/test/AABB_tree/aabb_test_datum.cpp b/AABB_tree/test/AABB_tree/aabb_test_datum.cpp new file mode 100644 index 00000000000..3784b7ea00c --- /dev/null +++ b/AABB_tree/test/AABB_tree/aabb_test_datum.cpp @@ -0,0 +1,52 @@ + +#include +#include +#include + +#include + +#include +#include +#include +#include + +typedef CGAL::Epick K; +typedef K::Point_3 Point; +typedef K::Triangle_3 Triangle; +typedef CGAL::Surface_mesh Mesh; +typedef CGAL::AABB_face_graph_triangle_primitive Primitive; +typedef CGAL::AABB_face_graph_triangle_primitive Primitive_cached; + +typedef CGAL::AABB_traits Traits; +typedef CGAL::AABB_traits Traits_cached; +typedef CGAL::AABB_tree Tree; +typedef CGAL::AABB_tree Tree_cached; +typedef Tree::Primitive_id Primitive_id; +typedef Tree_cached::Primitive_id Primitive_id_cached; + +int main(void) +{ + Mesh m; + std::ifstream in("data/cube.off"); + if(in) + in >> m; + else{ + std::cout << "error reading bunny" << std::endl; + return 1; + } + + Tree t1(faces(m).begin(), faces(m).end(), m); + Tree_cached t2(faces(m).begin(), faces(m).end(), m); + + t1.build(); + t2.build(); + Primitive p1(faces(m).begin(), m); + Primitive_cached p2(faces(m).begin(), m); + Triangle tr1 = t1.datum(p1); + Triangle tr2 = t2.datum(p2); + if(tr1 != tr2) + return 1; + return 0; +} + From 8f6d68152bb94a521e43831799b243488bc407d3 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Wed, 10 Oct 2018 12:16:22 +0200 Subject: [PATCH 2/6] add doc --- AABB_tree/include/CGAL/AABB_tree.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/AABB_tree/include/CGAL/AABB_tree.h b/AABB_tree/include/CGAL/AABB_tree.h index f2deef7522a..e960946cf61 100644 --- a/AABB_tree/include/CGAL/AABB_tree.h +++ b/AABB_tree/include/CGAL/AABB_tree.h @@ -647,12 +647,16 @@ public: return this->any_reference_point_and_id(); } - //! - //! \brief datum - //! \param p - //! \return - //! + //! Returns the datum (geometric object) represented `p`. + //! The return type is + //! - typename `Primitive::Datum_reference` if `Primitive` defines that type. + //! - typename `Primitive::Datum` if it doesn't. +#ifndef DOXYGEN_RUNNING typename internal::Primitive_helper::Datum_type +#else + unspecified_type +#endif + datum(Primitive& p)const { return internal::Primitive_helper:: From 06c400ad86c5a693363b34426a182714d62fb23f Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Wed, 10 Oct 2018 14:42:02 +0200 Subject: [PATCH 3/6] Use a primitive without shared data in the test --- AABB_tree/test/AABB_tree/aabb_test_datum.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AABB_tree/test/AABB_tree/aabb_test_datum.cpp b/AABB_tree/test/AABB_tree/aabb_test_datum.cpp index 3784b7ea00c..e110c813504 100644 --- a/AABB_tree/test/AABB_tree/aabb_test_datum.cpp +++ b/AABB_tree/test/AABB_tree/aabb_test_datum.cpp @@ -16,7 +16,7 @@ typedef K::Triangle_3 Triangle; typedef CGAL::Surface_mesh Mesh; typedef CGAL::AABB_face_graph_triangle_primitive Primitive; typedef CGAL::AABB_face_graph_triangle_primitive Primitive_cached; + CGAL::Default, CGAL::Tag_false, CGAL::Tag_true> Primitive_cached; typedef CGAL::AABB_traits Traits; typedef CGAL::AABB_traits Traits_cached; From 1a9b9677a3be2c67cf91974c8c8b95f8d677a7a3 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Wed, 10 Oct 2018 14:55:45 +0200 Subject: [PATCH 4/6] more tests --- AABB_tree/test/AABB_tree/aabb_test_datum.cpp | 42 +++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/AABB_tree/test/AABB_tree/aabb_test_datum.cpp b/AABB_tree/test/AABB_tree/aabb_test_datum.cpp index e110c813504..dac02e5349b 100644 --- a/AABB_tree/test/AABB_tree/aabb_test_datum.cpp +++ b/AABB_tree/test/AABB_tree/aabb_test_datum.cpp @@ -15,15 +15,23 @@ typedef K::Point_3 Point; typedef K::Triangle_3 Triangle; typedef CGAL::Surface_mesh Mesh; typedef CGAL::AABB_face_graph_triangle_primitive Primitive; -typedef CGAL::AABB_face_graph_triangle_primitive Primitive_cached; - typedef CGAL::AABB_traits Traits; -typedef CGAL::AABB_traits Traits_cached; typedef CGAL::AABB_tree Tree; -typedef CGAL::AABB_tree Tree_cached; -typedef Tree::Primitive_id Primitive_id; -typedef Tree_cached::Primitive_id Primitive_id_cached; + +typedef CGAL::AABB_face_graph_triangle_primitive Primitive2; +typedef CGAL::AABB_traits Traits2; +typedef CGAL::AABB_tree Tree2; + +typedef CGAL::AABB_face_graph_triangle_primitive Primitive3; +typedef CGAL::AABB_traits Traits3; +typedef CGAL::AABB_tree Tree3; + +typedef CGAL::AABB_face_graph_triangle_primitive Primitive4; +typedef CGAL::AABB_traits Traits4; +typedef CGAL::AABB_tree Tree4; int main(void) { @@ -37,15 +45,29 @@ int main(void) } Tree t1(faces(m).begin(), faces(m).end(), m); - Tree_cached t2(faces(m).begin(), faces(m).end(), m); + Tree2 t2(faces(m).begin(), faces(m).end(), m); + Tree3 t3(faces(m).begin(), faces(m).end(), m); + Tree4 t4(faces(m).begin(), faces(m).end(), m); t1.build(); t2.build(); + t3.build(); + t4.build(); + Primitive p1(faces(m).begin(), m); - Primitive_cached p2(faces(m).begin(), m); + Primitive2 p2(faces(m).begin(), m); + Primitive3 p3(faces(m).begin(), m); + Primitive4 p4(faces(m).begin(), m); Triangle tr1 = t1.datum(p1); Triangle tr2 = t2.datum(p2); - if(tr1 != tr2) + Triangle tr3 = t3.datum(p3); + Triangle tr4 = t4.datum(p4); + if(tr1 != tr2 + || tr1 != tr3 + || tr1 != tr4 + || tr2 != tr3 + || tr2 != tr4 + || tr3 != tr4) return 1; return 0; } From 500c2a7200df306aba34ff2258d217dea8b247b9 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Thu, 11 Oct 2018 10:13:26 +0200 Subject: [PATCH 5/6] Only document Datum_reference as return type --- AABB_tree/include/CGAL/AABB_tree.h | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/AABB_tree/include/CGAL/AABB_tree.h b/AABB_tree/include/CGAL/AABB_tree.h index e960946cf61..5036319891d 100644 --- a/AABB_tree/include/CGAL/AABB_tree.h +++ b/AABB_tree/include/CGAL/AABB_tree.h @@ -648,16 +648,7 @@ public: } //! Returns the datum (geometric object) represented `p`. - //! The return type is - //! - typename `Primitive::Datum_reference` if `Primitive` defines that type. - //! - typename `Primitive::Datum` if it doesn't. -#ifndef DOXYGEN_RUNNING - typename internal::Primitive_helper::Datum_type -#else - unspecified_type -#endif - - datum(Primitive& p)const + typename AABBTraits::Primitive::Datum_reference datum(Primitive& p)const { return internal::Primitive_helper:: get_datum(p, this->traits()); From c05f2f98f83bb75a19949c6a7f3c34ff33e887d5 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Fri, 12 Oct 2018 10:21:13 +0200 Subject: [PATCH 6/6] Use the helper type but hide it in the doc --- AABB_tree/include/CGAL/AABB_tree.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/AABB_tree/include/CGAL/AABB_tree.h b/AABB_tree/include/CGAL/AABB_tree.h index 5036319891d..89c78aa8984 100644 --- a/AABB_tree/include/CGAL/AABB_tree.h +++ b/AABB_tree/include/CGAL/AABB_tree.h @@ -648,7 +648,12 @@ public: } //! Returns the datum (geometric object) represented `p`. - typename AABBTraits::Primitive::Datum_reference datum(Primitive& p)const +#ifndef DOXYGEN_RUNNING + typename internal::Primitive_helper::Datum_type +#else + typename AABBTraits::Primitive::Datum_reference +#endif + datum(Primitive& p)const { return internal::Primitive_helper:: get_datum(p, this->traits());