USGS

Isis 3.0 Object Programmers' Reference

Home

Angle.h
Go to the documentation of this file.
1 #ifndef Angle_h
2 #define Angle_h
3 
4 #include <QtGlobal>
5 
28 #include <QGlobalStatic>
29 
30 class QString;
31 
32 namespace Isis {
33 
58  class Angle {
59 
60  public:
62  enum Units {
77  };
78 
79  Angle();
80  Angle(double angle, Units unit);
81  Angle(const Angle& angle);
82  Angle(QString angle);
83 
84  virtual ~Angle();
85 
86  // Class member operator functions
87  bool isValid() const;
88  static Angle fullRotation();
89 
96  Angle& operator=(const Angle& angle2) {
97  setAngle(angle2.radians(), Radians); return *this;
98  }
99 
100 
101  Angle operator+(const Angle& angle2) const;
102  Angle operator-(const Angle& angle2) const;
103  Angle operator*(double value) const;
104  friend Angle operator *(double mult, Angle angle);
105  Angle operator/(double value) const;
106  double operator/(Angle value) const;
107  bool operator<(const Angle& angle2) const;
108  bool operator>(const Angle& angle2) const;
109 
110 
117  void operator+=(const Angle& angle2) {
118  *this = *this + angle2;
119  };
120 
121 
128  void operator-=(const Angle& angle2) {
129  *this = *this - angle2;
130  };
131 
132 
139  Angle operator*(int value) const {
140  return *this * (double)value;
141  }
142 
143 
150  void operator*=(double value) {
151  *this = *this * value;
152  }
153 
154 
161  Angle operator/(int value) const {
162  return *this / (double)value;
163  }
164 
165 
171  void operator/=(double value) {
172  *this = *this / value;
173  }
174 
175  // Relational operator functions
176 
187  bool operator==(const Angle& angle2) const {
188  return qFuzzyCompare(angle(Radians), angle2.angle(Radians));
189  }
190 
191 
199  bool operator!=(const Angle& angle2) const {
200  return !(*this == angle2);
201  }
202 
203 
210  bool operator<=(const Angle& angle2) const {
211  return *this < angle2 || *this == angle2;
212  }
213 
214 
222  bool operator>=(const Angle& angle2) const {
223  return *this > angle2 || *this == angle2;
224  }
225 
226 
239  double radians() const { return angle(Radians); }
240 
245  double degrees() const { return angle(Degrees); }
246 
252  void setRadians(double radians) { setAngle(radians, Radians); }
253 
259  void setDegrees(double degrees) { setAngle(degrees, Degrees); }
260 
261  virtual QString toString(bool includeUnits = true) const;
262 
263  protected:
264  double unitWrapValue(const Units& unit) const;
265  virtual double angle(const Units& unit) const;
266  virtual void setAngle(const double &angle, const Units& unit);
267 
268  private:
273  double m_radians;
274  };
275 }
276 
277 QDebug operator<<(QDebug dbg, const Isis::Angle &angleToPrint);
278 
279 #endif