Ref T259, Ref T243 functions for ground factor/underflow interpolation

This commit is contained in:
Klaus Basan
2018-03-28 03:55:06 +02:00
parent a7f1e15f39
commit dd9efc9bb1
4 changed files with 58 additions and 7 deletions

View File

@@ -229,9 +229,15 @@ namespace BlackMisc
void CAircraftSituation::setOnGroundFactor(double groundFactor)
{
if (groundFactor < 0.0) { m_onGroundFactor = -1.0; return; }
if (groundFactor > 1.0) { m_onGroundFactor = 1.0; return; }
m_onGroundFactor = groundFactor;
double gf = groundFactor;
do
{
if (groundFactor < 0.0) { gf = -1.0; break; }
if (groundFactor < 0.001) { gf = 0.0; break; }
if (groundFactor > 0.999) { gf = 1.0; break; }
}
while (false);
m_onGroundFactor = gf;
}
bool CAircraftSituation::guessOnGround(bool vtol, const PhysicalQuantities::CLength &cg)
@@ -271,6 +277,29 @@ namespace BlackMisc
return CAircraftSituation::onGroundDetailsToString(this->getOnGroundDetails());
}
bool CAircraftSituation::setOnGroundFromGroundFactorFromInterpolation(double threshold)
{
this->setOnGroundDetails(OnGroundByInterpolation);
if (this->getOnGroundFactor() < 0.0)
{
this->setOnGround(NotSet);
return false;
}
// set on ground but leave factor untouched
const bool og = this->getOnGroundFactor() > threshold; // 1.0 means on ground
m_onGround = og ? OnGround : NotOnGround;
return true;
}
bool CAircraftSituation::setOnGroundByUnderflowDetection(const CLength &cg)
{
IsOnGround og = this->isOnGroundByElevation(cg);
if (og == OnGroundSituationUnknown) { return false; }
this->setOnGround(og, OnGroundByElevationAndCG);
return true;
}
QString CAircraftSituation::getOnGroundInfo() const
{
return this->onGroundAsString() % QLatin1Char(' ') % this->getOnDetailsAsString();

View File

@@ -188,6 +188,12 @@ namespace BlackMisc
//! On ground details
void setOnGroundDetails(CAircraftSituation::OnGroundDetails details) { m_onGroundDetails = static_cast<int>(details); }
//! Set on ground as interpolated from ground fatcor
bool setOnGroundFromGroundFactorFromInterpolation(double threshold = 0.5);
//! Set on ground by underflow detection, detects below ground scenarios
bool setOnGroundByUnderflowDetection(const PhysicalQuantities::CLength &cg);
//! On ground info as string
QString getOnGroundInfo() const;

View File

@@ -108,6 +108,19 @@ namespace BlackMisc
return c;
}
int CSimulatedAircraftList::setFastPositionUpdates(const CCallsign &callsign, bool fastPositions, bool onlyFirst)
{
int c = 0;
for (CSimulatedAircraft &aircraft : (*this))
{
if (aircraft.getCallsign() != callsign) { continue; }
aircraft.setFastPositionUpdates(fastPositions);
c++;
if (onlyFirst) break;
}
return c;
}
int CSimulatedAircraftList::setEnabled(const CCallsign &callsign, bool enabled, bool onlyFirst)
{
int c = 0;
@@ -134,7 +147,7 @@ namespace BlackMisc
return c;
}
int CSimulatedAircraftList::setAircraftParts(const CCallsign &callsign, const CAircraftParts &parts, bool onlyFirst)
int CSimulatedAircraftList::setAircraftPartsSynchronized(const CCallsign &callsign, const CAircraftParts &parts, bool onlyFirst)
{
int c = 0;
for (CSimulatedAircraft &aircraft : (*this))

View File

@@ -79,13 +79,16 @@ namespace BlackMisc
int setRendered(const Aviation::CCallsign &callsign, bool rendered, bool onlyFirst = true);
//! Mark given callsign as enabled
int setEnabled(const Aviation::CCallsign &callsign, bool enabled, bool onlyFirst = true);
int setEnabled(const Aviation::CCallsign &callsign, bool enabled, bool onlyFirst);
//! Mark as fast position enabled
int setFastPositionUpdates(const Aviation::CCallsign &callsign, bool fastPositions, bool onlyFirst = true);
//! Set model
int setAircraftModel(const Aviation::CCallsign &callsign, const CAircraftModel &model, bool onlyFirst = true);
//! Set aircraft parts
int setAircraftParts(const Aviation::CCallsign &callsign, const Aviation::CAircraftParts &parts, bool onlyFirst = true);
//! Set aircraft parts and mark as synchronized
int setAircraftPartsSynchronized(const Aviation::CCallsign &callsign, const Aviation::CAircraftParts &parts, bool onlyFirst = true);
//! Set aircraft parts
int setAircraftSituation(const Aviation::CCallsign &callsign, const Aviation::CAircraftSituation &situation, bool onlyFirst = true);