Пример #1
0
        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ó();
        }
Пример #2
0
        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
        }