diff --git a/src/MissionManager/FixedWingLandingComplexItem.cc b/src/MissionManager/FixedWingLandingComplexItem.cc index b5dcf4a84dcb445ddbfb279aaa7ec7aca62e3fad..753213ddb131e4f87a03b4bf50bc47375ec709ab 100644 --- a/src/MissionManager/FixedWingLandingComplexItem.cc +++ b/src/MissionManager/FixedWingLandingComplexItem.cc @@ -90,6 +90,9 @@ FixedWingLandingComplexItem::FixedWingLandingComplexItem(Vehicle* vehicle, QObje connect(this, &FixedWingLandingComplexItem::loiterClockwiseChanged, this, &FixedWingLandingComplexItem::_setDirty); connect(this, &FixedWingLandingComplexItem::loiterAltitudeRelativeChanged, this, &FixedWingLandingComplexItem::_setDirty); connect(this, &FixedWingLandingComplexItem::landingAltitudeRelativeChanged, this, &FixedWingLandingComplexItem::_setDirty); + + connect(this, &FixedWingLandingComplexItem::loiterAltitudeRelativeChanged, this, &FixedWingLandingComplexItem::coordinateHasRelativeAltitudeChanged); + connect(this, &FixedWingLandingComplexItem::landingAltitudeRelativeChanged, this, &FixedWingLandingComplexItem::exitCoordinateHasRelativeAltitudeChanged); } int FixedWingLandingComplexItem::lastSequenceNumber(void) const @@ -409,6 +412,7 @@ void FixedWingLandingComplexItem::_recalcFromRadiusChange(void) double angleLoiterToTangent = qRadiansToDegrees(qAsin(radius/landToLoiterDistance)) * (_loiterClockwise ? -1 : 1); _loiterCoordinate = _landingCoordinate.atDistanceAndAzimuth(landToLoiterDistance, heading + 180 + angleLoiterToTangent); + _loiterCoordinate.setAltitude(_loiterAltitudeFact.rawValue().toDouble()); _ignoreRecalcSignals = true; emit loiterCoordinateChanged(_loiterCoordinate); @@ -446,6 +450,7 @@ void FixedWingLandingComplexItem::_recalcFromHeadingAndDistanceChange(void) // Use those values to get the new loiter point which takes heading into acount _loiterCoordinate = _landingCoordinate.atDistanceAndAzimuth(loiterDistance, heading + 180 + loiterAzimuth); + _loiterCoordinate.setAltitude(_loiterAltitudeFact.rawValue().toDouble()); _ignoreRecalcSignals = true; emit loiterTangentCoordinateChanged(_loiterTangentCoordinate); @@ -509,11 +514,14 @@ void FixedWingLandingComplexItem::_recalcFromCoordinateChange(void) void FixedWingLandingComplexItem::_updateLoiterCoodinateAltitudeFromFact(void) { _loiterCoordinate.setAltitude(_loiterAltitudeFact.rawValue().toDouble()); + emit loiterCoordinateChanged(_loiterCoordinate); + emit coordinateChanged(_loiterCoordinate); } void FixedWingLandingComplexItem::_updateLandingCoodinateAltitudeFromFact(void) { _landingCoordinate.setAltitude(_landingAltitudeFact.rawValue().toDouble()); + emit landingCoordinateChanged(_landingCoordinate); } void FixedWingLandingComplexItem::_setDirty(void) diff --git a/src/MissionManager/FixedWingLandingComplexItem.h b/src/MissionManager/FixedWingLandingComplexItem.h index 4fabf994b7483b36e422490ac04cf8d5d7cfb361..f723ad5831f1df8edb78b6ee78c6e62b71d63f33 100644 --- a/src/MissionManager/FixedWingLandingComplexItem.h +++ b/src/MissionManager/FixedWingLandingComplexItem.h @@ -78,9 +78,9 @@ public: void appendMissionItems (QList& items, QObject* missionItemParent) final; void applyNewAltitude (double newAltitude) final; - bool coordinateHasRelativeAltitude (void) const final { return true; } - bool exitCoordinateHasRelativeAltitude (void) const final { return true; } - bool exitCoordinateSameAsEntry (void) const final { return true; } + bool coordinateHasRelativeAltitude (void) const final { return _loiterAltitudeRelative; } + bool exitCoordinateHasRelativeAltitude (void) const final { return _landingAltitudeRelative; } + bool exitCoordinateSameAsEntry (void) const final { return false; } void setDirty (bool dirty) final; void setCoordinate (const QGeoCoordinate& coordinate) final { setLoiterCoordinate(coordinate); }