IPointIndex.hpp
1 #pragma once
2 
3 #include "DM/config.hpp"
4 #include "DM/Handle.hpp"
5 #include "DM/Iterator.hpp"
6 #include "DM/IPoint.hpp"
7 #include "DM/IPointIndexLeaf.hpp"
8 #include "DM/IAddInfoStatistics.hpp"
9 #include "DM/IIndexStats.hpp"
10 
11 DM_NAMESPACE_BEGIN
12 
13 /// \brief Interface to a point index object managing the point objects within the datamanager
14 class DM_API IPointIndex : public ObjectBase
15 {
16  public:
17  // Iterator typedefs ============================================================================
18  typedef ConstIterator<IPoint> const_iterator_point; ///< Point iterator
19  typedef InsertIterator<IPoint> insert_iterator_point; ///< Point insert iterator (used in searchPoint functions)
20 
22  typedef Iterator<IPointIndexLeaf> iterator_leaf; ///< Leaf iterator
23  typedef InsertIterator<IPointIndexLeaf> insert_iterator_leaf; ///< Leaf insert iterator (used in searchPoint functions)
24 
25  virtual ~IPointIndex() {}
26 
27  // General memeber functions ====================================================================
28  virtual BoxHandle getLimit() const = 0; ///< get points based bounding box
29  virtual BoxHandle getIndexLimit() const = 0; ///< get index based bounding box (if no index bounding available the points based bounding box is returned)
30 
31  virtual int64_t sizePoint() const=0;
32 
33  virtual int64_t sizeLeaf() const=0;
34 
35  virtual double estimatePointDensity(bool fastEstimation = true) const = 0;
36 
37  // Iterator function ============================================================================
38  virtual const_iterator_point beginPoint(IteratorOrder order = IteratorOrder::internal) const = 0;
39  virtual const_iterator_point endPoint(IteratorOrder order = IteratorOrder::internal) const = 0;
40 
41  virtual const_iterator_leaf beginLeaf(IteratorOrder order = IteratorOrder::internal) const = 0;
42  virtual const_iterator_leaf endLeaf(IteratorOrder order = IteratorOrder::internal) const = 0;
43  virtual iterator_leaf beginLeaf(IteratorOrder order = IteratorOrder::internal) = 0;
44  virtual iterator_leaf endLeaf(IteratorOrder order = IteratorOrder::internal) = 0;
45 
46  virtual const_iterator_leaf beginLeaf(FilterHandle filter, WindowHandle limits = WindowHandle()) const = 0;
47  virtual const_iterator_leaf endLeaf(FilterHandle filter, WindowHandle limits = WindowHandle()) const = 0;
48 
49  virtual PointIndexLeafHandle getLeaf(const_iterator_point &it) = 0;
50  virtual PointIndexLeafHandle getLeaf(int64_t leafId) = 0;
51 
52  // access functions ============================================================================
53  virtual PointHandle getPoint(int64_t id) const = 0; ///< get point by id (if the id doesn't exist an empty handle is returned)
54 
55  // Spatial access functions =====================================================================
56  virtual void searchPoint(const IWindow &win, insert_iterator_point &insIt, bool includeRightBoundary = true) = 0;
57  virtual void searchPoint(const IBox &box, insert_iterator_point &insIt, bool includeRightBoundary = true) = 0;
58  virtual void searchPoint(const IPolygon &p, insert_iterator_point &insIt) = 0;
59  virtual void searchPoint(const ICircle &c, insert_iterator_point &instIt) = 0;
60  virtual void searchPoint(const ISphere &s, insert_iterator_point &instIt) = 0;
61  virtual void searchPoint(const ICylinder &c, insert_iterator_point &instIt) = 0;
62 
63  virtual void searchPoint(const IWindow &win, insert_iterator_point &insIt, insert_iterator_leaf &insLeaf, bool includeRightBoundary = true) = 0;
64  virtual void searchPoint(const IBox &box, insert_iterator_point &insIt, insert_iterator_leaf &insLeaf, bool includeRightBoundary = true) = 0;
65  virtual void searchPoint(const IPolygon &p, insert_iterator_point &insIt, insert_iterator_leaf &insLeaf) = 0;
66  virtual void searchPoint(const ICircle &c, insert_iterator_point &instIt, insert_iterator_leaf &insLeaf) = 0;
67  virtual void searchPoint(const ISphere &s, insert_iterator_point &instIt, insert_iterator_leaf &insLeaf) = 0;
68  virtual void searchPoint(const ICylinder &c, insert_iterator_point &instIt, insert_iterator_leaf &insLeaf) = 0;
69 
70  /// \brief k nearest neighbour search
71  /// potentially slow for the overall point index object. consider building a local kd tree -> IPointIndexLeaf
72  ///
73  /// \param[in] nnCount number of k neighbour to find
74  /// \param[in] queryPt base point for the neighbour search
75  /// \param[in] instIt insert iterator for collecting the found geometry objects
76  /// \param[in] maxDistance maximum distance (not squared distance) for finding geometry objects (use -1 disabling the distance limit)
77  /// \return distance to the furthest found geometry object or 'maxDistance' in case on object was found
78  virtual double searchPoint(int nnCount, const IPoint &queryPt, insert_iterator_point &instIt,
79  double maxDistance = -1) = 0;
80  /// \brief k nearest neighbour search
81  /// potentially slow for the overall point index object. consider building a local kd tree -> IPointIndexLeaf
82  ///
83  /// \param[in] nnCount number of k neighbour to find
84  /// \param[in] queryPt base point for the neighbour search
85  /// \param[in] instIt insert iterator for collecting the found geometry objects
86  /// \param[in] insLeaf leaf inster iterator for storing all leafs for which nearest neighbour points where returned
87  /// \param[in] maxDistance maximum distance (not squared distance) for finding geometry objects (use -1 disabling the distance limit)
88  /// \return distance to the furthest found geometry object or 'maxDistance' in case on object was found
89  virtual double searchPoint(int nnCount, const IPoint &queryPt, insert_iterator_point &instIt, insert_iterator_leaf &insLeaf,
90  double maxDistance = -1) = 0;
91 
92  // Memory consumption functions ================================================================
93  virtual int64_t sizePointCache() const = 0;
94  virtual void sizePointCache(int64_t size) = 0;
95 
96  // efficiency function. access leaf properties without loading point data into memory ===========
97  virtual BoxHandle getLimit(const const_iterator_leaf &it) const = 0;
98  virtual BoxHandle getIndexLimit(const const_iterator_leaf &it) const = 0;
99  virtual int64_t sizePoint(const const_iterator_leaf &it) const = 0;
100  virtual int64_t id(const const_iterator_leaf &it) const = 0;
101 
102  virtual AddInfoStatisticsHandle getAddInfoStatistics() const = 0;
103  virtual AddInfoStatisticsHandle getLeafAddInfoStatistics(const const_iterator_leaf &it) const = 0;
104  virtual IndexStatsHandle getIndexStatistics() const = 0;
105 
106  // get all leafs within window ==================================================================
107  virtual void searchLeaf(const IWindow &win, insert_iterator_leaf &insLeaf, bool includeRightBoundary = true) = 0;
108 
109  //drop all freeable memory object
110  virtual void freeMemory() const = 0;
111 
112  //gives the pointindex a hint for a possible tile size
113  virtual void tileSizeHint(double tilesize) = 0;
114 };
115 
116 typedef Handle< IPointIndex > PointIndexHandle;
117 
118 DM_NAMESPACE_END
Iterator< IPointIndexLeaf > iterator_leaf
Leaf iterator.
Definition: IPointIndex.hpp:22
Definition: Iterator.hpp:96
InsertIterator< IPoint > insert_iterator_point
Point insert iterator (used in searchPoint functions)
Definition: IPointIndex.hpp:19
2d window object
Definition: IWindow.hpp:11
Geometry object describing a finite 3d cylinder.
Definition: ICylinder.hpp:10
ConstIterator< IPoint > const_iterator_point
Point iterator.
Definition: IPointIndex.hpp:18
ConstIterator< IPointIndexLeaf > const_iterator_leaf
Leaf iterator.
Definition: IPointIndex.hpp:21
Geometry object describing a 3d box.
Definition: IBox.hpp:11
interface to a 2.5d polygon of arbitrary complexity
Definition: IPolygon.hpp:33
3d sphere object
Definition: ISphere.hpp:10
IteratorOrder
Definition: Iterator.hpp:9
Interface to a point index object managing the point objects within the datamanager.
Definition: IPointIndex.hpp:14
Definition: Iterator.hpp:17
Geometry object describing a 2d circle.
Definition: ICircle.hpp:11
Smart pointer class using reference counting with support for DM objects (see ObjectBase)
Definition: Handle.hpp:98
Definition: M/c++_api/inc/DM/ObjectBase.hpp:8
InsertIterator< IPointIndexLeaf > insert_iterator_leaf
Leaf insert iterator (used in searchPoint functions)
Definition: IPointIndex.hpp:23
3d point object
Definition: IPoint.hpp:14