private void EnMenúIgnorarCambiosBruscosDeClaseDeRuta(object elEnviador, EventArgs losArgumentos) { // Retornamos si no hay Vías seleccionadas. int númeroDeVíasSeleccionadas = miLista.SelectedIndices.Count; if (númeroDeVíasSeleccionadas == 0) { return; } if (númeroDeVíasSeleccionadas > 1) { // Pregunta si se quiere ignorar los cambios bruscos de clase de ruta. DialogResult respuesta = MessageBox.Show( string.Format("Está seguro que quiere ignorar los cambios bruscos de clase de ruta en las {0} Vías seleccionadas?", númeroDeVíasSeleccionadas), "Ignorar Cambios Bruscos de Clase de Ruta", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (respuesta != DialogResult.Yes) { return; } } // Añade el attributo a las vías. ManejadorDeMapa.SuspendeEventos(); IList <Vía> vías = miInterfaseListaConMapaDeVías.MenuEditorDeVías.ObtieneElementosSeleccionados <Vía>(); foreach (Vía vía in vías) { vía.AñadeAtributo(BuscadorDePosiblesErroresDeRuteo.AtributoIgnorarCambioBruscoDeClaseDeRuta); } ManejadorDeMapa.RestableceEventos(); // Notifica la edición. miMenú.EnvíaEventoEditó(); }
private void EnMenúConectarNodosDesconectados(object elEnviador, EventArgs losArgumentos) { // Retornamos si no hay Vías seleccionadas. int númeroDeNodosDesconectados = miLista.SelectedIndices.Count; if (númeroDeNodosDesconectados == 0) { return; } if (númeroDeNodosDesconectados > 1) { // Pregunta si se quiere Estandarizar el Límite de Velocidad. DialogResult respuesta = MessageBox.Show( string.Format("Está seguro que quiere conectar los {0} Nodos seleccionados?", númeroDeNodosDesconectados), "Conectar Nodos Desconectados", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (respuesta != DialogResult.Yes) { return; } } #region Conectar Nodos Desconectados. ManejadorDeMapa.SuspendeEventos(); IList <InformaciónNodoDesconectado> posibleNodoDesconectados = miInterfaseListaConMapaDeVías.MenuEditorDeVías.ObtieneEtiquetasSeleccionadas <InformaciónNodoDesconectado>(); const string razón = "Nodo conectado manualmente."; foreach (InformaciónNodoDesconectado posibleNodoDesconectado in posibleNodoDesconectados) { // Conecta los nodos. Vía vía = posibleNodoDesconectado.PosibleNodoDesconectado.Vía; int índice = posibleNodoDesconectado.PosibleNodoDesconectado.Indice; Vía víaDestino = posibleNodoDesconectado.NodoDestino.Vía; int índiceNodoDestino = posibleNodoDesconectado.NodoDestino.Indice; bool laVíaTieneOtroNodoConLasMismasCoordenadas = false; #region Cambia las coordenadas del nodo desconectado si no son iguales. Coordenadas coordenadasNodo = posibleNodoDesconectado.PosibleNodoDesconectado.Coordenadas; Coordenadas coordenadasNodoDestino = posibleNodoDesconectado.NodoDestino.Coordenadas; if (coordenadasNodo != coordenadasNodoDestino) { // Antes the cambiar las coordenadas tenemos que asegurarnos que la vía no tiene // otro nodo con esas coordenadas. foreach (Coordenadas coordenadasNodoDeLaVía in vía.Coordenadas) { if (coordenadasNodoDeLaVía == coordenadasNodoDestino) { laVíaTieneOtroNodoConLasMismasCoordenadas = true; break; } } // Si la vía no tiene otro nodo con las mismas coordenadas // entonces lo conectamos. if (!laVíaTieneOtroNodoConLasMismasCoordenadas) { vía.CambiaCoordenadas( coordenadasNodoDestino, índice, razón); } } #endregion // Si la vía tiene otro nodo con las mismas coordenadas // entonces avisamos al usuario y no lo conectamos. if (laVíaTieneOtroNodoConLasMismasCoordenadas) { MessageBox.Show( string.Format("La Vía # {0} tiene otro nodo con las mismas coordenadas ({1}).\nEl nodo no se va a conectar.", vía.Número, coordenadasNodo), "Conecta Nodos Desconectados", MessageBoxButtons.OK, MessageBoxIcon.Warning); continue; } #region Asegurarse que ambos nodos son ruteables. Nodo nodo = vía.Nodos[índice]; Nodo nodoDestino = víaDestino.Nodos[índiceNodoDestino]; // Si el posible nodo desconectado es ruteable y el nodo destino // no es ruteable entonces usamos el identificador global del // posible nodo desconectado para el nodo destino. if (nodo.EsRuteable && !nodoDestino.EsRuteable) { // Añade el nodo ruteable en la vía destino. víaDestino.AñadeNodoRuteable( índiceNodoDestino, nodo.IdentificadorGlobal, razón); } // Si el nodo destino es ruteable entonces usamos el identificador // global del nodo destino para el nodo desconectado. else if (nodoDestino.EsRuteable) { // Añade el nodo ruteable en la vía. vía.AñadeNodoRuteable( índice, nodoDestino.IdentificadorGlobal, razón); } // Si ninguno de los nodos es ruteable entonces generamos un nuevo // índentificador global. else { // Genera un nuevo identificador global. int nuevoIdentificadorGlobal = GeneraNuevoIdentificadorGlobal(); // Añade el nodo ruteable a ambas vías. vía.AñadeNodoRuteable( índice, nuevoIdentificadorGlobal, razón); víaDestino.AñadeNodoRuteable( índiceNodoDestino, nuevoIdentificadorGlobal, razón); } #endregion } ManejadorDeMapa.RestableceEventos(); // Notifica la edición. miMenú.EnvíaEventoEditó(); #endregion }