Ref T275, ctor and option to check if gnd elevation "is better"

This commit is contained in:
Klaus Basan
2018-06-18 19:00:14 +02:00
parent 2625c3fb6b
commit 2c55015d26
5 changed files with 25 additions and 8 deletions

View File

@@ -381,6 +381,13 @@ namespace BlackMisc
return this->isPositionNull();
}
bool CAircraftSituation::isBetterInfo(CAircraftSituation::GndElevationInfo info) const
{
if (info == NoElevationInfo || info == Test) { return false; }
const int i = static_cast<int>(info);
return i > m_onGroundDetails;
}
bool CAircraftSituation::equalPbh(const CAircraftSituation &other) const
{
return this->getPitch() == other.getPitch() && this->getBank() == other.getBank() && this->getHeading() == other.getHeading();
@@ -754,7 +761,7 @@ namespace BlackMisc
if (elevationPlane.isNull()) { return false; }
const CLength distance = this->calculateGreatCircleDistance(elevationPlane);
if (distance > elevationPlane.getRadius()) { return false; }
if (m_groundElevationPlane.isNull() || distance < m_groundElevationPlane.getRadius())
if (m_groundElevationPlane.isNull() || this->isBetterInfo(info))
{
// better values
this->setGroundElevation(elevationPlane, info);

View File

@@ -114,15 +114,16 @@ namespace BlackMisc
//! Where did we get elevation from?
enum GndElevationInfo
{
// best info (most accurate) last
NoElevationInfo,
TransferredElevation, //!< transferred from nearby situation
Interpolated, //!< interpolated between 2 elevations
Test, //!< unit test
SituationChange, //!< from BlackMisc::Aviation::CAircraftSituationChange
Extrapolated, //!< extrapolated ("guessing")
Average, //!< average value of "nearby" situation CAircraftSituationList::averageElevationOfNonMovingAircraft
FromProvider, //!< from BlackMisc::Simulation::ISimulationEnvironmentProvider
Interpolated, //!< interpolated between 2 elevations
TransferredElevation, //!< transferred from nearby situation
FromCache, //!< from cache
SituationChange, //!< from BlackMisc::Aviation::CAircraftSituationChange
Test //!< unit test
FromProvider //!< from BlackMisc::Simulation::ISimulationEnvironmentProvider
};
//! Default constructor.
@@ -172,6 +173,9 @@ namespace BlackMisc
//! Null situation
virtual bool isNull() const override;
//! Is better info (more accurate)?
bool isBetterInfo(GndElevationInfo info) const;
//! Equal pitch, bank heading
//! \sa Geo::ICoordinateGeodetic::equalNormalVectorDouble
bool equalPbh(const CAircraftSituation &other) const;

View File

@@ -50,6 +50,10 @@ namespace BlackMisc
this->setGeodeticHeight(CAltitude(altitudeMSLft, CAltitude::MeanSeaLevel, CLengthUnit::ft()));
}
CElevationPlane::CElevationPlane(double latDeg, double lngDeg, double altitudeMSLft, const CLength &radius) :
CCoordinateGeodetic(latDeg, lngDeg, altitudeMSLft), m_radius(radius)
{ }
void CElevationPlane::setRadiusOrMinimum(const CLength &radius)
{
m_radius = ((radius.isNull() || radius < CElevationPlane::singlePointRadius())) ? CElevationPlane::singlePointRadius() : radius;

View File

@@ -45,6 +45,9 @@ namespace BlackMisc
//! Plane at given coordinates with radius and altitude
CElevationPlane(const ICoordinateGeodetic &coordinate, double altitudeMSLft, const PhysicalQuantities::CLength &radius);
//! Plane at given coordinates with radius and altitude
CElevationPlane(double latDeg, double lngDeg, double altitudeMSLft, const PhysicalQuantities::CLength &radius);
//! Constructors from CCoordinateGeodetic
using CCoordinateGeodetic::CCoordinateGeodetic;

View File

@@ -625,8 +625,7 @@ namespace BlackSimPlugin
void CSimulatorFsxCommon::updateProbeFromSimulator(const CCallsign &callsign, const DataDefinitionRemoteAircraftSimData &remoteAircraftData)
{
CElevationPlane elevation(remoteAircraftData.latitudeDeg, remoteAircraftData.longitudeDeg, remoteAircraftData.elevationFt);
elevation.setSinglePointRadius();
const CElevationPlane elevation(remoteAircraftData.latitudeDeg, remoteAircraftData.longitudeDeg, remoteAircraftData.elevationFt, CElevationPlane::singlePointRadius());
this->callbackReceivedRequestedElevation(elevation, callsign);
}