27 QList<MissionItem*> fenceItems;
29 _sendPolygons.clear();
32 for (
int i=0; i<
polygons.count(); i++) {
35 for (
int i=0; i<
circles.count(); i++) {
38 _breachReturnPoint = breachReturn;
40 for (
int i=0; i<_sendPolygons.count(); i++) {
43 for (
int j=0; j<polygon.
count(); j++) {
44 const QGeoCoordinate& vertex = polygon.
path()[j].value<QGeoCoordinate>();
47 polygon.
inclusion() ? MAV_CMD_NAV_FENCE_POLYGON_VERTEX_INCLUSION : MAV_CMD_NAV_FENCE_POLYGON_VERTEX_EXCLUSION,
57 fenceItems.append(item);
61 for (
int i=0; i<_sendCircles.count(); i++) {
65 circle.
inclusion() ? MAV_CMD_NAV_FENCE_CIRCLE_INCLUSION : MAV_CMD_NAV_FENCE_CIRCLE_EXCLUSION,
67 circle.
radius()->rawValue().toDouble(),
69 circle.
center().latitude(),
70 circle.
center().longitude(),
75 fenceItems.append(item);
78 if (_breachReturnPoint.isValid()) {
80 MAV_CMD_NAV_FENCE_RETURN_POINT,
81 MAV_FRAME_GLOBAL_RELATIVE_ALT,
83 breachReturn.latitude(),
84 breachReturn.longitude(),
85 breachReturn.altitude(),
89 fenceItems.append(item);
100 _breachReturnPoint = QGeoCoordinate();
105void GeoFenceManager::_sendComplete(
bool error)
110 _breachReturnPoint = QGeoCoordinate();
112 _polygons = _sendPolygons;
113 _circles = _sendCircles;
115 _sendPolygons.clear();
116 _sendCircles.clear();
120void GeoFenceManager::_planManagerLoadComplete(
bool removeAllRequested)
122 bool loadFailed =
false;
124 Q_UNUSED(removeAllRequested);
129 MAV_CMD expectedCommand = (MAV_CMD)0;
130 int expectedVertexCount = 0;
134 for (
int i=0; i<fenceItems.count(); i++) {
137 MAV_CMD command = item->
command();
139 if (command == MAV_CMD_NAV_FENCE_POLYGON_VERTEX_INCLUSION || command == MAV_CMD_NAV_FENCE_POLYGON_VERTEX_EXCLUSION) {
140 if (nextPolygon.count() == 0) {
142 expectedVertexCount = item->
param1();
143 expectedCommand = command;
144 }
else if (expectedVertexCount != item->
param1()){
146 emit
error(
BadPolygonItemFormat, tr(
"GeoFence load: Vertex count change mid-polygon - actual:expected") + QString(
" %1:%2").arg(item->
param1()).arg(expectedVertexCount));
148 }
else if (expectedCommand != command) {
150 emit
error(
BadPolygonItemFormat, tr(
"GeoFence load: Polygon type changed before last load complete - actual:expected") + QString(
" %1:%2").arg(command).arg(expectedCommand));
153 nextPolygon.appendVertex(QGeoCoordinate(item->
param5(), item->
param6()));
154 if (nextPolygon.count() == expectedVertexCount) {
156 nextPolygon.setInclusion(command == MAV_CMD_NAV_FENCE_POLYGON_VERTEX_INCLUSION);
157 _polygons.append(nextPolygon);
160 }
else if (command == MAV_CMD_NAV_FENCE_CIRCLE_INCLUSION || command == MAV_CMD_NAV_FENCE_CIRCLE_EXCLUSION) {
161 if (nextPolygon.count() != 0) {
167 _circles.append(circle);
168 }
else if (command == MAV_CMD_NAV_FENCE_RETURN_POINT) {
179 _breachReturnPoint = QGeoCoordinate();
#define QGC_LOGGING_CATEGORY(name, categoryStr)
void removeAll(void)
Signals removeAllComplete when done.
void sendToVehicle(const QGeoCoordinate &breachReturn, QmlObjectListModel &polygons, QmlObjectListModel &circles)
Signals sendComplete when done.
void error(int errorCode, const QString &errorMsg)
void inProgressChanged(bool inProgress)
const QList< QGCFencePolygon > & polygons(void)
@ BadPolygonItemFormat
Error re-creating polygons from mission items.
@ UnsupportedCommand
Usupported command in mission type.
@ IncompletePolygonLoad
Incomplete polygon loaded.
bool supported(void) const
void removeAllComplete(bool error)
void sendComplete(bool error)
const QList< QGCFenceCircle > & circles(void)
MAV_CMD command(void) const
double param5(void) const
double param7(void) const
double param6(void) const
double param1(void) const
void sendComplete(bool error)
void newMissionItemsAvailable(bool removeAllRequested)
void removeAllComplete(bool error)
void writeMissionItems(const QList< MissionItem * > &missionItems)
void inProgressChanged(bool inProgress)
const QList< MissionItem * > & missionItems(void)
void error(int errorCode, const QString &errorMsg)
The QGCFenceCircle class provides a cicle used by GeoFence support.
bool inclusion(void) const
The QGCFencePolygon class provides a polygon used by GeoFence support.
bool inclusion(void) const
QGeoCoordinate center(void) const
QVariantList path(void) const
uint64_t capabilityBits() const