diff --git a/src/blackmisc/simulation/interpolator.cpp b/src/blackmisc/simulation/interpolator.cpp index e74fc41f6..48465d348 100644 --- a/src/blackmisc/simulation/interpolator.cpp +++ b/src/blackmisc/simulation/interpolator.cpp @@ -153,43 +153,6 @@ namespace BlackMisc::Simulation this->initCorrespondingModel(); } - bool CInterpolator::verifyInterpolationSituations(const CAircraftSituation &oldest, const CAircraftSituation &newer, const CAircraftSituation &latest, const CInterpolationAndRenderingSetupPerCallsign &setup) - { - if (!CBuildConfig::isLocalDeveloperDebugBuild()) { return true; } - CAircraftSituationList situations; - - // oldest last, null ignored - if (!latest.isNull()) { situations.push_back(latest); } - if (!newer.isNull()) { situations.push_back(newer); } - if (!oldest.isNull()) { situations.push_back(oldest); } - - const bool sorted = situations.isSortedAdjustedLatestFirstWithoutNullPositions(); - if (setup.isNull() || !setup.isAircraftPartsEnabled()) { return sorted; } - - bool details = false; - if (situations.containsOnGroundDetails(COnGroundInfo::InFromParts)) - { - // if a client supports parts, all ground situations are supposed to be parts based - details = situations.areAllOnGroundDetailsSame(COnGroundInfo::InFromParts); - BLACK_VERIFY_X(details, Q_FUNC_INFO, "Once gnd.from parts -> always gnd. from parts"); - } - - for (const CAircraftSituation &s : situations) - { - if (!s.hasGroundElevation()) { continue; } - BLACK_VERIFY_X(!s.getGroundElevation().isZeroEpsilonConsidered(), Q_FUNC_INFO, "Suspicous 0 gnd. value"); - } - - // check if middle situation is missing - if (latest.hasGroundElevation() && oldest.hasGroundElevation()) - { - BLACK_VERIFY_X(newer.hasGroundElevation(), Q_FUNC_INFO, "Middle ground elevation is missing"); - } - - // result - return sorted && details; - } - const QStringList &CInterpolator::getLogCategories() { static const QStringList cats { CLogCategories::interpolator() }; diff --git a/src/blackmisc/simulation/interpolator.h b/src/blackmisc/simulation/interpolator.h index a929ed75e..282fd7e9f 100644 --- a/src/blackmisc/simulation/interpolator.h +++ b/src/blackmisc/simulation/interpolator.h @@ -145,10 +145,6 @@ namespace BlackMisc::Simulation bool m_unitTest = false; //!< mark as unit test - //! Verify gnd flag, times, ... true means "OK" - bool verifyInterpolationSituations(const Aviation::CAircraftSituation &oldest, const Aviation::CAircraftSituation &newer, const Aviation::CAircraftSituation &latest, - const CInterpolationAndRenderingSetupPerCallsign &setup = CInterpolationAndRenderingSetupPerCallsign::null()); - private: CInterpolationLogger *m_logger = nullptr; //!< optional interpolation logger QTimer m_initTimer; //!< timer to init model, will be deleted when interpolator is deleted and cancel the call diff --git a/src/blackmisc/simulation/interpolatorspline.cpp b/src/blackmisc/simulation/interpolatorspline.cpp index 717974535..da3f66188 100644 --- a/src/blackmisc/simulation/interpolatorspline.cpp +++ b/src/blackmisc/simulation/interpolatorspline.cpp @@ -159,7 +159,7 @@ namespace BlackMisc::Simulation if (CBuildConfig::isLocalDeveloperDebugBuild()) { - const bool verified = this->verifyInterpolationSituations(m_s[0], m_s[1], m_s[2]); // oldest -> latest, only verify order + const bool verified = verifyInterpolationSituations(m_s[0], m_s[1], m_s[2]); // oldest -> latest, only verify order if (!verified) { static const QString vm("Unverified situations, m0-2 (oldest latest) %1 %2 %3"); @@ -418,4 +418,42 @@ namespace BlackMisc::Simulation }(); return pa; } + + bool CInterpolatorSpline::verifyInterpolationSituations(const CAircraftSituation &oldest, const CAircraftSituation &newer, const CAircraftSituation &latest, const CInterpolationAndRenderingSetupPerCallsign &setup) + { + if (!CBuildConfig::isLocalDeveloperDebugBuild()) { return true; } + CAircraftSituationList situations; + + // oldest last, null ignored + if (!latest.isNull()) { situations.push_back(latest); } + if (!newer.isNull()) { situations.push_back(newer); } + if (!oldest.isNull()) { situations.push_back(oldest); } + + const bool sorted = situations.isSortedAdjustedLatestFirstWithoutNullPositions(); + if (setup.isNull() || !setup.isAircraftPartsEnabled()) { return sorted; } + + bool details = false; + if (situations.containsOnGroundDetails(COnGroundInfo::InFromParts)) + { + // if a client supports parts, all ground situations are supposed to be parts based + details = situations.areAllOnGroundDetailsSame(COnGroundInfo::InFromParts); + BLACK_VERIFY_X(details, Q_FUNC_INFO, "Once gnd.from parts -> always gnd. from parts"); + } + + for (const CAircraftSituation &s : situations) + { + if (!s.hasGroundElevation()) { continue; } + BLACK_VERIFY_X(!s.getGroundElevation().isZeroEpsilonConsidered(), Q_FUNC_INFO, "Suspicous 0 gnd. value"); + } + + // check if middle situation is missing + if (latest.hasGroundElevation() && oldest.hasGroundElevation()) + { + BLACK_VERIFY_X(newer.hasGroundElevation(), Q_FUNC_INFO, "Middle ground elevation is missing"); + } + + // result + return sorted && details; + } + } // ns diff --git a/src/blackmisc/simulation/interpolatorspline.h b/src/blackmisc/simulation/interpolatorspline.h index 325c2a2ee..9c13cedc6 100644 --- a/src/blackmisc/simulation/interpolatorspline.h +++ b/src/blackmisc/simulation/interpolatorspline.h @@ -101,6 +101,10 @@ namespace BlackMisc::Simulation //! Fill the situations array bool fillSituationsArray(); + //! Verify gnd flag, times, ... true means "OK" + static bool verifyInterpolationSituations(const Aviation::CAircraftSituation &oldest, const Aviation::CAircraftSituation &newer, const Aviation::CAircraftSituation &latest, + const CInterpolationAndRenderingSetupPerCallsign &setup = CInterpolationAndRenderingSetupPerCallsign::null()); + qint64 m_prevSampleAdjustedTime = 0; //!< previous sample time + offset qint64 m_nextSampleAdjustedTime = 0; //!< previous sample time + offset qint64 m_prevSampleTime = 0; //!< previous sample "real time"