Fix assert due to NaN in CXSwiftBusTrafficProxy::getElevationAtPosition

This commit is contained in:
Mat Sutcliffe
2020-01-18 14:30:58 +00:00
parent dc6382d1bd
commit 4bfa5d5f40
3 changed files with 8 additions and 2 deletions

View File

@@ -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);

View File

@@ -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 = {});

View File

@@ -9,6 +9,7 @@
#include "xswiftbustrafficproxy.h"
#include <QLatin1String>
#include <QDBusConnection>
#include <cmath>
#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());