diff --git a/src/Wima/CircularSurvey.cc b/src/Wima/CircularSurvey.cc index bce2505828c5e0efa5fe5ddf433594f2f25197b1..19182eb41a9947d5b3bcfc6331822c18eeb4d87e 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 aa24ef999f25a1dc95eb9aba9f4bcb55886b3454..de7253a2b29e1982b281c8d545ae5d751c951ab2 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 669fc53f6b1d34f31797fac505d3b581c19a6e61..129e0e8e681858f1030517dd85cc8008a107f48e 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 19d7da6d76aa4c483795901fca2868b2c454ed4a..4a81934750c4eb232f4a05fad2f7cadc164fba2b 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 139a1d15553c2627fb3731df91410488a8d688c3..11c55862df727c2b1283a622e57fee2725c50c69 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 bed16c9852d8ce6f0cdfa2416d385972dabd7858..3b2445b0835056ef8c4479e5c9d8c6a87382918a 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 a68f97406c51502bd2885c6766b46b460f00e3c1..3d9dd4c753998d7b83561ff8f4e7ec9798ef0168 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 2682bc95e2cbb681dd6d44b560b43b425fb40941..f6e786681e1a33fb159dfae5ffff5ba90fcb0a73 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 };