QCAD
Open Source 2D CAD
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
RSpatialIndex.h
Go to the documentation of this file.
1 
20 #ifndef RSPATIALINDEX_H
21 #define RSPATIALINDEX_H
22 
23 #include "core_global.h"
24 
25 // MSVC <= 2008 does not have this:
26 //#include <stdint.h>
27 
28 #include <QSet>
29 #include <QList>
30 
31 #include "RBox.h"
32 #include "RDebug.h"
33 #include "RMath.h"
34 #include "RRequireHeap.h"
35 #include "RSpatialIndexVisitor.h"
36 
38 public:
39  RSpatialIndexDebugVisitor(QDebug dbg) : dbg(dbg) {}
41  virtual void visitData(
42  int id,
43  int pos,
44  double x1, double y1, double z1,
45  double x2, double y2, double z2);
46 
47  virtual void visitNode(
48  double x1, double y1, double z1,
49  double x2, double y2, double z2) {
50  Q_UNUSED(x1)
51  Q_UNUSED(y1)
52  Q_UNUSED(z1)
53  Q_UNUSED(x2)
54  Q_UNUSED(y2)
55  Q_UNUSED(z2)
56  }
57 
58  QDebug dbg;
59  QList<QPair<int, int> > matches;
60 };
61 
62 
70 public:
72  }
73 
74  virtual ~RSpatialIndex() {
75  }
76 
77  static qint64 getSIId(int id, int pos);
78  static int getId(qint64 siid);
79  static int getPos(qint64 siid);
80 
81  virtual void clear() = 0;
82 
83  virtual void bulkLoad(const QList<int>& ids, const QList<QList<RBox> >& bbs);
84 
85  virtual void bulkLoadSimple(const QList<int>& ids, const QList<RBox>& bbs);
86 
90  virtual void addToIndex(
91  int id, int pos,
92  double x1, double y1, double z1,
93  double x2, double y2, double z2
94  ) = 0;
95 
99  virtual void addToIndex(
100  int id, int pos,
101  const RBox& bb
102  );
103 
108  virtual void addToIndex(
109  int id,
110  const QList<RBox>& bbs
111  );
112 
116  //virtual void removeFromIndex(int id) = 0;
117 
122  virtual bool removeFromIndex(
123  int id, int pos,
124  double x1, double y1, double z1,
125  double x2, double y2, double z2) = 0;
126 
131  virtual bool removeFromIndex(int id, int pos, const RBox& bb);
132 
137  virtual bool removeFromIndex(int id, const QList<RBox>& bb);
138 
153  virtual QMap<int, QSet<int> > queryIntersected(
154  double x1, double y1, double z1,
155  double x2, double y2, double z2,
156  RSpatialIndexVisitor* dataVisitor=NULL
157  ) = 0;
158 
163  virtual QMap<int, QSet<int> > queryIntersected(
164  const RBox& b,
165  RSpatialIndexVisitor* dataVisitor=NULL
166  );
167 
181  virtual QMap<int, QSet<int> > queryContained(
182  double x1, double y1, double z1,
183  double x2, double y2, double z2,
184  RSpatialIndexVisitor* dataVisitor=NULL
185  ) = 0;
186 
191  virtual QMap<int, QSet<int> > queryContained(
192  const RBox& b,
193  RSpatialIndexVisitor* dataVisitor=NULL
194  );
195 
205  virtual QMap<int, QSet<int> > queryNearestNeighbor(
206  unsigned int k,
207  double x, double y, double z,
208  RSpatialIndexVisitor* dataVisitor=NULL
209  ) = 0;
210 
211  virtual QPair<int, int> queryNearestNeighbor(double x, double y, double z);
212 
213 protected:
215 };
216 
217 QCADCORE_EXPORT QDebug operator<<(QDebug dbg, RSpatialIndex& si);
218 
220 
221 #endif