예제 #1
0
        private static Campo LeeCampoIndiceDeCiudad(string elTexto)
        {
            int índice = Convert.ToInt32(elTexto);
            CampoIndiceDeCiudad campoIndiceDeCiudad = new CampoIndiceDeCiudad(índice);

            return(campoIndiceDeCiudad);
        }
예제 #2
0
        /// <summary>
        /// Remueve el campo de índice de ciudad.
        /// </summary>
        /// <param name="laRazón">La razón.</param>
        /// <returns>Una variable lógica que indica si el elemento se modificó.</returns>
        public bool RemueveCampoIndiceDeCiudad(string laRazón)
        {
            bool cambió = false;

            if (miCampoIndiceDeCiudad != null)
            {
                RemueveCampo(miCampoIndiceDeCiudad, laRazón);
                miCampoIndiceDeCiudad = null;
                cambió = true;
            }

            return(cambió);
        }
예제 #3
0
        /// <summary>
        /// Devuelve una variable lógica que indica si un objeto
        /// dado es igual.
        /// </summary>
        /// <param name="elObjecto">EL objecto dado.</param>
        public override bool Equals(object elObjecto)
        {
            // Verifica objectos nulos y compara el tipo.
            if (elObjecto == null || (GetType() != elObjecto.GetType()))
            {
                return(false);
            }

            // Compara objecto.
            CampoIndiceDeCiudad comparador = (CampoIndiceDeCiudad)elObjecto;
            bool esIgual = (Indice == comparador.Indice);

            return(esIgual);
        }
예제 #4
0
        /// <summary>
        /// Remueve un campo dado.
        /// </summary>
        /// <param name="elCampoARemover">El campo a remover.</param>
        /// <param name="laRazón">La razón.</param>
        private void RemueveCampo(Campo elCampoARemover, string laRazón)
        {
            // Avísale al manejador de mapa que se va a cambiar un elemento.
            SeVaAModificarElemento();

            // Añade la razón del cambio.
            misModificaciones.Add(string.Format(
                                      "[Removido {0}: {1}]", elCampoARemover.Identificador, laRazón));

            // Remueve el campo.
            misCampos.Remove(elCampoARemover);
            miCampoIndiceDeCiudad = null;

            // Avísale al manejador de mapa que se cambió un elemento.
            miManejadorDeMapa.SeModificóElemento(this);
        }
예제 #5
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;
            }
        }
예제 #6
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="elPolígono">El polígono.</param>
        /// <param name="elIndice">El índice de la ciudad.</param>
        public Ciudad(
            Polígono elPolígono,
            CampoIndiceDeCiudad elIndice)
        {
            Nombre                = elPolígono.Nombre;
            Tipo                  = elPolígono.Tipo;
            Indice                = elIndice;
            Coordenadas           = elPolígono.Coordenadas;
            CoordenadasComoPuntos = new PointF[Coordenadas.Length];
            for (int i = 0; i < Coordenadas.Length; ++i)
            {
                CoordenadasComoPuntos[i] = Coordenadas[i];
            }

            // Calcula el centro de la ciudad.
            PolygonF poligonoDeLaCiudad = new PolygonF(CoordenadasComoPuntos);

            Centro = poligonoDeLaCiudad.CenterPointOfBounds;
        }
예제 #7
0
 /// <summary>
 /// Actualiza el Campo de Indice de Ciudad.
 /// </summary>
 /// <param name="elCampoIndiceDeCiudadNuevo">El Campo de Indice de Ciudad nuevo.</param>
 /// <param name="laRazón">La razón del cambio.</param>
 /// <returns>Una variable lógica que indica si el elemento se modificó.</returns>
 public bool ActualizaCampoIndiceDeCiudad(CampoIndiceDeCiudad elCampoIndiceDeCiudadNuevo, string laRazón)
 {
     return(ActualizaCampo(elCampoIndiceDeCiudadNuevo, ref miCampoIndiceDeCiudad, laRazón));
 }
 private static void Guarda(CampoIndiceDeCiudad elCampoIndiceDeCiudad, StreamWriter elEscritor)
 {
     string texto = elCampoIndiceDeCiudad.Indice.ToString(CultureInfo.InvariantCulture);
       Guarda(elCampoIndiceDeCiudad, texto, elEscritor);
 }
예제 #9
0
        private static void Guarda(CampoIndiceDeCiudad elCampoIndiceDeCiudad, StreamWriter elEscritor)
        {
            string texto = elCampoIndiceDeCiudad.Indice.ToString(CultureInfo.InvariantCulture);

            Guarda(elCampoIndiceDeCiudad, texto, elEscritor);
        }
 private static Campo LeeCampoIndiceDeCiudad(string elTexto)
 {
     int índice = Convert.ToInt32(elTexto);
       CampoIndiceDeCiudad campoIndiceDeCiudad = new CampoIndiceDeCiudad(índice);
       return campoIndiceDeCiudad;
 }
예제 #11
0
        /// <summary>
        /// Crea un mapa nuevo.
        /// </summary>
        /// <param name="losElementos">Los elementos del mapa nuevo.</param>
        private void CreaMapaNuevo(IEnumerable <ElementoDelMapa> losElementos)
        {
            // Busca el encabezado y crea todas las listas especializadas.
            Encabezado = null;
            misElementos.Clear();
            misPdis.Clear();
            misVías.Clear();
            Polilíneas.Clear();
            Polígonos.Clear();
            Ciudades.Clear();
            NodosRuteables.Clear();
            foreach (ElementoDelMapa elemento in losElementos)
            {
                misElementos.Add(elemento);

                Pdi       pdi;
                Vía       vía;
                Polilínea polilínea;
                Polígono  polígono;
                if (elemento.Clase == "IMG ID")
                {
                    Encabezado = elemento;
                }
                else if ((pdi = elemento as Pdi) != null)
                {
                    misPdis.Add(pdi);
                }
                else if ((vía = elemento as Vía) != null)
                {
                    misVías.Add(vía);

                    foreach (var nodo in vía.Nodos)
                    {
                        if (nodo.EsRuteable)
                        {
                            var          identificadorGlobal = nodo.IdentificadorGlobal;
                            IList <Nodo> nodosRuteables;
                            if (NodosRuteables.TryGetValue(identificadorGlobal, out nodosRuteables))
                            {
                                nodosRuteables.Add(nodo);
                            }
                            else
                            {
                                List <Nodo> nodos = new List <Nodo> {
                                    nodo
                                };
                                NodosRuteables.Add(identificadorGlobal, nodos);
                            }
                        }
                    }
                }
                else if ((polilínea = elemento as Polilínea) != null)
                {
                    Polilíneas.Add(polilínea);
                }
                else if ((polígono = elemento as Polígono) != null)
                {
                    Polígonos.Add(polígono);

                    // Busca los polígonos de ciudades.
                    Tipo?tipo = polígono.Tipo;
                    if (tipo != null)
                    {
                        switch (((Tipo)tipo).TipoPrincipal)
                        {
                        case 0x1:
                        case 0x2:
                        case 0x3:
                        case 0x4a:
                            foreach (Campo campo in polígono.Campos)
                            {
                                CampoIndiceDeCiudad campoIndiceDeCiudad = campo as CampoIndiceDeCiudad;
                                if (campoIndiceDeCiudad != null)
                                {
                                    Ciudades.Add(new Ciudad(
                                                     polígono,
                                                     campoIndiceDeCiudad));
                                }
                            }
                            break;
                        }
                    }
                }
            }

            // Borra el estado de eventos de modificación.
            miHayEventosDeModificaciónDeElementoPendientes = false;

            // Actualiza los límites del mapa.
            ActualizaLímitesDelMapa();

            // Genera el evento de mapa nuevo.
            HayUnMapaNuevo();
        }
예제 #12
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="elPolígono">El polígono.</param>
        /// <param name="elIndice">El índice de la ciudad.</param>
        public Ciudad(
            Polígono elPolígono,
            CampoIndiceDeCiudad elIndice)
        {
            Nombre = elPolígono.Nombre;
              Tipo = elPolígono.Tipo;
              Indice = elIndice;
              Coordenadas = elPolígono.Coordenadas;
              CoordenadasComoPuntos = new PointF[Coordenadas.Length];
              for (int i = 0; i < Coordenadas.Length; ++i)
              {
            CoordenadasComoPuntos[i] = Coordenadas[i];
              }

              // Calcula el centro de la ciudad.
              PolygonF poligonoDeLaCiudad = new PolygonF(CoordenadasComoPuntos);
              Centro = poligonoDeLaCiudad.CenterPointOfBounds;
        }