From 6af0d454b4c7894d8bf9e960643c700169ea8c93 Mon Sep 17 00:00:00 2001 From: Valentin Platzgummer Date: Thu, 22 Oct 2020 10:53:36 +0200 Subject: [PATCH] temp --- src/Wima/CircularSurvey.cc | 6 ++++ src/Wima/CircularSurvey.h | 2 ++ src/Wima/Snake/CircularGenerator.cpp | 20 +++++++++---- src/Wima/Snake/LinearGenerator.cpp | 43 ++++++++++++++-------------- src/Wima/WimaPlanData.cc | 34 ++++++++++++++++++++++ src/Wima/WimaPlanData.h | 5 ++++ src/Wima/WimaPlaner.cc | 38 ++++++------------------ src/Wima/WimaPlaner.h | 18 ++---------- 8 files changed, 96 insertions(+), 70 deletions(-) diff --git a/src/Wima/CircularSurvey.cc b/src/Wima/CircularSurvey.cc index bce250582..19182eb41 100644 --- a/src/Wima/CircularSurvey.cc +++ b/src/Wima/CircularSurvey.cc @@ -78,6 +78,12 @@ void CircularSurvey::setPlanData(const WimaPlanData &d) { *this->_pAreaData = d; } +const WimaPlanData &CircularSurvey::planData() const { + return *this->_pAreaData; +} + +WimaPlanData &CircularSurvey::planData() { return *this->_pAreaData; } + QStringList CircularSurvey::variantNames() const { return _variantNames; } bool CircularSurvey::load(const QJsonObject &complexObject, int sequenceNumber, diff --git a/src/Wima/CircularSurvey.h b/src/Wima/CircularSurvey.h index aa24ef999..de7253a2b 100644 --- a/src/Wima/CircularSurvey.h +++ b/src/Wima/CircularSurvey.h @@ -51,6 +51,8 @@ public: void setPlanData(const WimaPlanData &d); // Property getters + const WimaPlanData &planData() const; + WimaPlanData &planData(); Fact *variant(); QStringList variantNames() const; bool calculating() const; diff --git a/src/Wima/Snake/CircularGenerator.cpp b/src/Wima/Snake/CircularGenerator.cpp index 669fc53f6..129e0e8e6 100644 --- a/src/Wima/Snake/CircularGenerator.cpp +++ b/src/Wima/Snake/CircularGenerator.cpp @@ -169,6 +169,9 @@ void CircularGenerator::resetReferenceIfInvalid() { void CircularGenerator::resetReference() { if (this->_d->measurementArea().center().isValid()) { setReference(this->_d->measurementArea().center()); + } else { + qCWarning(CircularGeneratorLog) + << "measurement area center" << this->_d->measurementArea().center(); } } @@ -176,15 +179,21 @@ void CircularGenerator::establishConnections() { if (this->_d && !this->_connectionsEstablished) { connect(this->_d.get(), &WimaPlanData::originChanged, this, &GeneratorBase::generatorChanged); + connect(&this->_d->measurementArea(), + &WimaMeasurementAreaData::progressChanged, this, + &GeneratorBase::generatorChanged); connect(&this->_d->measurementArea(), &WimaMeasurementAreaData::tileDataChanged, this, &GeneratorBase::generatorChanged); - connect(&this->_d->measurementArea(), &WimaMeasurementAreaData::pathChanged, - this, &CircularGenerator::resetReferenceIfInvalid); + connect(&this->_d->measurementArea(), + &WimaMeasurementAreaData::centerChanged, this, + &CircularGenerator::resetReferenceIfInvalid); connect(&this->_d->measurementArea(), &WimaMeasurementAreaData::pathChanged, this, &GeneratorBase::generatorChanged); connect(&this->_d->serviceArea(), &WimaServiceAreaData::depotChanged, this, &GeneratorBase::generatorChanged); + connect(&this->_d->joinedArea(), &WimaJoinedAreaData::pathChanged, this, + &GeneratorBase::generatorChanged); connect(this->distance(), &Fact::rawValueChanged, this, &GeneratorBase::generatorChanged); connect(this->deltaAlpha(), &Fact::rawValueChanged, this, @@ -207,14 +216,15 @@ void CircularGenerator::deleteConnections() { disconnect(&this->_d->measurementArea(), &WimaMeasurementAreaData::tileDataChanged, this, &GeneratorBase::generatorChanged); - disconnect(&this->_d->measurementArea(), - &WimaMeasurementAreaData::pathChanged, this, - &CircularGenerator::resetReferenceIfInvalid); + disconnect(&this->_d->measurementArea(), &WimaMeasurementAreaData::center, + this, &CircularGenerator::resetReferenceIfInvalid); disconnect(&this->_d->measurementArea(), &WimaMeasurementAreaData::pathChanged, this, &GeneratorBase::generatorChanged); disconnect(&this->_d->serviceArea(), &WimaServiceAreaData::depotChanged, this, &GeneratorBase::generatorChanged); + disconnect(&this->_d->joinedArea(), &WimaJoinedAreaData::pathChanged, this, + &GeneratorBase::generatorChanged); disconnect(this->distance(), &Fact::rawValueChanged, this, &GeneratorBase::generatorChanged); disconnect(this->deltaAlpha(), &Fact::rawValueChanged, this, diff --git a/src/Wima/Snake/LinearGenerator.cpp b/src/Wima/Snake/LinearGenerator.cpp index 19d7da6d7..4a8193475 100644 --- a/src/Wima/Snake/LinearGenerator.cpp +++ b/src/Wima/Snake/LinearGenerator.cpp @@ -144,6 +144,8 @@ void LinearGenerator::establishConnections() { this, &GeneratorBase::generatorChanged); connect(&this->_d->serviceArea(), &WimaServiceAreaData::depotChanged, this, &GeneratorBase::generatorChanged); + connect(&this->_d->joinedArea(), &WimaJoinedAreaData::pathChanged, this, + &GeneratorBase::generatorChanged); connect(this->distance(), &Fact::rawValueChanged, this, &GeneratorBase::generatorChanged); connect(this->alpha(), &Fact::rawValueChanged, this, @@ -156,27 +158,26 @@ void LinearGenerator::establishConnections() { void LinearGenerator::deleteConnections() { if (this->_d && this->_connectionsEstablished) { - disconnect(this->_d.get(), &WimaPlanData::measurementAreaChanged, this, - &GeneratorBase::generatorChanged); - disconnect(this->_d.get(), &WimaPlanData::originChanged, this, - &GeneratorBase::generatorChanged); - disconnect(&this->_d->measurementArea(), - &WimaMeasurementAreaData::progressChanged, this, - &GeneratorBase::generatorChanged); - disconnect(&this->_d->measurementArea(), - &WimaMeasurementAreaData::tileDataChanged, this, - &GeneratorBase::generatorChanged); - disconnect(&this->_d->measurementArea(), - &WimaMeasurementAreaData::pathChanged, this, - &GeneratorBase::generatorChanged); - disconnect(&this->_d->serviceArea(), &WimaServiceAreaData::depotChanged, - this, &GeneratorBase::generatorChanged); - disconnect(this->distance(), &Fact::rawValueChanged, this, - &GeneratorBase::generatorChanged); - disconnect(this->alpha(), &Fact::rawValueChanged, this, - &GeneratorBase::generatorChanged); - disconnect(this->minLength(), &Fact::rawValueChanged, this, - &GeneratorBase::generatorChanged); + connect(this->_d.get(), &WimaPlanData::originChanged, this, + &GeneratorBase::generatorChanged); + connect(&this->_d->measurementArea(), + &WimaMeasurementAreaData::progressChanged, this, + &GeneratorBase::generatorChanged); + connect(&this->_d->measurementArea(), + &WimaMeasurementAreaData::tileDataChanged, this, + &GeneratorBase::generatorChanged); + connect(&this->_d->measurementArea(), &WimaMeasurementAreaData::pathChanged, + this, &GeneratorBase::generatorChanged); + connect(&this->_d->serviceArea(), &WimaServiceAreaData::depotChanged, this, + &GeneratorBase::generatorChanged); + connect(&this->_d->joinedArea(), &WimaJoinedAreaData::pathChanged, this, + &GeneratorBase::generatorChanged); + connect(this->distance(), &Fact::rawValueChanged, this, + &GeneratorBase::generatorChanged); + connect(this->alpha(), &Fact::rawValueChanged, this, + &GeneratorBase::generatorChanged); + connect(this->minLength(), &Fact::rawValueChanged, this, + &GeneratorBase::generatorChanged); this->_connectionsEstablished = false; } } diff --git a/src/Wima/WimaPlanData.cc b/src/Wima/WimaPlanData.cc index 139a1d155..11c55862d 100644 --- a/src/Wima/WimaPlanData.cc +++ b/src/Wima/WimaPlanData.cc @@ -50,6 +50,40 @@ void WimaPlanData::set(const WimaMeasurementAreaData &areaData) { } } +void WimaPlanData::set(const WimaJoinedArea &areaData) { + if (_joinedArea != areaData) { + _joinedArea = areaData; + emit joinedAreaChanged(); + } +} + +void WimaPlanData::set(const WimaServiceArea &areaData) { + if (_serviceArea != areaData) { + _serviceArea = areaData; + emit serviceAreaChanged(); + } +} + +void WimaPlanData::set(const WimaCorridor &areaData) { + if (_corridor != areaData) { + _corridor = areaData; + emit corridorChanged(); + } +} + +void WimaPlanData::set(const WimaMeasurementArea &areaData) { + if (_measurementArea != areaData) { + _measurementArea = areaData; + emit measurementAreaChanged(); + + if (_measurementArea.coordinateList().size() > 0) { + setOrigin(_measurementArea.coordinateList().first()); + } else { + setOrigin(QGeoCoordinate()); + } + } +} + void WimaPlanData::clear() { *this = WimaPlanData(); } QGeoCoordinate WimaPlanData::origin() { return _origin; } diff --git a/src/Wima/WimaPlanData.h b/src/Wima/WimaPlanData.h index bed16c985..3b2445b08 100644 --- a/src/Wima/WimaPlanData.h +++ b/src/Wima/WimaPlanData.h @@ -22,6 +22,11 @@ public: void set(const WimaServiceAreaData &areaData); void set(const WimaCorridorData &areaData); void set(const WimaMeasurementAreaData &areaData); + + void set(const WimaJoinedArea &areaData); + void set(const WimaServiceArea &areaData); + void set(const WimaCorridor &areaData); + void set(const WimaMeasurementArea &areaData); void clear(); const WimaJoinedAreaData &joinedArea() const; diff --git a/src/Wima/WimaPlaner.cc b/src/Wima/WimaPlaner.cc index a68f97406..3d9dd4c75 100644 --- a/src/Wima/WimaPlaner.cc +++ b/src/Wima/WimaPlaner.cc @@ -38,9 +38,7 @@ const char *WimaPlaner::missionItemsName = "MissionItems"; WimaPlaner::WimaPlaner(QObject *parent) : QObject(parent), _masterController(nullptr), _missionController(nullptr), - _currentAreaIndex(-1), _copyMAreaToSurvey(true), _copySAreaToSurvey(true), - _corridorChanged(true), _joinedArea(this), _arrivalPathLength(0), - _returnPathLength(0), _survey(nullptr), _surveyChanged(true), + _currentAreaIndex(-1), _joinedArea(this), _survey(nullptr), _synchronized(false), _nemoInterface(this), _stateMachine(new StateMachine), _areasMonitored(false), _missionControllerMonitored(false), _progressLocked(false) { @@ -364,22 +362,7 @@ void WimaPlaner::_update() { &WimaPlaner::CSDestroyedHandler); } - // update survey area - disconnect(_survey, &CircularSurvey::calculatingChanged, this, - &WimaPlaner::CSCalculatingChangedHandler); - - WimaPlanData planData; - if (!toPlanData(planData)) { - qCWarning(WimaPlanerLog) << "not able to create plan data."; - return; - } - _survey->setPlanData(planData); - - connect(_survey, &CircularSurvey::calculatingChanged, this, - &WimaPlaner::CSCalculatingChangedHandler); - - // Folloing statement just for completeness. - this->_stateMachine->updateState(EVENT::SURVEY_UPDATE_TRIGGERED); + (void)toPlanData(this->_survey->planData()); } break; // STATE::NEEDS_SURVEY_UPDATE case STATE::WAITING_FOR_SURVEY_UPDATE: { @@ -447,7 +430,7 @@ void WimaPlaner::_update() { .data()); return; } - _arrivalPathLength = path.size() - 1; + for (int i = 1; i < path.count() - 1; i++) { (void)_missionController->insertSimpleMissionItem( path[i], missionItems->count() - 1); @@ -465,8 +448,7 @@ void WimaPlaner::_update() { .data()); return; } - _returnPathLength = - path.size() - 1; // -1: fist item is last measurement point + for (int i = 1; i < path.count() - 1; i++) { (void)_missionController->insertSimpleMissionItem( path[i], missionItems->count()); @@ -955,13 +937,11 @@ void WimaPlaner::setInteractive() { * \sa WimaController, WimaPlanData */ bool WimaPlaner::toPlanData(WimaPlanData &planData) { - - // store areas - planData.set(WimaMeasurementAreaData(_measurementArea)); - planData.set(WimaServiceAreaData(_serviceArea)); - planData.set(WimaCorridorData(_corridor)); - planData.set(WimaJoinedAreaData(_joinedArea)); - return true; + planData.set(_measurementArea); + planData.set(_serviceArea); + planData.set(_corridor); + planData.set(_joinedArea); + return planData.isValid(); } #ifndef NDEBUG diff --git a/src/Wima/WimaPlaner.h b/src/Wima/WimaPlaner.h index 2682bc95e..f6e786681 100644 --- a/src/Wima/WimaPlaner.h +++ b/src/Wima/WimaPlaner.h @@ -172,27 +172,13 @@ private: int _currentAreaIndex; QString _currentFile; - bool _joinedAreaValid; WimaMeasurementArea _measurementArea; - bool _copyMAreaToSurvey; WimaServiceArea _serviceArea; - bool _copySAreaToSurvey; WimaCorridor _corridor; - bool _corridorChanged; - // contains all visible areas - QmlObjectListModel _visualItems; - // joined area fromed by _measurementArea, _serviceArea, _corridor WimaJoinedArea _joinedArea; - // path from takeoff to first measurement point - unsigned long _arrivalPathLength; - // path from last measurement point to land - unsigned long _returnPathLength; + QmlObjectListModel _visualItems; // all areas CircularSurvey *_survey; - bool _surveyChanged; - // sync stuff - bool _synchronized; // true if planData is synchronized with - // wimaController #ifndef NDEBUG QTimer _autoLoadTimer; // timer to auto load mission after some time, prevents @@ -206,4 +192,6 @@ private: bool _areasMonitored; bool _missionControllerMonitored; bool _progressLocked; + bool _synchronized; // true if planData is synchronized with + // wimaController }; -- 2.22.0