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,
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)
QVariant rawValue() const
Value after translation.
This is the base class for firmware specific geofence managers.
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
The PlanManager class is the base class for the Mission, GeoFence and Rally Point managers....
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