Пример #1
0
 /// <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;
             }
         }
     }
 }
Пример #2
0
        /// <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();
        }
Пример #3
0
 /// <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)
 {
 }
Пример #4
0
 public ProcesoExclusivo(ManejadorDeMapa elManejadorDeMapa)
 {
     miManejadorDeMapa = elManejadorDeMapa;
     if (miManejadorDeMapa.Procesando != null)
     {
         miManejadorDeMapa.Procesando(this, new EventArgs());
     }
 }
Пример #5
0
 /// <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)
 {
 }
Пример #7
0
 /// <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;
 }
Пример #8
0
        /// <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";
        }
Пример #9
0
        /// <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;
            }
        }
Пример #10
0
 /// <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;
         }
     }
 }
Пример #11
0
        /// <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);
        }