Files
RutasDBUS/RutasDBUS/Components/Pages/PlanificadorRutas.RestriccionesCaminata.cs

116 lines
3.8 KiB
C#

using Microsoft.JSInterop;
namespace RutasDBUS.Components.Pages;
public partial class PlanificadorRutas
{
private bool _modoDibujoExclusionCaminata;
private bool _poligonoExclusionCaminataCerrado;
private readonly List<double[]> _verticesExclusionCaminata = new();
private bool PuedeProbarExclusionCaminata =>
_walkProvider == ProveedorCaminata.Valhalla &&
_hayRutaValida &&
_opcionesRuta.Count > 0 &&
_indiceAlternativaSeleccionada >= 0 &&
_indiceAlternativaSeleccionada < _opcionesRuta.Count &&
(_opcionesRuta[_indiceAlternativaSeleccionada].EsSoloAPie ||
_tramosRuta.Any(tramo => tramo.Tipo.StartsWith("A pie", StringComparison.OrdinalIgnoreCase)));
private bool PoligonoExclusionCaminataValido =>
_verticesExclusionCaminata.Count >= 3 && _poligonoExclusionCaminataCerrado;
private List<List<double[]>>? ObtenerPoligonosExclusionCaminata()
{
if (!PoligonoExclusionCaminataValido)
return null;
return new List<List<double[]>>
{
_verticesExclusionCaminata
.Select(punto => new[] { punto[1], punto[0] })
.Append(new[] { _verticesExclusionCaminata[0][1], _verticesExclusionCaminata[0][0] })
.ToList()
};
}
private async Task IniciarDibujoExclusionCaminataAsync()
{
if (!PuedeProbarExclusionCaminata)
return;
_modoDibujoExclusionCaminata = true;
_poligonoExclusionCaminataCerrado = false;
_verticesExclusionCaminata.Clear();
await JS.InvokeVoidAsync("rt.beginExclusionPolygonEditor");
StateHasChanged();
}
private async Task CancelarDibujoExclusionCaminataAsync()
{
_modoDibujoExclusionCaminata = false;
_poligonoExclusionCaminataCerrado = false;
_verticesExclusionCaminata.Clear();
await JS.InvokeVoidAsync("rt.clearExclusionPolygonEditor");
StateHasChanged();
}
private async Task DeshacerVerticeExclusionCaminataAsync()
{
if (_verticesExclusionCaminata.Count == 0 || _poligonoExclusionCaminataCerrado)
return;
_verticesExclusionCaminata.RemoveAt(_verticesExclusionCaminata.Count - 1);
await ActualizarEditorExclusionCaminataAsync();
}
private async Task CerrarPoligonoExclusionCaminataAsync()
{
if (_verticesExclusionCaminata.Count < 3)
return;
_poligonoExclusionCaminataCerrado = true;
await JS.InvokeVoidAsync("rt.closeExclusionPolygonEditor");
StateHasChanged();
}
private async Task CalcularRutaEvitandoPoligonoCaminataAsync()
{
if (!PoligonoExclusionCaminataValido)
return;
_modoDibujoExclusionCaminata = false;
await JS.InvokeVoidAsync("rt.finishExclusionPolygonEditor");
_omitirRegistroHistorialEnSiguienteCalculo = true;
await CalcularRutaCompletaAsync();
}
[JSInvokable]
public async Task OnExclusionPolygonMapClick(double latitud, double longitud)
{
if (!_modoDibujoExclusionCaminata || _poligonoExclusionCaminataCerrado)
return;
_verticesExclusionCaminata.Add(new[] { latitud, longitud });
await ActualizarEditorExclusionCaminataAsync();
}
[JSInvokable]
public Task OnExclusionPolygonVertexDragged(int indice, double latitud, double longitud)
{
if (indice >= 0 && indice < _verticesExclusionCaminata.Count)
{
_verticesExclusionCaminata[indice][0] = latitud;
_verticesExclusionCaminata[indice][1] = longitud;
}
return InvokeAsync(StateHasChanged);
}
private async Task ActualizarEditorExclusionCaminataAsync()
{
await JS.InvokeVoidAsync("rt.updateExclusionPolygonEditor", _verticesExclusionCaminata);
StateHasChanged();
}
}