예제 #1
0
        /// <summary>
        /// Cambia un campo dado.
        /// </summary>
        /// <param name="elCampoNuevo">El campo nuevo.</param>
        /// <param name="elCampoACambiar">El campo a cambiar.</param>
        /// <param name="laRazón">La razón del cambio.</param>
        protected void CambiaCampo(Campo elCampoNuevo, Campo elCampoACambiar, string laRazón)
        {
            // Asegurarse que los campos son del mismo tipo.
            if (elCampoACambiar.GetType() != elCampoNuevo.GetType())
            {
                throw new ArgumentException(
                          string.Format("Los campos deben ser del mismo tipo, pero son '{0}' y '{1}'",
                                        elCampoACambiar.GetType(),
                                        elCampoNuevo.GetType()));
            }

            // Busca y actualiza el campo.
            bool encontróCampo = false;

            for (int i = 0; i < misCampos.Count; ++i)
            {
                if (ReferenceEquals(misCampos[i], elCampoACambiar))
                {
                    encontróCampo = true;

                    #region Remplaza el campo.
                    SeVaAModificarElemento();

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

                    // Asigna el nuevo campo.
                    misCampos[i] = elCampoNuevo;

                    // Avísale al manejador de mapa que se cambió un elemento.
                    miManejadorDeMapa.SeModificóElemento(this);
                    #endregion
                }
            }

            if (!encontróCampo)
            {
                throw new ArgumentException(string.Format("El elemento no tiene el campo: {0}", elCampoACambiar.Identificador));
            }
        }
예제 #2
0
 /// <summary>
 /// Inserta un campo dado.
 /// </summary>
 /// <param name="elCampoNuevo">El campo a insertar.</param>
 /// <param name="elIndice">El índice en donde insertar el campo.</param>
 protected void InsertaCampo(Campo elCampoNuevo, int elIndice)
 {
     misCampos.Insert(elIndice, elCampoNuevo);
 }
 private static void Guarda(Campo elCampo, IConvertible elNúmero, string elTexto, StreamWriter elEscritor)
 {
     elEscritor.WriteLine(
     elCampo.Identificador + elNúmero.ToString(CultureInfo.InvariantCulture)
     + "=" + elTexto);
 }
 private static void Guarda(Campo elCampo, string elTexto, StreamWriter elEscritor)
 {
     elEscritor.WriteLine(elCampo.Identificador + "=" + elTexto);
 }
예제 #5
0
 private static void Guarda(Campo elCampo, IConvertible elNúmero, string elTexto, StreamWriter elEscritor)
 {
     elEscritor.WriteLine(
         elCampo.Identificador + elNúmero.ToString(CultureInfo.InvariantCulture)
         + "=" + elTexto);
 }
예제 #6
0
 private static void Guarda(Campo elCampo, string elTexto, StreamWriter elEscritor)
 {
     elEscritor.WriteLine(elCampo.Identificador + "=" + elTexto);
 }
예제 #7
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
        }