mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 20:15:35 +08:00
Ref T602, read conversion table (ft/m) and functions from/to ft/m
This commit is contained in:
@@ -11,6 +11,9 @@
|
||||
#include "blackmisc/pq/constants.h"
|
||||
#include "blackmisc/pq/pqstring.h"
|
||||
#include "blackmisc/math/mathutils.h"
|
||||
#include "blackmisc/fileutils.h"
|
||||
#include "blackmisc/directoryutils.h"
|
||||
#include "blackmisc/stringutils.h"
|
||||
#include "blackmisc/comparefunctions.h"
|
||||
#include "blackmisc/iconlist.h"
|
||||
#include "blackmisc/icons.h"
|
||||
@@ -27,6 +30,28 @@ namespace BlackMisc
|
||||
{
|
||||
namespace Aviation
|
||||
{
|
||||
namespace Private
|
||||
{
|
||||
QVector<CAltitude::MetricTuple> initMetricValues()
|
||||
{
|
||||
QVector<CAltitude::MetricTuple> v;
|
||||
const QString f = CFileUtils::appendFilePaths(CDirectoryUtils::shareMiscDirectory(), "Metric Altitudes.csv");
|
||||
const QString ma = CFileUtils::readFileToString(f);
|
||||
const QStringList values = splitLines(ma);
|
||||
for (const QString &value : values)
|
||||
{
|
||||
const QStringList alts = value.split(";");
|
||||
int v1 = -1, v2 = -1, v3 = -1;
|
||||
if (alts.size() >= 1) { v1 = alts[0].toInt(); }
|
||||
if (alts.size() >= 2) { v2 = alts[1].toInt(); }
|
||||
if (alts.size() >= 3) { v3 = alts[2].toInt(); }
|
||||
const CAltitude::MetricTuple m(v1, v2, v3);
|
||||
v.push_back(m);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
}
|
||||
|
||||
void CAltitude::registerMetadata()
|
||||
{
|
||||
Mixin::MetaType<CAltitude>::registerMetadata();
|
||||
@@ -34,6 +59,12 @@ namespace BlackMisc
|
||||
qRegisterMetaType<CAltitude::AltitudeType>();
|
||||
}
|
||||
|
||||
const QVector<CAltitude::MetricTuple> &CAltitude::metricTuples()
|
||||
{
|
||||
static const QVector<MetricTuple> v = Private::initMetricValues();
|
||||
return v;
|
||||
}
|
||||
|
||||
CAltitude::CAltitude(const QString &altitudeAsString, CPqString::SeparatorMode mode) : CLength(0, CLengthUnit::m()), m_datum(MeanSeaLevel)
|
||||
{
|
||||
this->parseFromString(altitudeAsString, mode);
|
||||
@@ -388,6 +419,26 @@ namespace BlackMisc
|
||||
return a;
|
||||
}
|
||||
|
||||
int CAltitude::findMetricAltitude(int feet)
|
||||
{
|
||||
// m/ft/FL
|
||||
for (const MetricTuple &m : metricTuples())
|
||||
{
|
||||
if (std::get<1>(m) == feet) return std::get<0>(m);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int CAltitude::findAltitudeForMetricAltitude(int metric)
|
||||
{
|
||||
// m/ft/FL
|
||||
for (const MetricTuple &m : metricTuples())
|
||||
{
|
||||
if (std::get<0>(m) == metric) return std::get<1>(m);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
const CAltitude &CAltitude::null()
|
||||
{
|
||||
static const CAltitude null(0, CAltitude::MeanSeaLevel, CLengthUnit::nullUnit());
|
||||
|
||||
@@ -30,6 +30,8 @@
|
||||
#include <QMetaType>
|
||||
#include <QString>
|
||||
#include <QRegularExpression>
|
||||
#include <QVector>
|
||||
#include <tuple>
|
||||
|
||||
namespace BlackMisc
|
||||
{
|
||||
@@ -57,6 +59,9 @@ namespace BlackMisc
|
||||
//! Base type
|
||||
using base_type = PhysicalQuantities::CLength;
|
||||
|
||||
//! Metric tuple
|
||||
using MetricTuple = std::tuple<int, int, int>;
|
||||
|
||||
BLACKMISC_DECLARE_USING_MIXIN_METATYPE(CAltitude)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_STRING(CAltitude)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_DBUS(CAltitude)
|
||||
@@ -196,6 +201,11 @@ namespace BlackMisc
|
||||
//! \remark https://en.wikipedia.org/wiki/Flight_level
|
||||
CAltitude roundedToNearest100ft(bool roundDown) const;
|
||||
|
||||
//! Search the corresponding feet <-> metric / metric <-> feet @{
|
||||
static int findMetricAltitude(int feet);
|
||||
static int findAltitudeForMetricAltitude(int metric);
|
||||
//! @}
|
||||
|
||||
//! Null altitude (MSL)
|
||||
static const CAltitude &null();
|
||||
|
||||
@@ -213,6 +223,9 @@ namespace BlackMisc
|
||||
ReferenceDatum m_datum; //!< MSL or AGL?
|
||||
AltitudeType m_altitudeType = TrueAltitude; //!< type
|
||||
|
||||
//! The metric tuples m/ft/FL
|
||||
static const QVector<MetricTuple> &metricTuples();
|
||||
|
||||
BLACK_METACLASS(
|
||||
CAltitude,
|
||||
BLACK_METAMEMBER(datum),
|
||||
|
||||
Reference in New Issue
Block a user