diff --git a/src/blackmisc/aviation/heading.cpp b/src/blackmisc/aviation/heading.cpp index fb5541ec5..49c982c77 100644 --- a/src/blackmisc/aviation/heading.cpp +++ b/src/blackmisc/aviation/heading.cpp @@ -8,7 +8,6 @@ */ #include "blackmisc/aviation/heading.h" - #include using BlackMisc::PhysicalQuantities::CAngle; @@ -22,11 +21,19 @@ namespace BlackMisc { return i18n ? QStringLiteral("%1 %2").arg(CAngle::convertToQString(i18n), - this->isMagneticHeading() ? - QCoreApplication::translate("Aviation", "magnetic") : - QCoreApplication::translate("Aviation", "true")) : + this->isMagneticHeading() ? + QCoreApplication::translate("Aviation", "magnetic") : + QCoreApplication::translate("Aviation", "true")) : QStringLiteral("%1 %2").arg(CAngle::convertToQString(i18n), - this->isMagneticHeading() ? "magnetic" : "true"); + this->isMagneticHeading() ? "magnetic" : "true"); + } + + void CHeading::normalizeTo360Degrees() + { + const double v = normalizeDegrees360(this->value(CAngleUnit::deg())); + const CAngleUnit u = this->getUnit(); + *this = CHeading(v, this->getReferenceNorth(), CAngleUnit::deg()); + this->switchUnit(u); } void CHeading::normalizeToPlusMinus180Degrees() @@ -44,6 +51,13 @@ namespace BlackMisc return copy; } + CHeading CHeading::normalizedTo360Degrees() const + { + CHeading copy(*this); + copy.normalizeTo360Degrees(); + return copy; + } + void CHeading::registerMetadata() { Mixin::MetaType::registerMetadata(); diff --git a/src/blackmisc/aviation/heading.h b/src/blackmisc/aviation/heading.h index dd830e243..7f346dc1d 100644 --- a/src/blackmisc/aviation/heading.h +++ b/src/blackmisc/aviation/heading.h @@ -87,12 +87,18 @@ namespace BlackMisc //! Get reference north (magnetic or true) ReferenceNorth getReferenceNorth() const { return m_north; } + //! Normalize to [0, 359.99] + void normalizeTo360Degrees(); + //! Normalize to +- 180deg, [-179.99, 180.0] void normalizeToPlusMinus180Degrees(); //! As [-179.99, 180.0] normalized heading CHeading normalizedToPlusMinus180Degrees() const; + //! As [0, 359.99] normalized heading + CHeading normalizedTo360Degrees() const; + //! Register metadata static void registerMetadata();