From e07f9bc8d055452399c399420ac3cf08b19ef7ea Mon Sep 17 00:00:00 2001 From: Valentin Platzgummer Date: Wed, 23 Oct 2019 00:02:54 +0200 Subject: [PATCH] modifying updateMission() --- src/Wima/WimaPlaner.cc | 128 ++++++++++++++++------------------- src/Wima/WimaPlaner.h | 12 ++-- src/WimaView/WimaToolBar.qml | 3 +- 3 files changed, 64 insertions(+), 79 deletions(-) diff --git a/src/Wima/WimaPlaner.cc b/src/Wima/WimaPlaner.cc index 4186b7db7..5e2106d34 100644 --- a/src/Wima/WimaPlaner.cc +++ b/src/Wima/WimaPlaner.cc @@ -1,4 +1,4 @@ -#include "WimaPlaner.h" + #include "WimaPlaner.h" #include "CircularSurveyComplexItem.h" @@ -10,7 +10,7 @@ const char* WimaPlaner::missionItemsName = "MissionItems"; WimaPlaner::WimaPlaner(QObject *parent) : QObject (parent) - , _missionReady (false) + , _dirty (false) , _currentAreaIndex (-1) , _container (nullptr) , _joinedArea (this) @@ -73,11 +73,11 @@ void WimaPlaner::setDataContainer(WimaDataContainer *container) { if (container != nullptr) { if (_container != nullptr) { - disconnect(this, &WimaPlaner::missionReadyChanged, _container, &WimaDataContainer::newDataAvailable); + disconnect(this, &WimaPlaner::dirtyChanged, _container, &WimaDataContainer::newDataAvailable); } _container = container; - connect(this, &WimaPlaner::missionReadyChanged, _container, &WimaDataContainer::newDataAvailable); + connect(this, &WimaPlaner::dirtyChanged, _container, &WimaDataContainer::newDataAvailable); emit dataContainerChanged(); } @@ -195,85 +195,71 @@ bool WimaPlaner::updateMission() // extract old survey data QmlObjectListModel* missionItems = _missionController->visualItems(); - CircularSurveyComplexItem* OldSurveyPt = nullptr; + CircularSurveyComplexItem* survey = nullptr; - QGeoCoordinate oldSurveyRef; - bool oldSurveyExists = false; + int surveyIndex = -1; for (int i = 0; i < _missionController->visualItems()->count(); i++) { - OldSurveyPt = qobject_cast(missionItems->get(i)); - if ( OldSurveyPt != nullptr) { - oldSurveyRef = OldSurveyPt->refPoint(); - oldSurveyExists = true; + survey = qobject_cast(missionItems->get(i)); + if ( survey != nullptr) { + surveyIndex = i; break; } } - // reset visual items - _missionController->removeAll(); - missionItems = _missionController->visualItems(); - // set home position to serArea center - MissionSettingsItem* settingsItem= qobject_cast(missionItems->get(0)); - if (settingsItem == nullptr){ - qWarning("WimaPlaner::updateMission(): settingsItem == nullptr"); - return false; - } - // set altitudes, temporary measure to solve bugs - QGeoCoordinate center = _serviceArea.center(); - center.setAltitude(0); - _serviceArea.setCenter(center); - center = _measurementArea.center(); - center.setAltitude(0); - _measurementArea.setCenter(center); - center = _corridor.center(); - center.setAltitude(0); - _corridor.setCenter(center); - // set HomePos. to serArea center - settingsItem->setCoordinate(_serviceArea.center()); - - // create take off position item - int sequenceNumber = _missionController->insertSimpleMissionItem(_serviceArea.center(), missionItems->count()); + // create survey item if not yet present + if (surveyIndex < 0) { + // set home position to serArea center + MissionSettingsItem* settingsItem= qobject_cast(missionItems->get(0)); + if (settingsItem == nullptr){ + qWarning("WimaPlaner::updateMission(): settingsItem == nullptr"); + return false; + } + // set altitudes, temporary measure to solve bugs + QGeoCoordinate center = _serviceArea.center(); + center.setAltitude(0); + _serviceArea.setCenter(center); + center = _measurementArea.center(); + center.setAltitude(0); + _measurementArea.setCenter(center); + center = _corridor.center(); + center.setAltitude(0); + _corridor.setCenter(center); + // set HomePos. to serArea center + settingsItem->setCoordinate(_serviceArea.center()); + + // create take off position item + int sequenceNumber = _missionController->insertSimpleMissionItem(_serviceArea.center(), missionItems->count()); - _missionController->setCurrentPlanViewIndex(sequenceNumber, true); - SimpleMissionItem* takeOffItem = qobject_cast(missionItems->get(missionItems->count()-1)); - if (takeOffItem == nullptr){ - qWarning("WimaPlaner::updateMission(): takeOffItem == nullptr"); - return false; - } else { + _missionController->setCurrentPlanViewIndex(sequenceNumber, true); + SimpleMissionItem* takeOffItem = qobject_cast(missionItems->get(missionItems->count()-1)); + if (takeOffItem == nullptr){ + qWarning("WimaPlaner::updateMission(): takeOffItem == nullptr"); + return false; + } takeOffItem->setCoordinate(_serviceArea.center()); //necessary, insertSimpleMissionItem does not copy coordinate (why?) - } - // create survey item, will be extened with more()-> mission types in the future - _missionController->insertComplexMissionItem(_missionController->circularSurveyComplexItemName(), _measurementArea.center(), missionItems->count()); - CircularSurveyComplexItem* survey = qobject_cast(missionItems->get(missionItems->count()-1)); - if (survey == nullptr){ - qWarning("WimaPlaner::updateMission(): survey == nullptr"); - return false; - } - if ( oldSurveyExists ) { - survey->setRefPoint(oldSurveyRef); + _missionController->insertComplexMissionItem(_missionController->circularSurveyComplexItemName(), _measurementArea.center(), missionItems->count()); + survey = qobject_cast(missionItems->get(missionItems->count()-1)); - disconnect(OldSurveyPt->deltaR(), &Fact::rawValueChanged, this, &WimaPlaner::resetMissionReady); - disconnect(OldSurveyPt->deltaAlpha(), &Fact::rawValueChanged, this, &WimaPlaner::resetMissionReady); - disconnect(OldSurveyPt->isSnakePath(), &Fact::rawValueChanged, this, &WimaPlaner::resetMissionReady); - disconnect(OldSurveyPt->transectMinLength(), &Fact::rawValueChanged, this, &WimaPlaner::resetMissionReady); - } else { + if (survey == nullptr){ + qWarning("WimaPlaner::updateMission(): survey == nullptr"); + return false; + } survey->setRefPoint(_measurementArea.center()); + survey->setAutoGenerated(true); // prevents reinitialisation from gui + connect(survey->deltaR(), &Fact::rawValueChanged, this, &WimaPlaner::setDirtyTrue); + connect(survey->deltaAlpha(), &Fact::rawValueChanged, this, &WimaPlaner::setDirtyTrue); + connect(survey->isSnakePath(), &Fact::rawValueChanged, this, &WimaPlaner::setDirtyTrue); + connect(survey->transectMinLength(), &Fact::rawValueChanged, this, &WimaPlaner::setDirtyTrue); + } - survey->setAutoGenerated(true); // prevents reinitialisation from gui survey->surveyAreaPolygon()->clear(); survey->surveyAreaPolygon()->appendVertices(_measurementArea.coordinateList()); - connect(survey->deltaR(), &Fact::rawValueChanged, this, &WimaPlaner::resetMissionReady); - connect(survey->deltaAlpha(), &Fact::rawValueChanged, this, &WimaPlaner::resetMissionReady); - connect(survey->isSnakePath(), &Fact::rawValueChanged, this, &WimaPlaner::resetMissionReady); - connect(survey->transectMinLength(), &Fact::rawValueChanged, this, &WimaPlaner::resetMissionReady); - - - // calculate path from take off to opArea if (survey->visualTransectPoints().size() == 0) { qWarning("WimaPlaner::updateMission(): survey no points."); @@ -325,7 +311,7 @@ bool WimaPlaner::updateMission() } pushToContainer(); // exchange plan data with the WimaController via the _container - setMissionReady(true); + setDirty(false); return true; } @@ -651,19 +637,19 @@ WimaPlanData WimaPlaner::toPlanData() return planData; } -void WimaPlaner::setMissionReady(bool ready) +void WimaPlaner::setDirty(bool dirty) { - if(_missionReady != ready) + if(_dirty != dirty) { - _missionReady = ready; + _dirty = dirty; - emit missionReadyChanged(_missionReady); + emit dirtyChanged(_dirty); } } -void WimaPlaner::resetMissionReady() +void WimaPlaner::setDirtyTrue() { - setMissionReady(false); + setDirty(true); } QJsonDocument WimaPlaner::saveToJson(FileType fileType) diff --git a/src/Wima/WimaPlaner.h b/src/Wima/WimaPlaner.h index 36bfff29e..c03855d0c 100644 --- a/src/Wima/WimaPlaner.h +++ b/src/Wima/WimaPlaner.h @@ -59,7 +59,7 @@ public: Q_PROPERTY(QString fileExtension READ fileExtension CONSTANT) Q_PROPERTY(QGeoCoordinate joinedAreaCenter READ joinedAreaCenter CONSTANT) Q_PROPERTY(WimaDataContainer* dataContainer READ dataContainer WRITE setDataContainer NOTIFY dataContainerChanged) - Q_PROPERTY(bool missionReady READ missionReady NOTIFY missionReadyChanged) + Q_PROPERTY(bool dirty READ dirty NOTIFY dirtyChanged) // Property accessors @@ -72,7 +72,7 @@ public: QStringList saveNameFilters (void) const; QString fileExtension (void) const { return wimaFileExtension; } QGeoCoordinate joinedAreaCenter (void) const; - bool missionReady (void) const { return _missionReady; } + bool dirty (void) const { return _dirty; } WimaDataContainer* dataContainer (void) { return _container;} // Property setters @@ -118,21 +118,21 @@ signals: void currentPolygonIndexChanged (int index); void currentFileChanged (); void dataContainerChanged (); - void missionReadyChanged (bool ready); + void dirtyChanged (bool dirty); private slots: void recalcPolygonInteractivity (int index); bool recalcJoinedArea (QString &errorString); void pushToContainer (); - void resetMissionReady (); + void setDirtyTrue (); private: // Member Functions WimaPlanData toPlanData(); - void setMissionReady(bool ready); + void setDirty(bool ready); // Member Variables - bool _missionReady; // basically true if updateMission() was sucessful + bool _dirty; // set to true if updateMission() was sucessful, set to false if different parameters change PlanMasterController *_masterController; MissionController *_missionController; int _currentAreaIndex; diff --git a/src/WimaView/WimaToolBar.qml b/src/WimaView/WimaToolBar.qml index 35f25c611..2d0032378 100644 --- a/src/WimaView/WimaToolBar.qml +++ b/src/WimaView/WimaToolBar.qml @@ -288,7 +288,6 @@ Rectangle { text: qsTr("Calculate") enabled: true visible: true - primary: !wimaPlaner.missionReady onClicked: wimaPlaner.updateMission() PropertyAnimation on opacity { @@ -296,7 +295,7 @@ Rectangle { from: 0.5 to: 1 loops: Animation.Infinite - running: !wimaPlaner.missionReady + running: wimaPlaner.dirty alwaysRunToEnd: true duration: 2000 } -- 2.22.0