ObjectDBX 技術允許在不啟動 AutoCAD 視窗的情況下,於背景載入 DWG 檔案並操作圖形資料庫。本文示範如何在 C# 中使用 ObjectDBX.AxDbDocument 開啟 DWG、遍歷模型空間、提取區塊參照與屬性資訊。
interop.AutoCAD.dll (AutoCAD 互操作組件)AcadExample.dll (自訂封裝庫)引入命名空間別名避免類別名稱衝突:
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 物件,需強制轉型 |
| 開啟 DWG | AxDbDocument.Open(path) | 背景載入,不建立視窗,速度極快 |
| 遍歷實體 | ModelSpace 集合 | ObjectDBX 無選擇集,只能全量遍歷 |
| 判斷區塊參照 | EntityName == "AcDbBlockReference" | 轉型為 AcadBlockReference 存取屬性 |
| 讀取屬性 | GetAttributes() → AcadAttributeReference | TagString/Tag 為屬性標籤,TextString 為值 |
ObjectDBX.AxDbDocument.16ObjectDBX.AxDbDocument.15ObjectDBX.AxDbDocument.1ObjectDBX 為 C# 開發者提供高效、無 UI 的 DWG 存取能力。掌握 GetInterfaceObject、ModelSpace 遍歷與區塊屬性轉型流程,即可建構強大的自動化圖面資料提取工具。