WimaControllerDetail.cc 2 KB
Newer Older
Valentin Platzgummer's avatar
Valentin Platzgummer committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include "WimaControllerDetail.h"
#include <QGeoCoordinate>


SnakeWorker::SnakeWorker(QObject *parent) : QThread(parent)
  , _lineDistance       (3) // meter
  , _minTransectLength  (2) // meter
{

}

void SnakeWorker::setScenario(const Scenario &scenario)
{
    _scenario = scenario;
}

Valentin Platzgummer's avatar
Valentin Platzgummer committed
17
void SnakeWorker::setProgress(const QVector<int> &progress)
Valentin Platzgummer's avatar
Valentin Platzgummer committed
18
{
19
    _progress.clear();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
20
    for (auto p : progress) {
21
        assert(p >= -1 && p <= 100);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
        _progress.push_back(p);
    }
}

void SnakeWorker::setLineDistance(double lineDistance)
{
    assert(lineDistance > 0);
    _lineDistance = lineDistance;
}

void SnakeWorker::setMinTransectLength(double minTransectLength)
{
    assert(minTransectLength > 0);
    _minTransectLength = minTransectLength;
}

38 39 40 41 42
const WorkerResult_t &SnakeWorker::getResult() const
{
    return _result;
}

Valentin Platzgummer's avatar
Valentin Platzgummer committed
43 44
void SnakeWorker::run()
{
45 46 47 48 49 50
    // Reset _result struct.
    _result.success = false;
    _result.errorMessage = "";
    _result.waypoints.clear();
    _result.returnPathIdx.clear();
    _result.arrivalPathIdx.clear();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
51 52 53 54 55 56 57 58 59

    FlightPlan flightplan;
    flightplan.setScenario(_scenario);
    flightplan.setProgress(_progress);

    // Trying to generate flight plan.
    if ( !flightplan.generate(_lineDistance, _minTransectLength) ){
        // error
        for (auto c : flightplan.errorString){
60
            _result.errorMessage.push_back(QChar(c));
Valentin Platzgummer's avatar
Valentin Platzgummer committed
61 62 63
        }
    } else {
        //success!!!
64
        _result.success = true;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
65 66 67 68

        // Fill result struct.
        auto waypoints = flightplan.getWaypoints();
        for (auto vertex : waypoints){
69
            _result.waypoints.append(QVariant::fromValue(QGeoCoordinate(vertex[0], vertex[1], 0)));
Valentin Platzgummer's avatar
Valentin Platzgummer committed
70 71 72 73
        }

        auto arrivalPathIdx = flightplan.getArrivalPathIdx();
        for (auto idx : arrivalPathIdx){
74
            _result.arrivalPathIdx.append(idx);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
75 76 77 78
        }

        auto returnPathIdx = flightplan.getReturnPathIdx();
        for (auto idx : returnPathIdx){
79
            _result.returnPathIdx.append(idx);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
80 81 82 83
        }

    }

84
    emit resultReady();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
85
}