swift
heading.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QCoreApplication>
7 
10 
11 namespace swift::misc::aviation
12 {
13  QString CHeading::convertToQString(bool i18n) const
14  {
15  return i18n ? QStringLiteral("%1 %2").arg(CAngle::convertToQString(i18n),
16  this->isMagneticHeading() ?
17  QCoreApplication::translate("Aviation", "magnetic") :
18  QCoreApplication::translate("Aviation", "true")) :
19  QStringLiteral("%1 %2").arg(CAngle::convertToQString(i18n),
20  this->isMagneticHeading() ? "magnetic" : "true");
21  }
22 
24  {
25  const double v = normalizeDegrees360(this->value(CAngleUnit::deg()));
26  const CAngleUnit u = this->getUnit();
27  *this = CHeading(v, this->getReferenceNorth(), CAngleUnit::deg());
28  this->switchUnit(u);
29  }
30 
32  {
33  const double v = normalizeDegrees180(this->value(CAngleUnit::deg()));
34  const CAngleUnit u = this->getUnit();
35  *this = CHeading(v, this->getReferenceNorth(), CAngleUnit::deg());
36  this->switchUnit(u);
37  }
38 
40  {
41  CHeading copy(*this);
43  return copy;
44  }
45 
47  {
48  CHeading copy(*this);
49  copy.normalizeTo360Degrees();
50  return copy;
51  }
52 
54  {
56  qRegisterMetaType<CHeading::ReferenceNorth>();
57  }
58 } // namespace swift::misc::aviation
Heading as used in aviation, can be true or magnetic heading.
Definition: heading.h:41
ReferenceNorth getReferenceNorth() const
Get reference north (magnetic or true)
Definition: heading.h:84
static void registerMetadata()
Register metadata.
Definition: heading.cpp:53
void normalizeTo360Degrees()
Normalize to [0, 359.99].
Definition: heading.cpp:23
void normalizeToPlusMinus180Degrees()
Normalize to +- 180deg, [-179.99, 180.0].
Definition: heading.cpp:31
CHeading()
Default constructor: 0.
Definition: heading.h:64
CHeading normalizedToPlusMinus180Degrees() const
As [-179.99, 180.0] normalized heading.
Definition: heading.cpp:39
CHeading normalizedTo360Degrees() const
As [0, 359.99] normalized heading.
Definition: heading.cpp:46
bool isMagneticHeading() const
Magnetic heading?
Definition: heading.h:78
QString convertToQString(bool i18n=false) const
Cast as QString.
Definition: heading.cpp:13
static void registerMetadata()
Register metadata.
Definition: mixinmetatype.h:56
Physical unit angle (radians, degrees)
Definition: angle.h:23
static double normalizeDegrees180(double degrees, int roundDigits=-1)
Normalize: -180< degrees ≤180.
Definition: angle.cpp:109
static double normalizeDegrees360(double degrees, int roundDigits=-1)
Normalize: 0≤ degrees <360.
Definition: angle.cpp:116
Specialized class for angles (degrees, radian).
Definition: units.h:233
CAngle & switchUnit(const CAngleUnit &newUnit)
Change unit, and convert value to maintain the same quantity.