From 88b2da94a3ee5237782558281b197e6e2a000ae6 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 8 Jun 2018 21:36:22 +0200 Subject: [PATCH] Ref T275, elevation plane improvements * setRadiusOrMinimum * ASSERT if there is no radius --- src/blackcore/airspacemonitor.cpp | 1 + src/blackmisc/aviation/aircraftsituation.cpp | 4 +++- src/blackmisc/geo/elevationplane.cpp | 7 ++++++- src/blackmisc/geo/elevationplane.h | 3 +++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/blackcore/airspacemonitor.cpp b/src/blackcore/airspacemonitor.cpp index ec0171f54..0179c5160 100644 --- a/src/blackcore/airspacemonitor.cpp +++ b/src/blackcore/airspacemonitor.cpp @@ -937,6 +937,7 @@ namespace BlackCore { const CLength distance(correctedSituation.getDistancePerTime(250)); const CElevationPlane ep = this->findClosestElevationWithinRangeOrRequest(correctedSituation, distance, callsign); + Q_ASSERT_X(ep.isNull() || !ep.getRadius().isNull(), Q_FUNC_INFO, "null radius"); correctedSituation.setGroundElevation(ep, CAircraftSituation::FromCache); } diff --git a/src/blackmisc/aviation/aircraftsituation.cpp b/src/blackmisc/aviation/aircraftsituation.cpp index e19421099..898fc708a 100644 --- a/src/blackmisc/aviation/aircraftsituation.cpp +++ b/src/blackmisc/aviation/aircraftsituation.cpp @@ -560,6 +560,7 @@ namespace BlackMisc { if (!this->canTransferGroundElevation(otherSituation, radius)) { return false; } otherSituation.setGroundElevation(this->getGroundElevationPlane(), TransferredElevation); + Q_ASSERT_X(!otherSituation.getGroundElevationRadius().isNull(), Q_FUNC_INFO, "null radius"); return true; } @@ -620,6 +621,7 @@ namespace BlackMisc else { this->setGroundElevationInfo(info); + Q_ASSERT_X(!m_groundElevationPlane.getRadius().isNull(), Q_FUNC_INFO, "Null radius"); m_groundElevationPlane.switchUnit(this->getAltitudeOrDefaultUnit()); // we use ft as internal unit, no "must" but simplification } } @@ -633,7 +635,7 @@ namespace BlackMisc { // better values this->setGroundElevation(elevationPlane, info); - m_groundElevationPlane.setRadius(distance); + m_groundElevationPlane.setRadiusOrMinimum(distance); return true; } return false; diff --git a/src/blackmisc/geo/elevationplane.cpp b/src/blackmisc/geo/elevationplane.cpp index 714885dc2..724a86a8b 100644 --- a/src/blackmisc/geo/elevationplane.cpp +++ b/src/blackmisc/geo/elevationplane.cpp @@ -31,13 +31,18 @@ namespace BlackMisc CElevationPlane::CElevationPlane(const ICoordinateGeodetic &coordinate, const ICoordinateGeodetic &rangeCoordinate) : CCoordinateGeodetic(coordinate) { - m_radius = this->calculateGreatCircleDistance(rangeCoordinate); + this->setRadiusOrMinimum(this->calculateGreatCircleDistance(rangeCoordinate)); } CElevationPlane::CElevationPlane(const ICoordinateGeodetic &coordinate, const CLength &radius) : CCoordinateGeodetic(coordinate), m_radius(radius) { } + void CElevationPlane::setRadiusOrMinimum(const CLength &radius) + { + m_radius = ((radius.isNull() || radius < CElevationPlane::singlePointRadius())) ? CElevationPlane::singlePointRadius() : radius; + } + void CElevationPlane::addAltitudeOffset(const CLength &offset) { if (offset.isNull() || offset.isZeroEpsilonConsidered()) { return; } diff --git a/src/blackmisc/geo/elevationplane.h b/src/blackmisc/geo/elevationplane.h index ba0e32a04..8eb7da858 100644 --- a/src/blackmisc/geo/elevationplane.h +++ b/src/blackmisc/geo/elevationplane.h @@ -48,6 +48,9 @@ namespace BlackMisc //! Radius void setRadius(const PhysicalQuantities::CLength &radius) { m_radius = radius; } + //! Radius or minimum CElevationPlane::singlePointRadius + void setRadiusOrMinimum(const PhysicalQuantities::CLength &radius); + //! Add offset to altitude void addAltitudeOffset(const PhysicalQuantities::CLength &offset);