diff --git a/Polygon_mesh_processing/include/CGAL/internal/Point_inside_polygon_mesh/Point_inside_vertical_ray_cast.h b/Polygon_mesh_processing/include/CGAL/internal/Point_inside_polygon_mesh/Point_inside_vertical_ray_cast.h index 7797b23f0e6..6ff1e603807 100644 --- a/Polygon_mesh_processing/include/CGAL/internal/Point_inside_polygon_mesh/Point_inside_vertical_ray_cast.h +++ b/Polygon_mesh_processing/include/CGAL/internal/Point_inside_polygon_mesh/Point_inside_vertical_ray_cast.h @@ -81,7 +81,7 @@ private: { std::pair status( boost::logic::tribool(boost::logic::indeterminate), 0); - Ray_3_Triangle_3_traversal_traits > traversal_traits(status); + Ray_3_Triangle_3_traversal_traits > traversal_traits(status, tree.traits()); tree.traversal(ray, traversal_traits); if ( !boost::logic::indeterminate(status.first) ) diff --git a/Polygon_mesh_processing/include/CGAL/internal/Point_inside_polygon_mesh/Ray_3_Triangle_3_traversal_traits.h b/Polygon_mesh_processing/include/CGAL/internal/Point_inside_polygon_mesh/Ray_3_Triangle_3_traversal_traits.h index 5c824fe7bd7..8ebc86a22ab 100644 --- a/Polygon_mesh_processing/include/CGAL/internal/Point_inside_polygon_mesh/Ray_3_Triangle_3_traversal_traits.h +++ b/Polygon_mesh_processing/include/CGAL/internal/Point_inside_polygon_mesh/Ray_3_Triangle_3_traversal_traits.h @@ -38,11 +38,13 @@ protected: //the status indicates whether the query point is strictly inside the polyhedron, and the number of intersected triangles if yes std::pair& m_status; bool m_stop; + const AABBTraits& m_aabb_traits; typedef typename AABBTraits::Primitive Primitive; public: - Ray_3_Triangle_3_traversal_traits(std::pair& status) - :m_status(status),m_stop(false) + Ray_3_Triangle_3_traversal_traits(std::pair& status, + const AABBTraits& aabb_traits) + :m_status(status),m_stop(false), m_aabb_traits(aabb_traits) {m_status.first=true;} bool go_further() const { return !m_stop; } @@ -53,7 +55,7 @@ public: internal::r3t3_do_intersect_endpoint_position_visitor visitor; std::pair res= internal::do_intersect( - (internal::Primitive_helper::get_datum(primitive, AABBTraits())), + (internal::Primitive_helper::get_datum(primitive, m_aabb_traits)), query,Kernel(),visitor); if (res.first){ @@ -75,7 +77,7 @@ public: template bool do_intersect(const Query& query, const Node& node) const { - return AABBTraits().do_intersect_object()(query, node.bbox()); + return m_aabb_traits.do_intersect_object()(query, node.bbox()); } }; @@ -89,7 +91,8 @@ class Ray_3_Triangle_3_traversal_traits: typedef typename Kernel::Point_3 Point; typedef typename Base::Primitive Primitive; public: - Ray_3_Triangle_3_traversal_traits(std::pair& status):Base(status){} + Ray_3_Triangle_3_traversal_traits(std::pair& status, const AABBTraits& aabb_traits) + :Base(status, aabb_traits){} template bool do_intersect(const Query& query, const Bbox_3& bbox) const @@ -129,7 +132,7 @@ public: void intersection(const Query& query, const Primitive& primitive) { typename Kernel::Triangle_3 t - = (internal::Primitive_helper::get_datum(primitive, AABBTraits())); + = (internal::Primitive_helper::get_datum(primitive, this->m_aabb_traits)); if ( !do_intersect(query,t.bbox()) ) return; typename Kernel::Point_2 p0=z_project(t[0]);