Commit e07f9bc8 authored by Valentin Platzgummer's avatar Valentin Platzgummer

modifying updateMission()

parent 72c1e9a3
#include "WimaPlaner.h" #include "WimaPlaner.h"
#include "CircularSurveyComplexItem.h" #include "CircularSurveyComplexItem.h"
...@@ -10,7 +10,7 @@ const char* WimaPlaner::missionItemsName = "MissionItems"; ...@@ -10,7 +10,7 @@ const char* WimaPlaner::missionItemsName = "MissionItems";
WimaPlaner::WimaPlaner(QObject *parent) WimaPlaner::WimaPlaner(QObject *parent)
: QObject (parent) : QObject (parent)
, _missionReady (false) , _dirty (false)
, _currentAreaIndex (-1) , _currentAreaIndex (-1)
, _container (nullptr) , _container (nullptr)
, _joinedArea (this) , _joinedArea (this)
...@@ -73,11 +73,11 @@ void WimaPlaner::setDataContainer(WimaDataContainer *container) ...@@ -73,11 +73,11 @@ void WimaPlaner::setDataContainer(WimaDataContainer *container)
{ {
if (container != nullptr) { if (container != nullptr) {
if (_container != nullptr) { if (_container != nullptr) {
disconnect(this, &WimaPlaner::missionReadyChanged, _container, &WimaDataContainer::newDataAvailable); disconnect(this, &WimaPlaner::dirtyChanged, _container, &WimaDataContainer::newDataAvailable);
} }
_container = container; _container = container;
connect(this, &WimaPlaner::missionReadyChanged, _container, &WimaDataContainer::newDataAvailable); connect(this, &WimaPlaner::dirtyChanged, _container, &WimaDataContainer::newDataAvailable);
emit dataContainerChanged(); emit dataContainerChanged();
} }
...@@ -195,85 +195,71 @@ bool WimaPlaner::updateMission() ...@@ -195,85 +195,71 @@ bool WimaPlaner::updateMission()
// extract old survey data // extract old survey data
QmlObjectListModel* missionItems = _missionController->visualItems(); QmlObjectListModel* missionItems = _missionController->visualItems();
CircularSurveyComplexItem* OldSurveyPt = nullptr; CircularSurveyComplexItem* survey = nullptr;
QGeoCoordinate oldSurveyRef; int surveyIndex = -1;
bool oldSurveyExists = false;
for (int i = 0; i < _missionController->visualItems()->count(); i++) { for (int i = 0; i < _missionController->visualItems()->count(); i++) {
OldSurveyPt = qobject_cast<CircularSurveyComplexItem*>(missionItems->get(i)); survey = qobject_cast<CircularSurveyComplexItem*>(missionItems->get(i));
if ( OldSurveyPt != nullptr) { if ( survey != nullptr) {
oldSurveyRef = OldSurveyPt->refPoint(); surveyIndex = i;
oldSurveyExists = true;
break; break;
} }
} }
// reset visual items // create survey item if not yet present
_missionController->removeAll(); if (surveyIndex < 0) {
missionItems = _missionController->visualItems(); // set home position to serArea center
// set home position to serArea center MissionSettingsItem* settingsItem= qobject_cast<MissionSettingsItem*>(missionItems->get(0));
MissionSettingsItem* settingsItem= qobject_cast<MissionSettingsItem*>(missionItems->get(0)); if (settingsItem == nullptr){
if (settingsItem == nullptr){ qWarning("WimaPlaner::updateMission(): settingsItem == nullptr");
qWarning("WimaPlaner::updateMission(): settingsItem == nullptr"); return false;
return false; }
} // set altitudes, temporary measure to solve bugs
// set altitudes, temporary measure to solve bugs QGeoCoordinate center = _serviceArea.center();
QGeoCoordinate center = _serviceArea.center(); center.setAltitude(0);
center.setAltitude(0); _serviceArea.setCenter(center);
_serviceArea.setCenter(center); center = _measurementArea.center();
center = _measurementArea.center(); center.setAltitude(0);
center.setAltitude(0); _measurementArea.setCenter(center);
_measurementArea.setCenter(center); center = _corridor.center();
center = _corridor.center(); center.setAltitude(0);
center.setAltitude(0); _corridor.setCenter(center);
_corridor.setCenter(center); // set HomePos. to serArea center
// set HomePos. to serArea center settingsItem->setCoordinate(_serviceArea.center());
settingsItem->setCoordinate(_serviceArea.center());
// create take off position item
// create take off position item int sequenceNumber = _missionController->insertSimpleMissionItem(_serviceArea.center(), missionItems->count());
int sequenceNumber = _missionController->insertSimpleMissionItem(_serviceArea.center(), missionItems->count());
_missionController->setCurrentPlanViewIndex(sequenceNumber, true); _missionController->setCurrentPlanViewIndex(sequenceNumber, true);
SimpleMissionItem* takeOffItem = qobject_cast<SimpleMissionItem*>(missionItems->get(missionItems->count()-1)); SimpleMissionItem* takeOffItem = qobject_cast<SimpleMissionItem*>(missionItems->get(missionItems->count()-1));
if (takeOffItem == nullptr){ if (takeOffItem == nullptr){
qWarning("WimaPlaner::updateMission(): takeOffItem == nullptr"); qWarning("WimaPlaner::updateMission(): takeOffItem == nullptr");
return false; return false;
} else { }
takeOffItem->setCoordinate(_serviceArea.center()); //necessary, insertSimpleMissionItem does not copy coordinate (why?) 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<CircularSurveyComplexItem*>(missionItems->get(missionItems->count()-1));
if (survey == nullptr){ _missionController->insertComplexMissionItem(_missionController->circularSurveyComplexItemName(), _measurementArea.center(), missionItems->count());
qWarning("WimaPlaner::updateMission(): survey == nullptr"); survey = qobject_cast<CircularSurveyComplexItem*>(missionItems->get(missionItems->count()-1));
return false;
}
if ( oldSurveyExists ) {
survey->setRefPoint(oldSurveyRef);
disconnect(OldSurveyPt->deltaR(), &Fact::rawValueChanged, this, &WimaPlaner::resetMissionReady); if (survey == nullptr){
disconnect(OldSurveyPt->deltaAlpha(), &Fact::rawValueChanged, this, &WimaPlaner::resetMissionReady); qWarning("WimaPlaner::updateMission(): survey == nullptr");
disconnect(OldSurveyPt->isSnakePath(), &Fact::rawValueChanged, this, &WimaPlaner::resetMissionReady); return false;
disconnect(OldSurveyPt->transectMinLength(), &Fact::rawValueChanged, this, &WimaPlaner::resetMissionReady); }
} else {
survey->setRefPoint(_measurementArea.center()); 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()->clear();
survey->surveyAreaPolygon()->appendVertices(_measurementArea.coordinateList()); 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 // calculate path from take off to opArea
if (survey->visualTransectPoints().size() == 0) { if (survey->visualTransectPoints().size() == 0) {
qWarning("WimaPlaner::updateMission(): survey no points."); qWarning("WimaPlaner::updateMission(): survey no points.");
...@@ -325,7 +311,7 @@ bool WimaPlaner::updateMission() ...@@ -325,7 +311,7 @@ bool WimaPlaner::updateMission()
} }
pushToContainer(); // exchange plan data with the WimaController via the _container pushToContainer(); // exchange plan data with the WimaController via the _container
setMissionReady(true); setDirty(false);
return true; return true;
} }
...@@ -651,19 +637,19 @@ WimaPlanData WimaPlaner::toPlanData() ...@@ -651,19 +637,19 @@ WimaPlanData WimaPlaner::toPlanData()
return planData; 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) QJsonDocument WimaPlaner::saveToJson(FileType fileType)
......
...@@ -59,7 +59,7 @@ public: ...@@ -59,7 +59,7 @@ public:
Q_PROPERTY(QString fileExtension READ fileExtension CONSTANT) Q_PROPERTY(QString fileExtension READ fileExtension CONSTANT)
Q_PROPERTY(QGeoCoordinate joinedAreaCenter READ joinedAreaCenter CONSTANT) Q_PROPERTY(QGeoCoordinate joinedAreaCenter READ joinedAreaCenter CONSTANT)
Q_PROPERTY(WimaDataContainer* dataContainer READ dataContainer WRITE setDataContainer NOTIFY dataContainerChanged) 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 // Property accessors
...@@ -72,7 +72,7 @@ public: ...@@ -72,7 +72,7 @@ public:
QStringList saveNameFilters (void) const; QStringList saveNameFilters (void) const;
QString fileExtension (void) const { return wimaFileExtension; } QString fileExtension (void) const { return wimaFileExtension; }
QGeoCoordinate joinedAreaCenter (void) const; QGeoCoordinate joinedAreaCenter (void) const;
bool missionReady (void) const { return _missionReady; } bool dirty (void) const { return _dirty; }
WimaDataContainer* dataContainer (void) { return _container;} WimaDataContainer* dataContainer (void) { return _container;}
// Property setters // Property setters
...@@ -118,21 +118,21 @@ signals: ...@@ -118,21 +118,21 @@ signals:
void currentPolygonIndexChanged (int index); void currentPolygonIndexChanged (int index);
void currentFileChanged (); void currentFileChanged ();
void dataContainerChanged (); void dataContainerChanged ();
void missionReadyChanged (bool ready); void dirtyChanged (bool dirty);
private slots: private slots:
void recalcPolygonInteractivity (int index); void recalcPolygonInteractivity (int index);
bool recalcJoinedArea (QString &errorString); bool recalcJoinedArea (QString &errorString);
void pushToContainer (); void pushToContainer ();
void resetMissionReady (); void setDirtyTrue ();
private: private:
// Member Functions // Member Functions
WimaPlanData toPlanData(); WimaPlanData toPlanData();
void setMissionReady(bool ready); void setDirty(bool ready);
// Member Variables // 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; PlanMasterController *_masterController;
MissionController *_missionController; MissionController *_missionController;
int _currentAreaIndex; int _currentAreaIndex;
......
...@@ -288,7 +288,6 @@ Rectangle { ...@@ -288,7 +288,6 @@ Rectangle {
text: qsTr("Calculate") text: qsTr("Calculate")
enabled: true enabled: true
visible: true visible: true
primary: !wimaPlaner.missionReady
onClicked: wimaPlaner.updateMission() onClicked: wimaPlaner.updateMission()
PropertyAnimation on opacity { PropertyAnimation on opacity {
...@@ -296,7 +295,7 @@ Rectangle { ...@@ -296,7 +295,7 @@ Rectangle {
from: 0.5 from: 0.5
to: 1 to: 1
loops: Animation.Infinite loops: Animation.Infinite
running: !wimaPlaner.missionReady running: wimaPlaner.dirty
alwaysRunToEnd: true alwaysRunToEnd: true
duration: 2000 duration: 2000
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment