From 72b01b0d4712d1519468f3be6847ef000ee7479d Mon Sep 17 00:00:00 2001 From: dominik-korsa <29484605+dominik-korsa@users.noreply.github.com> Date: Wed, 23 Jul 2025 00:15:10 +0200 Subject: [PATCH] Start elevation legend at 0 --- src/components/GradientsManager.js | 12 +++++++----- .../track-color-mode/TrackColorModeLegend.js | 12 +++++++++--- src/helpers/constants.js | 5 ++++- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/components/GradientsManager.js b/src/components/GradientsManager.js index c8cfd3d..066dd71 100644 --- a/src/components/GradientsManager.js +++ b/src/components/GradientsManager.js @@ -7,11 +7,12 @@ function getMinMax(trackColorMode, scenery) { if (!scenery) return null; if (scenery.trackElevationBounds.minY > scenery.trackElevationBounds.maxY) return null; - // Ensure min and max values are even so that the min, max and middle values are integers - const min = Math.floor(scenery.trackElevationBounds.minY/2)*2; - let max = Math.ceil((scenery.trackElevationBounds.maxY)/2)*2; - // Make sure max > min even on flat sceneries, otherwise `diff` calculation would result in division by 0 - if (max <= min) max = min + 2; + const min = scenery.trackElevationBounds.minY; + // Make sure diff > 0 even on flat sceneries + let diff = Math.max(scenery.trackElevationBounds.maxY - scenery.trackElevationBounds.minY, 1); + // Ensure `diff` is even so that the min, max and middle legend values are integers + diff = Math.ceil(diff / 2)*2; + const max = min + diff; return [min, max]; } @@ -38,6 +39,7 @@ function createGradientSettings(trackColorMode, scenery, def) { legendMin: minValue, legendMax: maxValue, unit: gradient.unit, + startLegendAt0: gradient.startLegendAt0 ?? false, }; } return null; diff --git a/src/components/sidemenu/track-color-mode/TrackColorModeLegend.js b/src/components/sidemenu/track-color-mode/TrackColorModeLegend.js index 233b379..69289f9 100644 --- a/src/components/sidemenu/track-color-mode/TrackColorModeLegend.js +++ b/src/components/sidemenu/track-color-mode/TrackColorModeLegend.js @@ -50,15 +50,21 @@ function LegendGradient(props) { const to = MiscHelper.getTrackGradientColor(gradientDef, gradientDef.legendMax); const gradientStyle = `linear-gradient(to right, ${from}, ${to})`; - const midVal = (gradientDef.legendMin + gradientDef.legendMax) / 2; + let { legendMin, legendMax } = gradientDef; + if (gradientDef.startLegendAt0) { + legendMax -= legendMin; + legendMin = 0; + } + + const midVal = (legendMin + legendMax) / 2; return (
- {gradientDef.legendMin} {gradientDef.unit} + {legendMin} {gradientDef.unit} {midVal} {gradientDef.unit} - {gradientDef.legendMax} {gradientDef.unit} + {legendMax} {gradientDef.unit}
); diff --git a/src/helpers/constants.js b/src/helpers/constants.js index 57528f5..4e4830c 100644 --- a/src/helpers/constants.js +++ b/src/helpers/constants.js @@ -154,6 +154,7 @@ const Constants = { legendMin: 0, legendMax: 10, unit: '‰', + startLegendAt0: false, } }, 'max-speed': { @@ -165,6 +166,7 @@ const Constants = { legendMin: 0, legendMax: 170, unit: 'km/h', + startLegendAt0: false, }, options: { 'derail': ['#f22', 'Derail track'], @@ -178,8 +180,9 @@ const Constants = { min: [0, 190, 0], max: [255, 22, 22], defaultMin: 0, - defaultMax: 1, + defaultMax: 2, unit: 'm', + startLegendAt0: true, }, }, }