diff --git a/src/MissionManager/CorridorScanComplexItem.cc b/src/MissionManager/CorridorScanComplexItem.cc index 4f905b5d5ff..d0b829bc2e8 100644 --- a/src/MissionManager/CorridorScanComplexItem.cc +++ b/src/MissionManager/CorridorScanComplexItem.cc @@ -19,6 +19,10 @@ CorridorScanComplexItem::CorridorScanComplexItem(PlanMasterController* masterCon { _editorQml = "qrc:/qml/QGroundControl/PlanView/CorridorScanEditor.qml"; + // specifiesCoordinate() depends on _corridorPolyline.count(), so cache the + // initial value before any signal connections fire to keep the cache in sync. + _specifiesCoordinate = specifiesCoordinate(); + // We override the altitude to the mission default if (_cameraCalc.isManualCamera() || !_cameraCalc.valueSetIsDistance()->rawValue().toBool()) { _cameraCalc.distanceToSurface()->setRawValue(SettingsManager::instance()->appSettings()->defaultMissionItemAltitude()->rawValue()); @@ -211,6 +215,16 @@ void CorridorScanComplexItem::rotateEntryPoint(void) void CorridorScanComplexItem::_rebuildCorridorPolygon(void) { + // specifiesCoordinate() flips when the polyline crosses the 2-vertex threshold. + // MissionController only re-evaluates waypoint connector lines on this signal, + // so emit it here to link the corridor entry to the previous waypoint once the + // corridor polyline becomes valid. + const bool specifiesCoord = specifiesCoordinate(); + if (specifiesCoord != _specifiesCoordinate) { + _specifiesCoordinate = specifiesCoord; + emit specifiesCoordinateChanged(); + } + if (_corridorPolyline.count() < 2) { _surveyAreaPolygon.clear(); return; diff --git a/src/MissionManager/CorridorScanComplexItem.h b/src/MissionManager/CorridorScanComplexItem.h index 5d25fd34715..3e46446f10e 100644 --- a/src/MissionManager/CorridorScanComplexItem.h +++ b/src/MissionManager/CorridorScanComplexItem.h @@ -82,5 +82,9 @@ private slots: QMap _metaDataMap; SettingsFact _corridorWidthFact; + // Cache of the last specifiesCoordinate() value so we can emit + // specifiesCoordinateChanged when the polyline crosses the 2-vertex threshold. + bool _specifiesCoordinate = false; + static constexpr const char* _jsonEntryPointKey = "EntryPoint"; };