C# 中如何读取DWG文件

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、代码片段简介

在C#中读取DWG文件需要使用CAD软件或者CAD相关的API,在此我介绍两种方法:使用AutoCAD COM对象或者使用DWG TrueView API。

二、实现方式1

  1. 使用AutoCAD COM对象

AutoCAD是一款广泛使用的CAD软件,它提供了COM对象模型,使得可以通过C#等编程语言来访问AutoCAD的功能。以下是一个简单示例,演示如何使用AutoCAD COM对象读取DWG文件中的实体(Entity)信息:

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;

public void ReadEntitiesFromDWG(string dwgFilePath)
{
    
    
    // 启动AutoCAD应用程序
    var app = new Application();

    // 打开指定的DWG文件
    var doc = app.Documents.Open(dwgFilePath, false);

    // 获取当前文档的数据库对象
    var db = doc.Database;

    // 开启事务
    using (var trans = db.TransactionManager.StartTransaction())
    {
    
    
        // 获取所有的实体对象
        var entites = new DBObjectCollection();
        foreach (ObjectId id in db.BlockTableId.GetObjectIds())
        {
    
    
            var btr = trans.GetObject(id, OpenMode.ForRead) as BlockTableRecord;
            if (btr != null)
            {
    
    
                foreach (ObjectId entityId in btr)
                {
    
    
                    var entity = trans.GetObject(entityId, OpenMode.ForRead) as Entity;
                    if (entity != null)
                    {
    
    
                        entites.Add(entity);
                    }
                }
            }
        }

        // 打印实体信息
        foreach (Entity entity in entites)
        {
    
    
            Console.WriteLine($"Entity {
      
      entity.GetType().Name} found");
        }

        // 提交事务并关闭文档
        trans.Commit();
        doc.CloseAndDiscard();
    }

    // 退出AutoCAD应用程序
    app.Quit();
}

需要注意的是,使用AutoCAD COM对象读取DWG文件,需要保证计算机上已安装AutoCAD软件,并且确保程序与AutoCAD版本一致。

三、实现方式2

  1. 使用DWG TrueView API

DWG TrueView是一个免费的DWG文件查看器,它也提供了.NET API,可以用于读取DWG文件。以下是一个简单示例,演示如何使用DWG TrueView API读取DWG文件中的实体信息:

using System;
using System.IO;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.DwgTrueView.ApplicationServices;
using Autodesk.DwgTrueView.DatabaseServices;

public void ReadEntitiesFromDWG(string dwgFilePath)
{
    
    
    // 创建DWG TrueView应用程序对象
    var app = new DwgApplication();

    // 打开指定的DWG文件
    var db = new Database(false, true);
    db.ReadDwgFile(dwgFilePath, FileShare.ReadWrite, true, "");

    // 开启事务
    using (var trans = db.TransactionManager.StartTransaction())
    {
    
    
        // 获取所有的实体对象
        var entites = new DBObjectCollection();
        foreach (ObjectId id in db.BlockTableId.GetObjectIds())
        {
    
    
            var btr = trans.GetObject(id, OpenMode.ForRead) as BlockTableRecord;
            if (btr != null)
            {
    
    
                foreach (ObjectId entityId in btr)
                {
    
    
                    var entity = trans.GetObject(entityId, OpenMode.ForRead) as Entity;
                    if (entity != null)
                    {
    
    
                        entites.Add(entity);
                    }
                }
            }
        }

        // 打印实体信息
        foreach (Entity entity in entites)
        {
    
    
            Console.WriteLine($"Entity {
      
      entity.GetType().Name} found");
        }

        // 提交事务并关闭数据库
        trans.Commit();
        db.Dispose();
    }

    // 退出DWG TrueView应用程序
    app.Quit();
}

总结

需要注意的是,使用DWG TrueView API读取DWG文件,需要在计算机上安装DWG TrueView软件,并且需要添加对应的引用。

猜你喜欢

转载自blog.csdn.net/2302_77270563/article/details/129968069