IQueryBase.hpp
1 #pragma once
2 
3 
4 #include "DM/config.hpp"
5 #include "DM/Handle.hpp"
6 #include "DM/ObjectBase.hpp"
7 #include "DM/ICalculator.hpp"
8 
9 #include <assert.h>
10 
11 DM_NAMESPACE_BEGIN
12 
13 /// \brief range class for query geometry objects
14 struct DM_API RangeType {
15  struct textImpl;
16 
17  static CalculatorHandle as_calculator(const double &v);
18 
19  static constexpr double default_inc = 2.;
20 
21  RangeType() : textPimpl(0) {}
22  RangeType(const double& v) : Min(as_calculator(v)), textPimpl(0) {}
23  RangeType(const CalculatorHandle &v) : Min(v), textPimpl(0) {}
24  RangeType(const double& min, const double& max, const double& inc = default_inc) : Min(as_calculator(min)), Max(as_calculator(max)), Inc(as_calculator(inc)), textPimpl(0) {}
25  RangeType(const CalculatorHandle &min, const CalculatorHandle &max, const CalculatorHandle &inc = CalculatorHandle()) : Min(min), Max(max), Inc(inc), textPimpl(0) {}
26  ~RangeType();
27  RangeType clone() const;
28 
29  bool isEmpty() const { return !Min; }
30  bool isValue() const { return !Max; }
31  bool isRange() const { return Max; }
32  bool isConstant() const; ///< returns true if values are geometry independent (and the parameter less access function can be used)
33 
34  double value() const;
35  double min() const;
36  double max() const;
37  double increment() const;
38 
39  double value(const DM::IGeometry &pt) const;
40  double min(const DM::IGeometry &pt) const;
41  double max(const DM::IGeometry &pt) const;
42  double increment(const DM::IGeometry &pt) const;
43 
44  double maximumValue() const; ///< highest possible value that may be returned by this object (returns double max if no maximum value can be queried)
45 
46  RangeType operator*(const double &f) const;
47  RangeType operator*(const RangeType &r) const;
48 
49  bool operator==(const RangeType& o) const;
50 
51  const char* text() const;
52 
53  CalculatorHandle Min, Max, Inc;
54  mutable textImpl *textPimpl;
55 };
56 
57 enum struct QueryType
58 {
59  null, ///< undefined query type
60  fixed, ///< fixed region type
61  knn, ///<
62  incremental,
63  combined
64 };
65 
66 /// \brief Base class of all query objects
67 class DM_API IQueryBase : public ObjectBase
68 {
69 protected:
70  virtual ~IQueryBase() {}
71 
72 public:
73  /// get geometry type (kind of runtime type information)
74  virtual QueryType type() const = 0;
75 
76  /// returns dimension of query (2 or 3)
77  virtual int dimension() const = 0;
78 
79  /// returns the maximum search distance in 2d (or double max if no limits exists)
80  virtual double maxSearchDistance2D() const = 0;
81  /// returns the maximum search distance in 3d (or double max if no limits exists)
82  virtual double maxSearchDistance3D() const = 0;
83 
84  /// get an object copy
85  virtual IQueryBase* clone() const = 0;
86 
87  //get textual representation
88  virtual const char *text() const = 0;
89 };
90 
92 
93 
94 DM_NAMESPACE_END
range class for query geometry objects
Definition: IQueryBase.hpp:14
QueryType
Definition: IQueryBase.hpp:57
@ fixed
fixed region type
Base class of all query objects.
Definition: IQueryBase.hpp:67
Base class of all geometry objects.
Definition: IGeometry.hpp:26
Definition: M/c++_api/inc/DM/ObjectBase.hpp:8