IPolylineFactory.hpp
1 #ifndef DM_IPOLYLINE_FACTORY_HPP_INCLUDED
2 #define DM_IPOLYLINE_FACTORY_HPP_INCLUDED
3 
4 #ifdef _MSC_VER
5  #pragma once
6 #endif
7 
8 #include "DM/config.hpp"
9 #include "DM/Handle.hpp"
10 #include "DM/IPolyline.hpp"
11 #include "DM/AutoLink.hpp" //enable autolink
12 
13 DM_NAMESPACE_BEGIN
14 
15 
16 /// \brief factory interface for creating polyline objects
17 /** Polyline may consists of multiple independent lines. Although line part may be closed, the objects
18  does not represent the enclosed area. The object remains a linear object. For describing areas use
19  polygons.
20 */
21 class DM_API IPolylineFactory : public ObjectBase
22 {
23 public:
24 
25  /// \brief functor class to only add certain parts to the polyline factory
26  class IPartFunctor : public ObjectBase {
27  protected:
28  virtual ~IPartFunctor() {}
29 
30  public:
31  virtual bool operator()(const IPolyline::IPart &part) const = 0;
32  };
33 
34  static IPolylineFactory* New();
35 
36 protected:
37  virtual ~IPolylineFactory() {}
38 
39 public:
40  virtual void clear() = 0;
41 
42  virtual IPolylineFactory& addPoint(const IPoint &pt) = 0;
43  virtual IPolylineFactory& addPoint(PointHandle pt) = 0;
44  virtual IPolylineFactory& addPoint(double x, double y) = 0;
45  virtual IPolylineFactory& addPoint(double x, double y, double z) = 0;
46 
47  virtual IPolylineFactory& insertPoint(unsigned idx, const IPoint &pt) = 0;
48  virtual IPolylineFactory& insertPoint(unsigned idx, PointHandle pt) = 0;
49  virtual IPolylineFactory& insertPoint(unsigned idx, double x, double y) = 0;
50  virtual IPolylineFactory& insertPoint(unsigned idx, double x, double y, double z) = 0;
51 
52  virtual IPolylineFactory& addPolyline(const IPolyline &line, bool mergeConnectedParts = false) = 0;
53 
54  ///< allows adding only certain parts of an existing polyline object into the factory
55  virtual IPolylineFactory& addPolyline(const IPolyline &line, const IPartFunctor &partFunc) = 0;
56  ///< add a part of another polyline object into the factory
57  virtual IPolylineFactory& addPolyline(const IPolyline::IPart &part) = 0;
58 
59  virtual IPolylineFactory& closePart() = 0;
60 
61  virtual IPolylineFactory& addPart() = 0;
62 
63  virtual PolylineHandle getPolyline(bool clear = true) = 0;
64 };
65 
66 typedef Handle<IPolylineFactory> PolylineFactoryHandle;
67 
68 DM_NAMESPACE_END
69 
70 #endif //DM_IPOLYLINE_CREATOR_HPP_INCLUDED