CGAL provides traits class implementations that allow to use the range
tree with point classes from the CGAL kernel as keys. These classes are
presented in Section . In
Section
we give the requirements that range tree
traits classes must fulfill. This allows the advanced user to develop
further range tree traits classes.
#include <CGAL/Range_tree_k.h>
| |
the type of the range tree traits class.
|
| ||
|
||
| ||
|
| |
Introduces an empty range tree R.
| |
| |
| |
Introduces a range tree R and initializes it with the data
in the range [first, last).
Precondition: value_type(first) == Traits::Key.
|
| ||||||
|
| |||||
Introduces a range tree R and initializes it with the data
in the range [first, last). This function can only be
applied once on an empty range tree.
Precondition: value_type(first) == Traits::Key. | ||||||
| ||||||
|
| |||||
writes all data that are in the interval window to the
container where out points to, and returns an output
iterator that points to the last location the function wrote to.
Precondition: value_type(out) == Traits::Key. |
#include <CGAL/Cartesian.h> #include <CGAL/Point_2.h> #include <CGAL/Range_segment_tree_traits.h> #include <CGAL/Range_tree_k.h> typedef CGAL_Cartesian<double> Rep; typedef CGAL_Range_tree_map_traits_2<Rep, char> Traits; typedef CGAL_Range_tree_2<Traits> Range_tree_2_type; void main() { /* pair<CGAL_Point_2<Rep>,char> */ typedef Traits::Key Key; /* pair<CGAL_Point_2<Rep>,CGAL_Point_2<Rep> > */ typedef Traits::Interval Interval; vector<Key> InputList, OutputList; InputList.push_back(Key(CGAL_Point_2<Rep>(8,5.1), 'a')); InputList.push_back(Key(CGAL_Point_2<Rep>(1,1.1), 'b')); InputList.push_back(Key(CGAL_Point_2<Rep>(3,2.1), 'c')); Range_tree_2_type Range_tree_2(InputList.begin(),InputList.end()); Interval win(Interval(CGAL_Point_2<Rep>(4,8.1),CGAL_Point_2<Rep>(5,8.2))); cerr << "\n Window Query:\n "; Range_tree_2.window_query(win, back_inserter(OutputList)); vector<Key>::iterator current=OutputList.begin(); while(current!=OutputList.end()) { cout << (*current).first.x() << "," << (*current).first.y() << ":" << (*current++).second << endl; } }