#include "WimaControllerDetail.h" #include SnakeWorker::SnakeWorker(QObject *parent) : QThread(parent) , _lineDistance (3) // meter , _minTransectLength (2) // meter { } void SnakeWorker::setScenario(const Scenario &scenario) { _scenario = scenario; } void SnakeWorker::setProgress(const QList &progress) { for (auto p : progress) { assert(p >= -1); assert(p <= 100); _progress.push_back(p); } } void SnakeWorker::setLineDistance(double lineDistance) { assert(lineDistance > 0); _lineDistance = lineDistance; } void SnakeWorker::setMinTransectLength(double minTransectLength) { assert(minTransectLength > 0); _minTransectLength = minTransectLength; } void SnakeWorker::run() { WorkerResult_t result{QVariantList{}, QVector{}, QVector{}, false, QString{}}; // partial success FlightPlan flightplan; flightplan.setScenario(_scenario); flightplan.setProgress(_progress); // Trying to generate flight plan. if ( !flightplan.generate(_lineDistance, _minTransectLength) ){ // error for (auto c : flightplan.errorString){ result.errorMessage.push_back(QChar(c)); } } else { //success!!! // Fill result struct. auto waypoints = flightplan.getWaypoints(); for (auto vertex : waypoints){ result.waypoints.append(QVariant::fromValue(QGeoCoordinate(vertex[0], vertex[1], 0))); } auto arrivalPathIdx = flightplan.getArrivalPathIdx(); for (auto idx : arrivalPathIdx){ result.arrivalPathIdx.append(idx); } auto returnPathIdx = flightplan.getReturnPathIdx(); for (auto idx : returnPathIdx){ result.returnPathIdx.append(idx); } } emit resultReady(result); }