diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index b79253b2a7b25de14a5099ee42021850bb247fcc..b125c4a867d3fd08721c7f939be731a929bfbaed 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -272,7 +272,7 @@
src/Settings/Video.SettingsGroup.json
src/Wima/WimaMeasurementArea.SettingsGroup.json
src/Wima/CircularSurvey.SettingsGroup.json
- src/Wima/WimaArea.SettingsGroup.json
+ src/Wima/WimaArea.SettingsGroup.json
src/comm/APMArduCopterMockLink.params
diff --git a/src/Wima/WimaArea.SettingsGroup.json b/src/Wima/WimaArea.SettingsGroup.json
index 33382b705b5a4c69c2bb21720a28cd91d28fabb2..321fa4747e2e973f30e8d0831bbd879620119e7a 100644
--- a/src/Wima/WimaArea.SettingsGroup.json
+++ b/src/Wima/WimaArea.SettingsGroup.json
@@ -9,7 +9,7 @@
"defaultValue": 5
},
{
- "name": "showBorderPolygon",
+ "name": "ShowBorderPolygon",
"shortDescription": "Border polygon will be displayed if checked.",
"type": "bool",
"defaultValue": true
diff --git a/src/Wima/WimaArea.cc b/src/Wima/WimaArea.cc
index 41374b98c2dacba57c4204210b1d0f1bf4eef035..11e8486274a2a8d7b71e3fe4a2bac5509c1b4dfc 100644
--- a/src/Wima/WimaArea.cc
+++ b/src/Wima/WimaArea.cc
@@ -24,20 +24,27 @@ const char* WimaArea::areaTypeName = "AreaType";
const char* WimaArea::borderPolygonOffsetName = "BorderPolygonOffset";
-const char* WimaArea::settingsGroup ="MeasurementArea";
+const char* WimaArea::showBorderPolygonName = "ShowBorderPolygon";
+const char* WimaArea::settingsGroup = "MeasurementArea";
// Constructors
WimaArea::WimaArea(QObject *parent)
- : QGCMapPolygon (parent)
+ : QGCMapPolygon (parent)
+ , _metaDataMap (FactMetaData::createMapFromJsonFile(QStringLiteral(":/json/WimaArea.SettingsGroup.json"), this /* QObject parent */))
+ , _borderPolygonOffset (SettingsFact(settingsGroup, _metaDataMap[borderPolygonOffsetName], this /* QObject parent */))
+ , _showBorderPolygon (SettingsFact(settingsGroup, _metaDataMap[showBorderPolygonName], this /* QObject parent */))
+ , _borderPolygon (QGCMapPolygon(this))
{
init();
_maxAltitude = 30;
}
WimaArea::WimaArea(const WimaArea &other, QObject *parent)
- : QGCMapPolygon (parent)
+ : QGCMapPolygon (parent)
, _metaDataMap (FactMetaData::createMapFromJsonFile(QStringLiteral(":/json/WimaArea.SettingsGroup.json"), this /* QObject parent */))
, _borderPolygonOffset (SettingsFact(settingsGroup, _metaDataMap[borderPolygonOffsetName], this /* QObject parent */))
+ , _showBorderPolygon (SettingsFact(settingsGroup, _metaDataMap[showBorderPolygonName], this /* QObject parent */))
+ , _borderPolygon (QGCMapPolygon(this))
{
init();
*this = other;
@@ -73,6 +80,11 @@ void WimaArea::setMaxAltitude(double altitude)
}
}
+void WimaArea::setShowBorderPolygon(bool showBorderPolygon)
+{
+ _showBorderPolygon.setRawValue(showBorderPolygon);
+}
+
void WimaArea::setBorderPolygonOffset(double offset)
@@ -84,12 +96,36 @@ void WimaArea::setBorderPolygonOffset(double offset)
}
}
-void WimaArea::recalcMeasurementPolygon()
+void WimaArea::recalcPolygons()
{
- this->setPath(_borderPolygon.coordinateList());
- this->offset(-_borderPolygonOffset.rawValue().toDouble());
+ if (_showBorderPolygon.rawValue().toBool() == true) {
+
+ if ( _borderPolygon.count() >= 3 ) {
+ this->setPath(_borderPolygon.coordinateList());
+ this->offset(-_borderPolygonOffset.rawValue().toDouble());
+ }
+ } else {
+
+ if (this->count() >= 3){
+ _borderPolygon.setPath(this->coordinateList());
+ _borderPolygon.offset(_borderPolygonOffset.rawValue().toDouble());
+ }
+
+ emit borderPolygonChanged();
+ }
+
- emit borderPolygonChanged();
+}
+
+void WimaArea::updatePolygonConnections(QVariant showBorderPolygon)
+{
+ if (showBorderPolygon.toBool() == true) {
+ connect(&_borderPolygon, &QGCMapPolygon::pathChanged, this, &WimaArea::recalcPolygons);
+ disconnect(this, &QGCMapPolygon::pathChanged, this, &WimaArea::recalcPolygons);
+ } else {
+ disconnect(&_borderPolygon, &QGCMapPolygon::pathChanged, this, &WimaArea::recalcPolygons);
+ connect(this, &QGCMapPolygon::pathChanged, this, &WimaArea::recalcPolygons);
+ }
}
/*!
@@ -335,10 +371,11 @@ bool WimaArea::isSimplePolygon()
void WimaArea::saveToJson(QJsonObject &json)
{
this->QGCMapPolygon::saveToJson(json);
- json[maxAltitudeName] = _maxAltitude;
+
+ json[maxAltitudeName] = _maxAltitude;
json[borderPolygonOffsetName] = _borderPolygonOffset.rawValue().toDouble();
- json[areaTypeName] = wimaAreaName;
- // add WimaVehicle if necessary..
+ json[showBorderPolygonName] = _showBorderPolygon.rawValue().toDouble();
+ json[areaTypeName] = wimaAreaName;
}
/*!
@@ -365,6 +402,13 @@ bool WimaArea::loadFromJson(const QJsonObject &json, QString& errorString)
errorString.append(tr("Could not load border polygon offset value!\n"));
return false;
}
+
+ if ( json.contains(showBorderPolygonName) && json[showBorderPolygonName].isDouble()) {
+ _showBorderPolygon.setRawValue(json[showBorderPolygonName].toBool());
+ } else {
+ errorString.append(tr("Could not load border polygon offset value!\n"));
+ return false;
+ }
} else {
qWarning() << errorString;
return false;
@@ -380,8 +424,16 @@ bool WimaArea::loadFromJson(const QJsonObject &json, QString& errorString)
void WimaArea::init()
{
this->setObjectName(wimaAreaName);
- connect(&_borderPolygon, &QGCMapPolygon::pathChanged, this, &WimaArea::recalcPolygons);
+
+ if (_showBorderPolygon.rawValue().toBool() == true){
+ connect(&_borderPolygon, &QGCMapPolygon::pathChanged, this, &WimaArea::recalcPolygons);
+
+ } else {
+ connect(this, &QGCMapPolygon::pathChanged, this, &WimaArea::recalcPolygons);
+ }
+
connect(&_borderPolygonOffset, &SettingsFact::rawValueChanged, this, &WimaArea::recalcPolygons);
+ connect(&_showBorderPolygon, &SettingsFact::rawValueChanged, this, &WimaArea::updatePolygonConnections);
}
/*!
diff --git a/src/Wima/WimaArea.h b/src/Wima/WimaArea.h
index 5cdd8d52e51473ddd54eaea5d99aedd17111a221..dbf2d1b27e6cbc163fb31723b3587d8db36203af 100644
--- a/src/Wima/WimaArea.h
+++ b/src/Wima/WimaArea.h
@@ -72,6 +72,7 @@ public:
static const char* wimaAreaName;
static const char* areaTypeName;
static const char* borderPolygonOffsetName;
+ static const char* showBorderPolygonName;
static const char* settingsGroup;
signals:
@@ -86,6 +87,8 @@ public slots:
private slots:
void recalcPolygons (void);
+ void updatePolygonConnections(QVariant value);
+
private:
void init();
diff --git a/src/WimaView/WimaMeasurementAreaEditor.qml b/src/WimaView/WimaMeasurementAreaEditor.qml
index 82c704d8f668e4aa848b711866ac3a4f0a870cc0..b2fc424168b9eeaaaec8a9775b1928d82299632c 100644
--- a/src/WimaView/WimaMeasurementAreaEditor.qml
+++ b/src/WimaView/WimaMeasurementAreaEditor.qml
@@ -96,6 +96,13 @@ Rectangle {
Layout.fillWidth: true
}
+ QGCLabel { text: qsTr("Border Poly.") }
+
+ FactTextField {
+ fact: areaItem.showBorderPolygon
+ Layout.fillWidth: true
+ }
+
}