#pragma once #include #include #include #include #include #include #include #include #include "GeoPolygonArray.h" #include "PolygonArray.h" #include "SnakeWorker.h" #include "QNemoProgress.h" typedef QList QVariantList; namespace snake { class Scenario; class Flightplan; } struct SnakeData{ SnakeData(); QVector waypoints; QVector arrivalPath; QVector returnPath; QGeoCoordinate ENUorigin; QVector waypointsENU; QVector arrivalPathENU; QVector returnPathENU; GeoPolygonArray tiles; QVariantList tileCenterPoints; PolygonArray tilesENU; QVector tileCenterPointsENU; QString errorMessage; mutable QMutex m; void clear(); }; class SnakeDataManager : public QThread{ Q_OBJECT public: using ProgressPtr = std::shared_ptr>; using ScenarioPtr = std::shared_ptr; using FlightPlanPtr = std::shared_ptr; using SnakeDataPtr = std::shared_ptr; SnakeDataManager(QObject *parent = nullptr); ~SnakeDataManager() override; void setMeasurementArea (const QList &measurementArea); void setServiceArea (const QList &serviceArea); void setCorridor (const QList &corridor); SnakeDataPtr snakeData(); 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); protected: void run() override; private: bool precondition() const; std::vector _mArea; std::vector _sArea; std::vector _corridor; ScenarioPtr _pScenario; ProgressPtr _pProgress; FlightPlanPtr _pFlightplan; SnakeDataPtr _pData; };