這一講的主要內容是介紹AutoCAD物件模型,如果你對VBA開發AutoCAD瞭解的話,這部分內容應該是超簡單的。
對象是 AutoCAD ActiveX 介面的主要構造塊,每一個顯示的對象均精確代表一個 AutoCAD 組件。AutoCAD ActiveX 介面的主要對象有:
• 直線、圓弧、文字和標註等繪圖物件。
• 線型與標註樣式等樣式設定對象
• 圖層、編組和塊等組織圖對象
• 視圖與視口等圖形顯示對象。
• 圖形、AutoCAD 應用程式本身也是對象
所有對象的根對象是AutoCAD 應用程式本身,它用AcadApplication類來表示。獲得當前啟動並執行AcadApplication對象可以使用上一講中介紹的方法來得到。AcadApplication對象下有四個子物件構成,分別是:
AcadPreferences 對象,通過此對象可以訪問和設定“選項”對話方塊中的相關選項
AcadDocuments對象,它表示AutoCAD 圖形
AcadMenuBar 對象,它表示AutoCAD主功能表列 (注意不是AcadMenuBars,因為應用程式只有一個主功能表列)
AcadMenuGroups對象, 它表示AutoCAD 菜單和工具列
上面介紹了AutoCAD ActiveX 介面物件模型的大致組成,下面重點介紹AcadDocuments對象,因為大部分的編程都與它有關。首先大家看到它是複數的形式,因此它是當前開啟的AutoCAD所有圖形的集合,這種對象稱為集合對象(呵呵,好像在講廢話)。集合對象有一些比較重要的方法和特性。其中最主要的是:Count特性用於擷取集合中的對象個數(從零開始);Item 方法用於擷取集合中的任何對象。關於它們的用法我會在下面的例子中介紹。而 AcadDocuments的單數形式AcadDocument表示當前開啟的一個AutoCAD圖形。AcadDocument對象由以下幾個主要對象組成:
AcadModelSpace 集合和 AcadPaperSpace集合,提供對繪圖物件(直線、圓、等)的訪問
AcadLayers、AcadLinetypes 和 AcadTextStyles,則提供對非繪圖物件(圖層、線型、文本樣式等)的訪問
AcadPlot 對象提供對“列印”對話方塊中設定的訪問,並為應用過程提供了列印圖形的各種方法
AcadUtility 對象提供使用者輸入和轉換函式
繪圖物件的建立使用Add方法,比如要建立一個圓,就是用AddCircle方法,而非繪圖物件的建立使用Add方法。
下面通過一個簡單的例子來說明上面介紹的內容。這個例子是在AutoCAD中建立一個新的層,然後在該層中畫一個紅色的圓和一條綠色的直線。這是程式的原始碼:(請先把上一講中產生的interop.AutoCAD.dll 和 AutoCADExample.dll檔案包含在工程中)
using System;
using AcadExample;
using AutoCAD;
namespace CircleLine
{
///
/// Class1 的摘要說明。
///
class Class1
{
///
/// 應用程式的主進入點。
///
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此處添加代碼以啟動應用程式
//
using(AutoCADConnector connector=new AutoCADConnector()) //串連AutoCAD
{
AcadDocument aDocument=connector.Application.ActiveDocument;
//取得當前AutoCAD活動圖表形對象
double[] center=new Double[3]{20,20,0};//設定圓心
double radius=20;//設定圓的半徑
double[] startPoint=new Double[3]{0,0,0};//設定直線的起點
double[] endPoint=new Double[3]{40,40,0};//設定直線的終點
AcadLayer newLayer=aDocument.Layers.Add("CircleLine");
//建立一個名為CircleLine的新層
aDocument.ActiveLayer=newLayer;//把CircleLine層設定為當前層
AcadCircle circle=aDocument.ModelSpace.AddCircle(center,radius);//加入圓
AcadLine line=aDocument.ModelSpace.AddLine(startPoint,endPoint);//加入直線
circle.color=ACAD_COLOR.acRed;//把圓變為紅色
line.color=ACAD_COLOR.acGreen;//把直線變為綠色
connector.Application.Update();//更新顯示
for(int i=0;i Console.WriteLine("這是第{0}個對象:{1}",i+1,aDocument.ModelSpace.Item(i)); //遍曆當前圖形
}
Console.ReadLine();
}
}
}
好了,今天就到這裡。