116 lines
3.8 KiB
C#
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();
|
|
}
|
|
}
|