From b43e55c3d3db13703fcabaa64ab8651d75599eed Mon Sep 17 00:00:00 2001 From: Valentin Platzgummer Date: Tue, 17 Sep 2019 09:42:55 +0200 Subject: [PATCH] border poly edited, not working yet --- qgroundcontrol.qrc | 2 +- src/Wima/WimaArea.SettingsGroup.json | 2 +- src/Wima/WimaArea.cc | 74 ++++++++++++++++++---- src/Wima/WimaArea.h | 3 + src/WimaView/WimaMeasurementAreaEditor.qml | 7 ++ 5 files changed, 75 insertions(+), 13 deletions(-) diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index b79253b2a..b125c4a86 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 33382b705..321fa4747 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 41374b98c..11e848627 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 5cdd8d52e..dbf2d1b27 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 82c704d8f..b2fc42416 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 + } + } -- 2.22.0