/// <summary> /// Constructor. /// </summary> /// <param name="elManejadorDeMapa">El manejador del mapa.</param> /// <param name="elNúmero">El número de la Polilínea.</param> /// <param name="laClase">La clase de la Polilínea.</param> /// <param name="losCampos">Los campos de la Polilínea.</param> public Polilínea( ManejadorDeMapa elManejadorDeMapa, int elNúmero, string laClase, IList <Campo> losCampos) : base(elManejadorDeMapa, elNúmero, laClase, CaracterísticasDePolilíneas.Descripciones, losCampos) { // Busca los campos especificos de los Polilíneas. foreach (Campo campo in losCampos) { CampoCoordenadas campoCoordenadas = campo as CampoCoordenadas; if (campoCoordenadas != null) { // Si ya tenemos coordenadas entonces solamente las remplazamos // si el nivel es menor. if (miCampoCoordenadas != CampoCoordenadas.Nulas) { if (campoCoordenadas.Nivel < miCampoCoordenadas.Nivel) { miCampoCoordenadas = campoCoordenadas; } } else { miCampoCoordenadas = campoCoordenadas; } } } }
/// <summary> /// Abre el archivo de límites. /// </summary> /// <param name="elArchivo"></param> public void AbrirLímites(string elArchivo) { // Por ahora el único formato es el Polish. var limitsMapManager = new ManejadorDeMapa(EscuchadorDeEstatus); LectorDeFormatoPolish lector = new LectorDeFormatoPolish(limitsMapManager, elArchivo); // Extrae los polígonos como los límites. IList <ElementoDelMapa> elementos = lector.ElementosDelMapa; misLímitesPorMapas.Clear(); foreach (ElementoDelMapa elemento in elementos) { Polígono límite = elemento as Polígono; if (límite != null) { string nombreDelMapa = límite.Nombre; if (misLímitesPorMapas.ContainsKey(nombreDelMapa)) { throw new ArgumentException(string.Format( "El archivo de límites tiene el polígono del mapa '{0}' repetido.", nombreDelMapa)); } misLímitesPorMapas.Add(nombreDelMapa, límite); } } // Reportar los límites encontrados. EscuchadorDeEstatus.Estatus = string.Format("Leídos {0} límites.", misLímitesPorMapas.Count); // Actualizar los límites del mapa. ActualizaLímitesDelMapa(); }
/// <summary> /// Constructor. /// </summary> /// <param name="elManejadorDeMapa">El Manejador de Mapa.</param> /// <param name="losElementos">Los Elementos.</param> /// <param name="elEscuchadorDeEstatus">El escuchador de estatus.</param> public ManejadorDeElementos( ManejadorDeMapa elManejadorDeMapa, IList <ElementoDelMapa> losElementos, IEscuchadorDeEstatus elEscuchadorDeEstatus) : base(elManejadorDeMapa, losElementos, elEscuchadorDeEstatus) { }
public ProcesoExclusivo(ManejadorDeMapa elManejadorDeMapa) { miManejadorDeMapa = elManejadorDeMapa; if (miManejadorDeMapa.Procesando != null) { miManejadorDeMapa.Procesando(this, new EventArgs()); } }
/// <summary> /// Constructor. /// </summary> /// <param name="elManejadorDeMapa">El Manejador de Mapa.</param> /// <param name="losElementos">Los Elementos.</param> /// <param name="elEscuchadorDeEstatus">El escuchador de estatus.</param> protected ManejadorBase( ManejadorDeMapa elManejadorDeMapa, IList <T> losElementos, IEscuchadorDeEstatus elEscuchadorDeEstatus) { miManejadorDeMapa = elManejadorDeMapa; misElementos = losElementos; miEscuchadorDeEstatus = elEscuchadorDeEstatus; }
/// <summary> /// Constructor. /// </summary> /// <param name="elManejadorDeMapa">El manejador del mapa.</param> /// <param name="elNúmero">El número del elemento.</param> /// <param name="laClase">La clase de elemento.</param> /// <param name="losCampos">Los campos del elemento.</param> public ElementoDesconocido( ManejadorDeMapa elManejadorDeMapa, int elNúmero, string laClase, IList <Campo> losCampos) : base(elManejadorDeMapa, elNúmero, laClase, misDescripciones, losCampos) { }
/// <summary> /// Constructor. /// </summary> /// <param name="elManejadorDeMapa">El manejador del mapa.</param> /// <param name="elNúmero">El número del elemento.</param> /// <param name="elComentario">El comentario.</param> public Comentario( ManejadorDeMapa elManejadorDeMapa, int elNúmero, string elComentario) : base(elManejadorDeMapa, elNúmero, ";", misDescripciones, GeneraCampos(elComentario)) { miTexto = ((CampoComentario)Campos[0]).Comentario; }
/// <summary> /// Constructor. /// </summary> /// <param name="elManejadorDeMapa">El manejador del mapa.</param> /// <param name="elArchivo">El archivo a abrir.</param> public LectorDeFormatoPolish(ManejadorDeMapa elManejadorDeMapa, string elArchivo) : base(elManejadorDeMapa.EscuchadorDeEstatus) { miManejadorDeMapa = elManejadorDeMapa; // Usar el punto para separar decimales. miFormatoNumérico.NumberDecimalSeparator = "."; // Abre el archivo. Lee(elArchivo); // Reporta el número de elementos leídos. int númeroDeElementos = misElementosDelMapa.Count; Estatus = "Leídos " + númeroDeElementos + " elementos"; }
/// <summary> /// Constructor. /// </summary> /// <param name="elManejadorDeMapa">El manejador del mapa.</param> /// <param name="elNúmero">El número del elemento.</param> /// <param name="laClase">La clase de elemento.</param> /// <param name="lasDescripcionesPorTipo">Las descripciones por tipo.</param> /// <param name="losCampos">Los campos del elemento.</param> protected ElementoDelMapa( ManejadorDeMapa elManejadorDeMapa, int elNúmero, string laClase, IDictionary <Tipo, string> lasDescripcionesPorTipo, IList <Campo> losCampos) { // Guarda variables. miManejadorDeMapa = elManejadorDeMapa; miNúmero = elNúmero; miClase = laClase; misCampos = losCampos; misDescripcionesPorTipo = lasDescripcionesPorTipo; // Busca los campos conocidos. foreach (Campo campo in losCampos) { CampoTipo campoTipo; CampoNombre campoNombre; CampoIndiceDeCiudad campoIndiceDeCiudad; if ((campoTipo = campo as CampoTipo) != null) { miCampoTipo = campoTipo; } else if ((campoNombre = campo as CampoNombre) != null) { if (campoNombre.Número == null) { miCampoNombre = campoNombre; } } else if ((campoIndiceDeCiudad = campo as CampoIndiceDeCiudad) != null) { miCampoIndiceDeCiudad = campoIndiceDeCiudad; } } bool existe = (Tipo != null) && (misDescripcionesPorTipo.TryGetValue((Tipo)Tipo, out miDescripción)); if (!existe) { miDescripción = string.Empty; } }
/// <summary> /// Constructor. /// </summary> /// <param name="elManejadorDeMapa">El manejador del mapa.</param> /// <param name="elNúmero">El número del Polígono.</param> /// <param name="laClase">La clase de Polígono.</param> /// <param name="losCampos">Los campos del Polígono.</param> public Polígono( ManejadorDeMapa elManejadorDeMapa, int elNúmero, string laClase, IList <Campo> losCampos) : base(elManejadorDeMapa, elNúmero, laClase, CaracterísticasDePolígonos.Descripciones, losCampos) { // Busca los campos especificos de los Polígonos. foreach (Campo campo in losCampos) { if (campo is CampoCoordenadas) { misCoordenadas = (CampoCoordenadas)campo; } } }
/// <summary> /// Procesa los elementos seleccionados por un filtro dado.. /// </summary> /// <param name="elFiltroEstáSeleccionado">El filtro dado.</param> /// <returns>El número de problemas detectados.</returns> public int Procesa(bool[] elFiltroEstáSeleccionado) { // Nos salimos si estamos procesando algo. if (miEstáProcesando) { return(0); } // Indica que se van a procesar los elementos. bool go = ComenzóAProcesar(); // Exit early if there is a cancellation. if (!go) { return(0); } using (ManejadorDeMapa.IndicaProcesoExclusivo()) { // Envia evento. if (Procesando != null) { Procesando(this, new EventArgs()); } // Indica que estamos procesando. miEstáProcesando = true; NúmeroDeProblemasDetectados = 0; IList <K> elementos = miManejador.Elementos; NúmeroDeElementos = elementos.Count; int númeroDeElementosAProcesar = 0; foreach (bool estáSeleccionado in elFiltroEstáSeleccionado) { if (estáSeleccionado) { ++númeroDeElementosAProcesar; } } // Comienza el timer. miTimerParaReportarEstatus.Start(); // Reporta estatus. EscuchadorDeEstatus.Progreso = 0; // Suspende notificaciones. miManejador.SuspendeEventos(); // Procesar todos los elementos. EscuchadorDeEstatus.ProgresoMáximo = elementos.Count; miReportaEstatus = true; int númeroDelElementoProcesándose = 0; for (IndiceDeElementoProcesándose = 0; IndiceDeElementoProcesándose < elementos.Count; ++IndiceDeElementoProcesándose) { // Ve si necesitamos parar de procesar. if (miManejador.ManejadorDeMapa.ParaDeProcesar) { ManejadorDeMapa.ParaDeProcesar = false; break; } // Nos saltamos el elemento si no está seleccionado. if (!elFiltroEstáSeleccionado[IndiceDeElementoProcesándose]) { continue; } // Actualiza estatus. ++númeroDelElementoProcesándose; EscuchadorDeEstatus.Progreso = númeroDelElementoProcesándose; if (miReportaEstatus) { Estatus = string.Format("Procesando {0} # {1}/{2}: [{3}]", miNombreDeElemento, númeroDelElementoProcesándose, númeroDeElementosAProcesar, NúmeroDeProblemasDetectados); miReportaEstatus = false; } // Procesa el elemento si no está eliminado. K elemento = elementos[IndiceDeElementoProcesándose]; if (!elemento.FuéEliminado) { // Procesa el elemento. NúmeroDeProblemasDetectados += ProcesaElemento(elemento); } } // Para el timer. miTimerParaReportarEstatus.Stop(); // Reporta estatus. EscuchadorDeEstatus.Progreso = 0; EscuchadorDeEstatus.Estatus = "Listo."; // Restablece notificaciones. miManejador.RestableceEventos(); // Indica que se terminó de procesar los elementos. TerminoDeProcesar(); // Indica que dejamos de procesar. miEstáProcesando = false; // Envia evento. if (Procesó != null) { Procesó(this, new NúmeroDeItemsEventArgs(NúmeroDeProblemasDetectados)); } } return(NúmeroDeProblemasDetectados); }