From 566167ab86325458d096678bb4f611d37d3f0cf3 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Sun, 14 May 2017 15:54:27 -0700 Subject: [PATCH] Cubic relative altitude slider --- src/FlightDisplay/GuidedAltitudeSlider.qml | 35 +++++++++++++++------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/FlightDisplay/GuidedAltitudeSlider.qml b/src/FlightDisplay/GuidedAltitudeSlider.qml index feafee1a0..a55c13077 100644 --- a/src/FlightDisplay/GuidedAltitudeSlider.qml +++ b/src/FlightDisplay/GuidedAltitudeSlider.qml @@ -21,18 +21,27 @@ Rectangle { readonly property real _maxAlt: 121.92 // 400 feet readonly property real _minAlt: 3 - property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle - property real _vehicleAltitude: _activeVehicle ? _activeVehicle.altitudeRelative.rawValue : 0 - property bool _fixedWing: _activeVehicle ? _activeVehicle.fixedWing : false - property real _sliderMaxAlt: _fixedWing ? _maxAlt : Math.min(_vehicleAltitude + 10, _maxAlt) - property real _sliderMinAlt: _fixedWing ? _minAlt : Math.max(_vehicleAltitude - 10, _minAlt) + property var _guidedSettings: QGroundControl.settingsManager.guidedSettings + property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle + property real _vehicleAltitude: _activeVehicle ? _activeVehicle.altitudeRelative.rawValue : 0 + property bool _fixedWing: _activeVehicle ? _activeVehicle.fixedWing : false + property real _sliderMaxAlt: _fixedWing ? _guidedSettings.fixedWingMaximumAltitude.value : _guidedSettings.vehicleMaximumAltitude.value + property real _sliderMinAlt: _fixedWing ? _guidedSettings.fixedWingMinimumAltitude.value : _guidedSettings.vehicleMinimumAltitude.value function reset() { - altSlider.value = Math.min(Math.max(altSlider.minimumValue, 0), altSlider.maximumValue) + altSlider.value = 0 } function getValue() { - return altSlider.value + return altField.newAltitude - _vehicleAltitude + } + + function log10(value) { + if (value === 0) { + return 0 + } else { + return Math.log(value) / Math.LN10 + } } Column { @@ -55,7 +64,11 @@ Rectangle { anchors.horizontalCenter: parent.horizontalCenter text: Math.abs(newAltitude.toFixed(1)) + " " + QGroundControl.appSettingsDistanceUnitsString - property real newAltitude: QGroundControl.metersToAppSettingsDistanceUnits(_root._vehicleAltitude + altSlider.value).toFixed(1) + property real altGainRange: Math.max(_sliderMaxAlt - _vehicleAltitude, 0) + property real altLossRange: Math.max(_vehicleAltitude - _sliderMinAlt, 0) + property real altExp: Math.pow(altSlider.value, 3) + property real altLossGain: altExp * (altSlider.value > 0 ? altGainRange : altLossRange) + property real newAltitude: _vehicleAltitude + altLossGain // QGroundControl.metersToAppSettingsDistanceUnits(_root._vehicleAltitude + altSlider.value).toFixed(1) } } @@ -67,9 +80,9 @@ Rectangle { anchors.left: parent.left anchors.right: parent.right orientation: Qt.Vertical - minimumValue: _root._sliderMinAlt - _root._vehicleAltitude - maximumValue: _root._sliderMaxAlt - _root._vehicleAltitude - zeroCentered: true + minimumValue: -1 + maximumValue: 1 + zeroCentered: true rotation: 180 // We want slide up to be positive values -- 2.22.0