diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index d1164e06458430cefb45275e4cb4f01305dbcc33..64a35ef4f7613ddcf059457a09bc2d5f21e0bb72 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -499,7 +499,6 @@ HEADERS += \ src/Wima/Geometry/WimaArea.h \ src/Wima/Geometry/WimaServiceArea.h \ src/Wima/Geometry/WimaTrackerPolyline.h \ - src/Wima/WimaController.h \ src/Wima/WimaPlaner.h \ src/Wima/Geometry/WimaMeasurementArea.h \ src/Wima/Geometry/WimaCorridor.h \ @@ -577,7 +576,6 @@ SOURCES += \ src/Wima/Geometry/WimaArea.cc \ src/Wima/Geometry/WimaServiceArea.cc \ src/Wima/Geometry/WimaTrackerPolyline.cc \ - src/Wima/WimaController.cc \ src/Wima/WimaPlaner.cc \ src/Wima/Geometry/WimaMeasurementArea.cc \ src/Wima/Geometry/WimaCorridor.cc \ diff --git a/src/Wima/CircularSurvey.cc b/src/Wima/CircularSurvey.cc index 163ec407d687fda30efc6514ff8cdbb4d7fb12b3..c5c2ffc2cf17d91e182e7d6ba935af1699590684 100644 --- a/src/Wima/CircularSurvey.cc +++ b/src/Wima/CircularSurvey.cc @@ -42,7 +42,7 @@ CircularSurvey::CircularSurvey(PlanMasterController *masterController, _metaDataMap(FactMetaData::createMapFromJsonFile( QStringLiteral(":/json/CircularSurvey.SettingsGroup.json"), this)), _variant(settingsGroup, _metaDataMap[variantName]), - _pAreaData(std::make_shared()), + _areaData(std::make_shared()), _pWorker(std::make_unique()) { Q_UNUSED(kmlOrShpFile) @@ -59,9 +59,9 @@ CircularSurvey::CircularSurvey(PlanMasterController *masterController, &CircularSurvey::calculatingChanged); // Register Generators. - auto lg = std::make_shared(this->_pAreaData); + auto lg = std::make_shared(this->_areaData); registerGenerator(lg->name(), lg); - auto cg = std::make_shared(this->_pAreaData); + auto cg = std::make_shared(this->_areaData); registerGenerator(cg->name(), cg); } @@ -72,15 +72,15 @@ void CircularSurvey::reverse() { this->_rebuildTransects(); } -void CircularSurvey::setPlanData(const WimaPlanData &d) { - *this->_pAreaData = d; +void CircularSurvey::setPlanData(const AreaData &d) { + *this->_areaData = d; } -const WimaPlanData &CircularSurvey::planData() const { - return *this->_pAreaData; +const AreaData &CircularSurvey::planData() const { + return *this->_areaData; } -WimaPlanData &CircularSurvey::planData() { return *this->_pAreaData; } +AreaData &CircularSurvey::planData() { return *this->_areaData; } QStringList CircularSurvey::variantNames() const { return _variantNames; } @@ -228,10 +228,10 @@ bool CircularSurvey::_updateWorker() { this->_variantNames.clear(); emit variantNamesChanged(); - if (this->_pAreaData->isValid()) { + if (this->_areaData->isValid()) { // Prepare data. - auto origin = this->_pAreaData->origin(); + auto origin = this->_areaData->origin(); origin.setAltitude(0); if (!origin.isValid()) { qCDebug(CircularSurveyLog) @@ -240,7 +240,7 @@ bool CircularSurvey::_updateWorker() { } // Convert safe area. - auto geoSafeArea = this->_pAreaData->joinedArea().coordinateList(); + auto geoSafeArea = this->_areaData->joinedArea().coordinateList(); if (!(geoSafeArea.size() >= 3)) { qCDebug(CircularSurveyLog) << "_updateWorker(): safe area invalid." << geoSafeArea; @@ -512,7 +512,7 @@ void CircularSurvey::_recalcCameraShots() { _cameraShots = 0; } void CircularSurvey::_setTransects(CircularSurvey::PtrRoutingData pRoute) { // Store solutions. - auto ori = this->_pAreaData->origin(); + auto ori = this->_areaData->origin(); ori.setAltitude(0); const auto &transectsENU = pRoute->transects; QVector variantVector; diff --git a/src/Wima/Snake/CircularGenerator.cpp b/src/Wima/Snake/CircularGenerator.cpp index a4e39375830f82cce5196b5d2437ebde3eb70a5e..838dae395b68dc2cc7019203fb458542ec4331fd 100644 --- a/src/Wima/Snake/CircularGenerator.cpp +++ b/src/Wima/Snake/CircularGenerator.cpp @@ -179,7 +179,7 @@ void CircularGenerator::resetReference() { void CircularGenerator::establishConnections() { if (this->_d && !this->_connectionsEstablished) { - connect(this->_d.get(), &WimaPlanData::originChanged, this, + connect(this->_d.get(), &AreaData::originChanged, this, &GeneratorBase::generatorChanged); connect(&this->_d->measurementArea(), &WimaMeasurementAreaData::progressChanged, this, @@ -210,7 +210,7 @@ void CircularGenerator::establishConnections() { void CircularGenerator::deleteConnections() { if (this->_d && this->_connectionsEstablished) { - disconnect(this->_d.get(), &WimaPlanData::originChanged, this, + disconnect(this->_d.get(), &AreaData::originChanged, this, &GeneratorBase::generatorChanged); disconnect(&this->_d->measurementArea(), &WimaMeasurementAreaData::progressChanged, this, diff --git a/src/Wima/Snake/GeneratorBase.h b/src/Wima/Snake/GeneratorBase.h index 89fd78fef245107e59d1e7db948ed7b1954fa532..96605d0543d90c260e02a7127ce86890dbd13c1d 100644 --- a/src/Wima/Snake/GeneratorBase.h +++ b/src/Wima/Snake/GeneratorBase.h @@ -14,7 +14,7 @@ namespace routing { class GeneratorBase : public QObject { Q_OBJECT public: - using Data = std::shared_ptr; + using Data = std::shared_ptr; using Generator = std::function; explicit GeneratorBase(QObject *parent = nullptr); diff --git a/src/Wima/Snake/LinearGenerator.cpp b/src/Wima/Snake/LinearGenerator.cpp index 91bfe9f0f2c7bc3d662bcb0a3d205ffad84a745c..7f5c4b739f038850e1a6165814f4cb157cc7aef0 100644 --- a/src/Wima/Snake/LinearGenerator.cpp +++ b/src/Wima/Snake/LinearGenerator.cpp @@ -134,7 +134,7 @@ Fact *LinearGenerator::minLength() { return &_minLength; } void LinearGenerator::establishConnections() { if (this->_d && !this->_connectionsEstablished) { - connect(this->_d.get(), &WimaPlanData::originChanged, this, + connect(this->_d.get(), &AreaData::originChanged, this, &GeneratorBase::generatorChanged); connect(&this->_d->measurementArea(), &WimaMeasurementAreaData::progressChanged, this, @@ -160,7 +160,7 @@ void LinearGenerator::establishConnections() { void LinearGenerator::deleteConnections() { if (this->_d && this->_connectionsEstablished) { - connect(this->_d.get(), &WimaPlanData::originChanged, this, + connect(this->_d.get(), &AreaData::originChanged, this, &GeneratorBase::generatorChanged); connect(&this->_d->measurementArea(), &WimaMeasurementAreaData::progressChanged, this, diff --git a/src/Wima/WimaBridge.h b/src/Wima/WimaBridge.h index 0b411536ff023b33e37eeacf689eefe6d16ef568..b803dbefb8719c45b77a54b6fc4166f600db6ba6 100644 --- a/src/Wima/WimaBridge.h +++ b/src/Wima/WimaBridge.h @@ -21,17 +21,17 @@ class WimaBridge : public QObject { public: ~WimaBridge(); static WimaBridge *instance(); - const WimaPlanData &planData() const; + const AreaData &planData() const; const QVector &progress() const; public slots: - void setPlanData(const WimaPlanData &planData); + void setPlanData(const AreaData &planData); void setProgress(const QVector &p); signals: void planDataChanged(); void progressChanged(); private: - WimaPlanData planData_; + AreaData planData_; QVector progress_; }; diff --git a/src/Wima/WimaController.cc b/src/Wima/WimaController.cc deleted file mode 100644 index 3dc0a34e35e39c8ff1ae030131553968c5558576..0000000000000000000000000000000000000000 --- a/src/Wima/WimaController.cc +++ /dev/null @@ -1,131 +0,0 @@ -#include "WimaController.h" - -#include "utilities.h" - -#include "MissionController.h" -#include "MissionSettingsItem.h" -#include "PlanMasterController.h" -#include "QGCApplication.h" -#include "QGCLoggingCategory.h" -#include "SettingsManager.h" -#include "SimpleMissionItem.h" - -#include "WimaBridge.h" -#include "WimaPlanData.h" -#include "WimaSettings.h" - -#include "Snake/QNemoHeartbeat.h" -#include "Snake/QNemoProgress.h" -#include "Snake/SnakeTile.h" - -#include "QVector3D" -#include - -#define CLIPPER_SCALE 1000000 -#include "clipper/clipper.hpp" - -#include - -QGC_LOGGING_CATEGORY(WimaControllerLog, "WimaControllerLog") - -template -constexpr typename std::underlying_type::type integral(T value) { - return static_cast::type>(value); -} - -#define EVENT_TIMER_INTERVAL 50 // ms - -const char *WimaController::areaItemsName = "AreaItems"; -const char *WimaController::settingsGroup = "WimaController"; -const char *WimaController::enableWimaControllerName = "EnableWimaController"; - -WimaController::WimaController(QObject *parent) - : QObject(parent), _joinedArea(), _measurementArea(), _serviceArea(), - _corridor(), _planDataValid(false), - _metaDataMap(FactMetaData::createMapFromJsonFile( - QStringLiteral(":/json/WimaController.SettingsGroup.json"), this)), - _enableWimaController(settingsGroup, - _metaDataMap[enableWimaControllerName]){ - // PlanData and Progress. - connect(WimaBridge::instance(), &WimaBridge::planDataChanged, this, - &WimaController::planDataChangedHandler); - connect(WimaBridge::instance(), &WimaBridge::progressChanged, this, - &WimaController::progressChangedHandler); -} - -PlanMasterController *WimaController::masterController() { - return _masterController; -} - -MissionController *WimaController::missionController() { - return _missionController; -} - -QmlObjectListModel *WimaController::visualItems() { return &_areas; } - -Fact *WimaController::enableWimaController() { return &_enableWimaController; } - -void WimaController::setMasterController(PlanMasterController *masterC) { - _masterController = masterC; - emit masterControllerChanged(); -} - -void WimaController::setMissionController(MissionController *missionC) { - _missionController = missionC; - emit missionControllerChanged(); -} - -void WimaController::planDataChangedHandler() { - - // reset visual items - _areas.clear(); - _measurementArea = WimaMeasurementAreaData(); - _serviceArea = WimaServiceAreaData(); - _corridor = WimaCorridorData(); - _joinedArea = WimaJoinedAreaData(); - _planDataValid = false; - - emit visualItemsChanged(); - - // Extract areas. - auto planData = WimaBridge::instance()->planData(); - - // Measurement Area. - if (planData.measurementArea().coordinateList().size() >= 3) { - _measurementArea = planData.measurementArea(); - _areas.append(&_measurementArea); - - // Service Area. - if (planData.serviceArea().coordinateList().size() >= 3) { - _serviceArea = planData.serviceArea(); - _areas.append(&_serviceArea); - - // Joined Area. - if (planData.joinedArea().coordinateList().size() >= 3) { - _joinedArea = planData.joinedArea(); - _areas.append(&_joinedArea); - - _planDataValid = true; - - // Corridor. - if (planData.corridor().coordinateList().size() >= 3) { - _corridor = planData.corridor(); - } - } - } - } - - if (_planDataValid) { - emit visualItemsChanged(); - } else { - _areas.clear(); - _measurementArea = WimaMeasurementAreaData(); - _serviceArea = WimaServiceAreaData(); - _corridor = WimaCorridorData(); - _joinedArea = WimaJoinedAreaData(); - } -} - -void WimaController::progressChangedHandler() { - _measurementArea.setProgress(WimaBridge::instance()->progress()); -} diff --git a/src/Wima/WimaController.h b/src/Wima/WimaController.h deleted file mode 100644 index 27b938bf066199f9ff054e07f8efe85a04288b18..0000000000000000000000000000000000000000 --- a/src/Wima/WimaController.h +++ /dev/null @@ -1,81 +0,0 @@ -#pragma once - -#include - -#include "QGCMapPolygon.h" -#include "QmlObjectListModel.h" - -#include "Geometry/WimaCorridorData.h" -#include "Geometry/WimaJoinedAreaData.h" -#include "Geometry/WimaMeasurementAreaData.h" -#include "Geometry/WimaServiceAreaData.h" - -#include "SettingsFact.h" - -class MissionController; -class PlanMasterController; - -class WimaController : public QObject { - Q_OBJECT -public: - WimaController(QObject *parent = nullptr); - - // Controllers. - Q_PROPERTY(PlanMasterController *masterController READ masterController WRITE - setMasterController NOTIFY masterControllerChanged) - Q_PROPERTY(MissionController *missionController READ missionController WRITE - setMissionController NOTIFY missionControllerChanged) - // Wima Data. - Q_PROPERTY(QmlObjectListModel *visualItems READ visualItems NOTIFY - visualItemsChanged) - Q_PROPERTY(Fact *enableWimaController READ enableWimaController CONSTANT) - - // Controllers. - PlanMasterController *masterController(void); - MissionController *missionController(void); - - // Wima Data - QmlObjectListModel *visualItems(void); - QGCMapPolygon joinedArea(void) const; - - // Settings facts. - Fact *enableWimaController(void); - - // Property setters - void setMasterController(PlanMasterController *masterController); - void setMissionController(MissionController *missionController); - - // static Members - static const char *areaItemsName; - static const char *settingsGroup; - static const char *enableWimaControllerName; - -signals: - // Controllers. - void masterControllerChanged(void); - void missionControllerChanged(void); - // Wima data. - void visualItemsChanged(void); - -private slots: - void planDataChangedHandler(); - void progressChangedHandler(); - -private: - // Controllers. - PlanMasterController *_masterController; - MissionController *_missionController; - - // Wima Data. - QmlObjectListModel _areas; // contains all visible areas - // joined area fromed by opArea, serArea, _corridor - WimaJoinedAreaData _joinedArea; - WimaMeasurementAreaData _measurementArea; // measurement area - WimaServiceAreaData _serviceArea; // area for supplying - WimaCorridorData _corridor; // corridor connecting opArea and serArea - bool _planDataValid; - - // Settings Facts. - QMap _metaDataMap; - SettingsFact _enableWimaController; // enables or disables the wimaControler -}; diff --git a/src/Wima/WimaPlanData.cc b/src/Wima/WimaPlanData.cc index 11c55862df727c2b1283a622e57fee2725c50c69..92f66a5b6a38dc967af61b39cd843da7a7fe554f 100644 --- a/src/Wima/WimaPlanData.cc +++ b/src/Wima/WimaPlanData.cc @@ -1,13 +1,13 @@ #include "WimaPlanData.h" -WimaPlanData::WimaPlanData(QObject *parent) : QObject(parent) {} +AreaData::AreaData(QObject *parent) : QObject(parent) {} -WimaPlanData::WimaPlanData(const WimaPlanData &other, QObject *parent) +AreaData::AreaData(const AreaData &other, QObject *parent) : QObject(parent) { *this = other; } -WimaPlanData &WimaPlanData::operator=(const WimaPlanData &other) { +AreaData &AreaData::operator=(const AreaData &other) { this->set(other.measurementArea()); this->set(other.serviceArea()); this->set(other.joinedArea()); @@ -16,28 +16,28 @@ WimaPlanData &WimaPlanData::operator=(const WimaPlanData &other) { return *this; } -void WimaPlanData::set(const WimaJoinedAreaData &areaData) { +void AreaData::set(const WimaJoinedAreaData &areaData) { if (_joinedArea != areaData) { _joinedArea = areaData; emit joinedAreaChanged(); } } -void WimaPlanData::set(const WimaServiceAreaData &areaData) { +void AreaData::set(const WimaServiceAreaData &areaData) { if (_serviceArea != areaData) { _serviceArea = areaData; emit serviceAreaChanged(); } } -void WimaPlanData::set(const WimaCorridorData &areaData) { +void AreaData::set(const WimaCorridorData &areaData) { if (_corridor != areaData) { _corridor = areaData; emit corridorChanged(); } } -void WimaPlanData::set(const WimaMeasurementAreaData &areaData) { +void AreaData::set(const WimaMeasurementAreaData &areaData) { if (_measurementArea != areaData) { _measurementArea = areaData; emit measurementAreaChanged(); @@ -50,28 +50,28 @@ void WimaPlanData::set(const WimaMeasurementAreaData &areaData) { } } -void WimaPlanData::set(const WimaJoinedArea &areaData) { +void AreaData::set(const WimaJoinedArea &areaData) { if (_joinedArea != areaData) { _joinedArea = areaData; emit joinedAreaChanged(); } } -void WimaPlanData::set(const WimaServiceArea &areaData) { +void AreaData::set(const WimaServiceArea &areaData) { if (_serviceArea != areaData) { _serviceArea = areaData; emit serviceAreaChanged(); } } -void WimaPlanData::set(const WimaCorridor &areaData) { +void AreaData::set(const WimaCorridor &areaData) { if (_corridor != areaData) { _corridor = areaData; emit corridorChanged(); } } -void WimaPlanData::set(const WimaMeasurementArea &areaData) { +void AreaData::set(const WimaMeasurementArea &areaData) { if (_measurementArea != areaData) { _measurementArea = areaData; emit measurementAreaChanged(); @@ -84,52 +84,52 @@ void WimaPlanData::set(const WimaMeasurementArea &areaData) { } } -void WimaPlanData::clear() { *this = WimaPlanData(); } +void AreaData::clear() { *this = AreaData(); } -QGeoCoordinate WimaPlanData::origin() { return _origin; } +QGeoCoordinate AreaData::origin() { return _origin; } -bool WimaPlanData::isValid() { +bool AreaData::isValid() { return _measurementArea.coordinateList().size() >= 3 && _serviceArea.coordinateList().size() >= 3 && _origin.isValid(); } -const WimaJoinedAreaData &WimaPlanData::joinedArea() const { +const WimaJoinedAreaData &AreaData::joinedArea() const { return this->_joinedArea; } -const WimaServiceAreaData &WimaPlanData::serviceArea() const { +const WimaServiceAreaData &AreaData::serviceArea() const { return this->_serviceArea; } -const WimaCorridorData &WimaPlanData::corridor() const { +const WimaCorridorData &AreaData::corridor() const { return this->_corridor; } -const WimaMeasurementAreaData &WimaPlanData::measurementArea() const { +const WimaMeasurementAreaData &AreaData::measurementArea() const { return this->_measurementArea; } -WimaJoinedAreaData &WimaPlanData::joinedArea() { return this->_joinedArea; } +WimaJoinedAreaData &AreaData::joinedArea() { return this->_joinedArea; } -WimaServiceAreaData &WimaPlanData::serviceArea() { return this->_serviceArea; } +WimaServiceAreaData &AreaData::serviceArea() { return this->_serviceArea; } -WimaCorridorData &WimaPlanData::corridor() { return this->_corridor; } +WimaCorridorData &AreaData::corridor() { return this->_corridor; } -WimaMeasurementAreaData &WimaPlanData::measurementArea() { +WimaMeasurementAreaData &AreaData::measurementArea() { return this->_measurementArea; } -bool WimaPlanData::operator==(const WimaPlanData &other) const { +bool AreaData::operator==(const AreaData &other) const { return this->_joinedArea == other._joinedArea && this->_measurementArea == other._measurementArea && this->_corridor == other._corridor && this->_serviceArea == other._serviceArea; } -bool WimaPlanData::operator!=(const WimaPlanData &other) const { +bool AreaData::operator!=(const AreaData &other) const { return !(*this == other); } -void WimaPlanData::setOrigin(const QGeoCoordinate &origin) { +void AreaData::setOrigin(const QGeoCoordinate &origin) { if (this->_origin != origin) { this->_origin = origin; emit originChanged(); diff --git a/src/Wima/WimaPlaner.cc b/src/Wima/WimaPlaner.cc index 737d71681bda4f1801ad99943cbbc12a1ae555f1..3cc787ad1c732a043b192f0d85087bcea919a34b 100644 --- a/src/Wima/WimaPlaner.cc +++ b/src/Wima/WimaPlaner.cc @@ -783,7 +783,7 @@ void WimaPlaner::updatePolygonInteractivity(int index) { void WimaPlaner::synchronize() { if (readyForSynchronization()) { - WimaPlanData planData; + AreaData planData; if (toPlanData(planData)) { WimaBridge::instance()->setPlanData(planData); setSynchronized(true); @@ -926,11 +926,11 @@ void WimaPlaner::setInteractive() { * * \sa WimaController, WimaPlanData */ -bool WimaPlaner::toPlanData(WimaPlanData &planData) { - planData.set(_measurementArea); - planData.set(_serviceArea); - planData.set(_corridor); - planData.set(_joinedArea); +bool WimaPlaner::toPlanData(AreaData &planData) { + planData.append(_measurementArea); + planData.append(_serviceArea); + planData.append(_corridor); + planData.append(_joinedArea); return planData.isValid(); } diff --git a/src/Wima/WimaPlaner.h b/src/Wima/WimaPlaner.h index 758ac333d8b2accd7052758a198f335ebd46bf7c..2b02129535d0d5a4a0c9dca158f06279008e5b1a 100644 --- a/src/Wima/WimaPlaner.h +++ b/src/Wima/WimaPlaner.h @@ -153,7 +153,7 @@ signals: private: // Member Functions - bool toPlanData(WimaPlanData &planData); + bool toPlanData(AreaData &planData); bool shortestPath(const QGeoCoordinate &start, const QGeoCoordinate &destination, QVector &path);