mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-31 04:25:35 +08:00
Ref T275, ctor and option to check if gnd elevation "is better"
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user