From a8ab2a37b88d377618057cd3ee987c43d85b8bdd Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 27 Apr 2018 02:29:22 +0200 Subject: [PATCH] Ref T261, CG in aircraft model --- src/blackmisc/simulation/aircraftmodel.cpp | 4 ++++ src/blackmisc/simulation/aircraftmodel.h | 10 ++++++++++ src/blackmisc/simulation/aircraftmodellist.cpp | 13 +++++++++++++ src/blackmisc/simulation/aircraftmodellist.h | 3 +++ 4 files changed, 30 insertions(+) diff --git a/src/blackmisc/simulation/aircraftmodel.cpp b/src/blackmisc/simulation/aircraftmodel.cpp index 7605cda81..bff495c79 100644 --- a/src/blackmisc/simulation/aircraftmodel.cpp +++ b/src/blackmisc/simulation/aircraftmodel.cpp @@ -62,6 +62,7 @@ namespace BlackMisc (this->hasModelString() ? inApostrophes(m_modelString, true) % QStringLiteral(" ") : QStringLiteral("")) % QStringLiteral(" type: '") % this->getModelTypeAsString() % QStringLiteral("' ICAO: '") % this->getAircraftIcaoCode().toQString(i18n) % + QStringLiteral(" CG: ") % this->getCG().valueRoundedWithUnit(1) % QStringLiteral("' {") % m_livery.toQString(i18n) % QStringLiteral("} file: '") % m_fileName % QStringLiteral("'"); return s; @@ -190,6 +191,7 @@ namespace BlackMisc case IndexDescription: return CVariant(m_description); case IndexName: return CVariant(m_name); case IndexFileName: return CVariant(m_fileName); + case IndexCG: return m_cg.propertyByIndex(index.copyFrontRemoved()); case IndexFileTimestamp: return CVariant::fromValue(this->getFileTimestamp()); case IndexFileTimestampFormattedYmdhms: return CVariant::fromValue(this->getFormattedFileTimestampYmdhms()); case IndexIconPath: return CVariant(m_iconPath); @@ -218,6 +220,7 @@ namespace BlackMisc case IndexSimulatorInfo: m_simulator.setPropertyByIndex(index.copyFrontRemoved(), variant); break; case IndexName: m_name = variant.toQString(); break; case IndexIconPath: m_iconPath = variant.toQString(); break; + case IndexCG: m_cg.setPropertyByIndex(index.copyFrontRemoved(), variant); break; case IndexModelType: m_modelType = variant.value(); break; case IndexFileName: m_fileName = variant.toQString(); break; case IndexCallsign: @@ -265,6 +268,7 @@ namespace BlackMisc case IndexCallsign: return m_callsign.comparePropertyByIndex(index.copyFrontRemoved(), compareValue.getCallsign()); case IndexFileName: return m_fileName.compare(compareValue.getFileName(), Qt::CaseInsensitive); case IndexIconPath: return m_iconPath.compare(compareValue.getIconPath(), Qt::CaseInsensitive); + case IndexCG: return m_cg.comparePropertyByIndex(index.copyFrontRemoved(), compareValue.getCG()); case IndexModelType: return Compare::compare(m_modelType, compareValue.getModelType()); case IndexSimulatorInfoAsString: case IndexSimulatorInfo: return m_simulator.comparePropertyByIndex(index.copyFrontRemoved(), compareValue.getSimulator()); diff --git a/src/blackmisc/simulation/aircraftmodel.h b/src/blackmisc/simulation/aircraftmodel.h index a80ea2c0b..3363f152b 100644 --- a/src/blackmisc/simulation/aircraftmodel.h +++ b/src/blackmisc/simulation/aircraftmodel.h @@ -16,6 +16,7 @@ #include "blackmisc/aviation/airlineicaocode.h" #include "blackmisc/aviation/callsign.h" #include "blackmisc/aviation/livery.h" +#include "blackmisc/pq/length.h" #include "blackmisc/blackmiscexport.h" #include "blackmisc/db/datastore.h" #include "blackmisc/dictionary.h" @@ -93,6 +94,7 @@ namespace BlackMisc IndexSimulatorInfoAsString, IndexAircraftIcaoCode, IndexLivery, + IndexCG, IndexDistributor, IndexFileName, IndexFileTimestamp, @@ -260,6 +262,12 @@ namespace BlackMisc //! Name void setName(const QString &name) { m_name = name.trimmed(); } + //! Get center of gravity + const PhysicalQuantities::CLength &getCG() const { return m_cg; } + + //! Get center of gravity + void setCG(const PhysicalQuantities::CLength &cg) { m_cg = cg; } + //! Model type ModelType getModelType() const { return m_modelType; } @@ -433,6 +441,7 @@ namespace BlackMisc Aviation::CLivery m_livery; //!< livery information CSimulatorInfo m_simulator; //!< model for given simulator CDistributor m_distributor; //!< who designed or distributed the model + PhysicalQuantities::CLength m_cg = PhysicalQuantities::CLength::null(); //!< center of gravity QString m_modelString; //!< Simulator model key, unique QString m_name; //!< Model name QString m_description; //!< descriptive text @@ -452,6 +461,7 @@ namespace BlackMisc BLACK_METAMEMBER(livery), BLACK_METAMEMBER(simulator), BLACK_METAMEMBER(distributor), + BLACK_METAMEMBER(cg), BLACK_METAMEMBER(modelString, 0, CaseInsensitiveComparison), BLACK_METAMEMBER(name), BLACK_METAMEMBER(description, 0, DisabledForComparison), diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index 7aca9a89d..005a79896 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -27,6 +27,7 @@ using namespace BlackMisc::Network; using namespace BlackMisc::Aviation; +using namespace BlackMisc::PhysicalQuantities; namespace BlackMisc { @@ -472,6 +473,18 @@ namespace BlackMisc return c; } + int CAircraftModelList::setCG(const CLength &cg) + { + int c = 0; + for (CAircraftModel &model : (*this)) + { + if (model.getCG() == cg) { continue; } + model.setCG(cg); + c++; + } + return c; + } + int CAircraftModelList::keepModelsWithString(const QStringList &modelStrings, Qt::CaseSensitivity sensitivity) { const int cs = this->size(); diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index 0752f4366..8d7a83f2f 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -215,6 +215,9 @@ namespace BlackMisc //! Set mode for all elements int setModelMode(Simulation::CAircraftModel::ModelMode mode); + //! Set center of gravity + int setCG(const PhysicalQuantities::CLength &cg); + //! Keep only those models with given model strings //! \return number of elements removed int keepModelsWithString(const QStringList &modelStrings, Qt::CaseSensitivity sensitivity);