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 {
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
......
......@@ -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")
......
......@@ -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<qint8> progress;
progress.reserve(n);
_snakeProgress.reserve(n);
std::srand(time(NULL));
for (long i=0; i<n; ++i){
long r{rand()%200};
int r{rand()%200};
if ( r > 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();
}
}
}
......
......@@ -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<int> 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<int> 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<int> _snakeProgress; // measurement progress
};
......
......@@ -14,7 +14,7 @@ void SnakeWorker::setScenario(const Scenario &scenario)
_scenario = scenario;
}
void SnakeWorker::setProgress(const QList<qint8> &progress)
void SnakeWorker::setProgress(const QList<int> &progress)
{
_progress.clear();
for (auto p : progress) {
......
......@@ -30,7 +30,7 @@ public:
SnakeWorker(QObject *parent = nullptr);
void setScenario (const Scenario &scenario);
void setProgress (const QList<qint8> &progress);
void setProgress (const QList<int> &progress);
void setLineDistance (double lineDistance);
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