예제 #1
0
        /**
         * @brief       Metodo que envia a un fichero de texto el contenido completo de una clase dwgFILE.
         *
         * @param   dwgf    Objeto del tipo dwgFile que contiene todos los objetos leidos del fichero de AutoCAD.
         * @param   ruta    Ruta donde se guardará el fichero de texto con el contenido de la clase dwgFile.
         *
         * @deprecated  El método no esta completo dado que no se actualizo con los cambios sufridos en la
         *              clase dwgFile. Se uso en los primeros desarrollos para pequeñas validaciones y tareas
         *              de depuración.
         *
         **/
        public static void serializar(dwgFile dwgf, String ruta)
        {
            using (StreamWriter writer = new StreamWriter(ruta))
            {
                writer.WriteLine(" #### CAPAS #########");

                foreach (dwgCapa obj in dwgf.dwgCapas.Values)
                {
                    writer.WriteLine(obj.ToString());
                }

                writer.WriteLine(" #### PUNTOS #########");

                foreach (dwgPunto obj in dwgf.dwgPuntos.Values)
                {
                    writer.WriteLine(obj.ToString());
                }


                writer.WriteLine(" #### ARCOS #########");

                foreach (dwgArco obj in dwgf.dwgArcos.Values)
                {
                    writer.WriteLine(obj.ToString());
                }

                writer.WriteLine(" #### POLYLINEAS #########");

                foreach (dwgPolylinea obj in dwgf.dwgPolylineas.Values)
                {
                    writer.WriteLine(obj.ToString());
                }

                return;
            }
        }
예제 #2
0
        /**
         * @brief       Metodo que envia a un fichero XML el contenido completo de una clase dwgFILE.
         *
         * @param   dwgf    Objeto del tipo dwgFile que contiene todos los objetos leidos del fichero de AutoCAD.
         * @param   ruta    Ruta donde se guardará el fichero de texto con el contenido de la clase dwgFile.
         *
         **/
        public static void export2Xml(dwgFile dwgf, String ruta)
        {
            XmlDocument xmldoc = new XmlDocument();


            // *********************************************
            // Elemento raiz. PLANO
            // *********************************************

            XmlNode xmlelement = xmldoc.CreateElement("plano");

            XmlAttribute xmlattribute = xmldoc.CreateAttribute("nombre_fichero");

            xmlattribute.Value = dwgf.nombre_fichero_original;
            xmlelement.Attributes.Append(xmlattribute);

            xmlattribute       = xmldoc.CreateAttribute("fecha_fichero");
            xmlattribute.Value = "";
            xmlelement.Attributes.Append(xmlattribute);

            xmlattribute       = xmldoc.CreateAttribute("fecha_procesamiento");
            xmlattribute.Value = System.DateTime.Now.ToString();
            xmlelement.Attributes.Append(xmlattribute);

            xmldoc.AppendChild(xmlelement);

            // *********************************************
            // NODO HIJO: elemento_simulacion
            // *********************************************

            XmlElement xmlelement2 = xmldoc.CreateElement("elemento_simulacion");

            xmlattribute       = xmldoc.CreateAttribute("tipo_elemento");
            xmlattribute.Value = "elemento_original_mapa";
            xmlelement2.Attributes.Append(xmlattribute);

            xmlelement.AppendChild(xmlelement2);

            // *********************************************
            // NODO HIJO: capa
            // *********************************************

            foreach (dwgCapa cap in dwgf.dwgCapas.Values)
            {
                XmlElement capa = exportXml.capa2xml(cap, xmldoc);
                xmlelement2.AppendChild(capa);

                var puntocapa = dwgf.dwgPuntos.Values.Where(x => x.capaId.ToString() == cap.objectId.ToString());

                foreach (dwgPunto obj in puntocapa)
                {
                    XmlElement punto = exportXml.punto2xml(obj, xmldoc);
                    capa.AppendChild(punto);
                }

                var puntolinea = dwgf.dwgLineas.Values.Where(x => x.capaId.ToString() == cap.objectId.ToString() && x.parentId.ToString() == "(0)");

                foreach (dwgLinea obj in puntolinea)
                {
                    XmlElement linea = exportXml.linea2xml(obj, xmldoc);
                    capa.AppendChild(linea);
                }

                var puntopolylinea = dwgf.dwgPolylineas.Values.Where(x => x.capaId.ToString() == cap.objectId.ToString());

                foreach (dwgPolylinea obj in puntopolylinea)
                {
                    XmlElement polylinea = exportXml.polylinea2xml(obj, xmldoc, cap.objectId, dwgf);
                    capa.AppendChild(polylinea);
                }

                var puntoarco = dwgf.dwgArcos.Values.Where(x => x.capaId.ToString() == cap.objectId.ToString());

                foreach (dwgArco obj in puntoarco)
                {
                    XmlElement arco = exportXml.arco2xml(obj, xmldoc, cap.objectId, dwgf);
                    capa.AppendChild(arco);
                }
            }
            try
            {
                xmldoc.Save(ruta);
            }
            catch (Exception)
            {
            }
            return;
        }
예제 #3
0
        /**
         * @brief   Metodo que encapsula como debe formatearse en la salida XML un objeto del tipo dwgArco.
         *
         * @param   a    Objeto del tipo dwgArco.
         * @param   xmldoc  Objeto de tipo XmlDocument al que se anexará la información del arco.
         * @param   capaId  Objeto del tipo ObjectId con el identificador de la capa a la que pertenece el arco. Esta capa será usada para asociarla a todas las lineas
         *                  que haya al descomponer el arco.
         * @param   dwgf    Objeto del tipo dwgFile para buscar información adicional sobre lineas vinculadas al arco.
         *
         * @return  Devuelve un tipo XmlElement con la información del arco formateada para ser añadido en el documento xmldoc.
         *
         **/
        public static XmlElement arco2xml(dwgArco a, XmlDocument xmldoc, ObjectId capaId, dwgFile dwgf)
        {
            XmlElement   arco         = xmldoc.CreateElement("arco");
            XmlAttribute xmlattribute = xmldoc.CreateAttribute("id");

            xmlattribute.Value = a.objId.ToString();
            arco.Attributes.Append(xmlattribute);

            xmlattribute       = xmldoc.CreateAttribute("radio");
            xmlattribute.Value = a.radio.ToString();
            arco.Attributes.Append(xmlattribute);

            xmlattribute       = xmldoc.CreateAttribute("angulo_inicio");
            xmlattribute.Value = a.angulo_inicio.ToString();
            arco.Attributes.Append(xmlattribute);

            xmlattribute       = xmldoc.CreateAttribute("angulo_final");
            xmlattribute.Value = a.angulo_final.ToString();
            arco.Attributes.Append(xmlattribute);

            xmlattribute       = xmldoc.CreateAttribute("center_point_id");
            xmlattribute.Value = a.punto_centro.ToString();
            arco.Attributes.Append(xmlattribute);

            var puntolinea2 = dwgf.dwgLineas.Values.Where(x => x.capaId.ToString() == capaId.ToString() && x.parentId.ToString() == a.objId.ToString());

            foreach (dwgLinea obj2 in puntolinea2)
            {
                XmlElement linea = exportXml.linea2xml(obj2, xmldoc);
                arco.AppendChild(linea);
            }

            XmlElement mapa = xmldoc.CreateElement("mapa_atributos");

            arco.AppendChild(mapa);

            return(arco);
        }
예제 #4
0
        /**
         * @brief   Metodo que encapsula como debe formatearse en la salida XML un objeto del tipo dwgPolylinea.
         *
         * @param   p    Objeto del tipo dwgPolylinea.
         * @param   xmldoc  Objeto de tipo XmlDocument al que se anexará la información de la polilinea.
         * @param   capaId  Objeto del tipo ObjectId con el identificador de la capa a la que pertenece la polilinea. Esta capa será usada para asociarla a todas las lineas
         *                  y arcos que haya al descomponer la polilinea.
         * @param   dwgf    Objeto del tipo dwgFile para buscar información adicional sobre lineas y arcos vinculados a la polilinea.
         *
         * @return  Devuelve un tipo XmlElement con la información de la polilinea formateada para ser añadido en el documento xmldoc.
         *
         **/
        public static XmlElement polylinea2xml(dwgPolylinea p, XmlDocument xmldoc, ObjectId capaId, dwgFile dwgf)
        {
            XmlElement   polylinea    = xmldoc.CreateElement("polilinea");
            XmlAttribute xmlattribute = xmldoc.CreateAttribute("id");

            xmlattribute.Value = p.objId.ToString();
            polylinea.Attributes.Append(xmlattribute);

            var puntolinea2 = dwgf.dwgLineas.Values.Where(x => x.capaId.ToString() == capaId.ToString() && x.parentId.ToString() == p.objId.ToString());

            foreach (dwgLinea obj2 in puntolinea2)
            {
                XmlElement linea = exportXml.linea2xml(obj2, xmldoc);
                polylinea.AppendChild(linea);
            }

            var puntolinea3 = dwgf.dwgArcos.Values.Where(x => x.capaId.ToString() == capaId.ToString() && x.parentId.ToString() == p.objId.ToString());

            foreach (dwgArco obj2 in puntolinea3)
            {
                XmlElement arco = exportXml.arco2xml(obj2, xmldoc, capaId, dwgf);
                polylinea.AppendChild(arco);
            }

            XmlElement mapa = xmldoc.CreateElement("mapa_atributos");

            polylinea.AppendChild(mapa);

            return(polylinea);
        }
예제 #5
0
        /**
         * @brief   Metodo que descompone una curva en un conjunto de segmentos de línea que aproximan o recubren la curva original.
         *
         * @param   cur         Entidad curva que debe ser linealizada.
         * @param   numSeg      Número de líneas en las que tiene que ser partida la curva.
         * @param   acBlkTbl    Tabla de bloques de AutoCAD para buscar nuevos objetos y añadir nuevos objetos generados.
         * @param   acBlkTblRec Tabla de registros de los bloques de AutoCAD para buscar nuevos objetos y añadir nuevos objetos generados.
         * @param   t           Transaccion abierta para manipular la tabla de bloques de AutoCAD.
         * @param   LayerId     Parámetro del tipo ObjectId que identifica la capa a la que tendrán que asociarse las nuevas líneas generadas por el proceso
         *                      de descomposición de la curva.
         * @param   dwfg        Parámetro del tipo dwgFile donde se almacenaran las nuevas líneas creadas a partir del proceso de descomposición de la curva.
         *
         * @return              Devuelve una colección de entidades tipo linea bajo la clase DBObjectCollection.
         **/

        public static DBObjectCollection curvaAlineas(Curve cur, int numSeg, BlockTable acBlkTbl, BlockTableRecord acBlkTblRec, Transaction t, ObjectId LayerId, dwgFile dwfg)
        {
            DBObjectCollection ret = new DBObjectCollection();

            // Collect points along our curve
            Point3dCollection pts = new Point3dCollection();

            // Split the curve's parameter space into
            // equal parts
            double startParam = cur.StartParam;
            double segLen     = (cur.EndParam - startParam) / numSeg;

            // Loop along it, getting points each time
            for (int i = 0; i < numSeg + 1; i++)
            {
                Point3d pt = cur.GetPointAtParameter(startParam + segLen * i);
                pts.Add(pt);
            }

            if (pts != null && pts.Count > 0)
            {
                if (pts.Count == 1)
                {
                    // Retornamos un punto.
                }
                else if (pts.Count >= 2)
                {
                    // Retornamos una secuencia de lineas
                    for (int i = 0; i < pts.Count - 1; i++)
                    {
                        Line ln = new Line();
                        ln.StartPoint = pts[i];
                        ln.EndPoint   = pts[i + 1];
                        ln.LayerId    = LayerId;
                        acBlkTblRec.AppendEntity(ln);
                        t.AddNewlyCreatedDBObject(ln, true);
                        dwfg.objetosArtificiales.Add(ln.ObjectId);
                        ret.Add(ln);
                    }
                }
            }

            return(ret);
        }