diff --git a/src/Airmap/AirMapFlightManager.cc b/src/Airmap/AirMapFlightManager.cc index 69f6564da1357463af5b7d2e4a89f93695ef5078..2a03c9bd114120641b7b44e6a4ee46ad0421b80d 100644 --- a/src/Airmap/AirMapFlightManager.cc +++ b/src/Airmap/AirMapFlightManager.cc @@ -9,6 +9,8 @@ #include "AirMapFlightManager.h" #include "AirMapManager.h" +#include "AirMapRulesetsManager.h" +#include "QGCApplication.h" #include "MissionItem.h" #include "QGCMAVLink.h" @@ -178,18 +180,20 @@ void AirMapFlightManager::_uploadFlight() FlightPlans::Create::Parameters params; params.max_altitude = _flight.maxAltitude; - params.buffer = 2.f; - params.latitude = _flight.takeoffCoord.latitude(); - params.longitude = _flight.takeoffCoord.longitude(); - params.pilot.id = _pilotID.toStdString(); - params.start_time = Clock::universal_time() + Minutes{5}; - params.end_time = Clock::universal_time() + Hours{2}; // TODO: user-configurable? - params.rulesets = { // TODO: which ones to use? - "che_drone_rules", - "che_notam", - "che_airmap_rules", - "che_nature_preserve" - }; + params.buffer = 2.f; + params.latitude = _flight.takeoffCoord.latitude(); + params.longitude = _flight.takeoffCoord.longitude(); + params.pilot.id = _pilotID.toStdString(); + params.start_time = Clock::universal_time() + Minutes{5}; + params.end_time = Clock::universal_time() + Hours{2}; // TODO: user-configurable? + + //-- Rules + AirMapRulesetsManager* pRulesMgr = dynamic_cast(qgcApp()->toolbox()->airspaceManager()->rulesets()); + if(pRulesMgr) { + foreach(QString ruleset, pRulesMgr->rulesetsIDs()) { + params.rulesets.push_back(ruleset.toStdString()); + } + } // geometry: LineString Geometry::LineString lineString; diff --git a/src/Airmap/AirMapRulesetsManager.cc b/src/Airmap/AirMapRulesetsManager.cc index a3f6b54b4d059b4ac81e726ef402875ebc8cc317..1ce40116fc3ef9b61bb373a45c93f69b4ee10223 100644 --- a/src/Airmap/AirMapRulesetsManager.cc +++ b/src/Airmap/AirMapRulesetsManager.cc @@ -143,3 +143,17 @@ AirMapRulesetsManager::_selectedChanged() emit selectedRulesChanged(); //-- TODO: Do whatever it is you do to select a rule } + +//----------------------------------------------------------------------------- +QStringList +AirMapRulesetsManager::rulesetsIDs() +{ + QStringList list; + for(int i = 0; i < _rules.count(); i++) { + AirMapRule* rule = qobject_cast(_rules.get(i)); + if(rule && rule->selected()) { + list << rule->id(); + } + } + return list; +} diff --git a/src/Airmap/AirMapRulesetsManager.h b/src/Airmap/AirMapRulesetsManager.h index 145a63e9a5b4a0ef568f69fa6f63ae7d4a64b8c2..9ce7fe17baa841c4f86d1059e76815642d43ac97 100644 --- a/src/Airmap/AirMapRulesetsManager.h +++ b/src/Airmap/AirMapRulesetsManager.h @@ -14,6 +14,7 @@ #include "AirMapSharedState.h" #include +#include #include @@ -60,6 +61,9 @@ public: void setROI (const QGeoCoordinate& center) override; + //-- Selected rules + QStringList rulesetsIDs (); + signals: void error (const QString& what, const QString& airmapdMessage, const QString& airmapdDetails);