mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-24 09:54:16 +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();
|
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
|
bool CAircraftSituation::equalPbh(const CAircraftSituation &other) const
|
||||||
{
|
{
|
||||||
return this->getPitch() == other.getPitch() && this->getBank() == other.getBank() && this->getHeading() == other.getHeading();
|
return this->getPitch() == other.getPitch() && this->getBank() == other.getBank() && this->getHeading() == other.getHeading();
|
||||||
@@ -754,7 +761,7 @@ namespace BlackMisc
|
|||||||
if (elevationPlane.isNull()) { return false; }
|
if (elevationPlane.isNull()) { return false; }
|
||||||
const CLength distance = this->calculateGreatCircleDistance(elevationPlane);
|
const CLength distance = this->calculateGreatCircleDistance(elevationPlane);
|
||||||
if (distance > elevationPlane.getRadius()) { return false; }
|
if (distance > elevationPlane.getRadius()) { return false; }
|
||||||
if (m_groundElevationPlane.isNull() || distance < m_groundElevationPlane.getRadius())
|
if (m_groundElevationPlane.isNull() || this->isBetterInfo(info))
|
||||||
{
|
{
|
||||||
// better values
|
// better values
|
||||||
this->setGroundElevation(elevationPlane, info);
|
this->setGroundElevation(elevationPlane, info);
|
||||||
|
|||||||
@@ -114,15 +114,16 @@ namespace BlackMisc
|
|||||||
//! Where did we get elevation from?
|
//! Where did we get elevation from?
|
||||||
enum GndElevationInfo
|
enum GndElevationInfo
|
||||||
{
|
{
|
||||||
|
// best info (most accurate) last
|
||||||
NoElevationInfo,
|
NoElevationInfo,
|
||||||
TransferredElevation, //!< transferred from nearby situation
|
Test, //!< unit test
|
||||||
Interpolated, //!< interpolated between 2 elevations
|
SituationChange, //!< from BlackMisc::Aviation::CAircraftSituationChange
|
||||||
Extrapolated, //!< extrapolated ("guessing")
|
Extrapolated, //!< extrapolated ("guessing")
|
||||||
Average, //!< average value of "nearby" situation CAircraftSituationList::averageElevationOfNonMovingAircraft
|
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
|
FromCache, //!< from cache
|
||||||
SituationChange, //!< from BlackMisc::Aviation::CAircraftSituationChange
|
FromProvider //!< from BlackMisc::Simulation::ISimulationEnvironmentProvider
|
||||||
Test //!< unit test
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Default constructor.
|
//! Default constructor.
|
||||||
@@ -172,6 +173,9 @@ namespace BlackMisc
|
|||||||
//! Null situation
|
//! Null situation
|
||||||
virtual bool isNull() const override;
|
virtual bool isNull() const override;
|
||||||
|
|
||||||
|
//! Is better info (more accurate)?
|
||||||
|
bool isBetterInfo(GndElevationInfo info) const;
|
||||||
|
|
||||||
//! Equal pitch, bank heading
|
//! Equal pitch, bank heading
|
||||||
//! \sa Geo::ICoordinateGeodetic::equalNormalVectorDouble
|
//! \sa Geo::ICoordinateGeodetic::equalNormalVectorDouble
|
||||||
bool equalPbh(const CAircraftSituation &other) const;
|
bool equalPbh(const CAircraftSituation &other) const;
|
||||||
|
|||||||
@@ -50,6 +50,10 @@ namespace BlackMisc
|
|||||||
this->setGeodeticHeight(CAltitude(altitudeMSLft, CAltitude::MeanSeaLevel, CLengthUnit::ft()));
|
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)
|
void CElevationPlane::setRadiusOrMinimum(const CLength &radius)
|
||||||
{
|
{
|
||||||
m_radius = ((radius.isNull() || radius < CElevationPlane::singlePointRadius())) ? CElevationPlane::singlePointRadius() : 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
|
//! Plane at given coordinates with radius and altitude
|
||||||
CElevationPlane(const ICoordinateGeodetic &coordinate, double altitudeMSLft, const PhysicalQuantities::CLength &radius);
|
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
|
//! Constructors from CCoordinateGeodetic
|
||||||
using CCoordinateGeodetic::CCoordinateGeodetic;
|
using CCoordinateGeodetic::CCoordinateGeodetic;
|
||||||
|
|
||||||
|
|||||||
@@ -625,8 +625,7 @@ namespace BlackSimPlugin
|
|||||||
|
|
||||||
void CSimulatorFsxCommon::updateProbeFromSimulator(const CCallsign &callsign, const DataDefinitionRemoteAircraftSimData &remoteAircraftData)
|
void CSimulatorFsxCommon::updateProbeFromSimulator(const CCallsign &callsign, const DataDefinitionRemoteAircraftSimData &remoteAircraftData)
|
||||||
{
|
{
|
||||||
CElevationPlane elevation(remoteAircraftData.latitudeDeg, remoteAircraftData.longitudeDeg, remoteAircraftData.elevationFt);
|
const CElevationPlane elevation(remoteAircraftData.latitudeDeg, remoteAircraftData.longitudeDeg, remoteAircraftData.elevationFt, CElevationPlane::singlePointRadius());
|
||||||
elevation.setSinglePointRadius();
|
|
||||||
this->callbackReceivedRequestedElevation(elevation, callsign);
|
this->callbackReceivedRequestedElevation(elevation, callsign);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user