AutoCAD .Net 使用 Database.ReadDwgFile 读取dwg文件而不显示文档窗口

来源:互联网 发布:华为软件 公司 编辑:程序博客网 时间:2024/06/14 21:55

我们常常会碰到需要读取外部的 dwg 文件,而又不想在 AutoCAD 的文档窗口中显示。
AutoCAD .Net API 提供了 Database.ReadDwgFile 来实现。
我们首先需要构建一个 Database 对象。
public Database(bool buildDefaultDrawing, bool noDocument);
第一个参数必须传 false。
第二个参数根据需要,传 true、false 均可。
然后调用 Database.ReadDwgFile 方法。
最好紧接着调用 db.CloseInput(true); 关闭文件。

以下示例代码演示:
通过以上提到的方法读取 dwg 文件,并遍历获取模型空间中的图元信息。

[CommandMethod("ReadDwgFileTest")]public static void ReadDwgFileTest(){    Document doc = Application.DocumentManager.MdiActiveDocument;    using (Database db = new Database(false, true))    {        try        {            // 读取dwg文件            string dwgFileFullPath =                 @"D:\WangYao\AutoCAD\workspace\AcadDotNet\TestFiles\test_001.dwg";            db.ReadDwgFile(dwgFileFullPath,                FileOpenMode.OpenForReadAndAllShare, false, "");            db.CloseInput(true);        }        catch (System.Exception ex)        {            doc.Editor.WriteMessage("\nUnable to read drawing file.");            return;        }        using (Transaction tr = db.TransactionManager.StartTransaction())        {            // 模型空间            BlockTable blkTbl = tr.GetObject(db.BlockTableId, OpenMode.ForRead)                as BlockTable;            BlockTableRecord modelSpace = tr.GetObject(                blkTbl[BlockTableRecord.ModelSpace], OpenMode.ForRead)                as BlockTableRecord;            // 遍历模型空间            foreach (ObjectId oid in modelSpace)            {                DBObject dbobj = tr.GetObject(oid, OpenMode.ForRead);                if (dbobj is Entity)                {                    Entity entity = dbobj as Entity;                    doc.Editor.WriteMessage("\nEntity: {0}, {1}, {2}, {3}",                        entity.Id,                         entity.GetType().ToString(),                         entity.Layer,                         entity.Color.ToString());                }            }        }    }}

我在我本机上运行的结果

命令: READDWGFILETESTEntity: (140696770088080), Autodesk.AutoCAD.DatabaseServices.Line, 0, 红Entity: (140696770088096), Autodesk.AutoCAD.DatabaseServices.Circle, 0, BYLAYEREntity: (140696770088112), Autodesk.AutoCAD.DatabaseServices.Arc, 0, BYLAYEREntity: (140696770088128), Autodesk.AutoCAD.DatabaseServices.Polyline, 0, 绿

参考文章
Accessing DWG files not open in the AutoCAD editor using .NET
AutoCAD .NET: Read DWG Into Memory Using Database.ReadDwgFile

阅读全文
0 0