/** * @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; } }
/** * @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; }
/** * @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); }
/** * @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); }
/** * @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); }