From 23524e5ca44d5e240ccaeb8a5d12fc585133fe49 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Tue, 29 Dec 2020 10:21:11 -0800 Subject: [PATCH] Fix bugs relating to incorrect complex item min/max amsl alt (#9281) --- src/MissionManager/ComplexMissionItem.h | 4 +-- src/MissionManager/MissionSettingsItem.cc | 6 +--- src/MissionManager/StructureScanComplexItem.cc | 28 ++++++---------- src/MissionManager/StructureScanComplexItem.h | 2 -- src/MissionManager/TransectStyleComplexItem.cc | 45 +++++++++++++++++++------- src/MissionManager/TransectStyleComplexItem.h | 4 +-- 6 files changed, 47 insertions(+), 42 deletions(-) diff --git a/src/MissionManager/ComplexMissionItem.h b/src/MissionManager/ComplexMissionItem.h index 4a7f98b..02cfdff 100644 --- a/src/MissionManager/ComplexMissionItem.h +++ b/src/MissionManager/ComplexMissionItem.h @@ -107,8 +107,8 @@ signals: void greatestDistanceToChanged (void); void presetNamesChanged (void); void isIncompleteChanged (void); - void minAMSLAltitudeChanged (double minAMSLAltitude); - void maxAMSLAltitudeChanged (double maxAMSLAltitude); + void minAMSLAltitudeChanged (void); + void maxAMSLAltitudeChanged (void); void terrainCollisionChanged (bool terrainCollision); protected slots: diff --git a/src/MissionManager/MissionSettingsItem.cc b/src/MissionManager/MissionSettingsItem.cc index 616c093..bc1c9c0 100644 --- a/src/MissionManager/MissionSettingsItem.cc +++ b/src/MissionManager/MissionSettingsItem.cc @@ -114,12 +114,8 @@ void MissionSettingsItem::setSequenceNumber(int sequenceNumber) } } -bool MissionSettingsItem::load(const QJsonObject& complexObject, int sequenceNumber, QString& errorString) +bool MissionSettingsItem::load(const QJsonObject& /*complexObject*/, int /*sequenceNumber*/, QString& /*errorString*/) { - Q_UNUSED(complexObject); - Q_UNUSED(sequenceNumber); - Q_UNUSED(errorString); - return true; } diff --git a/src/MissionManager/StructureScanComplexItem.cc b/src/MissionManager/StructureScanComplexItem.cc index be21123..34c4e11 100644 --- a/src/MissionManager/StructureScanComplexItem.cc +++ b/src/MissionManager/StructureScanComplexItem.cc @@ -99,14 +99,14 @@ StructureScanComplexItem::StructureScanComplexItem(PlanMasterController* masterC connect(&_entranceAltFact, &Fact::valueChanged, this, &StructureScanComplexItem::_amslEntryAltChanged); connect(this, &StructureScanComplexItem::amslEntryAltChanged, this, &StructureScanComplexItem::amslExitAltChanged); - connect(_missionController, &MissionController::plannedHomePositionChanged, this, &StructureScanComplexItem::_minAMSLAltChanged); - connect(_missionController, &MissionController::plannedHomePositionChanged, this, &StructureScanComplexItem::_maxAMSLAltChanged); - connect(this, &StructureScanComplexItem::topFlightAltChanged, this, &StructureScanComplexItem::_minAMSLAltChanged); - connect(this, &StructureScanComplexItem::topFlightAltChanged, this, &StructureScanComplexItem::_maxAMSLAltChanged); - connect(this, &StructureScanComplexItem::bottomFlightAltChanged, this, &StructureScanComplexItem::_minAMSLAltChanged); - connect(this, &StructureScanComplexItem::bottomFlightAltChanged, this, &StructureScanComplexItem::_maxAMSLAltChanged); - connect(&_entranceAltFact, &Fact::valueChanged, this, &StructureScanComplexItem::_minAMSLAltChanged); - connect(&_entranceAltFact, &Fact::valueChanged, this, &StructureScanComplexItem::_maxAMSLAltChanged); + connect(_missionController, &MissionController::plannedHomePositionChanged, this, &StructureScanComplexItem::minAMSLAltitudeChanged); + connect(_missionController, &MissionController::plannedHomePositionChanged, this, &StructureScanComplexItem::maxAMSLAltitudeChanged); + connect(this, &StructureScanComplexItem::topFlightAltChanged, this, &StructureScanComplexItem::minAMSLAltitudeChanged); + connect(this, &StructureScanComplexItem::topFlightAltChanged, this, &StructureScanComplexItem::maxAMSLAltitudeChanged); + connect(this, &StructureScanComplexItem::bottomFlightAltChanged, this, &StructureScanComplexItem::minAMSLAltitudeChanged); + connect(this, &StructureScanComplexItem::bottomFlightAltChanged, this, &StructureScanComplexItem::maxAMSLAltitudeChanged); + connect(&_entranceAltFact, &Fact::valueChanged, this, &StructureScanComplexItem::minAMSLAltitudeChanged); + connect(&_entranceAltFact, &Fact::valueChanged, this, &StructureScanComplexItem::maxAMSLAltitudeChanged); connect(&_flightPolygon, &QGCMapPolygon::pathChanged, this, &StructureScanComplexItem::_updateFlightPathSegmentsSignal); connect(&_startFromTopFact, &Fact::valueChanged, this, &StructureScanComplexItem::_updateFlightPathSegmentsSignal); @@ -269,7 +269,7 @@ bool StructureScanComplexItem::load(const QJsonObject& complexObject, int sequen void StructureScanComplexItem::_flightPathChanged(void) { - // Calc bounding cube + // Calc bounding cubetopFlightAlt double north = 0.0; double south = 180.0; double east = 0.0; @@ -764,16 +764,6 @@ double StructureScanComplexItem::maxAMSLAltitude(void) const return maxAlt + _missionController->plannedHomePosition().altitude(); } -void StructureScanComplexItem::_minAMSLAltChanged(void) -{ - emit minAMSLAltitudeChanged(minAMSLAltitude()); -} - -void StructureScanComplexItem::_maxAMSLAltChanged(void) -{ - emit maxAMSLAltitudeChanged(maxAMSLAltitude()); -} - void StructureScanComplexItem::_segmentTerrainCollisionChanged(bool terrainCollision) { ComplexMissionItem::_segmentTerrainCollisionChanged(terrainCollision); diff --git a/src/MissionManager/StructureScanComplexItem.h b/src/MissionManager/StructureScanComplexItem.h index 0e83616..1c23845 100644 --- a/src/MissionManager/StructureScanComplexItem.h +++ b/src/MissionManager/StructureScanComplexItem.h @@ -134,8 +134,6 @@ private slots: void _recalcScanDistance (void); void _updateWizardMode (void); void _updateFlightPathSegmentsDontCallDirectly (void); - void _minAMSLAltChanged (void); - void _maxAMSLAltChanged (void); private: void _setCameraShots (int cameraShots); diff --git a/src/MissionManager/TransectStyleComplexItem.cc b/src/MissionManager/TransectStyleComplexItem.cc index 97be3c4..e83f8a2 100644 --- a/src/MissionManager/TransectStyleComplexItem.cc +++ b/src/MissionManager/TransectStyleComplexItem.cc @@ -118,6 +118,13 @@ TransectStyleComplexItem::TransectStyleComplexItem(PlanMasterController* masterC connect(_missionController, &MissionController::plannedHomePositionChanged, this, &TransectStyleComplexItem::_amslEntryAltChanged); connect(_missionController, &MissionController::plannedHomePositionChanged, this, &TransectStyleComplexItem::_amslExitAltChanged); + connect(_missionController, &MissionController::plannedHomePositionChanged, this, &TransectStyleComplexItem::minAMSLAltitudeChanged); + connect(_missionController, &MissionController::plannedHomePositionChanged, this, &TransectStyleComplexItem::maxAMSLAltitudeChanged); + connect(_cameraCalc.distanceToSurface(), &Fact::rawValueChanged, this, &TransectStyleComplexItem::minAMSLAltitudeChanged); + connect(_cameraCalc.distanceToSurface(), &Fact::rawValueChanged, this, &TransectStyleComplexItem::maxAMSLAltitudeChanged); + connect(&_cameraCalc, &CameraCalc::distanceToSurfaceRelativeChanged, this, &TransectStyleComplexItem::minAMSLAltitudeChanged); + connect(&_cameraCalc, &CameraCalc::distanceToSurfaceRelativeChanged, this, &TransectStyleComplexItem::maxAMSLAltitudeChanged); + connect(&_surveyAreaPolygon, &QGCMapPolygon::isValidChanged, this, &TransectStyleComplexItem::readyForSaveStateChanged); setDirty(false); @@ -305,13 +312,11 @@ bool TransectStyleComplexItem::_load(const QJsonObject& complexObject, bool forP } } } - } else if (!forPresets) { - _minAMSLAltitude = _maxAMSLAltitude = _cameraCalc.distanceToSurface()->rawValue().toDouble() + (_cameraCalc.distanceToSurfaceRelative() ? _missionController->plannedHomePosition().altitude() : 0); } if (!forPresets) { - emit minAMSLAltitudeChanged(_minAMSLAltitude); - emit maxAMSLAltitudeChanged(_maxAMSLAltitude); + emit minAMSLAltitudeChanged(); + emit maxAMSLAltitudeChanged(); _amslEntryAltChanged(); _amslExitAltChanged(); emit _updateFlightPathSegmentsSignal(); @@ -395,16 +400,14 @@ void TransectStyleComplexItem::_rebuildTransects(void) _rebuildTransectsPhase1(); + _minAMSLAltitude = _maxAMSLAltitude = qQNaN(); + if (_followTerrain) { // Query the terrain data. Once available terrain heights will be calculated _queryTransectsPathHeightInfo(); - // We won't know min/max till were done - _minAMSLAltitude = _maxAMSLAltitude = qQNaN(); } else { // Not following terrain so we can build the flight path now _buildRawFlightPath(); - double requestedAltitude = _cameraCalc.distanceToSurface()->rawValue().toDouble(); - _minAMSLAltitude = _maxAMSLAltitude = requestedAltitude + (_cameraCalc.distanceToSurfaceRelative() ? _missionController->plannedHomePosition().altitude() : 0); } // Calc bounding cube @@ -452,8 +455,8 @@ void TransectStyleComplexItem::_rebuildTransects(void) emit timeBetweenShotsChanged(); emit additionalTimeDelayChanged(); - emit minAMSLAltitudeChanged(_minAMSLAltitude); - emit maxAMSLAltitudeChanged(_maxAMSLAltitude); + emit minAMSLAltitudeChanged(); + emit maxAMSLAltitudeChanged(); emit _updateFlightPathSegmentsSignal(); _amslEntryAltChanged(); @@ -635,8 +638,8 @@ void TransectStyleComplexItem::_adjustTransectsForTerrain(void) _minAMSLAltitude = std::fmin(_minAMSLAltitude, coordInfo.coord.altitude()); _maxAMSLAltitude = std::fmax(_maxAMSLAltitude, coordInfo.coord.altitude()); } - emit minAMSLAltitudeChanged(_minAMSLAltitude); - emit maxAMSLAltitudeChanged(_maxAMSLAltitude); + emit minAMSLAltitudeChanged(); + emit maxAMSLAltitudeChanged(); } } @@ -1216,3 +1219,21 @@ void TransectStyleComplexItem::applyNewAltitude(double newAltitude) _cameraCalc.distanceToSurface()->setRawValue(newAltitude); _cameraCalc.setDistanceToSurfaceRelative(true); } + +double TransectStyleComplexItem::minAMSLAltitude(void) const +{ + if (_followTerrain) { + return _minAMSLAltitude; + } else { + return _cameraCalc.distanceToSurface()->rawValue().toDouble() + (_cameraCalc.distanceToSurfaceRelative() ? _missionController->plannedHomePosition().altitude() : 0); + } +} + +double TransectStyleComplexItem::maxAMSLAltitude(void) const +{ + if (_followTerrain) { + return _maxAMSLAltitude; + } else { + return _cameraCalc.distanceToSurface()->rawValue().toDouble() + (_cameraCalc.distanceToSurfaceRelative() ? _missionController->plannedHomePosition().altitude() : 0); + } +} diff --git a/src/MissionManager/TransectStyleComplexItem.h b/src/MissionManager/TransectStyleComplexItem.h index 6fc0ff1..b245b6d 100644 --- a/src/MissionManager/TransectStyleComplexItem.h +++ b/src/MissionManager/TransectStyleComplexItem.h @@ -111,8 +111,8 @@ public: void setSequenceNumber (int sequenceNumber) final; double amslEntryAlt (void) const final; double amslExitAlt (void) const final; - double minAMSLAltitude (void) const final { return _minAMSLAltitude; } - double maxAMSLAltitude (void) const final { return _maxAMSLAltitude; } + double minAMSLAltitude (void) const final; + double maxAMSLAltitude (void) const final; static const char* turnAroundDistanceName; static const char* turnAroundDistanceMultiRotorName;