ActiveLib
Loading...
Searching...
No Matches
Rotater.h
1
6#ifndef ACTIVE_GEOMETRY_ROTATER
7#define ACTIVE_GEOMETRY_ROTATER
8
9#include "Active/Geometry/Point.h"
10
11namespace active::geometry {
12
13 class Arc;
14 class Line;
15 class Polygon;
16 class PolyEdge;
17 class Plane;
18 class Vector3;
19 class Vector4;
20
22 class Rotater : public utility::Cloner {
23 public:
24
25 // MARK: - Types
26
28 using Unique = std::unique_ptr<Rotater>;
30 using Shared = std::shared_ptr<Rotater>;
32 using Option = std::optional<Rotater>;
33
34 // MARK: - Constructors
35
41 Rotater(double angle = 0.0, double prec = math::eps) { setAngle(angle, prec); }
46 Rotater(const Rotater& source);
50 virtual ~Rotater() = default;
51
52 virtual Rotater* clonePtr() const = 0;
53
54 // MARK: - Operators
55
61 Rotater& operator= (const Rotater& source);
62
63 // MARK: - Functions (const)
64
69 virtual double getAngle() const { return m_angle; }
74 virtual bool isActive() const { return m_isActive; }
79 virtual Point& transformPt(Point& target) const = 0;
84 virtual void transform(Arc& target) const;
89 virtual void transform(Line& target) const;
94 virtual void transform(PolyEdge& target) const;
99 virtual void transform(Vector3& target) const;
104 virtual void transform(Vector4& target) const;
109 virtual void transform(Plane& target) const;
114 virtual void transform(Polygon& target) const;
115
116 // MARK: - Functions (mutating)
117
123 virtual void setAngle(double angle, double prec = math::eps);
127 virtual Rotater& reverse() { if (m_isActive) setAngle(-getAngle()); return *this; }
128
129 protected:
130 const double& k1() const { return m_k1; }
131 const double& k2() const { return m_k2; }
132
133 private:
134 bool m_isActive;
135 double m_angle;
136 double m_k1;
137 double m_k2;
138 };
139
140
142 class XRotater : public Rotater {
143 public:
144
145 // MARK: - Constructors
146
152 XRotater(double angle = 0.0, double prec = math::eps) : Rotater(angle, prec) {}
157 XRotater(const Rotater& source) : Rotater(source) {}
161 virtual ~XRotater() = default;
162
163 virtual Rotater* clonePtr() const { return new XRotater(*this); }
164
165 // MARK: - Operators
166
172 XRotater& operator= (const XRotater& source) { Rotater::operator=(source); return *this; }
173
174 // MARK: - Functions (const)
175
180 virtual Point& transformPt(Point& target) const;
181 };
182
183
185 class YRotater : public Rotater {
186 public:
187
188 // MARK: - Constructors
189
195 YRotater(double angle = 0.0, double prec = math::eps) : Rotater(-angle, prec) {}
200 YRotater(const Rotater& source) : Rotater(source) {}
204 virtual ~YRotater() = default;
205
206 virtual Rotater* clonePtr() const { return new YRotater(*this); }
207
208 // MARK: - Operators
209
215 YRotater& operator= (const YRotater& source) { Rotater::operator=(source); return *this; }
216
217 // MARK: - Functions (const)
218
223 virtual double getAngle() const { return -Rotater::getAngle(); }
228 virtual Point& transformPt(Point& target) const;
229
230 // MARK: - Functions (mutating)
231
237 virtual void setAngle(double angle, double prec = math::eps) { Rotater::setAngle(-angle, prec); }
238 };
239
240
242 class ZRotater : public Rotater {
243 public:
244
245 // MARK: - Constructors
246
252 ZRotater(double angle = 0.0, double prec = math::eps) : Rotater(angle, prec) {}
257 ZRotater(const Rotater& source) : Rotater(source) {}
261 virtual ~ZRotater() = default;
262
263 virtual Rotater* clonePtr() const { return new ZRotater(*this); }
264
265 // MARK: - Operators
266
272 ZRotater& operator= (const ZRotater& source) { Rotater::operator=(source); return *this; }
273
274 // MARK: - Functions (const)
275
280 virtual Point& transformPt(Point& target) const;
281 };
282
283}
284
285#endif //ACTIVE_GEOMETRY_ROTATER
Class to represent an arc.
Definition Arc.h:25
Class to represent a line.
Definition Line.h:21
Class to represent a plane.
Definition Plane.h:21
Definition Point.h:36
Definition PolyEdge.h:25
Definition Polygon.h:57
Base class for rotation classes.
Definition Rotater.h:22
Rotater(double angle=0.0, double prec=math::eps)
Definition Rotater.h:41
virtual Point & transformPt(Point &target) const =0
virtual ~Rotater()=default
std::unique_ptr< Rotater > Unique
Unique pointer.
Definition Rotater.h:28
virtual Rotater & reverse()
Definition Rotater.h:127
Rotater & operator=(const Rotater &source)
Definition Rotater.cpp:41
virtual Rotater * clonePtr() const =0
std::optional< Rotater > Option
Optional.
Definition Rotater.h:32
virtual void setAngle(double angle, double prec=math::eps)
Definition Rotater.cpp:57
virtual void transform(Arc &target) const
Definition Rotater.cpp:72
virtual double getAngle() const
Definition Rotater.h:69
std::shared_ptr< Rotater > Shared
Shared pointer.
Definition Rotater.h:30
virtual bool isActive() const
Definition Rotater.h:74
A 1x3 vector class.
Definition Vector3.h:20
A 1x4 vector class.
Definition Vector4.h:20
Class to perform rotations in the x axis.
Definition Rotater.h:142
virtual Point & transformPt(Point &target) const
Definition Rotater.cpp:174
virtual Rotater * clonePtr() const
Definition Rotater.h:163
virtual ~XRotater()=default
XRotater & operator=(const XRotater &source)
Definition Rotater.h:172
XRotater(double angle=0.0, double prec=math::eps)
Definition Rotater.h:152
XRotater(const Rotater &source)
Definition Rotater.h:157
Class to perform rotations in the y axis.
Definition Rotater.h:185
virtual void setAngle(double angle, double prec=math::eps)
Definition Rotater.h:237
YRotater & operator=(const YRotater &source)
Definition Rotater.h:215
YRotater(double angle=0.0, double prec=math::eps)
Definition Rotater.h:195
YRotater(const Rotater &source)
Definition Rotater.h:200
virtual double getAngle() const
Definition Rotater.h:223
virtual Rotater * clonePtr() const
Definition Rotater.h:206
virtual Point & transformPt(Point &target) const
Definition Rotater.cpp:189
virtual ~YRotater()=default
Class to perform rotations in the z axis.
Definition Rotater.h:242
ZRotater & operator=(const ZRotater &source)
Definition Rotater.h:272
ZRotater(const Rotater &source)
Definition Rotater.h:257
ZRotater(double angle=0.0, double prec=math::eps)
Definition Rotater.h:252
virtual Rotater * clonePtr() const
Definition Rotater.h:263
virtual ~ZRotater()=default
virtual Point & transformPt(Point &target) const
Definition Rotater.cpp:204
Definition Cloner.h:17
Definition Anchor2D.h:11
constexpr double eps
Default length precision (0.01mm)
Definition MathFunctions.h:22