예제 #1
0
        /// <summary>
        /// Cambia el Campo Indicador de Dirección.
        /// </summary>
        /// <param name="elCampoNuevo">El Campo Indicador de Dirección nuevo.</param>
        /// <param name="laRazón">La razón del cambio.</param>
        /// <returns>Una variable lógica que indica si se cambió el campo.</returns>
        public bool CambiaCampoIndicadorDeDirección(CampoGenérico elCampoNuevo, string laRazón)
        {
            // Solo cambia el campo si es diferente.
            if (elCampoNuevo == CampoIndicadorDeDirección)
            {
                return(false);
            }

            // Si no tiene Campo Indicador de Dirección entonces añadimos
            // el campo nuevo.
            if (CampoIndicadorDeDirección == null)
            {
                // Añade el campo.
                AñadeCampo(elCampoNuevo, laRazón);
                CampoIndicadorDeDirección = elCampoNuevo;
            }
            else
            {
                // Cambia el campo.
                CambiaCampo(elCampoNuevo, CampoIndicadorDeDirección, laRazón);
                CampoIndicadorDeDirección = elCampoNuevo;
            }

            return(true);
        }
        private int ArreglaSentidos(Vía laVía)
        {
            int númeroDeProblemasDetectados = 0;

            string indicadorDeDirección = null;

            if (laVía.CampoIndicadorDeDirección != null)
            {
                indicadorDeDirección = laVía.CampoIndicadorDeDirección.Texto;
            }
            bool unSoloSentido = laVía.CampoParámetrosDeRuta.OtrosParámetros[CampoParámetrosDeRuta.IndiceUnSoloSentido];

            if ((indicadorDeDirección == null) && unSoloSentido)
            {
                CampoGenérico campoIndicadorDeDirecciónDeUnSoloSentido = new CampoGenérico(Vía.IdentificadorIndicadorDeDirección, "1");
                laVía.CambiaCampoIndicadorDeDirección(
                    campoIndicadorDeDirecciónDeUnSoloSentido,
                    "M107: La vía no tiene Indicador de Dirección pero es de un solo sentido. Añadido el Indicadorde Dirrección con valor '1'.");
                ++númeroDeProblemasDetectados;
            }
            else if ((indicadorDeDirección == "1") && !unSoloSentido)
            {
                CampoParámetrosDeRuta campoParámetrosDeRuta = laVía.CampoParámetrosDeRuta;
                bool[] otrosParámetrosNuevos = (bool[])campoParámetrosDeRuta.OtrosParámetros.Clone();
                otrosParámetrosNuevos[CampoParámetrosDeRuta.IndiceUnSoloSentido] = true;
                CampoParámetrosDeRuta campoParámetrosDeRutaNuevo = new CampoParámetrosDeRuta(
                    campoParámetrosDeRuta.LímiteDeVelocidad,
                    campoParámetrosDeRuta.ClaseDeRuta,
                    otrosParámetrosNuevos);
                laVía.CambiaCampoParámetrosDeRuta(
                    campoParámetrosDeRutaNuevo,
                    "M106: La vía tiene el Indicador de Dirección igual a '1' pero no es de un solo sentido. Cambiada a un solo sentido.");
                ++númeroDeProblemasDetectados;
            }
            else if ((indicadorDeDirección == "0") && unSoloSentido)
            {
                CampoGenérico campoIndicadorDeDirecciónDeUnSoloSentido = new CampoGenérico(Vía.IdentificadorIndicadorDeDirección, "1");
                laVía.CambiaCampoIndicadorDeDirección(
                    campoIndicadorDeDirecciónDeUnSoloSentido,
                    "M107: La vía tiene el Indicador de Dirección igual a '0' pero es de un solo sentido. Cambiado el Indicador de Dirección a valor '1'.");
                ++númeroDeProblemasDetectados;
            }

            return(númeroDeProblemasDetectados);
        }
예제 #3
0
        /// <summary>
        /// Cambia el Campo Indicador de Dirección.
        /// </summary>
        /// <param name="elCampoNuevo">El Campo Indicador de Dirección nuevo.</param>
        /// <param name="laRazón">La razón del cambio.</param>
        /// <returns>Una variable lógica que indica si se cambió el campo.</returns>
        public bool CambiaCampoIndicadorDeDirección(CampoGenérico elCampoNuevo, string laRazón)
        {
            // Solo cambia el campo si es diferente.
              if (elCampoNuevo == CampoIndicadorDeDirección)
              {
            return false;
              }

              // Si no tiene Campo Indicador de Dirección entonces añadimos
              // el campo nuevo.
              if (CampoIndicadorDeDirección == null)
              {
            // Añade el campo.
            AñadeCampo(elCampoNuevo, laRazón);
            CampoIndicadorDeDirección = elCampoNuevo;
              }
              else
              {
            // Cambia el campo.
            CambiaCampo(elCampoNuevo, CampoIndicadorDeDirección, laRazón);
            CampoIndicadorDeDirección = elCampoNuevo;
              }

              return true;
        }
예제 #4
0
        private static void ArreglaMapaTopografico(ManejadorDeMapa.ManejadorDeMapa elManejadorDeMapa)
        {
            #region Arregla el encabezado.
            ElementoDelMapa encabezado          = elManejadorDeMapa.Encabezado;
            IList <Campo>   camposDelEncabezado = encabezado.Campos;
            CampoGenérico   campoNombre         = (CampoGenérico)camposDelEncabezado[1];

            // Borra los campos para re-generarlos.
            camposDelEncabezado.Clear();
            camposDelEncabezado.Add(new CampoGenérico("CodePage", "1252"));
            camposDelEncabezado.Add(new CampoGenérico("LblCoding", "9"));
            camposDelEncabezado.Add(new CampoGenérico("ID", campoNombre.Texto));
            camposDelEncabezado.Add(campoNombre);

            // Añade los campos nuevos.
            Campo[] camposNuevos = new Campo[] {
                new CampoGenérico("Elevation", "M"),
                new CampoGenérico("Preprocess", "F"),
                new CampoGenérico("TreSize", "5000"),
                new CampoGenérico("TreMargin", "0.00000"),
                new CampoGenérico("RgnLimit", "1024"),
                new CampoGenérico("Transparent", "Y"),
                new CampoGenérico("Copyright", "www.gpsyv.net"),
                new CampoGenérico("Levels", "5"),
                new CampoGenérico("Level0", "24"),
                new CampoGenérico("Level1", "22"),
                new CampoGenérico("Level2", "20"),
                new CampoGenérico("Level3", "19"),
                new CampoGenérico("Level4", "18"),
                new CampoGenérico("Zoom0", "0"),
                new CampoGenérico("Zoom1", "1"),
                new CampoGenérico("Zoom2", "2"),
                new CampoGenérico("Zoom3", "3"),
                new CampoGenérico("Zoom4", "4"),
            };
            foreach (Campo campo in camposNuevos)
            {
                camposDelEncabezado.Add(campo);
            }
            Console.WriteLine("  arreglado encabezado...");
            #endregion

            #region Arregla las Polilíneas
            foreach (var polilínea in elManejadorDeMapa.Polilíneas)
            {
                IList <Campo> campos = polilínea.Campos;

                // Busca el campo de tipo.
                int?índiceCampoTipo = null;
                for (int i = 0; i < campos.Count; ++i)
                {
                    if (campos[i] is CampoTipo)
                    {
                        índiceCampoTipo = i;
                        break;
                    }
                }

                // Add EndLevel después del campo tipo.
                if (índiceCampoTipo != null)
                {
                    int i = (int)índiceCampoTipo + 1;
                    campos.Insert(i, new CampoGenérico("EndLevel", "3"));
                }
            }
            Console.WriteLine("  arregladas polilíneas...");
            #endregion

            #region Elimina los elementos con Data1 y Data2, y los polígonos.
            IList <ElementoDelMapa> elementos = elManejadorDeMapa.ManejadorDeElementos.Elementos;
            int últimoIndex = elementos.Count - 1;
            for (int i = últimoIndex; i >= 0; --i)
            {
                ElementoDelMapa elemento = elementos[i];

                // Remueve los polígonos.
                if (elemento is Polígono)
                {
                    elementos.RemoveAt(i);
                }
                // Si no es polígono entonces vemos si es una polilínea
                // y la removemos si no tiene data0.
                else if (elemento is Polilínea)
                {
                    // Buscamos si tiene data0.
                    bool tieneData0 = false;
                    foreach (var campo in elemento.Campos)
                    {
                        CampoCoordenadas campoCoordenadas = campo as CampoCoordenadas;
                        if (campoCoordenadas != null)
                        {
                            if (campoCoordenadas.Nivel == 0)
                            {
                                tieneData0 = true;
                                break;
                            }
                        }
                    }

                    // Removemos el elemento si no tiene data0.
                    if (!tieneData0)
                    {
                        elementos.RemoveAt(i);
                    }
                }
            }
            Console.WriteLine("  eliminados polilíneas sin data 0, y polígonos...");
            #endregion
        }