예제 #1
0
        /**
         * @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;
        }
예제 #2
0
        /**
         * @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;
        }
예제 #3
0
        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);
        }