diff --git a/src/MissionManager/AirMapManager.h b/src/MissionManager/AirMapManager.h index 01eb95fe84483f745f27062bd20fc0dc1a7434b0..914835c48c47cc342867c1dc638fc076f8e281f9 100644 --- a/src/MissionManager/AirMapManager.h +++ b/src/MissionManager/AirMapManager.h @@ -40,6 +40,8 @@ public: Q_PROPERTY(QVariantList polygon MEMBER _polygon CONSTANT) + const QVariantList& getPolygon() const { return _polygon; } + private: QVariantList _polygon; }; diff --git a/src/MissionManager/GeoFenceManager.cc b/src/MissionManager/GeoFenceManager.cc index 448be9eb03b4d79462a1eec083b950d2a7e40f46..08519815242cbf0d05146fea9b7f6be94b717cd2 100644 --- a/src/MissionManager/GeoFenceManager.cc +++ b/src/MissionManager/GeoFenceManager.cc @@ -11,6 +11,7 @@ #include "Vehicle.h" #include "QmlObjectListModel.h" #include "ParameterManager.h" +#include "QGCApplication.h" #include "QGCMapPolygon.h" #include "QGCMapCircle.h" @@ -20,6 +21,7 @@ GeoFenceManager::GeoFenceManager(Vehicle* vehicle) : _vehicle (vehicle) , _planManager (vehicle, MAV_MISSION_TYPE_FENCE) , _firstParamLoadComplete (false) + , _airmapManager (qgcApp()->toolbox()->airMapManager()) { connect(&_planManager, &PlanManager::inProgressChanged, this, &GeoFenceManager::inProgressChanged); connect(&_planManager, &PlanManager::error, this, &GeoFenceManager::error); @@ -99,6 +101,31 @@ void GeoFenceManager::sendToVehicle(const QGeoCoordinate& breachReturn, fenceItems.append(item); } + // send AirMap polygons + const QmlObjectListModel& airmapPolygons = *_airmapManager->polygonRestrictions(); + for (int i = 0; i < airmapPolygons.count(); ++i) { + PolygonAirspaceRestriction *polygon = (PolygonAirspaceRestriction*)airmapPolygons[i]; + int polygonCount = polygon->getPolygon().count() - 1; // last vertex is equal to the first + for (int j = 0; j < polygonCount; ++j) { + const QGeoCoordinate& vertex = polygon->getPolygon()[j].value(); + + MissionItem* item = new MissionItem(0, + MAV_CMD_NAV_FENCE_POLYGON_VERTEX_EXCLUSION, + MAV_FRAME_GLOBAL, + polygonCount, // vertex count + 0, 0, 0, // param 2-4 unused + vertex.latitude(), + vertex.longitude(), + 0, // param 7 unused + false, // autocontinue + false, // isCurrentItem + this); // parent + fenceItems.append(item); + } + } + // TODO: circles too + + _planManager.writeMissionItems(fenceItems); for (int i=0; i #include +#include "AirMapManager.h" #include "QGCLoggingCategory.h" #include "FactSystem.h" #include "PlanManager.h" @@ -96,6 +97,7 @@ private: bool _firstParamLoadComplete; QList _sendPolygons; QList _sendCircles; + AirMapManager* _airmapManager; }; #endif