SnakeWorker.h 2.36 KB
Newer Older
Valentin Platzgummer's avatar
Valentin Platzgummer committed
1 2 3 4 5 6
#pragma once

#include <QObject>
#include <QVariant>
#include <QThread>
#include <QVector>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
7
#include <QGeoCoordinate>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
8 9
#include <QMutex>

Valentin Platzgummer's avatar
Valentin Platzgummer committed
10
#include <vector>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
11
#include <memory>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
12

Valentin Platzgummer's avatar
Valentin Platzgummer committed
13 14
#include "GeoPolygonArray.h"
#include "PolygonArray.h"
Valentin Platzgummer's avatar
Valentin Platzgummer committed
15 16
#include "SnakeWorker.h"
#include "QNemoProgress.h"
Valentin Platzgummer's avatar
Valentin Platzgummer committed
17 18 19 20


typedef QList<QVariant> QVariantList;

Valentin Platzgummer's avatar
Valentin Platzgummer committed
21 22 23 24 25 26 27 28
namespace snake {
    class Scenario;
    class Flightplan;
}

struct SnakeData{
    SnakeData();

Valentin Platzgummer's avatar
Valentin Platzgummer committed
29
    QVector<QGeoCoordinate> waypoints;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
30 31 32 33 34 35
    QVector<QGeoCoordinate> arrivalPath;
    QVector<QGeoCoordinate> returnPath;
    QGeoCoordinate          ENUorigin;
    QVector<QGeoCoordinate> waypointsENU;
    QVector<QGeoCoordinate> arrivalPathENU;
    QVector<QGeoCoordinate> returnPathENU;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
36
    GeoPolygonArray         tiles;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
37
    QVariantList            tileCenterPoints;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
38 39
    PolygonArray            tilesENU;
    QVector<QGeoCoordinate> tileCenterPointsENU;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
40
    QString                 errorMessage;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
41
    mutable QMutex          m;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
42 43

    void clear();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
44
};
Valentin Platzgummer's avatar
Valentin Platzgummer committed
45

Valentin Platzgummer's avatar
Valentin Platzgummer committed
46
class SnakeDataManager : public QThread{
Valentin Platzgummer's avatar
Valentin Platzgummer committed
47 48 49 50
    Q_OBJECT

public:

Valentin Platzgummer's avatar
Valentin Platzgummer committed
51 52 53 54 55 56 57
    using ProgressPtr   = std::shared_ptr<std::vector<int>>;
    using ScenarioPtr   = std::shared_ptr<snake::Scenario>;
    using FlightPlanPtr = std::shared_ptr<snake::Flightplan>;
    using SnakeDataPtr  = std::shared_ptr<SnakeData>;

    SnakeDataManager(QObject *parent = nullptr);
    ~SnakeDataManager() override;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
58

Valentin Platzgummer's avatar
Valentin Platzgummer committed
59

Valentin Platzgummer's avatar
Valentin Platzgummer committed
60 61 62 63 64
    void setMeasurementArea     (const QList<QGeoCoordinate>  &measurementArea);
    void setServiceArea         (const QList<QGeoCoordinate>  &serviceArea);
    void setCorridor            (const QList<QGeoCoordinate>  &corridor);

    SnakeDataPtr snakeData();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

    double lineDistance() const;
    void setLineDistance(double lineDistance);

    double minTransectLength() const;
    void setMinTransectLength(double minTransectLength);

    double minTileArea() const;
    void setMinTileArea(double minTileArea);

    double tileHeight() const;
    void setTileHeight(double tileHeight);

    double tileWidth() const;
    void setTileWidth(double tileWidth);
80

Valentin Platzgummer's avatar
Valentin Platzgummer committed
81 82 83 84
protected:
    void run() override;

private:
Valentin Platzgummer's avatar
Valentin Platzgummer committed
85 86 87 88 89
    bool precondition() const;

    std::vector<QGeoCoordinate> _mArea;
    std::vector<QGeoCoordinate> _sArea;
    std::vector<QGeoCoordinate> _corridor;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
90 91 92 93
    ScenarioPtr                 _pScenario;
    ProgressPtr                 _pProgress;
    FlightPlanPtr               _pFlightplan;
    SnakeDataPtr                _pData;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
94 95
};

Valentin Platzgummer's avatar
Valentin Platzgummer committed
96 97 98



Valentin Platzgummer's avatar
Valentin Platzgummer committed
99 100 101 102




Valentin Platzgummer's avatar
Valentin Platzgummer committed
103