From 287d96afeaa96fe98a76681cd98ea53baac044fc Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 13 Feb 2020 20:00:15 +0100 Subject: [PATCH] Ref T773, added "hasMeanSeaLevelValue" and consistently use it --- src/blackcore/simulator.cpp | 4 ++-- src/blackmisc/aviation/altitude.h | 3 +++ src/blackmisc/geo/coordinategeodetic.h | 2 +- .../simulation/simulationenvironmentprovider.cpp | 9 ++++++++- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/blackcore/simulator.cpp b/src/blackcore/simulator.cpp index d4102242e..483775a29 100644 --- a/src/blackcore/simulator.cpp +++ b/src/blackcore/simulator.cpp @@ -873,7 +873,7 @@ namespace BlackCore void ISimulator::rememberElevationAndSimulatorCG(const CCallsign &callsign, const CAircraftModel &model, const CElevationPlane &elevation, const CLength &simulatorCG) { if (callsign.isEmpty()) { return; } - if (!elevation.isNull()) + if (elevation.hasMSLGeodeticHeight()) { const int aircraftCount = this->getAircraftInRangeCount(); this->setMaxElevationsRemembered(aircraftCount * 3); // at least 3 elevations per aircraft, even better as not all are requesting elevations @@ -1187,7 +1187,7 @@ namespace BlackCore elevation = (cg.isNull() || situation.getAltitude().isNull()) ? CAltitude::null() : (situation.getAltitude().withOffset(cg * -1.0)); } - if (!elevation.isNull()) + if (elevation.hasMeanSeaLevelValue()) { const CCallsign cs = situation.hasCallsign() ? situation.getCallsign() : ownAircraft.getCallsign(); const CLength radius = settings.getRecordedGndRadius().isNull() ? CElevationPlane::singlePointRadius() : settings.getRecordedGndRadius(); diff --git a/src/blackmisc/aviation/altitude.h b/src/blackmisc/aviation/altitude.h index 6dc7ba901..51e2ad60e 100644 --- a/src/blackmisc/aviation/altitude.h +++ b/src/blackmisc/aviation/altitude.h @@ -144,6 +144,9 @@ namespace BlackMisc //! Flightlevel to MSL bool toMeanSeaLevel(); + //! Non-NULL MSL value? + bool hasMeanSeaLevelValue() const { return this->isMeanSeaLevel() && !this->isNull(); } + //! Current altitude type AltitudeType getAltitudeType() const { return m_altitudeType; } diff --git a/src/blackmisc/geo/coordinategeodetic.h b/src/blackmisc/geo/coordinategeodetic.h index dd25f6a31..4cd14182c 100644 --- a/src/blackmisc/geo/coordinategeodetic.h +++ b/src/blackmisc/geo/coordinategeodetic.h @@ -112,7 +112,7 @@ namespace BlackMisc bool isGeodeticHeightNull() const { return this->geodeticHeight().isNull(); } //! Geodetic height not null and Aviation::CAltitude::MeanSeaLevel - bool hasMSLGeodeticHeight() const { return !this->geodeticHeight().isNull() && this->geodeticHeight().getReferenceDatum() == Aviation::CAltitude::MeanSeaLevel; } + bool hasMSLGeodeticHeight() const { return this->geodeticHeight().hasMeanSeaLevelValue(); } //! Is null, means vector x, y, z == 0 //! \remark this is a default implementation, concrete implementations of ICoordinateGeodetic might override it diff --git a/src/blackmisc/simulation/simulationenvironmentprovider.cpp b/src/blackmisc/simulation/simulationenvironmentprovider.cpp index e49706de7..2b9dd8372 100644 --- a/src/blackmisc/simulation/simulationenvironmentprovider.cpp +++ b/src/blackmisc/simulation/simulationenvironmentprovider.cpp @@ -7,12 +7,13 @@ */ #include "simulationenvironmentprovider.h" +#include "verify.h" #include -using namespace BlackMisc::Simulation::Settings; using namespace BlackMisc::Aviation; using namespace BlackMisc::Geo; using namespace BlackMisc::PhysicalQuantities; +using namespace BlackMisc::Simulation::Settings; namespace BlackMisc { @@ -20,6 +21,12 @@ namespace BlackMisc { bool ISimulationEnvironmentProvider::rememberGroundElevation(const CCallsign &requestedForCallsign, const ICoordinateGeodetic &elevationCoordinate, const CLength &epsilon) { + if (!elevationCoordinate.hasMSLGeodeticHeight()) + { + BLACK_AUDIT_X(false, Q_FUNC_INFO, "Elevation needs to be MSL NON NULL"); + return false; + } + { // no 2nd elevation nearby? QReadLocker l(&m_lockElvCoordinates);