/** * @brief Metodo que contiene toda la lógica de interacción con el usuario final para decidir si * una capa concreta debe ser procesada. * * @param c Objeto de tipo dwgCapa que contiene toda la información obtenida de la capa. * * @return Retorna una cadena de texto con 3 valores posibles:<br/><br/> * 1) C: Cancelar el proceso.<br/> * 2) S: incluir la capa en el proceso de extracción de la información.<br/> * 3) N: no incluir la capa en el proceso de extracción de la información.<br/> * * */ private static String IncluirCapa(dwgCapa c) { String incluir = ""; while (incluir == "") { PromptStringOptions pStrOpts = new PromptStringOptions("\nIntroduzca si desea procesar la capa " + c.nombreCapa + "(" + c.objectId.ToString() + ") (s/n): "); PromptResult pStrRes = ed.GetString(pStrOpts); if (pStrRes.Status == PromptStatus.Cancel) { incluir = "C"; break; } else if (pStrRes.Status == PromptStatus.OK) { incluir = pStrRes.StringResult; if ((incluir == "S") || (incluir == "s")) { break; } else if ((incluir == "N") || (incluir == "n")) { break; } else { incluir = ""; } } } return incluir; }
/** * @brief Metodo que encapsula como debe formatearse en la salida XML un objeto del tipo dwgCapa. * * @param c Objeto del tipo dwgCapa. * @param xmldoc Objeto de tipo XmlDocument al que se anexará la información de la capa. * * @return Devuelve un tipo XmlElement con la información de la capa formateada para ser añadido en el documento xmldoc. * **/ public static XmlElement capa2xml(dwgCapa c, XmlDocument xmldoc) { XmlElement capa = xmldoc.CreateElement("capa"); XmlAttribute xmlattribute = xmldoc.CreateAttribute("id"); xmlattribute.Value = c.objectId.ToString(); capa.Attributes.Append(xmlattribute); xmlattribute = xmldoc.CreateAttribute("name"); xmlattribute.Value = c.nombreCapa; capa.Attributes.Append(xmlattribute); XmlElement mapa = xmldoc.CreateElement("mapa_atributos"); capa.AppendChild(mapa); XmlElement mapa_elto = xmldoc.CreateElement("atributo"); mapa.AppendChild(mapa_elto); xmlattribute = xmldoc.CreateAttribute("key"); xmlattribute.Value = "handleId"; mapa_elto.Attributes.Append(xmlattribute); xmlattribute = xmldoc.CreateAttribute("valor"); xmlattribute.Value = c.handleId.ToString(); mapa_elto.Attributes.Append(xmlattribute); mapa_elto = xmldoc.CreateElement("atributo"); mapa.AppendChild(mapa_elto); xmlattribute = xmldoc.CreateAttribute("key"); xmlattribute.Value = "apagada"; mapa_elto.Attributes.Append(xmlattribute); xmlattribute = xmldoc.CreateAttribute("valor"); xmlattribute.Value = c.apagada.ToString(); mapa_elto.Attributes.Append(xmlattribute); mapa_elto = xmldoc.CreateElement("atributo"); mapa.AppendChild(mapa_elto); xmlattribute = xmldoc.CreateAttribute("key"); xmlattribute.Value = "bloqueada"; mapa_elto.Attributes.Append(xmlattribute); xmlattribute = xmldoc.CreateAttribute("valor"); xmlattribute.Value = c.bloqueada.ToString(); mapa_elto.Attributes.Append(xmlattribute); mapa_elto = xmldoc.CreateElement("atributo"); mapa.AppendChild(mapa_elto); xmlattribute = xmldoc.CreateAttribute("key"); xmlattribute.Value = "enUso"; mapa_elto.Attributes.Append(xmlattribute); xmlattribute = xmldoc.CreateAttribute("valor"); xmlattribute.Value = c.enUso.ToString(); mapa_elto.Attributes.Append(xmlattribute); mapa_elto = xmldoc.CreateElement("atributo"); mapa.AppendChild(mapa_elto); xmlattribute = xmldoc.CreateAttribute("key"); xmlattribute.Value = "oculta"; mapa_elto.Attributes.Append(xmlattribute); xmlattribute = xmldoc.CreateAttribute("valor"); xmlattribute.Value = c.oculta.ToString(); mapa_elto.Attributes.Append(xmlattribute); /* mapa_elto = xmldoc.CreateElement("atributo"); mapa.AppendChild(mapa_elto); xmlattribute = xmldoc.CreateAttribute("key"); xmlattribute.Value = "grueso_por_defecto_lineas"; mapa_elto.Attributes.Append(xmlattribute); xmlattribute = xmldoc.CreateAttribute("valor"); xmlattribute.Value = c.default_gruesoLinea.ToString(); mapa_elto.Attributes.Append(xmlattribute); */ return capa; }
public static void serializarDWG() { db = Application.DocumentManager.MdiActiveDocument.Database; ed = Application.DocumentManager.MdiActiveDocument.Editor; doc = Application.DocumentManager.MdiActiveDocument; // Solicitamos configuración al usuario. configuracionUsuario = ConfiguracionUsuario(); if (configuracionUsuario == false) { log("No ha sido posible realizar la configuración del usuario.", false, false); log("Finalizando proceso de decodificación.", false, false); return; } // Reseteamos el dwgFile log("Reseteando estructuras en memoria.",false, false); dwgf.resetDwgFile(); dwgf.nombre_fichero_original = doc.Name; // Tratamos de cargar el valor por defecto del ancho de linea. log("Obteniendo el ancho de línea por defecto.",false, false); try { String lwdefault = Application.GetSystemVariable("LWDEFAULT").ToString(); Double.TryParse(lwdefault, out dlwdefault); } catch (System.Exception e) { dlwdefault = 25; } // Abrimos una trasnaccion para poder empezar a operar con la bbdd de Autocad. log("Abrimos transacción para empezar a trabajar con la BBDD de AutoCad.",false, false); using (Transaction t = db.TransactionManager.StartTransaction()) { log("Abrimos la tabla de capas.",false, false); // Leemos las capas LayerTable acLyrTbl = (LayerTable)t.GetObject(db.LayerTableId, OpenMode.ForRead); log("Procesamos las diferentes capas y las almacenamos en memoria.",false, false); foreach (ObjectId acObjId in acLyrTbl) { LayerTableRecord acLyrTblRec = (LayerTableRecord)t.GetObject(acObjId, OpenMode.ForRead); dwgCapa capa = new dwgCapa(); capa.objectId = acObjId; capa.handleId = acLyrTblRec.Handle; capa.nombreCapa = acLyrTblRec.Name; capa.descripcionCapa = acLyrTblRec.Description; capa.colorCapa = acLyrTblRec.Color; capa.color_R = capa.colorCapa.Red; capa.color_G = capa.colorCapa.Green; capa.color_B = capa.colorCapa.Blue; capa.oculta = acLyrTblRec.IsHidden; capa.bloqueada = acLyrTblRec.IsLocked; capa.apagada = acLyrTblRec.IsOff; capa.enUso = acLyrTblRec.IsUsed; capa.default_gruesoLinea = (Double) acLyrTblRec.LineWeight; if ((capa.default_gruesoLinea == -1) || (capa.default_gruesoLinea == -2) || (capa.default_gruesoLinea == -3)) { capa.default_gruesoLinea = dlwdefault; } // Preguntamos al usuario si decide procesar la capa. if (selectLayers == true) { String incluirCapa = IncluirCapa(capa); if (incluirCapa == "C") { log("Finalizando proceso de decodificación.", false, false); return; } if ((incluirCapa == "S") || (incluirCapa == "s")) { dwgf.dwgCapas.Add(capa.objectId, capa); log("Procesada capa:" + acLyrTblRec.Name, true, false); } } else { dwgf.dwgCapas.Add(capa.objectId, capa); log("Procesada capa:" + acLyrTblRec.Name, true, false); } // acLyrTblRec.LinetypeObjectId; // acLyrTblRec.IsPersistent; // acLyrTblRec.Transparency; } log("Abrimos la tabla de bloques que contiene las entidades.", false, false); // Open the Block table for read BlockTable acBlkTbl = (BlockTable) t.GetObject(db.BlockTableId,OpenMode.ForWrite); log("Abrimos la tabla de bloques - Model Space, única soportada por este proceso.", false, false); // Open the Block table record Model space for read BlockTableRecord acBlkTblRec = (BlockTableRecord) t.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite); // Step through the Block table record foreach (ObjectId acObjId in acBlkTblRec) { Entity ent = (Entity)t.GetObject(acObjId, OpenMode.ForRead); log("Objeto a procesar : " + acObjId.ToString(), true, true); if (dwgf.dwgCapas.ContainsKey(ent.LayerId) == false) { log("No se procesa el objeto. Esta en una capa seleccionada para no ser tratada.", true, true); continue; } if (dwgf.objetosArtificiales.Contains(ent.ObjectId) == true) { log("No se procesa el objeto. Es un objeto no original del mapa creado por este proceso.", true, true); continue; } switch (acObjId.ObjectClass.DxfName) { case "POINT": case "LINE": case "LWPOLYLINE": case "ARC": ObjectId parentId = new ObjectId(); dwgDecoder.ProcesarObjetos(acObjId, acBlkTbl, acBlkTblRec, t, parentId); log("Procesado punto/linea/polylinea:/arco " + acObjId.ToString(),true,true); break; default: log("Tipo de objeto no reconocido por dwgDecoder: " + acObjId.ObjectClass.DxfName.ToString(), true, true); break; } } } // exportXml.serializar(dwgf); log("Exportamos al formato XML el contenido de la base de datos de Autocad.", false, false); exportXml.export2Xml(dwgf,ruta); }