From ca13c2194348fc703b3a9f3f573aeac7e04e9da7 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 21 Jan 2018 19:38:57 +0100 Subject: [PATCH] Ref T231, utility functions * corrected altitude also considering CG * 0 if CG is NULL --- src/blackmisc/aviation/aircraftsituation.cpp | 10 ++++++---- src/blackmisc/aviation/aircraftsituation.h | 2 +- src/blackmisc/simulation/interpolationhints.cpp | 6 ++++++ src/blackmisc/simulation/interpolationhints.h | 3 +++ 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/blackmisc/aviation/aircraftsituation.cpp b/src/blackmisc/aviation/aircraftsituation.cpp index e87abaea0..2f20b4387 100644 --- a/src/blackmisc/aviation/aircraftsituation.cpp +++ b/src/blackmisc/aviation/aircraftsituation.cpp @@ -214,11 +214,13 @@ namespace BlackMisc return this->getAltitude() - gh; } - CAltitude CAircraftSituation::getCorrectedAltitude() const + CAltitude CAircraftSituation::getCorrectedAltitude(const CLength ¢erOfGravity) const { - if (this->getGroundElevation().isNull()) { return this->getAltitude(); } - if (this->getAltitude().getReferenceDatum() != CAltitude::MeanSeaLevel) { return this->getAltitude(); } - if (this->getGroundElevation() < this->getAltitude()) { return this->getAltitude(); } + CAltitude altPlusCG = this->getAltitude(); + if (!centerOfGravity.isNull()) { altPlusCG += centerOfGravity; } + if (this->getGroundElevation().isNull()) { return altPlusCG; } + if (this->getAltitude().getReferenceDatum() != CAltitude::MeanSeaLevel) { return altPlusCG; } + if (this->getGroundElevation() < this->getAltitude()) { return altPlusCG; } return this->getGroundElevation(); } diff --git a/src/blackmisc/aviation/aircraftsituation.h b/src/blackmisc/aviation/aircraftsituation.h index a8a22b4fc..39ace5c7e 100644 --- a/src/blackmisc/aviation/aircraftsituation.h +++ b/src/blackmisc/aviation/aircraftsituation.h @@ -182,7 +182,7 @@ namespace BlackMisc const CAltitude &getAltitude() const { return m_position.geodeticHeight(); } //! Get altitude under consideration of ground elevation - CAltitude getCorrectedAltitude() const; + CAltitude getCorrectedAltitude(const PhysicalQuantities::CLength ¢erOfGravity = {}) const; //! Set altitude void setAltitude(const CAltitude &altitude) { m_position.setGeodeticHeight(altitude); } diff --git a/src/blackmisc/simulation/interpolationhints.cpp b/src/blackmisc/simulation/interpolationhints.cpp index 8dae07e73..cabe8ba5e 100644 --- a/src/blackmisc/simulation/interpolationhints.cpp +++ b/src/blackmisc/simulation/interpolationhints.cpp @@ -45,6 +45,12 @@ namespace BlackMisc return m_elevationPlane.isWithinRange(coordinate); } + const CLength &CInterpolationHints::getCGAboveGroundOrZero() const + { + static const CLength zero; + return this->hasCGAboveGround() ? this->getCGAboveGround() : zero; + } + void CInterpolationHints::setAircraftParts(const CAircraftParts &parts, bool hasParts) { m_hasParts = hasParts; diff --git a/src/blackmisc/simulation/interpolationhints.h b/src/blackmisc/simulation/interpolationhints.h index c28770ac1..b4534edb1 100644 --- a/src/blackmisc/simulation/interpolationhints.h +++ b/src/blackmisc/simulation/interpolationhints.h @@ -66,6 +66,9 @@ namespace BlackMisc //! Get CG above ground const PhysicalQuantities::CLength &getCGAboveGround() const { return m_cgAboveGround;} + //! Get CG above ground or 0 ("Zero") + const PhysicalQuantities::CLength &getCGAboveGroundOrZero() const; + //! Has CG above ground bool hasCGAboveGround() const { return m_cgAboveGround.isNull(); }