diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 38372d2dfeb50bb483ba064e43efed31ef7b0f30..35d6265a2462632817e1f717f0b1692bcdf620a4 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -408,13 +408,13 @@ HEADERS += \ src/comm/MavlinkMessagesTimer.h \ src/GPS/Drivers/src/base_station.h \ src/MissionManager/WimaController.h \ - src/MissionManager/WimaFlyArea.h \ src/MissionManager/WimaPolygon.h \ src/MissionManager/WimaServicePolygon.h \ src/MissionManager/WimaVehicleCorridor.h \ src/MissionManager/WimaVehicleMeasurementPolygon.h \ src/MissionManager/WimaGlobalMeasurementPolygon.h \ - src/MissionManager/WimaPolygonContainer.h + src/MissionManager/WimaPolygonContainer.h \ + src/MissionManager/WimaVehicle.h SOURCES += \ src/api/QGCCorePlugin.cc \ @@ -429,7 +429,8 @@ SOURCES += \ src/MissionManager/WimaVehicleCorridor.cc \ src/MissionManager/WimaVehicleMeasurementPolygon.cc \ src/MissionManager/WimaGlobalMeasurementPolygon.cc \ - src/MissionManager/WimaPolygonContainer.cc + src/MissionManager/WimaPolygonContainer.cc \ + src/MissionManager/WimaVehicle.cc # # Unit Test specific configuration goes here (requires full debug build with all plugins) diff --git a/src/MissionManager/WimaController.cc b/src/MissionManager/WimaController.cc index e3e528831d4e78d2f4df868e43e91fd3281ac442..b0f30da0a9b9caff36bee27da54d51a2d861df1e 100644 --- a/src/MissionManager/WimaController.cc +++ b/src/MissionManager/WimaController.cc @@ -9,8 +9,6 @@ WimaController::WimaController(QObject *parent) : } - - void WimaController::setMasterController(PlanMasterController *masterC) { _masterController = masterC; @@ -26,6 +24,33 @@ void WimaController::setMissionController(MissionController *missionC) void WimaController::addGlobalMeasurementArea() { WimaGlobalMeasurementPolygon* poly = new WimaGlobalMeasurementPolygon(this); + _visualItems.append(poly); + + emit visualItemsChanged(); +} + +void WimaController::removeArea(int index) +{ + if(index > 0 && index < _visualItems.size()){ + _visualItems.removeAt(index); + + emit visualItemsChanged(); + }else{ + qWarning("Index out of bounds!"); + } + +} + +void WimaController::addServiceArea() +{ + WimaServicePolygon* poly = new WimaServicePolygon(this); + _visualItems.append(poly); + + emit visualItemsChanged(); +} + +void WimaController::recalcVehicleCorridor() +{ } diff --git a/src/MissionManager/WimaController.h b/src/MissionManager/WimaController.h index f0db39f6534f8526aa1c43b9b2b687e65d5a4655..52b5e75fc69578aef27bf28267884003da9ec010 100644 --- a/src/MissionManager/WimaController.h +++ b/src/MissionManager/WimaController.h @@ -21,12 +21,13 @@ public: Q_PROPERTY(PlanMasterController* masterController READ masterController WRITE setMasterController NOTIFY masterControllerChanged) Q_PROPERTY(MissionController* missionController READ missionController WRITE setMissionController NOTIFY missionControllerChanged) - Q_PROPERTY(QList visualItems READ visualItems NOTIFY visualItemsChanged) + Q_PROPERTY(QList& visualItems READ visualItems NOTIFY visualItemsChanged) + Q_PROPERTY(QList& editorItems READ editorItems NOTIFY visualItemsChanged) // Property accessors PlanMasterController* masterController (void) const { return _masterController;} MissionController* missionController (void) const { return _missionController;} - QList& visualItems (void) const { return } + QList& visualItems (void) { return _visualItemsContainer.returnFlatList(); } @@ -36,12 +37,8 @@ public: void setMissionController (MissionController* missionController); Q_INVOKABLE void addGlobalMeasurementArea(); - Q_INVOKABLE void removeGlobalMeasurementArea(int index); + Q_INVOKABLE void removeArea(int index); Q_INVOKABLE void addServiceArea(); - Q_INVOKABLE void removeServiceArea(int index); - - Q_INVOKABLE void recalcVehicleCorridor(); - Q_INVOKABLE void recalcVehicleMeasurementArea(); Q_INVOKABLE void startMission(); Q_INVOKABLE void abortMission(); @@ -58,10 +55,15 @@ signals: void missionControllerChanged (void); void visualItemsChanged (void); +private slots: + void recalcVehicleCorridor(); + void recalcVehicleMeasurementAreas(); + void recalcAll(); + private: bool _planView; - WimaPolygonContainer _visualItemsContainer; + QList _visualItems; PlanMasterController* _masterController; MissionController* _missionController; diff --git a/src/MissionManager/WimaPolygon.cc b/src/MissionManager/WimaPolygon.cc index dc6b77f7fbd5d65bd7972b468e9ff0eef31c3635..946ea7f45db7a0ae396370c3e92a8134f135e80b 100644 --- a/src/MissionManager/WimaPolygon.cc +++ b/src/MissionManager/WimaPolygon.cc @@ -11,6 +11,7 @@ WimaPolygon::WimaPolygon(QObject *parent) : WimaPolygon::WimaPolygon(QGCMapPolygon *other, QObject *parent): WimaPolygon(parent) { + delete _polygon; *_polygon = *other; } @@ -19,7 +20,7 @@ void WimaPolygon::setMaxAltitude(double alt) { if(alt > 0 && alt != _maxAltitude){ _maxAltitude = alt; - emit maxAltitudeChanged(_maxAltitude); + emit maxAltitudeChanged(); } } @@ -28,17 +29,15 @@ void WimaPolygon::setVehicle(Vehicle *vehicle) { if(_vehicle != vehicle){ _vehicle = vehicle; - emit vehicleChanged(_vehicle); + emit vehicleChanged(); } } -QmlObjectListModel* WimaPolygon::splitPolygonArea(int numberOfFractions) +QGCMapPolygon* WimaPolygon::splitPolygonArea(int numberOfFractions) { if(numberOfFractions > 0){ - _polygonFractions->append(this); - emit polygonFractionsChanged(_polygonFractions); - - return _polygonFractions; + QGCMapPolygon* poly = new QGCMapPolygon(this->polygon(), this); + return poly; } return nullptr; } diff --git a/src/MissionManager/WimaPolygon.h b/src/MissionManager/WimaPolygon.h index fa595c1bfcfa719af5e4a7d7bfb07601a5acbf4e..33c3b844ce7d6281ec46c5726e0c95d3ee586453 100644 --- a/src/MissionManager/WimaPolygon.h +++ b/src/MissionManager/WimaPolygon.h @@ -2,6 +2,7 @@ #define WIMAPOLYGON_H #include "QGCMapPolygon.h" +#include "QGCMapPolyline.h" #include "Vehicle.h" #include "qobject.h" @@ -16,39 +17,38 @@ public: - Q_PROPERTY(double maxAltitude READ maxAltitude WRITE setMaxAltitude NOTIFY maxAltitudeChanged) - Q_PROPERTY(QString mapVisualQML READ mapVisualQML CONSTANT) - Q_PROPERTY(QString editorQML READ editorQML CONSTANT) - Q_PROPERTY(Vehicle* vehicle READ vehicle WRITE setVehicle NOTIFY vehicleChanged) - Q_PROPERTY(QGCMapPolygon* polygon READ polygon NOTIFY polygonChanged) + Q_PROPERTY(double maxAltitude READ maxAltitude WRITE setMaxAltitude NOTIFY maxAltitudeChanged) + Q_PROPERTY(QString mapVisualQML READ mapVisualQML CONSTANT) + Q_PROPERTY(QString editorQML READ editorQML CONSTANT) + Q_PROPERTY(Vehicle* vehicle READ vehicle WRITE setVehicle NOTIFY vehicleChanged) + Q_PROPERTY(QGCMapPolygon* polygon READ polygon NOTIFY polygonChanged) + Q_PROPERTY(QList subPolygons READ subPolygons NOTIFY subPolygonsChanged) + Q_PROPERTY(QList subPolylines READ subPolylines NOTIFY subPolylinesChanged) //Property accessors double maxAltitude (void) const { return _maxAltitude;} Vehicle* vehicle (void) const { return _vehicle;} QGCMapPolygon* polygon (void) const { return _polygon;} - + QList subPolygons (void) const { return _subPolygons;} + QList subPolylines (void) const { return _subPolylines;} virtual QString mapVisualQML (void) const = 0; virtual QString editorQML (void) const = 0; - virtual QList& subPolygons (void) { return _subPolygons;} //Property setters void setMaxAltitude (double alt); void setName (QString name); void setVehicle (Vehicle* vehicle); - /// Splits the polygon in numberOfFractions fractions with equal area. - /// @param polygonFractions The polygon List to add the fractions to. - /// @param numberOfFractions The number of fractions to split the polygon to. - Q_INVOKABLE QmlObjectListModel* splitPolygonArea(int numberOfFractions); + + QGCMapPolygon* splitPolygonArea(int numberOfFractions); signals: - void maxAltitudeChanged (double alt); - void vehicleChanged (Vehicle* vehicle); + void maxAltitudeChanged (void); + void vehicleChanged (void); + void subPolygons (void); -protected: - QGCMapPolygon* extractQGCPolygon(void); private: @@ -57,6 +57,7 @@ private: Vehicle* _vehicle; QGCMapPolygon* _polygon; QList _subPolygons; + QList _subPolylines; }; #endif // WIMAPOLYGON_H diff --git a/src/MissionManager/WimaPolygonContainer.cc b/src/MissionManager/WimaPolygonContainer.cc index c659e4457d86abcfb090e06d1342c792a3f6bc1e..689efa1809fb3667d60326e2d5826ef42ce52cd8 100644 --- a/src/MissionManager/WimaPolygonContainer.cc +++ b/src/MissionManager/WimaPolygonContainer.cc @@ -64,6 +64,11 @@ QList& WimaPolygonContainer::returnFlatList() return _flatList; } +int WimaPolygonContainer::count() +{ + return _itemList.size(); +} + void WimaPolygonContainer::setFlatListDirty(void) { _flatListDirty = true; diff --git a/src/MissionManager/WimaPolygonContainer.h b/src/MissionManager/WimaPolygonContainer.h index fd9e27a801919a055a88d04ec347587c34529ae5..781957e86feff5846f1d0486dd7175bcbd7e9372 100644 --- a/src/MissionManager/WimaPolygonContainer.h +++ b/src/MissionManager/WimaPolygonContainer.h @@ -17,6 +17,7 @@ public: void removeItem(int itemIndex); void removeItem(WimaPolygon* polygon); QList& returnFlatList(); + int count(void); signals: void itemListChanged(void); diff --git a/src/MissionManager/WimaVehicle.cc b/src/MissionManager/WimaVehicle.cc new file mode 100644 index 0000000000000000000000000000000000000000..ef495f2ea79f806f8cdd8f4330eae75d8c8340d3 --- /dev/null +++ b/src/MissionManager/WimaVehicle.cc @@ -0,0 +1,9 @@ +#include "WimaVehicle.h" + + + +WimaVehicle::WimaVehicle(QObject *parent): + Vehicle (parent) +{ + +} diff --git a/src/MissionManager/WimaVehicle.h b/src/MissionManager/WimaVehicle.h new file mode 100644 index 0000000000000000000000000000000000000000..da22f0e83f1a48555d2767d4ca8d7b21072bc327 --- /dev/null +++ b/src/MissionManager/WimaVehicle.h @@ -0,0 +1,14 @@ +#ifndef WIMAVEHICLE_H +#define WIMAVEHICLE_H + +#include +#include "Vehicle.h" + +class WimaVehicle : public Vehicle +{ + Q_OBJECT +public: + WimaVehicle(QObject* parent); +}; + +#endif // WIMAVEHICLE_H