IPointSet.hpp
1 #pragma once
2 
3 #include "DM/config.hpp"
4 #include "DM/IAddInfoLayout.hpp"
5 #include "DM/Handle.hpp"
6 #include "DM/IGeometry.hpp"
7 #include "DM/IAddInfo.hpp"
8 #include "DM/IAddInfoContainer.hpp"
9 #include "DM/IPoint.hpp"
10 #include "DM/Iterator.hpp"
11 #include "DM/AutoLink.hpp" //enable autolink
12 
13 DM_NAMESPACE_BEGIN
14 
15 /// \brief a set of 3d point object
16 class DM_API IPointSet : public IGeometry
17 {
18 public:
19  typedef ConstIterator<IPoint> const_iterator_point; ///< Point iterator
20 
21  ///create a new point set with size points
22  static IPointSet* New(unsigned size = 0);
23 
24  IPointSet* clone() const override = 0;
25 
26 protected:
27  virtual ~IPointSet() {}
28 
29 public:
30  virtual unsigned sizePoint() const = 0; ///< number of points within the set
31  virtual void reservePoint(unsigned size) = 0; ///< reserve memory for points
32  virtual void resizePoint(unsigned resize) = 0; ///< resize memory for points
33  virtual void removePoint(unsigned) = 0; ///< remove points at the given index
34  virtual void clearPoint() = 0; ///< remove all points from point set
35  virtual void addPoint(const DM::IPoint &pt) = 0;
36  virtual void addPoint(const DM::PointHandle &pt) = 0;
37  virtual void addPoint(double x, double y, double z) = 0;
38 
39  /// \brief sorting points by distance to given reference point
40  /**
41  \param[in] refPt reference point used for distance computation
42  \param[in] dim dimension of distance (2 = 2d distance, 3 = 3d distance)
43  \param[in] ascending sort in ascending or descending order
44  */
45  virtual void sortByDistance(const DM::IPoint &refPt, int dim, bool ascending = true) = 0;
46  /// \brief sorting points by distance to given reference point and remove points that exceeds a certain distance
47  /**
48  \param[in] refPt reference point used for distance computation
49  \param[in] dim dimension of distance (2 = 2d distance, 3 = 3d distance)
50  \param[in] maxDistance all points that are further away than the given distance are dropped
51  \param[in] ascending sort in ascending or descending order
52  */
53  virtual void sortByDistanceAndClip(const DM::IPoint &refPt, int dim, double maxDistance, bool ascending = true) = 0;
54 
55  virtual const_iterator_point beginPoint() const = 0;
56  virtual const_iterator_point endPoint() const = 0;
57 
58  virtual const IPoint& operator[](unsigned) const = 0;
59  virtual IPoint& operator[](unsigned) = 0;
60 
61  virtual const PointHandle& operator()(unsigned idx) const = 0;
62  virtual PointHandle& operator()(unsigned idx) = 0;
63 };
64 
65 typedef Handle< IPointSet > PointSetHandle;
66 
67 DM_NAMESPACE_END
virtual IGeometry * clone() const =0
get an object copy
Definition: Iterator.hpp:96
Base class of all geometry objects.
Definition: IGeometry.hpp:26
ConstIterator< IPoint > const_iterator_point
Point iterator.
Definition: IPointSet.hpp:19
Smart pointer class using reference counting with support for DM objects (see ObjectBase)
Definition: Handle.hpp:75
a set of 3d point object
Definition: IPointSet.hpp:16
3d point object
Definition: IPoint.hpp:14