diff --git a/AABB_tree/examples/AABB_tree/AABB_polyhedron_edge_example.cpp b/AABB_tree/examples/AABB_tree/AABB_polyhedron_edge_example.cpp index 5013ad3f23d..4c1e5aa9fe3 100644 --- a/AABB_tree/examples/AABB_tree/AABB_polyhedron_edge_example.cpp +++ b/AABB_tree/examples/AABB_tree/AABB_polyhedron_edge_example.cpp @@ -55,7 +55,7 @@ int main(void) // constructs the AABB tree and the internal search tree for // efficient projection computations. Tree tree(polyhedron.edges_begin(),polyhedron.edges_end()); - tree.construct_search_tree(); + tree.accelerate_distance_queries(); // counts #intersections with a triangle Triangle triangle(p,q,r); diff --git a/AABB_tree/examples/AABB_tree/AABB_segment_3_example.cpp b/AABB_tree/examples/AABB_tree/AABB_segment_3_example.cpp index 54b46504bd2..8e1f898e21c 100644 --- a/AABB_tree/examples/AABB_tree/AABB_segment_3_example.cpp +++ b/AABB_tree/examples/AABB_tree/AABB_segment_3_example.cpp @@ -59,7 +59,7 @@ int main(void) // constructs the AABB tree and the internal search tree for // efficient projection computations. Tree tree(segments.begin(),segments.end()); - tree.construct_search_tree(); + tree.accelerate_distance_queries(); // counts #intersections with a plane Plane plane(a,b,d); diff --git a/AABB_tree/include/CGAL/AABB_traits.h b/AABB_tree/include/CGAL/AABB_traits.h index 2d64061fefb..94378496938 100644 --- a/AABB_tree/include/CGAL/AABB_traits.h +++ b/AABB_tree/include/CGAL/AABB_traits.h @@ -56,6 +56,7 @@ public: #endif typedef typename std::pair Object_and_primitive; + typedef typename std::pair Point_and_primitive; // types for search tree // TOFIX: how can we avoid repeating those? diff --git a/AABB_tree/include/CGAL/AABB_tree.h b/AABB_tree/include/CGAL/AABB_tree.h index 0515e213cb4..14e0453599b 100644 --- a/AABB_tree/include/CGAL/AABB_tree.h +++ b/AABB_tree/include/CGAL/AABB_tree.h @@ -134,9 +134,9 @@ namespace CGAL { private: + // clears internal KD tree void clear_search_tree() { - // clear KD tree delete m_p_search_tree; m_p_search_tree = NULL; m_search_tree_constructed = false; @@ -347,9 +347,11 @@ namespace CGAL { void intersection(const Point& query, const Primitive& primitive) { + // TOFIX // update m_closest_primitive if needed - Point new_closest_point = AABBTraits().closest_point(query, primitive, m_closest_point) - if(new_closest_point != ) + Point new_closest_point = + AABBTraits().closest_point(query, primitive, m_closest_point); + if(new_closest_point != m_closest_point) { m_closest_primitive = primitive; m_closest_point = new_closest_point; @@ -378,11 +380,6 @@ namespace CGAL { CGAL_assertion(!empty()); return m_data[0].reference_point(); } - Primitive any_primitive() - { - CGAL_assertion(!empty()); - return m_data[0]; - } public: Point best_hint(const Point& query) @@ -496,7 +493,7 @@ namespace CGAL { { CGAL_assertion(!m_data.empty()); - // iterate over primitives to get points on them + // iterate over primitives to get reference points on them std::vector points; typename std::vector::const_iterator it; for(it = m_data.begin(); it != m_data.end(); ++it) @@ -573,7 +570,8 @@ namespace CGAL { AABB_tree::closest_point(const Point& query, const Point& hint) { - Distance_traits distance_traits(query,hint); + Primitive hint_primitive = m_data[0]; + Distance_traits distance_traits(query,hint,hint_primitive); this->traversal(query, distance_traits); return distance_traits.closest_point(); } @@ -584,7 +582,7 @@ namespace CGAL { typename AABB_tree::Point AABB_tree::closest_point(const Point& query) { - const Point hint = best_hint(); + const Point hint = best_hint(query); return closest_point(query,hint); } @@ -610,19 +608,18 @@ namespace CGAL { // closest point with user-specified hint template typename AABB_tree::Primitive - AABB_tree::closest_primitive(const Point& query) + AABB_tree::closest_primitive(const Point& query) const { - const Point hint = best_hint(); - return closest_primitive(query,hint); + return closest_primitive(query,best_hint(query)); } // closest point with user-specified hint template typename AABB_tree::Primitive AABB_tree::closest_primitive(const Point& query, - const Point& hint) + const Point& hint) const { - const Point hint = best_hint(); + const Point hint = best_hint(query); Distance_traits distance_traits(query,hint,any_primitive()); this->traversal(query, distance_traits); return distance_traits.closest_primitive();