Commit c4aad10e authored by Valentin Platzgummer's avatar Valentin Platzgummer

Tiles, tiles center points and progress visualization implemented, no templating ros_bridge.

parent 99b27028
...@@ -241,6 +241,52 @@ FlightMap { ...@@ -241,6 +241,52 @@ FlightMap {
color: "green" 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 // Add trajectory points to the map
MapItemView { MapItemView {
model: _mainIsMap ? _activeVehicle ? _activeVehicle.trajectoryPoints : 0 : 0 model: _mainIsMap ? _activeVehicle ? _activeVehicle.trajectoryPoints : 0 : 0
......
...@@ -140,8 +140,12 @@ Item { ...@@ -140,8 +140,12 @@ Item {
visible: enableWima.enableWimaBoolean visible: enableWima.enableWimaBoolean
anchors.left: parent.left anchors.left: parent.left
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
width: enableWima.enableWimaBoolean ? Math.min(contentWidth, maxWidth) : enableWima.width width: enableWima.enableWimaBoolean ?
height: enableWima.enableWimaBoolean ? Math.min(contentHeight, maxHeight) : 0 Math.min(contentWidth, maxWidth)
: enableWima.width
height: enableWima.enableWimaBoolean ?
Math.min(contentHeight, maxHeight)
: 0
contentHeight: columnWrapper.height contentHeight: columnWrapper.height
contentWidth: columnWrapper.width contentWidth: columnWrapper.width
...@@ -153,39 +157,60 @@ Item { ...@@ -153,39 +157,60 @@ Item {
} }
Column { Column {
id: mainColumn id: mainColumn
spacing: ScreenTools.defaultFontPixelHeight * 0.3 spacing: ScreenTools.defaultFontPixelHeight * 0.3
SectionHeader{ SectionHeader{
id: snakeHeader id: snakeHeader
text: qsTr("Snake Settings") text: qsTr("Snake Settings")
} }
GridLayout { Column {
columns: 2 visible: snakeHeader.checked
rowSpacing: ScreenTools.defaultFontPixelHeight * 0.5 spacing: ScreenTools.defaultFontPixelHeight * 0.5
columnSpacing: ScreenTools.defaultFontPixelHeight * 0.5
visible: snakeHeader.checked
FactCheckBox { FactCheckBox {
text: wimaController.enableSnake.value ? qsTr("Disable Snake") : qsTr("Enable Snake") text: wimaController.enableSnake.value ?
qsTr("Disable Snake")
: qsTr("Enable Snake")
fact: wimaController.enableSnake fact: wimaController.enableSnake
Layout.fillWidth: true
} }
QGCLabel { // Spacer
text: wimaController.snakeConnectionStatus.value === 1 ? qsTr("Connected") : qsTr("Not Connected") Item {
Layout.fillWidth: true height: 1
} }
QGCLabel { // Snake status and settings column.
text: wimaController.snakeCalcInProgress.value === true ? qsTr("Calculation: In Progress") : qsTr("Calculation: Idle") GridLayout {
Layout.fillWidth: true columns: 2
Layout.columnSpan: 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{ SectionHeader{
id: missionHeader id: missionHeader
text: qsTr("Phase Settings") text: qsTr("Phase Settings")
......
...@@ -439,12 +439,14 @@ bool WimaController::_fetchContainerData() ...@@ -439,12 +439,14 @@ bool WimaController::_fetchContainerData()
_waypointPath.clear(); _waypointPath.clear();
_currentWaypointPath.clear(); _currentWaypointPath.clear();
_snakeTiles.clearAndDeleteContents(); _snakeTiles.clearAndDeleteContents();
_snakeTileCenterPoints.clear();
emit visualItemsChanged(); emit visualItemsChanged();
emit missionItemsChanged(); emit missionItemsChanged();
emit currentMissionItemsChanged(); emit currentMissionItemsChanged();
emit currentWaypointPathChanged(); emit currentWaypointPathChanged();
emit snakeTilesChanged(); emit snakeTilesChanged();
emit snakeTileCenterPointsChanged();
_localPlanDataValid = false; _localPlanDataValid = false;
...@@ -583,11 +585,14 @@ bool WimaController::_fetchContainerData() ...@@ -583,11 +585,14 @@ bool WimaController::_fetchContainerData()
QGeoCoordinate QCenterPoint(centerPoint[0], centerPoint[1], centerPoint[2]); QGeoCoordinate QCenterPoint(centerPoint[0], centerPoint[1], centerPoint[2]);
QTile->setCenter(QCenterPoint); QTile->setCenter(QCenterPoint);
_snakeTiles.append(QTile); _snakeTiles.append(QTile);
_snakeTileCenterPoints.append(QVariant::fromValue(QCenterPoint));
} }
emit visualItemsChanged(); emit visualItemsChanged();
emit missionItemsChanged(); emit missionItemsChanged();
emit snakeTilesChanged();
emit snakeTileCenterPointsChanged();
_localPlanDataValid = true; _localPlanDataValid = true;
return true; return true;
...@@ -961,23 +966,25 @@ void WimaController::_eventTimerHandler() ...@@ -961,23 +966,25 @@ void WimaController::_eventTimerHandler()
if ( snakeEventLoopTicker.ready() ) { if ( snakeEventLoopTicker.ready() ) {
if ( _enableSnake.rawValue().toBool() && _localPlanDataValid && !_snakeCalcInProgress && _scenarioDefinedBool) { if ( _enableSnake.rawValue().toBool() && _localPlanDataValid && !_snakeCalcInProgress && _scenarioDefinedBool) {
_snakeProgress.clear();
long n = _scenario.getTilesENU().size(); long n = _scenario.getTilesENU().size();
QList<qint8> progress; _snakeProgress.reserve(n);
progress.reserve(n);
std::srand(time(NULL)); std::srand(time(NULL));
for (long i=0; i<n; ++i){ for (long i=0; i<n; ++i){
long r{rand()%200}; int r{rand()%200};
if ( r > 100 ) if ( r > 100 )
r = 100; r = 100;
progress.append(qint8(r)); _snakeProgress.append(r);
} }
_snakeWorker.setScenario(_scenario); _snakeWorker.setScenario(_scenario);
_snakeWorker.setProgress(progress); _snakeWorker.setProgress(_snakeProgress);
_snakeWorker.setLineDistance(_snakeLineDistance.rawValue().toDouble()); _snakeWorker.setLineDistance(_snakeLineDistance.rawValue().toDouble());
_snakeWorker.setMinTransectLength(_snakeMinTransectLength.rawValue().toDouble()); _snakeWorker.setMinTransectLength(_snakeMinTransectLength.rawValue().toDouble());
_setSnakeCalcInProgress(true); _setSnakeCalcInProgress(true);
_snakeWorker.start(); _snakeWorker.start();
emit snakeProgressChanged();
} }
} }
} }
......
...@@ -78,15 +78,17 @@ public: ...@@ -78,15 +78,17 @@ public:
Q_PROPERTY(bool vehicleHasLowBattery READ vehicleHasLowBattery NOTIFY vehicleHasLowBatteryChanged) Q_PROPERTY(bool vehicleHasLowBattery READ vehicleHasLowBattery NOTIFY vehicleHasLowBatteryChanged)
// Snake // Snake
Q_PROPERTY(Fact* enableSnake READ enableSnake CONSTANT) Q_PROPERTY(Fact* enableSnake READ enableSnake CONSTANT)
Q_PROPERTY(long snakeConnectionStatus READ snakeConnectionStatus NOTIFY snakeConnectionStatusChanged) Q_PROPERTY(long snakeConnectionStatus READ snakeConnectionStatus NOTIFY snakeConnectionStatusChanged)
Q_PROPERTY(bool snakeCalcInProgress READ snakeCalcInProgress NOTIFY snakeCalcInProgressChanged) Q_PROPERTY(bool snakeCalcInProgress READ snakeCalcInProgress NOTIFY snakeCalcInProgressChanged)
Q_PROPERTY(Fact* snakeTileWidth READ snakeTileWidth CONSTANT) Q_PROPERTY(Fact* snakeTileWidth READ snakeTileWidth CONSTANT)
Q_PROPERTY(Fact* snakeTileHeight READ snakeTileHeight CONSTANT) Q_PROPERTY(Fact* snakeTileHeight READ snakeTileHeight CONSTANT)
Q_PROPERTY(Fact* snakeMinTileArea READ snakeMinTileArea CONSTANT) Q_PROPERTY(Fact* snakeMinTileArea READ snakeMinTileArea CONSTANT)
Q_PROPERTY(Fact* snakeLineDistance READ snakeLineDistance CONSTANT) Q_PROPERTY(Fact* snakeLineDistance READ snakeLineDistance CONSTANT)
Q_PROPERTY(Fact* snakeMinTransectLength READ snakeMinTransectLength CONSTANT) Q_PROPERTY(Fact* snakeMinTransectLength READ snakeMinTransectLength CONSTANT)
Q_PROPERTY(QmlObjectListModel* snakeTiles READ snakeTiles NOTIFY snakeTilesChanged) Q_PROPERTY(QmlObjectListModel* snakeTiles READ snakeTiles NOTIFY snakeTilesChanged)
Q_PROPERTY(QVariantList snakeTileCenterPoints READ snakeTileCenterPoints NOTIFY snakeTileCenterPointsChanged)
Q_PROPERTY(QList<int> snakeProgress READ snakeProgress NOTIFY snakeProgressChanged)
...@@ -122,6 +124,8 @@ public: ...@@ -122,6 +124,8 @@ public:
Fact* snakeLineDistance (void) { return &_snakeLineDistance;} Fact* snakeLineDistance (void) { return &_snakeLineDistance;}
Fact* snakeMinTransectLength (void) { return &_snakeMinTransectLength;} Fact* snakeMinTransectLength (void) { return &_snakeMinTransectLength;}
QmlObjectListModel* snakeTiles (void) { return &_snakeTiles;} QmlObjectListModel* snakeTiles (void) { return &_snakeTiles;}
QVariantList snakeTileCenterPoints (void) { return _snakeTileCenterPoints;}
QList<int> snakeProgress (void) { return _snakeProgress;}
bool uploadOverrideRequired (void) const; bool uploadOverrideRequired (void) const;
double phaseDistance (void) const; double phaseDistance (void) const;
...@@ -213,6 +217,8 @@ signals: ...@@ -213,6 +217,8 @@ signals:
void snakeConnectionStatusChanged (void); void snakeConnectionStatusChanged (void);
void snakeCalcInProgressChanged (void); void snakeCalcInProgressChanged (void);
void snakeTilesChanged (void); void snakeTilesChanged (void);
void snakeTileCenterPointsChanged (void);
void snakeProgressChanged (void);
private: private:
enum SRTL_Reason {BatteryLow, UserRequest}; enum SRTL_Reason {BatteryLow, UserRequest};
private slots: private slots:
...@@ -317,7 +323,8 @@ private: ...@@ -317,7 +323,8 @@ private:
SettingsFact _snakeLineDistance; SettingsFact _snakeLineDistance;
SettingsFact _snakeMinTransectLength; SettingsFact _snakeMinTransectLength;
QmlObjectListModel _snakeTiles; // tiles QmlObjectListModel _snakeTiles; // tiles
QVariantList _snakeTileCenterPoints;
QList<int> _snakeProgress; // measurement progress
}; };
......
...@@ -14,7 +14,7 @@ void SnakeWorker::setScenario(const Scenario &scenario) ...@@ -14,7 +14,7 @@ void SnakeWorker::setScenario(const Scenario &scenario)
_scenario = scenario; _scenario = scenario;
} }
void SnakeWorker::setProgress(const QList<qint8> &progress) void SnakeWorker::setProgress(const QList<int> &progress)
{ {
_progress.clear(); _progress.clear();
for (auto p : progress) { for (auto p : progress) {
......
...@@ -30,7 +30,7 @@ public: ...@@ -30,7 +30,7 @@ public:
SnakeWorker(QObject *parent = nullptr); SnakeWorker(QObject *parent = nullptr);
void setScenario (const Scenario &scenario); void setScenario (const Scenario &scenario);
void setProgress (const QList<qint8> &progress); void setProgress (const QList<int> &progress);
void setLineDistance (double lineDistance); void setLineDistance (double lineDistance);
void setMinTransectLength (double minTransectLength); void setMinTransectLength (double minTransectLength);
......
#include "jsonprocessor.h"
JsonProcessor::JsonProcessor()
{
}
#ifndef JSONPROCESSOR_H
#define JSONPROCESSOR_H
class JsonProcessor
{
public:
JsonProcessor();
};
#endif // JSONPROCESSOR_H
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment