欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-18 13:09:58
...

我们常常会碰到需要读取外部的 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());
                }
            }
        }
    }
}

我在我本机上运行的结果

命令: READDWGFILETEST
Entity: (140696770088080), Autodesk.AutoCAD.DatabaseServices.Line, 0, 红
Entity: (140696770088096), Autodesk.AutoCAD.DatabaseServices.Circle, 0, BYLAYER
Entity: (140696770088112), Autodesk.AutoCAD.DatabaseServices.Arc, 0, BYLAYER
Entity: (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

相关标签: AutoCAD