Commit e07f9bc8 authored by Valentin Platzgummer's avatar Valentin Platzgummer

modifying updateMission()

parent 72c1e9a3
#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<CircularSurveyComplexItem*>(missionItems->get(i));
if ( OldSurveyPt != nullptr) {
oldSurveyRef = OldSurveyPt->refPoint();
oldSurveyExists = true;
survey = qobject_cast<CircularSurveyComplexItem*>(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<MissionSettingsItem*>(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<MissionSettingsItem*>(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<SimpleMissionItem*>(missionItems->get(missionItems->count()-1));
if (takeOffItem == nullptr){
qWarning("WimaPlaner::updateMission(): takeOffItem == nullptr");
return false;
} else {
_missionController->setCurrentPlanViewIndex(sequenceNumber, true);
SimpleMissionItem* takeOffItem = qobject_cast<SimpleMissionItem*>(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<CircularSurveyComplexItem*>(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<CircularSurveyComplexItem*>(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)
......
......@@ -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;
......
......@@ -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
}
......
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