Ref T275, elevation plane improvements

* setRadiusOrMinimum
* ASSERT if there is no radius
This commit is contained in:
Klaus Basan
2018-06-08 21:36:22 +02:00
parent 4393bdeb77
commit 88b2da94a3
4 changed files with 13 additions and 2 deletions

View File

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

View File

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

View File

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

View File

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