From c168262159c8657befecbc3738b04e687f0fae2e Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 28 Jun 2018 01:26:08 +0200 Subject: [PATCH] Ref T275, utility functions in simulated aircraft, sim object .. --- src/blackmisc/aviation/altitude.h | 6 ++++++ src/blackmisc/geo/elevationplane.cpp | 6 ++++++ src/blackmisc/geo/elevationplane.h | 3 +++ src/blackmisc/pq/length.h | 6 ++++++ src/blackmisc/simulation/simulatedaircraft.cpp | 6 ++++-- src/blackmisc/simulation/simulatedaircraft.h | 2 +- src/plugins/simulator/fsxcommon/simconnectobject.cpp | 12 ++++++++++++ src/plugins/simulator/fsxcommon/simconnectobject.h | 6 ++++++ 8 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/blackmisc/aviation/altitude.h b/src/blackmisc/aviation/altitude.h index d3c9798ca..eff9db2c0 100644 --- a/src/blackmisc/aviation/altitude.h +++ b/src/blackmisc/aviation/altitude.h @@ -94,6 +94,12 @@ namespace BlackMisc //! Constructor, value as CAltitude::MeanSeaLevel CAltitude(double value, const PhysicalQuantities::CLengthUnit &unit) : CLength(value, unit), m_datum(MeanSeaLevel) {} + //! Constructor, value as CAltitude::MeanSeaLevel + CAltitude(double value, const PhysicalQuantities::CLengthUnit &unit, const PhysicalQuantities::CLengthUnit &switchUnit) : CLength(value, unit), m_datum(MeanSeaLevel) + { + this->switchUnit(switchUnit); + } + //! Altitude as string CAltitude(const QString &altitudeAsString, PhysicalQuantities::CPqString::SeparatorMode mode = PhysicalQuantities::CPqString::SeparatorsLocale); diff --git a/src/blackmisc/geo/elevationplane.cpp b/src/blackmisc/geo/elevationplane.cpp index 75f69acd7..e11813361 100644 --- a/src/blackmisc/geo/elevationplane.cpp +++ b/src/blackmisc/geo/elevationplane.cpp @@ -56,6 +56,12 @@ namespace BlackMisc Q_ASSERT_X(!std::isnan(altitudeMSLft), Q_FUNC_INFO, "elv.nan"); } + CElevationPlane::CElevationPlane(const CLatitude &lat, const CLongitude &lng, const CAltitude &altitude, const CLength &radius) : + CCoordinateGeodetic(lat, lng, altitude), m_radius(radius) + { + Q_ASSERT_X(altitude.isMeanSeaLevel(), Q_FUNC_INFO, "Need MSL"); + } + void CElevationPlane::setRadiusOrMinimum(const CLength &radius) { m_radius = ((radius.isNull() || radius < CElevationPlane::singlePointRadius())) ? CElevationPlane::singlePointRadius() : radius; diff --git a/src/blackmisc/geo/elevationplane.h b/src/blackmisc/geo/elevationplane.h index bc583ba56..5e71d9daa 100644 --- a/src/blackmisc/geo/elevationplane.h +++ b/src/blackmisc/geo/elevationplane.h @@ -48,6 +48,9 @@ namespace BlackMisc //! Plane at given coordinates with radius and altitude CElevationPlane(double latDeg, double lngDeg, double altitudeMSLft, const PhysicalQuantities::CLength &radius); + //! Plane at given coordinates with radius and altitude + CElevationPlane(const CLatitude &lat, const CLongitude &lng, const Aviation::CAltitude &altitude, const PhysicalQuantities::CLength &radius); + //! Constructors from CCoordinateGeodetic using CCoordinateGeodetic::CCoordinateGeodetic; diff --git a/src/blackmisc/pq/length.h b/src/blackmisc/pq/length.h index faf8449ed..9d36851b5 100644 --- a/src/blackmisc/pq/length.h +++ b/src/blackmisc/pq/length.h @@ -29,6 +29,12 @@ namespace BlackMisc //! Init by double value CLength(double value, const CLengthUnit &unit) : CPhysicalQuantity(value, unit) {} + //! Init by double value and switch unit + CLength(double value, const CLengthUnit &unit, const CLengthUnit &switchUnit) : CPhysicalQuantity(value, unit) + { + this->switchUnit(switchUnit); + } + //! \copydoc CPhysicalQuantity(const QString &unitString) CLength(const QString &unitString) : CPhysicalQuantity(unitString) {} }; diff --git a/src/blackmisc/simulation/simulatedaircraft.cpp b/src/blackmisc/simulation/simulatedaircraft.cpp index 1ab3d49a8..c9b9b1c93 100644 --- a/src/blackmisc/simulation/simulatedaircraft.cpp +++ b/src/blackmisc/simulation/simulatedaircraft.cpp @@ -479,9 +479,11 @@ namespace BlackMisc m_models[NetworkModel] = model; } - void CSimulatedAircraft::setCG(const CLength &cg) + bool CSimulatedAircraft::setCG(const CLength &cg) { - m_models.setCG(cg); + if (cg.isNull()) { return false; } + const int c = m_models.setCG(cg); + return c > 0; } void CSimulatedAircraft::setModelString(const QString &modelString) diff --git a/src/blackmisc/simulation/simulatedaircraft.h b/src/blackmisc/simulation/simulatedaircraft.h index 5a27a8200..8f684c6a5 100644 --- a/src/blackmisc/simulation/simulatedaircraft.h +++ b/src/blackmisc/simulation/simulatedaircraft.h @@ -388,7 +388,7 @@ namespace BlackMisc void setNetworkModel(const CAircraftModel &model); //! Set the center of gravity - void setCG(const PhysicalQuantities::CLength &cg); + bool setCG(const PhysicalQuantities::CLength &cg); //! Set callsign void setCallsign(const Aviation::CCallsign &callsign); diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.cpp b/src/plugins/simulator/fsxcommon/simconnectobject.cpp index 7ffad7011..74727f32b 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.cpp +++ b/src/plugins/simulator/fsxcommon/simconnectobject.cpp @@ -53,6 +53,18 @@ namespace BlackSimPlugin m_callsignByteArray = aircraft.getCallsignAsString().toLatin1(); } + void CSimConnectObject::setAircraftModelString(const QString &modelString) + { + if (modelString.isEmpty()) { return; } + m_aircraft.setModelString(modelString); + } + + void CSimConnectObject::setAircraftCG(const PhysicalQuantities::CLength &cg) + { + if (cg.isNull()) { return; } + m_aircraft.setCG(cg); + } + void CSimConnectObject::setRequestId(DWORD id) { m_requestId = id; diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.h b/src/plugins/simulator/fsxcommon/simconnectobject.h index d12bf2886..75d8e43a9 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.h +++ b/src/plugins/simulator/fsxcommon/simconnectobject.h @@ -68,6 +68,12 @@ namespace BlackSimPlugin //! Set the aircraft void setAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + //! Set model string + void setAircraftModelString(const QString &modelString); + + //! Set CG + void setAircraftCG(const BlackMisc::PhysicalQuantities::CLength &cg); + //! Get current lights (requested from simulator) const BlackMisc::Aviation::CAircraftLights &getCurrentLightsInSimulator() const { return m_currentLightsInSim; }