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; +} +