From 6521b89fdd74962dd9f7c2b91e196b9c3b8007da Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 16 Sep 2019 00:20:52 +0200 Subject: [PATCH] Ref T717, simulator ground elevation --- src/blackcore/context/contextsimulator.h | 7 +++++++ src/blackcore/context/contextsimulatorempty.h | 16 ++++++++++++++++ src/blackcore/context/contextsimulatorimpl.cpp | 14 ++++++++++++++ src/blackcore/context/contextsimulatorimpl.h | 2 ++ src/blackcore/context/contextsimulatorproxy.cpp | 10 ++++++++++ src/blackcore/context/contextsimulatorproxy.h | 11 +++++++---- 6 files changed, 56 insertions(+), 4 deletions(-) diff --git a/src/blackcore/context/contextsimulator.h b/src/blackcore/context/contextsimulator.h index 3420be408..87ec0670d 100644 --- a/src/blackcore/context/contextsimulator.h +++ b/src/blackcore/context/contextsimulator.h @@ -28,6 +28,7 @@ #include "blackmisc/simulation/matchingstatistics.h" #include "blackmisc/simulation/interpolationrenderingsetup.h" #include "blackmisc/aviation/airportlist.h" +#include "blackmisc/geo/elevationplane.h" #include "blackmisc/pq/length.h" #include "blackmisc/pq/time.h" #include "blackmisc/identifier.h" @@ -301,6 +302,12 @@ namespace BlackCore //! Request weather grid. Argument identifier is past in the signal to identify the requestor virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) = 0; + //! \copydoc BlackMisc::Simulation::ISimulationEnvironmentProvider::requestElevationBySituation + virtual bool requestElevationBySituation(const BlackMisc::Aviation::CAircraftSituation &situation) = 0; + + //! \copydoc BlackMisc::Simulation::ISimulationEnvironmentProvider::findClosestElevationWithinRange + virtual BlackMisc::Geo::CElevationPlane findClosestElevationWithinRange(const BlackMisc::Geo::CCoordinateGeodetic &reference, const BlackMisc::PhysicalQuantities::CLength &range) const = 0; + //! Repeat all matchings virtual int doMatchingsAgain() = 0; diff --git a/src/blackcore/context/contextsimulatorempty.h b/src/blackcore/context/contextsimulatorempty.h index 6eb8c4f50..cb03c7710 100644 --- a/src/blackcore/context/contextsimulatorempty.h +++ b/src/blackcore/context/contextsimulatorempty.h @@ -364,6 +364,22 @@ namespace BlackCore logEmptyContextWarning(Q_FUNC_INFO); } + //! \copydoc IContextSimulator::requestWeatherGrid + virtual bool requestElevationBySituation(const BlackMisc::Aviation::CAircraftSituation &situation) override + { + Q_UNUSED(situation); + logEmptyContextWarning(Q_FUNC_INFO); + return false; + } + + virtual BlackMisc::Geo::CElevationPlane findClosestElevationWithinRange(const BlackMisc::Geo::CCoordinateGeodetic &reference, const BlackMisc::PhysicalQuantities::CLength &range) const override + { + Q_UNUSED(reference); + Q_UNUSED(range); + logEmptyContextWarning(Q_FUNC_INFO); + return BlackMisc::Geo::CElevationPlane::null(); + } + //! \copydoc IContextSimulator::getMatchingMessages virtual BlackMisc::CStatusMessageList getMatchingMessages(const BlackMisc::Aviation::CCallsign &callsign) const override { diff --git a/src/blackcore/context/contextsimulatorimpl.cpp b/src/blackcore/context/contextsimulatorimpl.cpp index 80be72ecc..8d930a371 100644 --- a/src/blackcore/context/contextsimulatorimpl.cpp +++ b/src/blackcore/context/contextsimulatorimpl.cpp @@ -1131,6 +1131,20 @@ namespace BlackCore m_weatherManager.requestWeatherGrid(weatherGrid, identifier); } + bool CContextSimulator::requestElevationBySituation(const CAircraftSituation &situation) + { + if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << situation; } + if (!m_simulatorPlugin.second || !m_simulatorPlugin.second->isConnected()) { return false; } + return m_simulatorPlugin.second->requestElevationBySituation(situation); + } + + CElevationPlane CContextSimulator::findClosestElevationWithinRange(const CCoordinateGeodetic &reference, const CLength &range) const + { + if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << reference.convertToQString(true) << range; } + if (!m_simulatorPlugin.second || !m_simulatorPlugin.second->isConnected()) { return CElevationPlane::null(); } + return m_simulatorPlugin.second->findClosestElevationWithinRange(reference, range); + } + int CContextSimulator::doMatchingsAgain() { if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; } diff --git a/src/blackcore/context/contextsimulatorimpl.h b/src/blackcore/context/contextsimulatorimpl.h index 68bd67d1c..0eb1fb401 100644 --- a/src/blackcore/context/contextsimulatorimpl.h +++ b/src/blackcore/context/contextsimulatorimpl.h @@ -118,6 +118,8 @@ namespace BlackCore virtual bool isWeatherActivated() const override; virtual void setWeatherActivated(bool activated) override; virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) override; + virtual bool requestElevationBySituation(const BlackMisc::Aviation::CAircraftSituation &situation) override; + virtual BlackMisc::Geo::CElevationPlane findClosestElevationWithinRange(const BlackMisc::Geo::CCoordinateGeodetic &reference, const BlackMisc::PhysicalQuantities::CLength &range) const override; virtual int doMatchingsAgain() override; virtual bool doMatchingAgain(const BlackMisc::Aviation::CCallsign &callsign) override; virtual BlackMisc::CStatusMessageList getMatchingMessages(const BlackMisc::Aviation::CCallsign &callsign) const override; diff --git a/src/blackcore/context/contextsimulatorproxy.cpp b/src/blackcore/context/contextsimulatorproxy.cpp index 63e243004..7c97f4d51 100644 --- a/src/blackcore/context/contextsimulatorproxy.cpp +++ b/src/blackcore/context/contextsimulatorproxy.cpp @@ -320,6 +320,16 @@ namespace BlackCore m_dBusInterface->callDBus(QLatin1String("requestWeatherGrid"), weatherGrid, identifier); } + bool CContextSimulatorProxy::requestElevationBySituation(const CAircraftSituation &situation) + { + return m_dBusInterface->callDBusRet(QLatin1String("requestElevationBySituation"), situation); + } + + CElevationPlane CContextSimulatorProxy::findClosestElevationWithinRange(const CCoordinateGeodetic &reference, const CLength &range) const + { + return m_dBusInterface->callDBusRet(QLatin1String("findClosestElevationWithinRange"), reference, range); + } + CStatusMessageList CContextSimulatorProxy::getMatchingMessages(const BlackMisc::Aviation::CCallsign &callsign) const { return m_dBusInterface->callDBusRet(QLatin1String("getMatchingMessages"), callsign); diff --git a/src/blackcore/context/contextsimulatorproxy.h b/src/blackcore/context/contextsimulatorproxy.h index 26929fa72..1a5f7c2ca 100644 --- a/src/blackcore/context/contextsimulatorproxy.h +++ b/src/blackcore/context/contextsimulatorproxy.h @@ -14,13 +14,14 @@ #include "blackcore/blackcoreexport.h" #include "blackcore/context/contextsimulator.h" #include "blackcore/corefacadeconfig.h" -#include "blackmisc/aviation/airportlist.h" -#include "blackmisc/pixmap.h" -#include "blackmisc/pq/length.h" -#include "blackmisc/pq/time.h" #include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/simulatorplugininfolist.h" #include "blackmisc/simulation/simulatorinternals.h" +#include "blackmisc/geo/elevationplane.h" +#include "blackmisc/pq/length.h" +#include "blackmisc/pq/time.h" +#include "blackmisc/aviation/airportlist.h" +#include "blackmisc/pixmap.h" #include #include @@ -100,6 +101,8 @@ namespace BlackCore virtual bool isWeatherActivated() const override; virtual void setWeatherActivated(bool activated) override; virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) override; + virtual bool requestElevationBySituation(const BlackMisc::Aviation::CAircraftSituation &situation) override; + virtual BlackMisc::Geo::CElevationPlane findClosestElevationWithinRange(const BlackMisc::Geo::CCoordinateGeodetic &reference, const BlackMisc::PhysicalQuantities::CLength &range) const override; virtual BlackMisc::CStatusMessageList getMatchingMessages(const BlackMisc::Aviation::CCallsign &callsign) const override; virtual BlackMisc::Simulation::MatchingLog isMatchingMessagesEnabled() const override; virtual void enableMatchingMessages(BlackMisc::Simulation::MatchingLog enabled) override;