mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-02 07:05:38 +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/constants.h"
|
||||||
#include "blackmisc/pq/pqstring.h"
|
#include "blackmisc/pq/pqstring.h"
|
||||||
#include "blackmisc/math/mathutils.h"
|
#include "blackmisc/math/mathutils.h"
|
||||||
|
#include "blackmisc/fileutils.h"
|
||||||
|
#include "blackmisc/directoryutils.h"
|
||||||
|
#include "blackmisc/stringutils.h"
|
||||||
#include "blackmisc/comparefunctions.h"
|
#include "blackmisc/comparefunctions.h"
|
||||||
#include "blackmisc/iconlist.h"
|
#include "blackmisc/iconlist.h"
|
||||||
#include "blackmisc/icons.h"
|
#include "blackmisc/icons.h"
|
||||||
@@ -27,6 +30,28 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
namespace Aviation
|
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()
|
void CAltitude::registerMetadata()
|
||||||
{
|
{
|
||||||
Mixin::MetaType<CAltitude>::registerMetadata();
|
Mixin::MetaType<CAltitude>::registerMetadata();
|
||||||
@@ -34,6 +59,12 @@ namespace BlackMisc
|
|||||||
qRegisterMetaType<CAltitude::AltitudeType>();
|
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)
|
CAltitude::CAltitude(const QString &altitudeAsString, CPqString::SeparatorMode mode) : CLength(0, CLengthUnit::m()), m_datum(MeanSeaLevel)
|
||||||
{
|
{
|
||||||
this->parseFromString(altitudeAsString, mode);
|
this->parseFromString(altitudeAsString, mode);
|
||||||
@@ -388,6 +419,26 @@ namespace BlackMisc
|
|||||||
return a;
|
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()
|
const CAltitude &CAltitude::null()
|
||||||
{
|
{
|
||||||
static const CAltitude null(0, CAltitude::MeanSeaLevel, CLengthUnit::nullUnit());
|
static const CAltitude null(0, CAltitude::MeanSeaLevel, CLengthUnit::nullUnit());
|
||||||
|
|||||||
@@ -30,6 +30,8 @@
|
|||||||
#include <QMetaType>
|
#include <QMetaType>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
#include <QVector>
|
||||||
|
#include <tuple>
|
||||||
|
|
||||||
namespace BlackMisc
|
namespace BlackMisc
|
||||||
{
|
{
|
||||||
@@ -57,6 +59,9 @@ namespace BlackMisc
|
|||||||
//! Base type
|
//! Base type
|
||||||
using base_type = PhysicalQuantities::CLength;
|
using base_type = PhysicalQuantities::CLength;
|
||||||
|
|
||||||
|
//! Metric tuple
|
||||||
|
using MetricTuple = std::tuple<int, int, int>;
|
||||||
|
|
||||||
BLACKMISC_DECLARE_USING_MIXIN_METATYPE(CAltitude)
|
BLACKMISC_DECLARE_USING_MIXIN_METATYPE(CAltitude)
|
||||||
BLACKMISC_DECLARE_USING_MIXIN_STRING(CAltitude)
|
BLACKMISC_DECLARE_USING_MIXIN_STRING(CAltitude)
|
||||||
BLACKMISC_DECLARE_USING_MIXIN_DBUS(CAltitude)
|
BLACKMISC_DECLARE_USING_MIXIN_DBUS(CAltitude)
|
||||||
@@ -196,6 +201,11 @@ namespace BlackMisc
|
|||||||
//! \remark https://en.wikipedia.org/wiki/Flight_level
|
//! \remark https://en.wikipedia.org/wiki/Flight_level
|
||||||
CAltitude roundedToNearest100ft(bool roundDown) const;
|
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)
|
//! Null altitude (MSL)
|
||||||
static const CAltitude &null();
|
static const CAltitude &null();
|
||||||
|
|
||||||
@@ -213,6 +223,9 @@ namespace BlackMisc
|
|||||||
ReferenceDatum m_datum; //!< MSL or AGL?
|
ReferenceDatum m_datum; //!< MSL or AGL?
|
||||||
AltitudeType m_altitudeType = TrueAltitude; //!< type
|
AltitudeType m_altitudeType = TrueAltitude; //!< type
|
||||||
|
|
||||||
|
//! The metric tuples m/ft/FL
|
||||||
|
static const QVector<MetricTuple> &metricTuples();
|
||||||
|
|
||||||
BLACK_METACLASS(
|
BLACK_METACLASS(
|
||||||
CAltitude,
|
CAltitude,
|
||||||
BLACK_METAMEMBER(datum),
|
BLACK_METAMEMBER(datum),
|
||||||
|
|||||||
Reference in New Issue
Block a user