private void LlenaItems(InterfaseListaDeElementos laLista) { // Añade los elementos. IDictionary <Vía, IList <BuscadorDePosiblesErroresDeRuteo.ElementoDePosibleErrorDeRuteo> > erroresDeRuteo = miBuscadorDePosiblesErroresDeRuteo.PosiblesErrorDeRuteo; foreach (KeyValuePair <Vía, IList <BuscadorDePosiblesErroresDeRuteo.ElementoDePosibleErrorDeRuteo> > ítem in erroresDeRuteo) { // Crea el grupo. Vía vía = ítem.Key; ListViewGroup grupo = new ListViewGroup(vía.Nombre); laLista.Groups.Add(grupo); // Añade los elementos de las incongruencia a la lista. IList <BuscadorDePosiblesErroresDeRuteo.ElementoDePosibleErrorDeRuteo> elementosDePosibleErrorDeRuteo = ítem.Value; foreach (BuscadorDePosiblesErroresDeRuteo.ElementoDePosibleErrorDeRuteo elementoDePosibleErrorDeRuteo in elementosDePosibleErrorDeRuteo) { ElementoConEtiqueta elemento = new ElementoConEtiqueta(elementoDePosibleErrorDeRuteo.Vía); // Si el elemento es un posible error entonces le ponemos un fondo amarillo. if (elementoDePosibleErrorDeRuteo.EsPosibleError) { laLista.AñadeItem(elemento, Color.PaleGoldenrod, grupo, elementoDePosibleErrorDeRuteo.Detalle); } else { laLista.AñadeItem(elemento, grupo, elementoDePosibleErrorDeRuteo.Detalle); } } } }
/// <summary> /// Constructor. /// </summary> /// <param name="laVía">La Vía que contiene al nodo.</param> /// <param name="elIndice">El índice del nodo en la vía.</param> public Nodo( Vía laVía, int elIndice ) { Vía = laVía; Indice = elIndice; EsRuteable = false; CampoNodoRuteable = null; }
private void LlenaItems(InterfaseListaDeElementos laLista) { // Añade las Vías. IDictionary <Vía, string> errores = miBuscadorDeErrores.Errores; foreach (KeyValuePair <Vía, string> error in errores) { Vía vía = error.Key; string razón = error.Value; laLista.AñadeItem(new ElementoConEtiqueta(vía), razón); } }
private void LlenaItems(InterfaseListaDeElementos laLista) { // Añade los elementos. IDictionary <Vía, IList <string> > alertas = miBuscadorDeAlertas.Alertas; foreach (KeyValuePair <Vía, IList <string> > ítem in alertas) { // Crea el grupo. Vía vía = ítem.Key; // Añade los detalles de la alerta a la lista. IList <string> detallesDeAlerta = ítem.Value; string detalle = string.Join(" | ", detallesDeAlerta.ToArray()); laLista.AñadeItem(new ElementoConEtiqueta(vía), detalle); } }
private void DibujaNodos(Vía laVía) { foreach (Nodo nodo in laVía.Nodos) { if (nodo.EsRuteable) { miMapa.PuntosAddicionales.Add(new InterfaseMapa.PuntoAdicional( nodo.Coordenadas, miPincelDeNodoRuteable, 11)); } else { miMapa.PuntosAddicionales.Add(new InterfaseMapa.PuntoAdicional( nodo.Coordenadas, miPincelDeNodo, 5)); } } }
/// <summary> /// Añade un item a la lista. /// </summary> /// <param name="elElementoConEtiqueta">El elemento dado.</param> /// <param name="elColorDeFondo">El color de fondo.</param> /// <param name="elGrupo">El grupo.</param> /// <param name="losSubItemsAdicionales">Los textos de los subitems adicionales</param> public override void AñadeItem(ElementoConEtiqueta elElementoConEtiqueta, Color elColorDeFondo, ListViewGroup elGrupo, params string[] losSubItemsAdicionales) { // Verifica que el elemento es una Vía. Vía vía = elElementoConEtiqueta.ElementoDelMapa as Vía; if (vía == null) { throw new ArgumentException("El elemento debe ser tipo Vía. pero es " + elElementoConEtiqueta.ElementoDelMapa.GetType()); } // Añade la Vía a la lista. List <string> subItems = new List <string> { vía.CampoParámetrosDeRuta.LímiteDeVelocidad.ToString(), vía.CampoParámetrosDeRuta.ClaseDeRuta.ToString(), vía.CampoParámetrosDeRuta.ToString() }; subItems.AddRange(losSubItemsAdicionales); base.AñadeItem(elElementoConEtiqueta, elColorDeFondo, elGrupo, subItems.ToArray()); }
public void PruebaConstructor() { // Preparación. int número = 12; ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión()); string clase = "clase"; string nombre = "Nombre"; string tipo = "0xc"; string descripción = "Roundabout"; CampoParámetrosDeRuta parámetrosDeRuta = new CampoParámetrosDeRuta( new LímiteDeVelocidad(2), new ClaseDeRuta(3), new bool[10]); List <Campo> campos = new List <Campo> { new CampoNombre(nombre), new CampoComentario(";Comentario"), new CampoTipo(tipo), parámetrosDeRuta }; // Llama al constructor. Vía objectoEnPrueba = new Vía(manejadorDeMapa, número, clase, campos); // Prueba Propiedades. Assert.That(campos, Is.EqualTo(objectoEnPrueba.Campos), "Campos"); Assert.That(clase, Is.EqualTo(objectoEnPrueba.Clase), "Clase"); Assert.That(descripción, Is.EqualTo(objectoEnPrueba.Descripción), "Descripción"); Assert.That(objectoEnPrueba.FuéEliminado, Is.False, "FuéEliminado"); Assert.That(objectoEnPrueba.FuéModificado, Is.False, "FuéModificado"); Assert.That(nombre, Is.EqualTo(objectoEnPrueba.Nombre), "Nombre"); Assert.That(número, Is.EqualTo(objectoEnPrueba.Número), "Número"); Assert.That(objectoEnPrueba.Original, Is.Null, "Original"); Assert.That(string.Empty, Is.EqualTo(objectoEnPrueba.RazónParaEliminación), "RazónParaEliminación"); Assert.That(new Tipo(tipo), Is.EqualTo(objectoEnPrueba.Tipo), "Tipo"); Assert.That(objectoEnPrueba.CampoParámetrosDeRuta, Is.EqualTo(parámetrosDeRuta), "CampoParámetrosDeRuta"); }
public void PruebaCambiaCampoParámetrosDeRuta() { #region Caso 1: Vía con Campo de Parámetros de Ruta. { #region Preparación. int número = 12; ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión()); string clase = "clase"; string nombre = "Nombre"; string tipo = "0xc"; string descripción = "Roundabout"; CampoParámetrosDeRuta campoParámetrosDeRuta = new CampoParámetrosDeRuta( new LímiteDeVelocidad(2), new ClaseDeRuta(3), new bool[] { true, false, false, true, true, false, true, true, false, false }); List <Campo> campos = new List <Campo> { new CampoNombre(nombre), new CampoComentario(";Comentario"), new CampoTipo(tipo), campoParámetrosDeRuta }; // Crea el objeto en prueba. Vía objectoEnPrueba = new Vía(manejadorDeMapa, número, clase, campos); ElementoDelMapa víaOriginal = (ElementoDelMapa)objectoEnPrueba.Clone(); // Nuevos valores. CampoParámetrosDeRuta nuevoCampoParámetrosDeRuta = new CampoParámetrosDeRuta( new LímiteDeVelocidad(5), campoParámetrosDeRuta.ClaseDeRuta, campoParámetrosDeRuta.OtrosParámetros); Assert.That(nuevoCampoParámetrosDeRuta, Is.Not.EqualTo(campoParámetrosDeRuta), "El nuevo campo de parámetros de ruta debe ser distinto"); #endregion // Llama al método a probar. objectoEnPrueba.CambiaCampoParámetrosDeRuta(nuevoCampoParámetrosDeRuta, "Razón"); // Prueba Propiedades. Assert.That(objectoEnPrueba.Campos, Is.EqualTo(campos), "Campos"); Assert.That(objectoEnPrueba.Clase, Is.EqualTo(clase), "Clase"); Assert.That(descripción, Is.EqualTo(objectoEnPrueba.Descripción), "Descripción"); Assert.That(objectoEnPrueba.FuéEliminado, Is.False, "FuéEliminado"); Assert.That(objectoEnPrueba.FuéModificado, Is.True, "FuéModificado"); Assert.That(objectoEnPrueba.Nombre, Is.EqualTo(nombre), "Nombre"); Assert.That(objectoEnPrueba.Número, Is.EqualTo(número), "Número"); PruebaElementoDesconocido.AseguraElementoEsEquivalente(víaOriginal, objectoEnPrueba.Original, "Original"); Assert.That(objectoEnPrueba.RazónParaEliminación, Is.EqualTo(string.Empty), "RazónParaEliminación"); Assert.That(objectoEnPrueba.Tipo, Is.EqualTo(new Tipo(tipo)), "Tipo"); Assert.That(objectoEnPrueba.CampoParámetrosDeRuta, Is.EqualTo(nuevoCampoParámetrosDeRuta), "CampoParámetrosDeRuta"); } #endregion #region Caso 2: Vía sin Campo de Parámetros de Ruta. { #region Preparación. int número = 12; ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión()); string clase = "clase"; string nombre = "Nombre"; string tipo = "0xc"; string descripción = "Roundabout"; List <Campo> campos = new List <Campo> { new CampoNombre(nombre), new CampoComentario(";Comentario"), new CampoTipo(tipo) }; // Crea el objeto en prueba. Vía objectoEnPrueba = new Vía(manejadorDeMapa, número, clase, campos); ElementoDelMapa víaOriginal = (ElementoDelMapa)objectoEnPrueba.Clone(); // Nuevos valores. CampoParámetrosDeRuta nuevoCampoParámetrosDeRuta = new CampoParámetrosDeRuta( new LímiteDeVelocidad(4), new ClaseDeRuta(1), new bool[10]); #endregion // Llama al método a probar. objectoEnPrueba.CambiaCampoParámetrosDeRuta(nuevoCampoParámetrosDeRuta, "Razón"); // Prueba Propiedades. Assert.That(objectoEnPrueba.Campos, Is.EqualTo(campos), "Campos"); Assert.That(objectoEnPrueba.Clase, Is.EqualTo(clase), "Clase"); Assert.That(descripción, Is.EqualTo(objectoEnPrueba.Descripción), "Descripción"); Assert.That(objectoEnPrueba.FuéEliminado, Is.False, "FuéEliminado"); Assert.That(objectoEnPrueba.FuéModificado, Is.True, "FuéModificado"); Assert.That(objectoEnPrueba.Nombre, Is.EqualTo(nombre), "Nombre"); Assert.That(objectoEnPrueba.Número, Is.EqualTo(número), "Número"); PruebaElementoDesconocido.AseguraElementoEsEquivalente(víaOriginal, objectoEnPrueba.Original, "Original"); Assert.That(objectoEnPrueba.RazónParaEliminación, Is.EqualTo(string.Empty), "RazónParaEliminación"); Assert.That(objectoEnPrueba.Tipo, Is.EqualTo(new Tipo(tipo)), "Tipo"); Assert.That(objectoEnPrueba.CampoParámetrosDeRuta, Is.EqualTo(nuevoCampoParámetrosDeRuta), "CampoParámetrosDeRuta"); } #endregion #region Caso 3: Vía con el Mismo Campo de Parámetros de Ruta. { #region Preparación. int número = 12; ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión()); string clase = "clase"; string nombre = "Nombre"; string tipo = "0xc"; string descripción = "Roundabout"; CampoParámetrosDeRuta campoParámetrosDeRuta = new CampoParámetrosDeRuta( new LímiteDeVelocidad(2), new ClaseDeRuta(3), new bool[] { true, false, false, true, true, false, true, true, false, false }); List <Campo> campos = new List <Campo> { new CampoNombre(nombre), new CampoComentario(";Comentario"), new CampoTipo(tipo), campoParámetrosDeRuta }; // Crea el objeto en prueba. Vía objectoEnPrueba = new Vía(manejadorDeMapa, número, clase, campos); #endregion // Llama al método a probar. objectoEnPrueba.CambiaCampoParámetrosDeRuta(campoParámetrosDeRuta, "Razón"); // Prueba Propiedades. Assert.That(objectoEnPrueba.Campos, Is.EqualTo(campos), "Campos"); Assert.That(objectoEnPrueba.Clase, Is.EqualTo(clase), "Clase"); Assert.That(descripción, Is.EqualTo(objectoEnPrueba.Descripción), "Descripción"); Assert.That(objectoEnPrueba.FuéEliminado, Is.False, "FuéEliminado"); Assert.That(objectoEnPrueba.FuéModificado, Is.False, "FuéModificado"); Assert.That(objectoEnPrueba.Nombre, Is.EqualTo(nombre), "Nombre"); Assert.That(objectoEnPrueba.Número, Is.EqualTo(número), "Número"); Assert.That(objectoEnPrueba.Original, Is.Null, "Original"); Assert.That(objectoEnPrueba.RazónParaEliminación, Is.EqualTo(string.Empty), "RazónParaEliminación"); Assert.That(objectoEnPrueba.Tipo, Is.EqualTo(new Tipo(tipo)), "Tipo"); Assert.That(objectoEnPrueba.CampoParámetrosDeRuta, Is.EqualTo(campoParámetrosDeRuta), "CampoParámetrosDeRuta"); } #endregion }
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 }
public void PruebaProcesaCaso1() { #region Preparación. // Crea el objeto a probar. IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión(); ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(escuchadorDeEstatus); ManejadorDeVías manejadorDeVías = new ManejadorDeVías(manejadorDeMapa, new List <Vía>(), escuchadorDeEstatus, null); ArregladorGeneral objectoDePrueba = new ArregladorGeneral(manejadorDeVías, escuchadorDeEstatus); // Caso de prueba. Caso[] casos = new[] { // Nombre, IndicadorDeDirección, UnSoloSentido, IndicadorDeDirecciónEsperado, UnSoloSentidoEsperado new Caso("A", "0", false, "0", false), // Calle doble sentido. new Caso("B", "0", true, "1", true), // Indicador de dirección = 0. new Caso("C", "1", false, "1", true), // Falta UnSoloSentido. new Caso("D", "1", true, "1", true), // Calle un sentido. new Caso("E", null, true, "1", true), // Falta indicador de dirección. }; const int númeroDeProblemasDetectados = 3; // Crea los elementos. // Vía típica: // [POLYLINE] // Type=0x2 // Label=TRONCAL 9 // EndLevel=3 // DirIndicator=1 // CityIdx=1 // RoadID=47 // RouteParam=5,3,1,0,0,0,0,0,0,0,0,0 // Data0=(10.16300,-66.00000),(10.16199,-65.99850),(10.16010,-65.99591) IList <Vía> vías = manejadorDeVías.Elementos; const string clase = "POI"; for (int i = 0; i < casos.Length; ++i) { Caso caso = casos[i]; List <Campo> campos = new List <Campo> { new CampoTipo("0x2"), new CampoNombre(caso.Nombre), new CampoGenérico("EndLevel", "3"), new CampoParámetrosDeRuta( new LímiteDeVelocidad(5), new ClaseDeRuta(3), new[] { caso.UnSoloSentido, false, false, false, false, false, false, false, false, false }), new CampoCoordenadas("Data", 0, new[] { new Coordenadas(10.16300, -66.00000), new Coordenadas(10.16199, -65.99850), new Coordenadas(10.16010, -65.99591), }) }; if (caso.IndicadorDeDirección != null) { campos.Add(new CampoGenérico(Vía.IdentificadorIndicadorDeDirección, caso.IndicadorDeDirección)); } Vía vía = new Vía(manejadorDeMapa, i, clase, campos); vías.Add(vía); } #endregion // Llama al método bajo prueba. objectoDePrueba.Procesa(); // Prueba propiedades. Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(vías.Count), "NúmeroDeElementos"); Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(númeroDeProblemasDetectados), "NúmeroDeProblemasDetectados"); // Prueba los nobres de los PDIs. for (int i = 0; i < casos.Length; ++i) { Assert.That(vías[i].CampoParámetrosDeRuta.OtrosParámetros[0], Is.EqualTo(casos[i].UnSoloSentidoEsperado), "Vía[" + i + "].OtrosParámetros[0]"); Assert.That(vías[i].CampoIndicadorDeDirección, Is.Not.Null, "Vía[" + i + "].CampoIndicadorDeDirección"); Assert.That(vías[i].CampoIndicadorDeDirección.Texto, Is.EqualTo(casos[i].IndicadorDeDirecciónEsperado), "Vía[" + i + "].CampoIndicadorDeDirección.Texto"); } }