Ophidian
 All Classes Namespaces Functions
spatial_index.h
1 #ifndef SPATIAL_INDEX_H
2 #define SPATIAL_INDEX_H
3 
4 #include "canvas.h"
5 
6 #include <boost/geometry/index/rtree.hpp>
7 
8 #include "../geometry/geometry.h"
9 
10 
11 namespace ophidian {
12 namespace gui {
13 
14 typedef std::pair<geometry::box<geometry::point<double> >, quad> rtree_node;
16 public:
17  bool operator()(const rtree_node & node1, const rtree_node & node2) const {
18  return node1.second == node2.second;
19  }
20 };
21 typedef boost::geometry::index::rtree<rtree_node,
22 boost::geometry::index::rstar<16>,
23 boost::geometry::index::indexable<rtree_node>, rtree_node_comparator> rtree;
24 
25 
27 {
28  canvas & m_canvas;
29  rtree m_index;
30 public:
31  spatial_index(canvas & can);
32 
33  void quad_create(quad the_quad);
34 
35  void quad_create(quad the_quad, const geometry::point<double> & p1, const geometry::point<double> & p2);
36 
37 
38  std::vector<quad> quads_containing(const geometry::point<double> & p1) const {
39  std::vector<rtree_node> result;
40  m_index.query(boost::geometry::index::contains(p1),
41  std::back_inserter(result));
42  std::vector<quad> the_quads(result.size());
43  for(std::size_t i = 0; i < result.size(); ++i)
44  the_quads[i] = result[i].second;
45 
46  return the_quads;
47  }
48  void quad_remove(quad the_quad);
49 
50  void clear();
51 
52 };
53 
54 }
55 }
56 
57 #endif // SPATIAL_INDEX_H
Definition: spatial_index.h:26
Definition: canvas.h:35
Definition: spatial_index.h:15
Definition: canvas.h:72