IPoint.hpp
1 #ifndef DM_IPOINT_HPP_INCLUDED
2 #define DM_IPOINT_HPP_INCLUDED
3 
4 #ifdef _MSC_VER
5  #pragma once
6 #endif
7 
8 #include "DM/config.hpp"
9 #include "DM/IAddInfoLayout.hpp"
10 #include "DM/Handle.hpp"
11 #include "DM/IGeometry.hpp"
12 #include "DM/IAddInfo.hpp"
13 #include "DM/IAddInfoContainer.hpp"
14 #include "DM/AutoLink.hpp" //enable autolink
15 
16 DM_NAMESPACE_BEGIN
17 
18 /// \brief 3d point object
19 class DM_API IPoint : public IGeometry, public IAddInfoContainer
20 {
21 public:
22  static IPoint* New();
23  static IPoint* New(const IAddInfoLayout &layout);
24  static IPoint* New(double x, double y);
25  static IPoint* New(double x, double y, double z);
26  static IPoint* New(double x, double y, double z, const IAddInfoLayout &layout);
27 
28 protected:
29  virtual ~IPoint() {}
30 
31 public:
32  virtual double x() const = 0;
33  virtual double y() const = 0;
34  virtual double z() const = 0;
35 
36  virtual void x(double) = 0;
37  virtual void y(double) = 0;
38  virtual void z(double) = 0;
39 
40  virtual const double& operator[](int) const = 0;
41 };
42 
44 
45 DM_API bool equal2D(const IPoint &a, const IPoint &b);
46 DM_API bool equal2D(const IPoint &a, const IPoint &b, double eps);
47 
48 DM_API bool equal3D(const IPoint &a, const IPoint &b);
49 DM_API bool equal3D(const IPoint &a, const IPoint &b, double eps);
50 
51 DM_API double length2D(const IPoint &a, const IPoint &b);
52 DM_API double length3D(const IPoint &a, const IPoint &b);
53 
54 
55 DM_NAMESPACE_END
56 
57 #endif //DM_IPOINT_HPP_INCLUDED