diff --git a/RutasDBUS/Components/Pages/PlanificadorRutas.Estado.cs b/RutasDBUS/Components/Pages/PlanificadorRutas.Estado.cs
index c488c98..e666dd5 100644
--- a/RutasDBUS/Components/Pages/PlanificadorRutas.Estado.cs
+++ b/RutasDBUS/Components/Pages/PlanificadorRutas.Estado.cs
@@ -53,6 +53,8 @@ public partial class PlanificadorRutas : ComponentBase
private const double PendienteMaximaEsfuerzoPorcentaje = 80.0;
private const double FactorEquilibradoAndarBusPorDefecto = 6.0;
private const double UmbralPendienteSubidaRutaPorDefecto = 2.0;
+ private const double UmbralPendienteSubidaMediaRutaPorDefecto = 5.0;
+ private const double UmbralPendienteSubidaFuerteRutaPorDefecto = 10.0;
private const double UmbralPendienteBajadaRutaPorDefecto = 5.0;
private const double UmbralAlturaAlertaPendienteRutaMetrosPorDefecto = 6.0;
private const double MetrosPorPiso = 3.0;
@@ -368,6 +370,8 @@ public partial class PlanificadorRutas : ComponentBase
private bool _mostrarConfiguracionPendientesRuta = false;
private bool _panelRutasMovilContraido = false;
private double _umbralPendienteSubidaRuta = UmbralPendienteSubidaRutaPorDefecto;
+ private double _umbralPendienteSubidaMediaRuta = UmbralPendienteSubidaMediaRutaPorDefecto;
+ private double _umbralPendienteSubidaFuerteRuta = UmbralPendienteSubidaFuerteRutaPorDefecto;
private double _umbralPendienteBajadaRuta = UmbralPendienteBajadaRutaPorDefecto;
private double _umbralAlturaAlertaPendienteRutaMetros = UmbralAlturaAlertaPendienteRutaMetrosPorDefecto;
private double _alturaPendientePositivaSignificativaRutaMetros = 0.0;
diff --git a/RutasDBUS/Components/Pages/PlanificadorRutas.Itinerarios.cs b/RutasDBUS/Components/Pages/PlanificadorRutas.Itinerarios.cs
index 5793427..33483b6 100644
--- a/RutasDBUS/Components/Pages/PlanificadorRutas.Itinerarios.cs
+++ b/RutasDBUS/Components/Pages/PlanificadorRutas.Itinerarios.cs
@@ -1202,7 +1202,7 @@ public partial class PlanificadorRutas : ComponentBase
private bool _elevPopupMinimizado = false;
- private const string _versionApp = "(v-20260827b)";
+ private const string _versionApp = "(v-20260828a)";
private double? _paradaElevIdee;
diff --git a/RutasDBUS/Components/Pages/PlanificadorRutas.Persistencia.cs b/RutasDBUS/Components/Pages/PlanificadorRutas.Persistencia.cs
index e94e55b..99988e1 100644
--- a/RutasDBUS/Components/Pages/PlanificadorRutas.Persistencia.cs
+++ b/RutasDBUS/Components/Pages/PlanificadorRutas.Persistencia.cs
@@ -49,6 +49,8 @@ public partial class PlanificadorRutas
public int? VersionFuenteElevacion { get; set; }
public int? VersionPendientes { get; set; }
public double? UmbralPendienteSubidaRuta { get; set; }
+ public double? UmbralPendienteSubidaMediaRuta { get; set; }
+ public double? UmbralPendienteSubidaFuerteRuta { get; set; }
public double? UmbralPendienteBajadaRuta { get; set; }
public double? UmbralAlturaAlertaPendienteRutaMetros { get; set; }
// Compatibilidad con configuraciones guardadas cuando el umbral se expresaba en pisos.
@@ -167,6 +169,8 @@ public partial class PlanificadorRutas
VersionFuenteElevacion = VersionPersistenciaFuenteElevacion,
VersionPendientes = VersionPersistenciaPendientes,
UmbralPendienteSubidaRuta = _umbralPendienteSubidaRuta,
+ UmbralPendienteSubidaMediaRuta = _umbralPendienteSubidaMediaRuta,
+ UmbralPendienteSubidaFuerteRuta = _umbralPendienteSubidaFuerteRuta,
UmbralPendienteBajadaRuta = _umbralPendienteBajadaRuta,
UmbralAlturaAlertaPendienteRutaMetros = _umbralAlturaAlertaPendienteRutaMetros,
VelocidadPieKmH = _velocidadPieKmH,
@@ -262,6 +266,17 @@ public partial class PlanificadorRutas
_umbralPendienteSubidaRuta = Math.Abs(umbralSubida - 3.0) < 0.0001
? UmbralPendienteSubidaRutaPorDefecto
: NormalizarUmbralPendienteRuta(umbralSubida);
+ _umbralPendienteSubidaMediaRuta =
+ config.UmbralPendienteSubidaMediaRuta is { } umbralSubidaMedia &&
+ double.IsFinite(umbralSubidaMedia)
+ ? NormalizarUmbralPendienteRuta(umbralSubidaMedia)
+ : UmbralPendienteSubidaMediaRutaPorDefecto;
+ _umbralPendienteSubidaFuerteRuta =
+ config.UmbralPendienteSubidaFuerteRuta is { } umbralSubidaFuerte &&
+ double.IsFinite(umbralSubidaFuerte)
+ ? NormalizarUmbralPendienteRuta(umbralSubidaFuerte)
+ : UmbralPendienteSubidaFuerteRutaPorDefecto;
+ NormalizarOrdenUmbralesColorSubidaRuta();
if (config.UmbralPendienteBajadaRuta is { } umbralBajada && double.IsFinite(umbralBajada))
_umbralPendienteBajadaRuta =
Math.Abs(umbralBajada - 3.0) < 0.0001 ||
@@ -391,6 +406,8 @@ public partial class PlanificadorRutas
_mostrarElevacionesRutaConfiguracion = true;
_fuenteElevacionCalculo = FuenteElevacionLocal5;
_umbralPendienteSubidaRuta = UmbralPendienteSubidaRutaPorDefecto;
+ _umbralPendienteSubidaMediaRuta = UmbralPendienteSubidaMediaRutaPorDefecto;
+ _umbralPendienteSubidaFuerteRuta = UmbralPendienteSubidaFuerteRutaPorDefecto;
_umbralPendienteBajadaRuta = UmbralPendienteBajadaRutaPorDefecto;
_umbralAlturaAlertaPendienteRutaMetros = UmbralAlturaAlertaPendienteRutaMetrosPorDefecto;
_velocidadPieKmH = 3.6;
@@ -444,6 +461,8 @@ public partial class PlanificadorRutas
_mostrarElevacionesRutaConfiguracion = true;
_fuenteElevacionCalculo = FuenteElevacionLocal5;
_umbralPendienteSubidaRuta = UmbralPendienteSubidaRutaPorDefecto;
+ _umbralPendienteSubidaMediaRuta = UmbralPendienteSubidaMediaRutaPorDefecto;
+ _umbralPendienteSubidaFuerteRuta = UmbralPendienteSubidaFuerteRutaPorDefecto;
_umbralPendienteBajadaRuta = UmbralPendienteBajadaRutaPorDefecto;
_umbralAlturaAlertaPendienteRutaMetros = UmbralAlturaAlertaPendienteRutaMetrosPorDefecto;
_velocidadPieKmH = 3.6;
diff --git a/RutasDBUS/Components/Pages/PlanificadorRutas.Renderizado.cs b/RutasDBUS/Components/Pages/PlanificadorRutas.Renderizado.cs
index c10148b..35c9940 100644
--- a/RutasDBUS/Components/Pages/PlanificadorRutas.Renderizado.cs
+++ b/RutasDBUS/Components/Pages/PlanificadorRutas.Renderizado.cs
@@ -106,7 +106,10 @@ public partial class PlanificadorRutas : ComponentBase
var nuevo = ParseUmbralPendienteRuta(e.Value, actual);
if (esSubida)
+ {
_umbralPendienteSubidaRuta = nuevo;
+ NormalizarOrdenUmbralesColorSubidaRuta();
+ }
else
_umbralPendienteBajadaRuta = nuevo;
@@ -114,6 +117,23 @@ public partial class PlanificadorRutas : ComponentBase
StateHasChanged();
}
+ private async Task CambiarUmbralColorSubidaRutaAsync(ChangeEventArgs e, bool esFuerte)
+ {
+ var actual = esFuerte
+ ? _umbralPendienteSubidaFuerteRuta
+ : _umbralPendienteSubidaMediaRuta;
+ var nuevo = ParseUmbralPendienteRuta(e.Value, actual);
+
+ if (esFuerte)
+ _umbralPendienteSubidaFuerteRuta = nuevo;
+ else
+ _umbralPendienteSubidaMediaRuta = nuevo;
+
+ NormalizarOrdenUmbralesColorSubidaRuta();
+ await PersistirConfiguracionAsync();
+ StateHasChanged();
+ }
+
private async Task RecalcularRankingTrasCambioEsfuerzoPendienteAsync(bool forzarRepintado = false)
{
if (_opcionesRuta.Count == 0)
@@ -207,6 +227,23 @@ public partial class PlanificadorRutas : ComponentBase
? Math.Clamp(Math.Abs(valor), 0.0, 100.0)
: UmbralPendienteSubidaRutaPorDefecto;
+ private void NormalizarOrdenUmbralesColorSubidaRuta()
+ {
+ var umbralSubida = NormalizarUmbralPendienteRuta(_umbralPendienteSubidaRuta);
+ var umbralMedia = double.IsFinite(_umbralPendienteSubidaMediaRuta)
+ ? NormalizarUmbralPendienteRuta(_umbralPendienteSubidaMediaRuta)
+ : UmbralPendienteSubidaMediaRutaPorDefecto;
+ var umbralFuerte = double.IsFinite(_umbralPendienteSubidaFuerteRuta)
+ ? NormalizarUmbralPendienteRuta(_umbralPendienteSubidaFuerteRuta)
+ : UmbralPendienteSubidaFuerteRutaPorDefecto;
+
+ _umbralPendienteSubidaMediaRuta = Math.Clamp(umbralMedia, umbralSubida, 100.0);
+ _umbralPendienteSubidaFuerteRuta = Math.Clamp(
+ umbralFuerte,
+ _umbralPendienteSubidaMediaRuta,
+ 100.0);
+ }
+
private static double ParseUmbralAlturaAlertaPendienteRutaMetros(object? valor, double actual)
{
var texto = Convert.ToString(valor, CultureInfo.InvariantCulture)?.Replace(',', '.');
@@ -426,8 +463,23 @@ public partial class PlanificadorRutas : ComponentBase
var umbralSubida = NormalizarUmbralPendienteRuta(_umbralPendienteSubidaRuta);
var umbralBajada = NormalizarUmbralPendienteRuta(_umbralPendienteBajadaRuta);
+ var umbralSubidaMedia = Math.Clamp(
+ NormalizarUmbralPendienteRuta(_umbralPendienteSubidaMediaRuta),
+ umbralSubida,
+ 100.0);
+ var umbralSubidaFuerte = Math.Clamp(
+ NormalizarUmbralPendienteRuta(_umbralPendienteSubidaFuerteRuta),
+ umbralSubidaMedia,
+ 100.0);
+
+ if (pendientePorcentaje.Value >= umbralSubidaFuerte)
+ return ("subida-fuerte", "#000000");
+
+ if (pendientePorcentaje.Value >= umbralSubidaMedia)
+ return ("subida-media", "#4c1d95");
+
if (pendientePorcentaje.Value >= umbralSubida)
- return ("subida", "#000000");
+ return ("subida-suave", "#d946ef");
if (pendientePorcentaje.Value <= -umbralBajada)
return ("bajada", "#2563eb");
diff --git a/RutasDBUS/Components/Pages/PlanificadorRutas.razor b/RutasDBUS/Components/Pages/PlanificadorRutas.razor
index e4c1275..23990f6 100644
--- a/RutasDBUS/Components/Pages/PlanificadorRutas.razor
+++ b/RutasDBUS/Components/Pages/PlanificadorRutas.razor
@@ -1831,7 +1831,10 @@
+
+
+
+