Ref T180, get interpolated situation utility function in CSimConnectObject, returning the aircraft situation if there is no interpolation value

This commit is contained in:
Klaus Basan
2017-11-04 15:53:08 +01:00
parent 656d86a4ef
commit 924d4aab7f
3 changed files with 24 additions and 4 deletions

View File

@@ -98,6 +98,19 @@ namespace BlackSimPlugin
return m_interpolator->getInterpolatorInfo();
}
CAircraftSituation CSimConnectObject::getInterpolatedSituation(
qint64 currentTimeSinceEpoc,
const CInterpolationAndRenderingSetup &setup,
const CInterpolationHints &hints, CInterpolationStatus &status) const
{
Q_ASSERT(m_interpolator);
const CAircraftSituation s = m_interpolator->getInterpolatedSituation(currentTimeSinceEpoc, setup, hints, status);
// return original position if interpolation fails for some reason
const bool valid = status.allTrue() && !s.isPositionNull() && !s.isGeodeticHeightNull();
return valid ? m_aircraft.getSituation() : s;
}
bool CSimConnectObjects::setSimConnectObjectIdForRequestId(DWORD requestId, DWORD objectId, bool resetSentParts)
{
// First check, if this request id belongs to us

View File

@@ -45,9 +45,6 @@ namespace BlackSimPlugin
//! Simulated aircraft model string
const QString &getAircraftModelString() const { return m_aircraft.getModelString(); }
//! Interpolator
BlackMisc::Simulation::CInterpolatorMulti *getInterpolator() const { return m_interpolator.data(); }
//! Add parts for interpolator
void addAircraftParts(const BlackMisc::Aviation::CAircraftParts &parts);
@@ -132,6 +129,16 @@ namespace BlackSimPlugin
//! Interpolator info
QString getInterpolatorInfo() const;
//! Interpolator
BlackMisc::Simulation::CInterpolatorMulti *getInterpolator() const { return m_interpolator.data(); }
//! Get interpolated situation
//! \remark return original position if interpolation fails for some reason
BlackMisc::Aviation::CAircraftSituation getInterpolatedSituation(
qint64 currentTimeSinceEpoc,
const BlackMisc::Simulation::CInterpolationAndRenderingSetup &setup,
const BlackMisc::Simulation::CInterpolationHints &hints, BlackMisc::Simulation::CInterpolationStatus &status) const;
private:
BlackMisc::Simulation::CSimulatedAircraft m_aircraft; //!< corresponding aircraft
DWORD m_requestId = 0;

View File

@@ -1068,7 +1068,7 @@ namespace BlackSimPlugin
CInterpolationHints hints(m_hints[callsign]);
hints.setAircraftParts(useAircraftParts ? parts : CAircraftParts(), useAircraftParts);
hints.setLoggingInterpolation(logInterpolationAndParts);
const CAircraftSituation interpolatedSituation = simObj.getInterpolator()->getInterpolatedSituation(currentTimestamp, setup, hints, interpolatorStatus);
const CAircraftSituation interpolatedSituation = simObj.getInterpolatedSituation(currentTimestamp, setup, hints, interpolatorStatus);
if (interpolatorStatus.allTrue())
{