diff --git a/src/blackmisc/aviation/aircraftsituation.cpp b/src/blackmisc/aviation/aircraftsituation.cpp index 881e31372..4f567807e 100644 --- a/src/blackmisc/aviation/aircraftsituation.cpp +++ b/src/blackmisc/aviation/aircraftsituation.cpp @@ -971,8 +971,8 @@ namespace BlackMisc if (this->hasGroundElevation()) { static const CLength threshold(400, CLengthUnit::m()); - const CLength a = this->getHeightAboveGround(); - if (!a.isNull() && a >= threshold) { return true; } // too high for ground + const CLength aboveGround = this->getHeightAboveGround(); + if (!aboveGround.isNull() && aboveGround >= threshold) { return true; } // too high for ground } return false; } diff --git a/src/plugins/simulator/xplane/simulatorxplane.cpp b/src/plugins/simulator/xplane/simulatorxplane.cpp index 1f939d427..1aac7f980 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.cpp +++ b/src/plugins/simulator/xplane/simulatorxplane.cpp @@ -820,6 +820,7 @@ namespace BlackSimPlugin CCallsignSet callsigns = m_xplaneAircraftObjects.getAllCallsigns(); const CCallsignSet remove = this->getLastSentCanLikelySkipNearGroundInterpolation().getCallsigns(); callsigns.remove(remove); + if (!callsigns.isEmpty()) { this->requestRemoteAircraftDataFromXPlane(callsigns); } } void CSimulatorXPlane::requestRemoteAircraftDataFromXPlane(const CCallsignSet &callsigns) @@ -827,9 +828,9 @@ namespace BlackSimPlugin if (callsigns.isEmpty()) { return; } if (this->isShuttingDown()) { return; } const QStringList csStrings = callsigns.getCallsignStrings(); - m_trafficProxy->getRemoteAircraftData(csStrings, [ = ](const QStringList & callsigns, const QDoubleList & latitudesDeg, const QDoubleList & longitudesDeg, const QDoubleList & elevationsM, const QDoubleList & verticalOffsets) + m_trafficProxy->getRemoteAircraftData(csStrings, [ = ](const QStringList & callsigns, const QDoubleList & latitudesDeg, const QDoubleList & longitudesDeg, const QDoubleList & elevationsMeters, const QDoubleList & verticalOffsetsMeters) { - updateRemoteAircraftFromSimulator(callsigns, latitudesDeg, longitudesDeg, elevationsM, verticalOffsets); + this->updateRemoteAircraftFromSimulator(callsigns, latitudesDeg, longitudesDeg, elevationsMeters, verticalOffsetsMeters); }); } @@ -846,18 +847,28 @@ namespace BlackSimPlugin void CSimulatorXPlane::updateRemoteAircraftFromSimulator( const QStringList &callsigns, const QDoubleList &latitudesDeg, const QDoubleList &longitudesDeg, - const QDoubleList &elevationsM, const QDoubleList &verticalOffsets) + const QDoubleList &elevationsMeters, const QDoubleList &verticalOffsetsMeters) { - for (int i = 0; i < callsigns.size(); i++) + const int size = callsigns.size(); + + // we skip if we are not near ground + if (CBuildConfig::isLocalDeveloperDebugBuild()) + { + Q_ASSERT_X(elevationsMeters.size() == size, Q_FUNC_INFO, "Wrong elevations"); + Q_ASSERT_X(latitudesDeg.size() == size, Q_FUNC_INFO, "Wrong latitudesDeg"); + Q_ASSERT_X(longitudesDeg.size() == size, Q_FUNC_INFO, "Wrong longitudesDeg"); + Q_ASSERT_X(verticalOffsetsMeters.size() == size, Q_FUNC_INFO, "Wrong CG"); + } + + for (int i = 0; i < size; i++) { const CCallsign cs(callsigns[i]); if (!m_xplaneAircraftObjects.contains(cs)) { continue; } - // we skip if we are not near ground const CXPlaneMPAircraft xpAircraft = m_xplaneAircraftObjects[cs]; - const CAltitude elevationAlt(elevationsM[i], CLengthUnit::m(), CLengthUnit::ft()); + const CAltitude elevationAlt(elevationsMeters[i], CLengthUnit::m(), CLengthUnit::ft()); const CElevationPlane elevation(CLatitude(latitudesDeg[i], CAngleUnit::deg()), CLongitude(longitudesDeg[i], CAngleUnit::deg()), elevationAlt, CElevationPlane::singlePointRadius()); - const CLength cg(verticalOffsets[i], CLengthUnit::m(), CLengthUnit::ft()); + const CLength cg(verticalOffsetsMeters[i], CLengthUnit::m(), CLengthUnit::ft()); this->rememberElevationAndCG(cs, xpAircraft.getAircraftModelString(), elevation, cg); } } diff --git a/src/plugins/simulator/xplane/simulatorxplane.h b/src/plugins/simulator/xplane/simulatorxplane.h index de5b6d222..afda85279 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.h +++ b/src/plugins/simulator/xplane/simulatorxplane.h @@ -209,7 +209,7 @@ namespace BlackSimPlugin void onRemoteAircraftAdded(const QString &callsign); void onRemoteAircraftAddingFailed(const QString &callsign); void updateRemoteAircraftFromSimulator(const QStringList &callsigns, const QDoubleList &latitudesDeg, const QDoubleList &longitudesDeg, - const QDoubleList &elevationsM, const QDoubleList &verticalOffsets); + const QDoubleList &elevationsMeters, const QDoubleList &verticalOffsetsMeters); //! @} //! Dsiconnect from DBus diff --git a/src/plugins/simulator/xplane/xswiftbustrafficproxy.cpp b/src/plugins/simulator/xplane/xswiftbustrafficproxy.cpp index 1e4d2c81d..47e6269e2 100644 --- a/src/plugins/simulator/xplane/xswiftbustrafficproxy.cpp +++ b/src/plugins/simulator/xplane/xswiftbustrafficproxy.cpp @@ -112,7 +112,7 @@ namespace BlackSimPlugin m_dbusInterface->callDBus(QLatin1String("setInterpolatorMode"), callsign, spline); } - void CXSwiftBusTrafficProxy::getRemoteAircraftsData(const QStringList &callsigns, const RemoteAircraftDataCallback &setter) + void CXSwiftBusTrafficProxy::getRemoteAircraftData(const QStringList &callsigns, const RemoteAircraftDataCallback &setter) const { std::function callback = [ = ](QDBusPendingCallWatcher * watcher) { @@ -128,11 +128,11 @@ namespace BlackSimPlugin } watcher->deleteLater(); }; - m_dbusInterface->callDBusAsync(QLatin1String("getRemoteAircraftsData"), callback, callsigns); + m_dbusInterface->callDBusAsync(QLatin1String("getRemoteAircraftData"), callback, callsigns); } - void CXSwiftBusTrafficProxy::getEelevationAtPosition(const CCallsign &callsign, double latitude, double longitude, double altitude, - const ElevationCallback &setter) + void CXSwiftBusTrafficProxy::getElevationAtPosition(const CCallsign &callsign, double latitudeDeg, double longitudeDeg, double altitudeMeters, + const ElevationCallback &setter) const { std::function callback = [ = ](QDBusPendingCallWatcher * watcher) { @@ -142,14 +142,14 @@ namespace BlackSimPlugin const CCallsign cs(reply.argumentAt<0>()); const double elevationMeters = reply.argumentAt<1>(); const CAltitude elevationAlt(elevationMeters, CLengthUnit::m(), CLengthUnit::ft()); - const CElevationPlane elevation(CLatitude(latitude, CAngleUnit::deg()), - CLongitude(longitude, CAngleUnit::deg()), + const CElevationPlane elevation(CLatitude(latitudeDeg, CAngleUnit::deg()), + CLongitude(longitudeDeg, CAngleUnit::deg()), elevationAlt, CElevationPlane::singlePointRadius()); setter(elevation, cs); } watcher->deleteLater(); }; - m_dbusInterface->callDBusAsync(QLatin1String("getEelevationAtPosition"), callback, callsign.asString(), latitude, longitude, altitude); + m_dbusInterface->callDBusAsync(QLatin1String("getElevationAtPosition"), callback, callsign.asString(), latitudeDeg, longitudeDeg, altitudeMeters); } void CXSwiftBusTrafficProxy::setFollowedAircraft(const QString &callsign) diff --git a/src/plugins/simulator/xplane/xswiftbustrafficproxy.h b/src/plugins/simulator/xplane/xswiftbustrafficproxy.h index 59ef34d1b..04d91d5a9 100644 --- a/src/plugins/simulator/xplane/xswiftbustrafficproxy.h +++ b/src/plugins/simulator/xplane/xswiftbustrafficproxy.h @@ -178,12 +178,12 @@ namespace BlackSimPlugin //! \deprecated XSwiftBus::CTraffic::setInterpolatorMode void setInterpolatorMode(const QString &callsign, bool spline); - //! \copydoc XSwiftBus::CTraffic::getRemoteAircraftsData - void getRemoteAircraftsData(const QStringList &callsigns, const RemoteAircraftDataCallback &setter); + //! \copydoc XSwiftBus::CTraffic::getRemoteAircraftData + void getRemoteAircraftData(const QStringList &callsigns, const RemoteAircraftDataCallback &setter) const; - //! \copydoc XSwiftBus::CTraffic::getEelevationAtPosition - void getEelevationAtPosition(const BlackMisc::Aviation::CCallsign &callsign, double latitude, double longitude, double altitude, - const ElevationCallback &setter); + //! \copydoc XSwiftBus::CTraffic::getElevationAtPosition + void getElevationAtPosition(const BlackMisc::Aviation::CCallsign &callsign, double latitudeDeg, double longitudeDeg, double altitudeMeters, + const ElevationCallback &setter) const; //! \copydoc XSwiftBus::CTraffic::setFollowedAircraft void setFollowedAircraft(const QString &callsign); diff --git a/src/xswiftbus/org.swift_project.xswiftbus.traffic.xml b/src/xswiftbus/org.swift_project.xswiftbus.traffic.xml index dfed64798..5e2bf4209 100644 --- a/src/xswiftbus/org.swift_project.xswiftbus.traffic.xml +++ b/src/xswiftbus/org.swift_project.xswiftbus.traffic.xml @@ -76,7 +76,7 @@ R"( - + diff --git a/src/xswiftbus/traffic.cpp b/src/xswiftbus/traffic.cpp index c16d98101..5f0a6348c 100644 --- a/src/xswiftbus/traffic.cpp +++ b/src/xswiftbus/traffic.cpp @@ -383,8 +383,8 @@ namespace XSwiftBus else { plane->xpdr.mode = xpmpTransponderMode_Standby; } } - void CTraffic::getRemoteAircraftsData(std::vector &callsigns, std::vector &latitudesDeg, std::vector &longitudesDeg, - std::vector &elevationsM, std::vector &verticalOffsets) + void CTraffic::getRemoteAircraftData(std::vector &callsigns, std::vector &latitudesDeg, std::vector &longitudesDeg, + std::vector &elevationsM, std::vector &verticalOffsets) const { if (callsigns.empty() || m_planesByCallsign.empty()) { return; } @@ -403,32 +403,32 @@ namespace XSwiftBus Plane *plane = planeIt->second; assert(plane); - double lat = plane->position.lat; - double lon = plane->position.lon; - double groundElevation = plane->terrainProbe.getElevation(lat, lon, plane->position.elevation); + double latDeg = plane->position.lat; + double lonDeg = plane->position.lon; + double groundElevation = plane->terrainProbe.getElevation(latDeg, lonDeg, plane->position.elevation); if (std::isnan(groundElevation)) { groundElevation = 0.0; } double fudgeFactor = 3.0; XPMPGetVerticalOffset(plane->id, &fudgeFactor); callsigns.push_back(requestedCallsign); - latitudesDeg.push_back(lat); - longitudesDeg.push_back(lon); + latitudesDeg.push_back(latDeg); + longitudesDeg.push_back(lonDeg); elevationsM.push_back(groundElevation); verticalOffsets.push_back(fudgeFactor); } } - double CTraffic::getEelevationAtPosition(const std::string &callsign, double latitude, double longitude, double altitude) + double CTraffic::getElevationAtPosition(const std::string &callsign, double latitudeDeg, double longitudeDeg, double altitudeMeters) const { auto planeIt = m_planesByCallsign.find(callsign); if (planeIt != m_planesByCallsign.end()) { Plane *plane = planeIt->second; - return plane->terrainProbe.getElevation(latitude, longitude, altitude); + return plane->terrainProbe.getElevation(latitudeDeg, longitudeDeg, altitudeMeters); } else { - return m_terrainProbe.getElevation(latitude, longitude, altitude); + return m_terrainProbe.getElevation(latitudeDeg, longitudeDeg, altitudeMeters); } } @@ -659,7 +659,7 @@ namespace XSwiftBus setPlaneTransponder(callsign, code, modeC, ident); }); } - else if (message.getMethodName() == "getRemoteAircraftsData") + else if (message.getMethodName() == "getRemoteAircraftData") { std::vector requestedcallsigns; message.beginArgumentRead(); @@ -671,7 +671,7 @@ namespace XSwiftBus std::vector longitudesDeg; std::vector elevationsM; std::vector verticalOffsets; - getRemoteAircraftsData(callsigns, latitudesDeg, longitudesDeg, elevationsM, verticalOffsets); + getRemoteAircraftData(callsigns, latitudesDeg, longitudesDeg, elevationsM, verticalOffsets); CDBusMessage reply = CDBusMessage::createReply(sender, serial); reply.beginArgumentWrite(); reply.appendArgument(callsigns); @@ -682,23 +682,23 @@ namespace XSwiftBus sendDBusMessage(reply); }); } - else if (message.getMethodName() == "getEelevationAtPosition") + else if (message.getMethodName() == "getElevationAtPosition") { std::string callsign; - double latitude; - double longitude; - double altitude; + double latitudeDeg; + double longitudeDeg; + double elevationMeters; message.beginArgumentRead(); message.getArgument(callsign); - message.getArgument(latitude); - message.getArgument(longitude); - message.getArgument(altitude); + message.getArgument(latitudeDeg); + message.getArgument(longitudeDeg); + message.getArgument(elevationMeters); queueDBusCall([ = ]() { CDBusMessage reply = CDBusMessage::createReply(sender, serial); reply.beginArgumentWrite(); reply.appendArgument(callsign); - reply.appendArgument(getEelevationAtPosition(callsign, latitude, longitude, altitude)); + reply.appendArgument(getElevationAtPosition(callsign, latitudeDeg, longitudeDeg, elevationMeters)); ; sendDBusMessage(reply); }); } diff --git a/src/xswiftbus/traffic.h b/src/xswiftbus/traffic.h index fba846a8c..46cac4027 100644 --- a/src/xswiftbus/traffic.h +++ b/src/xswiftbus/traffic.h @@ -97,24 +97,24 @@ namespace XSwiftBus //! Set the position of multiple traffic aircrafts void setPlanesPositions(const std::vector &callsigns, std::vector latitudes, std::vector longitudes, std::vector altitudes, - std::vector pitches, std::vector rolls, std::vector headings); + std::vector pitches, std::vector rolls, std::vector headings); //! Set the flight control surfaces and lights of multiple traffic aircrafts void setPlanesSurfaces(const std::vector &callsigns, const std::vector &gears, const std::vector &flaps, const std::vector &spoilers, - const std::vector &speedBrakes, const std::vector &slats, const std::vector &wingSweeps, const std::vector &thrusts, - const std::vector &elevators, const std::vector &rudders, const std::vector &ailerons, const std::vector &landLights, - const std::vector &beaconLights, const std::vector &strobeLights, const std::vector &navLights, const std::vector &lightPatterns, - const std::vector &onGrounds); + const std::vector &speedBrakes, const std::vector &slats, const std::vector &wingSweeps, const std::vector &thrusts, + const std::vector &elevators, const std::vector &rudders, const std::vector &ailerons, const std::vector &landLights, + const std::vector &beaconLights, const std::vector &strobeLights, const std::vector &navLights, const std::vector &lightPatterns, + const std::vector &onGrounds); //! Set the transponder of a traffic aircraft void setPlaneTransponder(const std::string &callsign, int code, bool modeC, bool ident); //! Get remote aircrafts data (lat, lon, elevation and CG) - void getRemoteAircraftsData(std::vector &callsigns, std::vector &latitudesDeg, std::vector &longitudesDeg, - std::vector &elevationsM, std::vector &verticalOffsets); + void getRemoteAircraftData(std::vector &callsigns, std::vector &latitudesDeg, std::vector &longitudesDeg, + std::vector &elevationsM, std::vector &verticalOffsets) const; //! Get the ground elevation at an arbitrary position - double getEelevationAtPosition(const std::string &callsign, double latitude, double longitude, double altitude); + double getElevationAtPosition(const std::string &callsign, double latitudeDeg, double longitudeDeg, double altitudeMeters) const; //! Sets the aircraft with callsign to be followed in plane view void setFollowedAircraft(const std::string &callsign); @@ -192,7 +192,7 @@ namespace XSwiftBus else { traffic->emitPlaneAddingFailed(planeIt->second->callsign); } } }; -} +} // ns #endif // guard