From 4bfa5d5f401d70b51f9f1b9463a65da64aff892f Mon Sep 17 00:00:00 2001 From: Mat Sutcliffe Date: Sat, 18 Jan 2020 14:30:58 +0000 Subject: [PATCH] Fix assert due to NaN in CXSwiftBusTrafficProxy::getElevationAtPosition --- src/blackcore/simulator.cpp | 1 + src/blackmisc/geo/coordinategeodetic.h | 6 +++++- src/plugins/simulator/xplane/xswiftbustrafficproxy.cpp | 3 ++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/blackcore/simulator.cpp b/src/blackcore/simulator.cpp index 42b712721..393d5ea88 100644 --- a/src/blackcore/simulator.cpp +++ b/src/blackcore/simulator.cpp @@ -360,6 +360,7 @@ namespace BlackCore void ISimulator::callbackReceivedRequestedElevation(const CElevationPlane &plane, const CCallsign &callsign) { if (this->isShuttingDown()) { return; } + if (plane.isNull()) { return; } ISimulationEnvironmentProvider::rememberGroundElevation(callsign, plane); // in simulator const int updated = CRemoteAircraftAware::updateAircraftGroundElevation(callsign, plane, CAircraftSituation::FromProvider); diff --git a/src/blackmisc/geo/coordinategeodetic.h b/src/blackmisc/geo/coordinategeodetic.h index e312355b4..dd25f6a31 100644 --- a/src/blackmisc/geo/coordinategeodetic.h +++ b/src/blackmisc/geo/coordinategeodetic.h @@ -322,7 +322,11 @@ namespace BlackMisc } //! Is null? - virtual bool isNull() const override { return Math::CMathUtils::epsilonZeroLimits(m_x) && Math::CMathUtils::epsilonZeroLimits(m_y) && Math::CMathUtils::epsilonZeroLimits(m_z); } + virtual bool isNull() const override + { + if (m_geodeticHeight.isNull()) { return true; } + return Math::CMathUtils::epsilonZeroLimits(m_x) && Math::CMathUtils::epsilonZeroLimits(m_y) && Math::CMathUtils::epsilonZeroLimits(m_z); + } //! Coordinate by WGS84 position data static CCoordinateGeodetic fromWgs84(const QString &latitudeWgs84, const QString &longitudeWgs84, const Aviation::CAltitude &geodeticHeight = {}); diff --git a/src/plugins/simulator/xplane/xswiftbustrafficproxy.cpp b/src/plugins/simulator/xplane/xswiftbustrafficproxy.cpp index 6b5462747..858d66b37 100644 --- a/src/plugins/simulator/xplane/xswiftbustrafficproxy.cpp +++ b/src/plugins/simulator/xplane/xswiftbustrafficproxy.cpp @@ -9,6 +9,7 @@ #include "xswiftbustrafficproxy.h" #include #include +#include #define XSWIFTBUS_SERVICENAME "org.swift-project.xswiftbus" @@ -170,7 +171,7 @@ namespace BlackSimPlugin { const CCallsign cs(reply.argumentAt<0>()); const double elevationMeters = reply.argumentAt<1>(); - const CAltitude elevationAlt(elevationMeters, CLengthUnit::m(), CLengthUnit::ft()); + const CAltitude elevationAlt = std::isnan(elevationMeters) ? CAltitude::null() : CAltitude(elevationMeters, CLengthUnit::m(), CLengthUnit::ft()); const CElevationPlane elevation(CLatitude(latitudeDeg, CAngleUnit::deg()), CLongitude(longitudeDeg, CAngleUnit::deg()), elevationAlt, CElevationPlane::singlePointRadius());