mirror of https://github.com/CGAL/cgal
Use extended Kd_tree information also for search / search_any_point.
Note that we don't want to use set_upper_bound, because it calls set_max_span, which the current split already avoids. Also fix Kd_tree_rectangle::lower() with fixed dimension.
This commit is contained in:
parent
482b0bc073
commit
cfd4e92153
|
|
@ -203,8 +203,7 @@ namespace CGAL {
|
||||||
static_cast<Internal_node_const_handle>(this);
|
static_cast<Internal_node_const_handle>(this);
|
||||||
// after splitting b denotes the lower part of b
|
// after splitting b denotes the lower part of b
|
||||||
Kd_tree_rectangle<FT,D> b_upper(b);
|
Kd_tree_rectangle<FT,D> b_upper(b);
|
||||||
b.split(b_upper, node->cutting_dimension(),
|
node->split_bbox(b, b_upper);
|
||||||
node->cutting_value());
|
|
||||||
|
|
||||||
if (q.outer_range_contains(b))
|
if (q.outer_range_contains(b))
|
||||||
it=node->lower()->tree_items(it);
|
it=node->lower()->tree_items(it);
|
||||||
|
|
@ -240,8 +239,7 @@ namespace CGAL {
|
||||||
static_cast<Internal_node_const_handle>(this);
|
static_cast<Internal_node_const_handle>(this);
|
||||||
// after splitting b denotes the lower part of b
|
// after splitting b denotes the lower part of b
|
||||||
Kd_tree_rectangle<FT,D> b_upper(b);
|
Kd_tree_rectangle<FT,D> b_upper(b);
|
||||||
b.split(b_upper, node->cutting_dimension(),
|
node->split_bbox(b, b_upper);
|
||||||
node->cutting_value());
|
|
||||||
|
|
||||||
if (q.outer_range_contains(b)){
|
if (q.outer_range_contains(b)){
|
||||||
result = node->lower()->any_tree_item();
|
result = node->lower()->any_tree_item();
|
||||||
|
|
@ -342,6 +340,7 @@ namespace CGAL {
|
||||||
|
|
||||||
typedef typename TreeTraits::FT FT;
|
typedef typename TreeTraits::FT FT;
|
||||||
typedef typename Kd_tree<TreeTraits,Splitter,UseExtendedNode>::Separator Separator;
|
typedef typename Kd_tree<TreeTraits,Splitter,UseExtendedNode>::Separator Separator;
|
||||||
|
typedef typename Kd_tree<TreeTraits,Splitter,UseExtendedNode>::D D;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
@ -470,7 +469,12 @@ namespace CGAL {
|
||||||
return Separator(cutting_dimension,cutting_value);
|
return Separator(cutting_dimension,cutting_value);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
void split_bbox(Kd_tree_rectangle<FT,D>& l, Kd_tree_rectangle<FT,D>& u) const {
|
||||||
|
l.lower()[cut_dim]=lower_low_val;
|
||||||
|
l.upper()[cut_dim]=lower_high_val;
|
||||||
|
u.lower()[cut_dim]=upper_low_val;
|
||||||
|
u.upper()[cut_dim]=upper_high_val;
|
||||||
|
}
|
||||||
};//internal node
|
};//internal node
|
||||||
|
|
||||||
template < class TreeTraits, class Splitter>
|
template < class TreeTraits, class Splitter>
|
||||||
|
|
@ -484,6 +488,7 @@ namespace CGAL {
|
||||||
|
|
||||||
typedef typename TreeTraits::FT FT;
|
typedef typename TreeTraits::FT FT;
|
||||||
typedef typename Kd_tree<TreeTraits,Splitter,Tag_false>::Separator Separator;
|
typedef typename Kd_tree<TreeTraits,Splitter,Tag_false>::Separator Separator;
|
||||||
|
typedef typename Kd_tree<TreeTraits,Splitter,Tag_false>::D D;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
@ -577,7 +582,10 @@ namespace CGAL {
|
||||||
return Separator(cutting_dimension,cutting_value);
|
return Separator(cutting_dimension,cutting_value);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
void split_bbox(Kd_tree_rectangle<FT,D>& l, Kd_tree_rectangle<FT,D>& u) const {
|
||||||
|
l.upper()[cut_dim]=cut_val;
|
||||||
|
u.lower()[cut_dim]=cut_val;
|
||||||
|
}
|
||||||
};//internal node
|
};//internal node
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -213,8 +213,10 @@ namespace CGAL {
|
||||||
return D::value;
|
return D::value;
|
||||||
}
|
}
|
||||||
|
|
||||||
const T* lower() const {return lower_;}
|
T* lower() {return lower_.data();}
|
||||||
const T* upper() const {return upper_;}
|
T* upper() {return upper_.data();}
|
||||||
|
const T* lower() const {return lower_.data();}
|
||||||
|
const T* upper() const {return upper_.data();}
|
||||||
|
|
||||||
Kd_tree_rectangle&
|
Kd_tree_rectangle&
|
||||||
operator=(const Kd_tree_rectangle& r)
|
operator=(const Kd_tree_rectangle& r)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue