首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 運用 ObjectDBX 讀取未開啟 DWG 圖形中的區塊屬性資訊

     編輯:關於C語言

前言

ObjectDBX 技術允許在不啟動 AutoCAD 視窗的情況下,於背景載入 DWG 檔案並操作圖形資料庫。本文示範如何在 C# 中使用 ObjectDBX.AxDbDocument 開啟 DWG、遍歷模型空間、提取區塊參照與屬性資訊。

專案參考設定

  1. interop.AutoCAD.dll (AutoCAD 互操作組件)
  2. AcadExample.dll (自訂封裝庫)
  3. COM 參考:AutoCAD/ObjectDBX Common 16.0 Type Library (對應 AutoCAD 2004)

引入命名空間別名避免類別名稱衝突:

using AutoCAD;
using dbx = AXDBLib; // ObjectDBX 命名空間別名
using AcadExample;

核心程式碼流程

static void Main()
{
    using (AutoCADConnector connector = new AutoCADConnector()) // 取得 AutoCAD Application 物件
    {
        string progId = "ObjectDBX.AxDbDocument.16"; // AutoCAD 2004
        // AutoCAD 2000i/2002 使用 "ObjectDBX.AxDbDocument.1"

        AcadApplication acadApp = connector.Application;
        dbx.AxDbDocument dbxDoc = (dbx.AxDbDocument)acadApp.GetInterfaceObject(progId);

        dbxDoc.Open(@"F:\Test.dwg"); // 背景開啟,不顯示視窗

        foreach (dbx.AcadEntity ent in dbxDoc.ModelSpace)
        {
            if (ent.EntityName == "AcDbBlockReference") // 區塊參照
            {
                dbx.AcadBlockReference blkRef = (dbx.AcadBlockReference)ent;
                object[] atts = (object[])blkRef.GetAttributes(); // 取得屬性陣列

                for (int i = 0; i < atts.Length; i++)
                {
                    dbx.AcadAttributeReference att = (dbx.AcadAttributeReference)atts[i];
                    Console.WriteLine($"Tag: {att.TagString}\tValue: {att.TextString}");
                }
            }
        }
        Console.ReadLine();
    }
}

關鍵技術點解析

步驟API/物件說明
取得 DBX 文件物件Application.GetInterfaceObject(progId)建立進程外 COM 物件,需強制轉型
開啟 DWGAxDbDocument.Open(path)背景載入,不建立視窗,速度極快
遍歷實體ModelSpace 集合ObjectDBX 無選擇集,只能全量遍歷
判斷區塊參照EntityName == "AcDbBlockReference"轉型為 AcadBlockReference 存取屬性
讀取屬性GetAttributes() → AcadAttributeReferenceTagString/Tag 為屬性標籤,TextString 為值

版本對應 ProgID

  • AutoCAD 2004 / ObjectDBX 16:ObjectDBX.AxDbDocument.16
  • AutoCAD 2002 / ObjectDBX 15:ObjectDBX.AxDbDocument.15
  • AutoCAD 2000i / ObjectDBX 1:ObjectDBX.AxDbDocument.1

應用場景

  • 批次提取圖面區塊屬性生成 BOM 清單
  • 無人值守轉檔/驗證流程
  • 伺服器端 DWG 內容解析服務

結語

ObjectDBX 為 C# 開發者提供高效、無 UI 的 DWG 存取能力。掌握 GetInterfaceObject、ModelSpace 遍歷與區塊屬性轉型流程,即可建構強大的自動化圖面資料提取工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved