WimaController.h 10.5 KB
Newer Older
1
#pragma once
2 3

#include <QObject>
4 5 6 7
#include "QGCMapPolygon.h"
#include "QmlObjectListModel.h"

#include "WimaArea.h"
8
#include "WimaMeasurementArea.h"
9
#include "WimaServiceArea.h"
Valentin Platzgummer's avatar
Valentin Platzgummer committed
10
#include "WimaCorridor.h"
11
#include "WimaDataContainer.h"
12 13 14
#include "WimaMeasurementAreaData.h"
#include "WimaCorridorData.h"
#include "WimaServiceAreaData.h"
15 16 17

#include "PlanMasterController.h"
#include "MissionController.h"
18
#include "SurveyComplexItem.h"
19 20
#include "SimpleMissionItem.h"
#include "MissionSettingsItem.h"
21 22
#include "JsonHelper.h"
#include "QGCApplication.h"
23
#include "SettingsFact.h"
24

25 26 27

class WimaController : public QObject
{
28 29
    Q_OBJECT

30 31
    enum FileType {WimaFile, PlanFile};

32
public:
33 34 35
    WimaController(QObject *parent = nullptr);


36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
    Q_PROPERTY(PlanMasterController*    masterController        READ masterController       WRITE setMasterController       NOTIFY masterControllerChanged)
    Q_PROPERTY(MissionController*       missionController       READ missionController      WRITE setMissionController      NOTIFY missionControllerChanged)
    Q_PROPERTY(QmlObjectListModel*      visualItems             READ visualItems                                            NOTIFY visualItemsChanged)
    Q_PROPERTY(QString                  currentFile             READ currentFile                                            NOTIFY currentFileChanged)
    Q_PROPERTY(QStringList              loadNameFilters         READ loadNameFilters                                        CONSTANT)
    Q_PROPERTY(QStringList              saveNameFilters         READ saveNameFilters                                        CONSTANT)
    Q_PROPERTY(QString                  fileExtension           READ fileExtension                                          CONSTANT)
    Q_PROPERTY(WimaDataContainer*       dataContainer           READ dataContainer          WRITE setDataContainer          NOTIFY dataContainerChanged)
    Q_PROPERTY(QmlObjectListModel*      missionItems            READ missionItems                                           NOTIFY missionItemsChanged)
    Q_PROPERTY(QmlObjectListModel*      currentMissionItems     READ currentMissionItems                                    NOTIFY currentMissionItemsChanged)
    Q_PROPERTY(QVariantList             waypointPath            READ waypointPath                                           NOTIFY waypointPathChanged)
    Q_PROPERTY(QVariantList             currentWaypointPath     READ currentWaypointPath                                    NOTIFY currentWaypointPathChanged)
    Q_PROPERTY(Fact*                    enableWimaController    READ enableWimaController                                   CONSTANT)
    Q_PROPERTY(Fact*                    overlapWaypoints        READ overlapWaypoints                                       CONSTANT)
    Q_PROPERTY(Fact*                    maxWaypointsPerPhase    READ maxWaypointsPerPhase                                   CONSTANT)
    Q_PROPERTY(Fact*                    startWaypointIndex      READ startWaypointIndex                                     CONSTANT)
    Q_PROPERTY(Fact*                    showAllMissionItems     READ showAllMissionItems                                    CONSTANT)
    Q_PROPERTY(Fact*                    showCurrentMissionItems READ showCurrentMissionItems                                CONSTANT)

55 56 57


    // Property accessors
58 59
    PlanMasterController*       masterController       (void)          { return _masterController; }
    MissionController*          missionController      (void)          { return _missionController; }
60
    QmlObjectListModel*         visualItems            (void);
61
    QString                     currentFile            (void) const    { return _currentFile; }
Valentin Platzgummer's avatar
Valentin Platzgummer committed
62
    QStringList                 loadNameFilters        (void) const;
63
    QStringList                 saveNameFilters        (void) const;
64
    QString                     fileExtension          (void) const    { return wimaFileExtension; }
Valentin Platzgummer's avatar
Valentin Platzgummer committed
65
    QGCMapPolygon               joinedArea             (void) const;
66
    WimaDataContainer*          dataContainer          (void);
67
    QmlObjectListModel*         missionItems           (void);
68
    QmlObjectListModel*         currentMissionItems    (void);
69
    QVariantList                waypointPath           (void);
70
    QVariantList                currentWaypointPath    (void);
71 72 73 74 75 76
    Fact*                       enableWimaController   (void);
    Fact*                       overlapWaypoints       (void);
    Fact*                       maxWaypointsPerPhase   (void);
    Fact*                       startWaypointIndex     (void);
    Fact*                       showAllMissionItems     (void);
    Fact*                       showCurrentMissionItems     (void);
77 78 79 80 81


    // Property setters
    void setMasterController        (PlanMasterController* masterController);
    void setMissionController       (MissionController* missionController);
82
    void setDataContainer           (WimaDataContainer* container);
83

84
    // Member Methodes
85
    Q_INVOKABLE void nextPhase();
86 87
    Q_INVOKABLE void previousPhase();
    Q_INVOKABLE void resetPhase();
88
    Q_INVOKABLE bool uploadToVehicle();
89
    Q_INVOKABLE void removeFromVehicle();
90

91 92
    Q_INVOKABLE void saveToCurrent  ();
    Q_INVOKABLE void saveToFile     (const QString& filename);
93
    Q_INVOKABLE bool loadFromCurrent();
94
    Q_INVOKABLE bool loadFromFile   (const QString& filename);
95 96


97 98
    // static Members
    static const char* wimaFileExtension;
99
    static const char* areaItemsName;
100 101 102 103 104 105 106 107 108
    static const char* missionItemsName;    
    static const char* settingsGroup;
    static const char* endWaypointIndexName;
    static const char* enableWimaControllerName;
    static const char* overlapWaypointsName;
    static const char* maxWaypointsPerPhaseName;
    static const char* startWaypointIndexName;
    static const char* showAllMissionItemsName;
    static const char* showCurrentMissionItemsName;
109 110

    // Member Methodes
111
    QJsonDocument saveToJson(FileType fileType);
112

113 114 115 116 117 118 119 120 121 122
    bool calcShortestPath(const QGeoCoordinate &start, const QGeoCoordinate &destination, QList<QGeoCoordinate> &path);
    /// extracts the coordinates stored in missionItems (list of MissionItems) and stores them in coordinateList
    bool extractCoordinateList(QmlObjectListModel &missionItems, QList<QGeoCoordinate> &coordinateList);
    /// extracts the coordinates (between startIndex and endIndex) stored in missionItems (list of MissionItems) and stores them in coordinateList.
    bool extractCoordinateList(QmlObjectListModel &missionItems, QList<QGeoCoordinate> &coordinateList, int startIndex, int endIndex);
    /// extracts the coordinates stored in missionItems (list of MissionItems) and stores them in coordinateList
    bool extractCoordinateList(QmlObjectListModel &missionItems, QVariantList &coordinateList);
    /// extracts the coordinates (between startIndex and endIndex) stored in missionItems (list of MissionItems) and stores them in coordinateList.
    bool extractCoordinateList(QmlObjectListModel &missionItems, QVariantList &coordinateList, int startIndex, int endIndex);

123
signals:
124 125 126
    void masterControllerChanged        (void);
    void missionControllerChanged       (void);
    void visualItemsChanged             (void);
127
    void currentFileChanged             ();
128
    void dataContainerChanged           ();
129
    void readyForSaveSendChanged        (bool ready);
130
    void missionItemsChanged            (void);
131
    void currentMissionItemsChanged     (void);
132
    void waypointPathChanged            (void);
133
    void currentWaypointPathChanged     (void);
134 135

private slots:
136 137
    bool fetchContainerData();
    bool calcNextPhase(void);
138
    void updateWaypointPath                 (void);
139
    void updateCurrentPath                  (void);
140
    void updateNextWaypoint                 (void);
141
    void recalcCurrentPhase                 (void);
142
    bool setTakeoffLandPosition(void);
143

144

145
private:
146 147 148 149 150
    PlanMasterController   *_masterController;
    MissionController      *_missionController;
    QString                 _currentFile; // file for saveing
    WimaDataContainer      *_container; // container for data exchange with WimaController
    QmlObjectListModel      _visualItems; // contains all visible areas
151
    WimaJoinedAreaData      _joinedArea; // joined area fromed by opArea, serArea, _corridor
152 153 154 155
    WimaMeasurementAreaData _measurementArea; // measurement area
    WimaServiceAreaData     _serviceArea; // area for supplying
    WimaCorridorData        _corridor; // corridor connecting opArea and serArea
    bool                    _localPlanDataValid;
156 157 158 159 160
    QmlObjectListModel      _missionItems; // all mission itmes (Mission Items) generaded by wimaPlaner, displayed in flightView
    QmlObjectListModel      _currentMissionItems; // contains the current mission items, which are a sub set of _missionItems,
                                                  // _currentMissionItems contains a number of mission items which can be worked off with a single battery chrage
    QVariantList            _waypointPath; // path connecting the items in _missionItems
    QVariantList            _currentWaypointPath; // path connecting the items in _currentMissionItems
161
    QGeoCoordinate          _takeoffLandPostion;
162

163 164 165 166 167

    QMap<QString, FactMetaData*> _metaDataMap;
    SettingsFact                 _enableWimaController; // enables or disables the wimaControler
    SettingsFact                 _overlapWaypoints; // determines the number of overlapping waypoints between two consecutive mission phases
    SettingsFact                 _maxWaypointsPerPhase; // determines the maximum number waypoints per phase
168
    SettingsFact                 _nextPhaseStartWaypointIndex; // index (displayed on the map, -1 to get index of item in _missionItems) of the mission item
169
                                                      // defining the first element of the next phase
170 171 172 173 174
    SettingsFact                 _showAllMissionItems; // bool value, Determines whether the mission items of the overall mission are displayed or not.
    SettingsFact                 _showCurrentMissionItems; // bool value, Determines whether the mission items of the current mission phase are displayed or not.

    int                          _endWaypointIndex; // indes of the mission item stored in _missionItems defining the last element
                                                    // (which is not part of the return path) of _currentMissionItem
175 176
    int                          _startWaypointIndex; // indes of the mission item stored in _missionItems defining the first element
                                                      // (which is not part of the arrival path) of _currentMissionItem
177
    bool                         _lastMissionPhaseReached;
178
};