diff --git a/src/FlightDisplay/FlightDisplayViewMap.qml b/src/FlightDisplay/FlightDisplayViewMap.qml index ff1089c5c476685cfad615dc0b8e1e2016d9a26a..5feaceebed1a555bf5737c74f4222b83fc968953 100644 --- a/src/FlightDisplay/FlightDisplayViewMap.qml +++ b/src/FlightDisplay/FlightDisplayViewMap.qml @@ -241,6 +241,52 @@ FlightMap { color: "green" } + // Add Snake tiles center points to the map + MapItemView { + + + property bool _enable: wimaController.enableWimaController.value + && wimaController.enableSnake.value + + model: _enable ? wimaController.snakeTileCenterPoints : 0 + + delegate: MapCircle{ + center: modelData + border.color: "transparent" + color: getColor(wimaController.snakeProgress[index]) + radius: 0.6 + opacity: 1 + z: 1 + + function getColor(progress) { + if (progress < 50) + return "red" + if (progress < 100) + return "orange" + + return "green" + } + } + } + + // Add Snake tiles to the map + MapItemView { + + property bool _enable: wimaController.enableWimaController.value + && wimaController.enableSnake.value + + model: _enable ? wimaController.snakeTiles : 0 + + delegate: MapPolygon{ + path: object.path; + border.color: "black" + border.width: 1 + color: "transparent" + opacity: 1 + z: 2 + } + } + // Add trajectory points to the map MapItemView { model: _mainIsMap ? _activeVehicle ? _activeVehicle.trajectoryPoints : 0 : 0 diff --git a/src/FlightDisplay/FlightDisplayWimaMenu.qml b/src/FlightDisplay/FlightDisplayWimaMenu.qml index bc479689f48060ee26dcabca747bd612d9781e77..61b86eb6af403655cf0ce65dc35c050b85242269 100644 --- a/src/FlightDisplay/FlightDisplayWimaMenu.qml +++ b/src/FlightDisplay/FlightDisplayWimaMenu.qml @@ -140,8 +140,12 @@ Item { visible: enableWima.enableWimaBoolean anchors.left: parent.left anchors.bottom: parent.bottom - width: enableWima.enableWimaBoolean ? Math.min(contentWidth, maxWidth) : enableWima.width - height: enableWima.enableWimaBoolean ? Math.min(contentHeight, maxHeight) : 0 + width: enableWima.enableWimaBoolean ? + Math.min(contentWidth, maxWidth) + : enableWima.width + height: enableWima.enableWimaBoolean ? + Math.min(contentHeight, maxHeight) + : 0 contentHeight: columnWrapper.height contentWidth: columnWrapper.width @@ -153,39 +157,60 @@ Item { } Column { - id: mainColumn - spacing: ScreenTools.defaultFontPixelHeight * 0.3 + id: mainColumn + spacing: ScreenTools.defaultFontPixelHeight * 0.3 SectionHeader{ id: snakeHeader text: qsTr("Snake Settings") } - GridLayout { - columns: 2 - rowSpacing: ScreenTools.defaultFontPixelHeight * 0.5 - columnSpacing: ScreenTools.defaultFontPixelHeight * 0.5 - visible: snakeHeader.checked + Column { + visible: snakeHeader.checked + spacing: ScreenTools.defaultFontPixelHeight * 0.5 FactCheckBox { - text: wimaController.enableSnake.value ? qsTr("Disable Snake") : qsTr("Enable Snake") + text: wimaController.enableSnake.value ? + qsTr("Disable Snake") + : qsTr("Enable Snake") fact: wimaController.enableSnake - Layout.fillWidth: true } - QGCLabel { - text: wimaController.snakeConnectionStatus.value === 1 ? qsTr("Connected") : qsTr("Not Connected") - Layout.fillWidth: true + // Spacer + Item { + height: 1 } - QGCLabel { - text: wimaController.snakeCalcInProgress.value === true ? qsTr("Calculation: In Progress") : qsTr("Calculation: Idle") - Layout.fillWidth: true - Layout.columnSpan: 2 + // Snake status and settings column. + GridLayout { + columns: 2 + rowSpacing: ScreenTools.defaultFontPixelHeight * 0.5 + columnSpacing: ScreenTools.defaultFontPixelHeight * 0.5 + visible: wimaController.enableSnake.value + + // Snake connection status. + QGCLabel { + property int _connectionStatus: wimaController.snakeConnectionStatus + text: _connectionStatus === 1 ? + qsTr("Status: Connected") + : qsTr("Status: Not Connected") + Layout.fillWidth: true + } + + // Snake calculation status. + QGCLabel { + property bool _calcInProgress: wimaController.snakeCalcInProgress + text: _calcInProgress === true ? + qsTr("Calculation: In Progress") + : qsTr("Calculation: Idle") + Layout.fillWidth: true + } } } + + SectionHeader{ id: missionHeader text: qsTr("Phase Settings") diff --git a/src/Wima/WimaController.cc b/src/Wima/WimaController.cc index afaef6c35f3e641b7d6bc2a80dce3c02fbd9dbdd..1bbcb23d8e82db5e79068225093c9bfe63680109 100644 --- a/src/Wima/WimaController.cc +++ b/src/Wima/WimaController.cc @@ -439,12 +439,14 @@ bool WimaController::_fetchContainerData() _waypointPath.clear(); _currentWaypointPath.clear(); _snakeTiles.clearAndDeleteContents(); + _snakeTileCenterPoints.clear(); emit visualItemsChanged(); emit missionItemsChanged(); emit currentMissionItemsChanged(); emit currentWaypointPathChanged(); emit snakeTilesChanged(); + emit snakeTileCenterPointsChanged(); _localPlanDataValid = false; @@ -583,11 +585,14 @@ bool WimaController::_fetchContainerData() QGeoCoordinate QCenterPoint(centerPoint[0], centerPoint[1], centerPoint[2]); QTile->setCenter(QCenterPoint); _snakeTiles.append(QTile); + _snakeTileCenterPoints.append(QVariant::fromValue(QCenterPoint)); } emit visualItemsChanged(); emit missionItemsChanged(); + emit snakeTilesChanged(); + emit snakeTileCenterPointsChanged(); _localPlanDataValid = true; return true; @@ -961,23 +966,25 @@ void WimaController::_eventTimerHandler() if ( snakeEventLoopTicker.ready() ) { if ( _enableSnake.rawValue().toBool() && _localPlanDataValid && !_snakeCalcInProgress && _scenarioDefinedBool) { + _snakeProgress.clear(); long n = _scenario.getTilesENU().size(); - QList progress; - progress.reserve(n); + _snakeProgress.reserve(n); std::srand(time(NULL)); for (long i=0; i 100 ) r = 100; - progress.append(qint8(r)); + _snakeProgress.append(r); } _snakeWorker.setScenario(_scenario); - _snakeWorker.setProgress(progress); + _snakeWorker.setProgress(_snakeProgress); _snakeWorker.setLineDistance(_snakeLineDistance.rawValue().toDouble()); _snakeWorker.setMinTransectLength(_snakeMinTransectLength.rawValue().toDouble()); _setSnakeCalcInProgress(true); _snakeWorker.start(); + + emit snakeProgressChanged(); } } } diff --git a/src/Wima/WimaController.h b/src/Wima/WimaController.h index 4d768ae9e35cbf40501bbad3829781bf64dd0096..e5875db1d9340e7c7ca3a807a6b090a1fbd5660f 100644 --- a/src/Wima/WimaController.h +++ b/src/Wima/WimaController.h @@ -78,15 +78,17 @@ public: Q_PROPERTY(bool vehicleHasLowBattery READ vehicleHasLowBattery NOTIFY vehicleHasLowBatteryChanged) // Snake - Q_PROPERTY(Fact* enableSnake READ enableSnake CONSTANT) - Q_PROPERTY(long snakeConnectionStatus READ snakeConnectionStatus NOTIFY snakeConnectionStatusChanged) - Q_PROPERTY(bool snakeCalcInProgress READ snakeCalcInProgress NOTIFY snakeCalcInProgressChanged) - Q_PROPERTY(Fact* snakeTileWidth READ snakeTileWidth CONSTANT) - Q_PROPERTY(Fact* snakeTileHeight READ snakeTileHeight CONSTANT) - Q_PROPERTY(Fact* snakeMinTileArea READ snakeMinTileArea CONSTANT) - Q_PROPERTY(Fact* snakeLineDistance READ snakeLineDistance CONSTANT) - Q_PROPERTY(Fact* snakeMinTransectLength READ snakeMinTransectLength CONSTANT) - Q_PROPERTY(QmlObjectListModel* snakeTiles READ snakeTiles NOTIFY snakeTilesChanged) + Q_PROPERTY(Fact* enableSnake READ enableSnake CONSTANT) + Q_PROPERTY(long snakeConnectionStatus READ snakeConnectionStatus NOTIFY snakeConnectionStatusChanged) + Q_PROPERTY(bool snakeCalcInProgress READ snakeCalcInProgress NOTIFY snakeCalcInProgressChanged) + Q_PROPERTY(Fact* snakeTileWidth READ snakeTileWidth CONSTANT) + Q_PROPERTY(Fact* snakeTileHeight READ snakeTileHeight CONSTANT) + Q_PROPERTY(Fact* snakeMinTileArea READ snakeMinTileArea CONSTANT) + Q_PROPERTY(Fact* snakeLineDistance READ snakeLineDistance CONSTANT) + Q_PROPERTY(Fact* snakeMinTransectLength READ snakeMinTransectLength CONSTANT) + Q_PROPERTY(QmlObjectListModel* snakeTiles READ snakeTiles NOTIFY snakeTilesChanged) + Q_PROPERTY(QVariantList snakeTileCenterPoints READ snakeTileCenterPoints NOTIFY snakeTileCenterPointsChanged) + Q_PROPERTY(QList snakeProgress READ snakeProgress NOTIFY snakeProgressChanged) @@ -122,6 +124,8 @@ public: Fact* snakeLineDistance (void) { return &_snakeLineDistance;} Fact* snakeMinTransectLength (void) { return &_snakeMinTransectLength;} QmlObjectListModel* snakeTiles (void) { return &_snakeTiles;} + QVariantList snakeTileCenterPoints (void) { return _snakeTileCenterPoints;} + QList snakeProgress (void) { return _snakeProgress;} bool uploadOverrideRequired (void) const; double phaseDistance (void) const; @@ -213,6 +217,8 @@ signals: void snakeConnectionStatusChanged (void); void snakeCalcInProgressChanged (void); void snakeTilesChanged (void); + void snakeTileCenterPointsChanged (void); + void snakeProgressChanged (void); private: enum SRTL_Reason {BatteryLow, UserRequest}; private slots: @@ -317,7 +323,8 @@ private: SettingsFact _snakeLineDistance; SettingsFact _snakeMinTransectLength; QmlObjectListModel _snakeTiles; // tiles - + QVariantList _snakeTileCenterPoints; + QList _snakeProgress; // measurement progress }; diff --git a/src/Wima/WimaControllerDetail.cc b/src/Wima/WimaControllerDetail.cc index 9f50497e8d9d3a3b82149b5722c0e2ac43656cf5..f1bdb46e1c16f83f49f21fb26290c399d894c76e 100644 --- a/src/Wima/WimaControllerDetail.cc +++ b/src/Wima/WimaControllerDetail.cc @@ -14,7 +14,7 @@ void SnakeWorker::setScenario(const Scenario &scenario) _scenario = scenario; } -void SnakeWorker::setProgress(const QList &progress) +void SnakeWorker::setProgress(const QList &progress) { _progress.clear(); for (auto p : progress) { diff --git a/src/Wima/WimaControllerDetail.h b/src/Wima/WimaControllerDetail.h index ed23a384965c74ee00eac39272c3075f3121a01a..7cb55996af251d77747652a4b09c9fdd762e12ae 100644 --- a/src/Wima/WimaControllerDetail.h +++ b/src/Wima/WimaControllerDetail.h @@ -30,7 +30,7 @@ public: SnakeWorker(QObject *parent = nullptr); void setScenario (const Scenario &scenario); - void setProgress (const QList &progress); + void setProgress (const QList &progress); void setLineDistance (double lineDistance); void setMinTransectLength (double minTransectLength); diff --git a/src/comm/ros_bridge/src/JsonProcessor/jsonprocessor.cpp b/src/comm/ros_bridge/src/JsonProcessor/jsonprocessor.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8999f16567ea1c770306e5084f81a8231b0d31fb --- /dev/null +++ b/src/comm/ros_bridge/src/JsonProcessor/jsonprocessor.cpp @@ -0,0 +1,6 @@ +#include "jsonprocessor.h" + +JsonProcessor::JsonProcessor() +{ + +} diff --git a/src/comm/ros_bridge/src/JsonProcessor/jsonprocessor.h b/src/comm/ros_bridge/src/JsonProcessor/jsonprocessor.h new file mode 100644 index 0000000000000000000000000000000000000000..32d02b3aad27ea668251e9e004d53c36d330fbea --- /dev/null +++ b/src/comm/ros_bridge/src/JsonProcessor/jsonprocessor.h @@ -0,0 +1,11 @@ +#ifndef JSONPROCESSOR_H +#define JSONPROCESSOR_H + + +class JsonProcessor +{ +public: + JsonProcessor(); +}; + +#endif // JSONPROCESSOR_H