ISamplingStrategy.hpp
1 #pragma once
2 
3 #include "DM/config.hpp"
4 #include "DM/Handle.hpp"
5 #include "DM/ObjectBase.hpp"
6 #include "DM/StatFeature.hpp"
7 #include "DM/IAddInfoLayout.hpp"
8 #include "DM/IPoint.hpp"
9 
10 DM_NAMESPACE_BEGIN
11 
12 /// \brief Base class of all geometry objects
13 class DM_API ISamplingStrategy : public ObjectBase
14 {
15 public:
16  enum struct FeatureReference
17  {
18  null = 0,
19  coor_x = 1,
20  coor_y = 2,
21  coor_z = 3,
22  attribute = 4, ///< attribute defined by a single column layout
23  all = 5 ///< when selecting all points per cell
24  };
25 
26  /// creates an empty sampling strategy object
27  static ISamplingStrategy* New();
28 
29  /// sampling strategy for point based modules
30  static ISamplingStrategy* New(const double &cellsize, const IPoint &refPt,
31  const StatFeature &statsFeature, FeatureReference type = FeatureReference::coor_z, const AddInfoLayoutHandle &layout = AddInfoLayoutHandle(),
32  unsigned dim = 2);
33 
34  /// sampling strategy for raster based modules
35  static ISamplingStrategy* New(const unsigned subdivsion,
36  const StatFeature &statsFeature, FeatureReference type = FeatureReference::coor_z, const AddInfoLayoutHandle &layout = AddInfoLayoutHandle(),
37  unsigned dim = 2);
38 
39 protected:
40  virtual ~ISamplingStrategy() {}
41 
42 public:
43  virtual ISamplingStrategy* clone() const = 0;
44 
45  virtual bool isRasterBased() const = 0;
46  virtual bool isPointBased() const = 0;
47 
48  virtual bool hasCellsize() const = 0;
49  virtual bool hasSubdivision() const = 0;
50  virtual bool hasRefPt() const = 0;
51  virtual bool hasFeature() const = 0;
52  virtual bool hasFeatureReference() const = 0;
53  virtual bool hasLayout() const = 0;
54 
55  virtual unsigned dimension() const = 0;
56 
57  // access function in raster based mode
58  /// get sub-sampling count per output cell
59  virtual unsigned subdivision() const = 0;
60  virtual void subdivision(unsigned subdiv) = 0;
61 
62  // access function in point based mode
63  /// get cell size for sub-sampling
64  virtual double cellsize() const = 0;
65  virtual void cellsize(double cs) = 0;
66  /// get reference point of sub-sampling raster (which is a corner of raster cell)
67  virtual const IPoint &refPt() const = 0;
68  virtual void refPt(const IPoint &refpt) = 0;
69 
70 
71  /// check if all point data within the tiles should be kept.
72  virtual bool sampleAll() const = 0;
73  /// force to sample all data point within tiles
74  virtual void sampleAll() = 0;
75 
76  /// if not all points should be kept, than the following statistics features will be applied
77  virtual const StatFeature &feature() const = 0;
78  virtual void feature(const StatFeature &feat) = 0;
79 
80  virtual FeatureReference featureReference() const = 0;
81  virtual void featureReference(const FeatureReference &featRef) = 0;
82 
83  virtual const AddInfoLayoutHandle &layout() const = 0;
84  virtual void layout(const AddInfoLayoutHandle &l) = 0;
85 };
86 
87 typedef Handle< ISamplingStrategy > SamplingStrategyHandle;
88 
89 DM_NAMESPACE_END
Base class of all geometry objects.
Definition: ISamplingStrategy.hpp:13
Definition: Handle.hpp:427
FeatureReference
Definition: ISamplingStrategy.hpp:16
Definition: StatFeature.hpp:7
Definition: M/c++_api/inc/DM/ObjectBase.hpp:8
3d point object
Definition: IPoint.hpp:14