diff --git a/src/blackcore/simulator.cpp b/src/blackcore/simulator.cpp index 5a9bb588b..7deacfe4b 100644 --- a/src/blackcore/simulator.cpp +++ b/src/blackcore/simulator.cpp @@ -512,7 +512,7 @@ namespace BlackCore } } // logint - if (part1.startsWith("spline") || part1.startsWith("linear")) + if (part1.startsWith("spline") || part1.startsWith("linear") || part1.startsWith("velocity")) { if (parser.hasPart(2)) { diff --git a/src/blackgui/editors/interpolationsetupform.cpp b/src/blackgui/editors/interpolationsetupform.cpp index edf9118db..5a98d63fe 100644 --- a/src/blackgui/editors/interpolationsetupform.cpp +++ b/src/blackgui/editors/interpolationsetupform.cpp @@ -93,7 +93,8 @@ namespace BlackGui::Editors CInterpolationAndRenderingSetupBase::InterpolatorMode CInterpolationSetupForm::getInterpolatorMode() const { if (ui->rb_Linear->isChecked()) { return CInterpolationAndRenderingSetupBase::Linear; } - return CInterpolationAndRenderingSetupBase::Spline; + if (ui->rb_Spline->isChecked()) { return CInterpolationAndRenderingSetupBase::Spline; } + return CInterpolationAndRenderingSetupBase::Velocity; } void CInterpolationSetupForm::setInterpolatorMode(CInterpolationAndRenderingSetupBase::InterpolatorMode mode) @@ -101,9 +102,9 @@ namespace BlackGui::Editors switch (mode) { case CInterpolationAndRenderingSetupBase::Linear : ui->rb_Linear->setChecked(true); break; - case CInterpolationAndRenderingSetupBase::Spline: + case CInterpolationAndRenderingSetupBase::Spline: ui->rb_Spline->setChecked(true); break; default: - ui->rb_Spline->setChecked(true); + ui->rb_Velocity->setChecked(true); break; } } diff --git a/src/blackgui/editors/interpolationsetupform.ui b/src/blackgui/editors/interpolationsetupform.ui index 58da8428b..22536c6a1 100644 --- a/src/blackgui/editors/interpolationsetupform.ui +++ b/src/blackgui/editors/interpolationsetupform.ui @@ -150,6 +150,13 @@ + + + + velocity + + + diff --git a/src/blackmisc/simulation/interpolationlogger.cpp b/src/blackmisc/simulation/interpolationlogger.cpp index 0b3f511cc..11b3a1b09 100644 --- a/src/blackmisc/simulation/interpolationlogger.cpp +++ b/src/blackmisc/simulation/interpolationlogger.cpp @@ -578,9 +578,11 @@ namespace BlackMisc::Simulation { static const QString s("spline"); static const QString l("linear"); + static const QString v("velocity"); static const QString u("unknown"); if (interpolator == 's') { return s; } if (interpolator == 'l') { return l; } + if (interpolator == 'v') { return v; } return u; } diff --git a/src/blackmisc/simulation/interpolationrenderingsetup.cpp b/src/blackmisc/simulation/interpolationrenderingsetup.cpp index 1596f0098..4cf5aa377 100644 --- a/src/blackmisc/simulation/interpolationrenderingsetup.cpp +++ b/src/blackmisc/simulation/interpolationrenderingsetup.cpp @@ -61,6 +61,7 @@ namespace BlackMisc::Simulation { if (mode.contains("spline", Qt::CaseInsensitive)) { return this->setInterpolatorMode(Spline); } if (mode.contains("linear", Qt::CaseInsensitive)) { return this->setInterpolatorMode(Linear); } + if (mode.contains("velocity", Qt::CaseInsensitive)) { return this->setInterpolatorMode(Velocity); } return false; } @@ -68,11 +69,13 @@ namespace BlackMisc::Simulation { static const QString l("linear"); static const QString s("spline"); + static const QString v("velocity"); switch (mode) { case Linear: return l; case Spline: return s; + case Velocity: return v; default: return s; } } diff --git a/src/blackmisc/simulation/interpolationrenderingsetup.h b/src/blackmisc/simulation/interpolationrenderingsetup.h index d4758ba2c..0d3826806 100644 --- a/src/blackmisc/simulation/interpolationrenderingsetup.h +++ b/src/blackmisc/simulation/interpolationrenderingsetup.h @@ -49,7 +49,8 @@ namespace BlackMisc enum InterpolatorMode { Spline, - Linear + Linear, + Velocity }; //! Debugging messages for simulation diff --git a/src/blackmisc/simulation/interpolatormulti.cpp b/src/blackmisc/simulation/interpolatormulti.cpp index c3dc4c065..a48683e21 100644 --- a/src/blackmisc/simulation/interpolatormulti.cpp +++ b/src/blackmisc/simulation/interpolatormulti.cpp @@ -16,7 +16,8 @@ namespace BlackMisc::Simulation { CInterpolatorMulti::CInterpolatorMulti(const CCallsign &callsign, ISimulationEnvironmentProvider *p1, IInterpolationSetupProvider *p2, IRemoteAircraftProvider *p3, CInterpolationLogger *logger) : m_spline(callsign, p1, p2, p3, logger), - m_linear(callsign, p1, p2, p3, logger) + m_linear(callsign, p1, p2, p3, logger), + m_velocity(callsign, p1, p2, p3, logger) {} CInterpolationResult CInterpolatorMulti::getInterpolation(qint64 currentTimeSinceEpoc, const CInterpolationAndRenderingSetupPerCallsign &setup, int aircraftNumber) @@ -25,6 +26,7 @@ namespace BlackMisc::Simulation { case CInterpolationAndRenderingSetupBase::Linear: return m_linear.getInterpolation(currentTimeSinceEpoc, setup, aircraftNumber); case CInterpolationAndRenderingSetupBase::Spline: return m_spline.getInterpolation(currentTimeSinceEpoc, setup, aircraftNumber); + case CInterpolationAndRenderingSetupBase::Velocity: return m_velocity.getInterpolation(currentTimeSinceEpoc, setup, aircraftNumber); default: break; } @@ -37,6 +39,7 @@ namespace BlackMisc::Simulation { case CInterpolationAndRenderingSetupBase::Linear: return m_linear.getLastInterpolatedSituation(); case CInterpolationAndRenderingSetupBase::Spline: return m_spline.getLastInterpolatedSituation(); + case CInterpolationAndRenderingSetupBase::Velocity: return m_velocity.getLastInterpolatedSituation(); default: break; } return CAircraftSituation::null(); @@ -46,12 +49,14 @@ namespace BlackMisc::Simulation { m_linear.attachLogger(logger); m_spline.attachLogger(logger); + m_velocity.attachLogger(logger); } void CInterpolatorMulti::initCorrespondingModel(const CAircraftModel &model) { m_linear.initCorrespondingModel(model); m_spline.initCorrespondingModel(model); + m_velocity.initCorrespondingModel(model); } const CStatusMessageList &CInterpolatorMulti::getInterpolationMessages(CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const @@ -60,6 +65,7 @@ namespace BlackMisc::Simulation { case CInterpolationAndRenderingSetupBase::Spline: return m_spline.getInterpolationMessages(); case CInterpolationAndRenderingSetupBase::Linear: return m_linear.getInterpolationMessages(); + case CInterpolationAndRenderingSetupBase::Velocity: return m_velocity.getInterpolationMessages(); default: break; } static const CStatusMessageList empty; @@ -72,6 +78,7 @@ namespace BlackMisc::Simulation { case CInterpolationAndRenderingSetupBase::Spline: return m_spline.getInterpolatorInfo(); case CInterpolationAndRenderingSetupBase::Linear: return m_linear.getInterpolatorInfo(); + case CInterpolationAndRenderingSetupBase::Velocity: return m_velocity.getInterpolatorInfo(); default: break; } return ("Illegal mode"); diff --git a/src/blackmisc/simulation/interpolatormulti.h b/src/blackmisc/simulation/interpolatormulti.h index f6689a040..afeeb495b 100644 --- a/src/blackmisc/simulation/interpolatormulti.h +++ b/src/blackmisc/simulation/interpolatormulti.h @@ -13,6 +13,7 @@ #include "blackmisc/simulation/interpolatorlinear.h" #include "blackmisc/simulation/interpolatorspline.h" +#include "blackmisc/simulation/interpolatorvelocity.h" #include "blackmisc/statusmessagelist.h" namespace BlackMisc::Simulation @@ -47,6 +48,7 @@ namespace BlackMisc::Simulation private: CInterpolatorSpline m_spline; CInterpolatorLinear m_linear; + CInterpolatorVelocity m_velocity; }; /*!