Autocad的開發形式包括visual lisp、objectarx、vba、.Net等等,其中基於.Net平台的C#語言學習曲線較為平緩,使用該語言進行AutoCad的二次開發效率較高。
本文主要記錄了使用C#進行AutoCad二次開發的環境搭建和幾種二次開發的模式。
學習資料:1. Autocad .Net開發指南(中文版),此為歐特克公司提供的官方文檔;
2. AutoCad官網,在開發人員板塊可以查閱官方提供的各種類庫;
3. b站的AutoCad_C#二開視屏,鏈接如下:
https://www.bilibili.com/video/BV1x4411y79M?from=search&seid=11773567052653254338;
4. 百度,google......
軟件配置:Autocad2014 + objectarx2014 + AutoCAD_2014_dotnet_wizards + vs2013;
注:此配置不是唯一的,因為.NET框架可向下兼容;
第一節:搭建環境
1.1 創建項目
在vs中創建一個類庫項目,適用於.dll和對話框應用程序的開發。

1.2 引用類庫
從objectarx2014中引入下圖所示類庫,並且對於所有類庫,右擊->屬性->復制到本地->false;

1.3 框架及目標平台
做完上述操作,建議先不要動項目的框架及目標平台(右擊->項目->應用程序or生成),如果編譯出問題,再調整這兩項,即注意:平台要與Autocad相匹配:是x64 or x32;框架也要相匹配,看是否和當前Autocad版本相兼容。
第二節:代碼編寫
在正式寫代碼之前,需要了解你想做哪種形式的Cad二次開發,如:.dll; Ribbon; 對話框應用程序等等。不同形式的開發,其代碼編寫也有所不同。
2.1 載入動態鏈接庫(.dll)
這應該是較為常用的,且比較簡單快捷的一種開發形式。可以用其來編寫一些小的功能,類似於在Cad下方的編輯框中輸入一些命令(Command)。
具體開發如下:
在public class xxx下方編寫:
[Command("xxx")] //可以理解為:當寫完代碼並加載至cad后,在編譯框鍵入命令xxx,從而執行操作。至於具體執行什么操作,這要根據下面的xxx方法具體的算法邏輯了。
public void xxx() //編寫期望cad具體執行的操作。
{
xxxxxx;
}
注:以上只是一個模板,具體可參照《Autocad .Net開發指南》上的例子。
2.2 對話框應用程序
本質上,這也是一個類庫項目,與2.1節類似,也是先編譯生成一個.dll格式的動態鏈接庫,然后再通過NETLOAD命令加載入Cad中,隨后鍵入xxx命令,執行操作。但是,與上述開發形式相比,其與用戶之間的交互模式更為友好。
一般地,當鍵入xxx命令后,cad會彈出一個對話框,通過點選按鈕的方式,讓cad執行具體操作。
具體開發如下:(注:僅為模板)
1. 創建一個類庫項目;
2. 添加窗體文件,並在類庫中編寫類似如下的代碼:
public class Class1 { [CommandMethod("DialogDemo")] public void DialogDemo() { Form1 f1 = new Form1(); //創建窗體實例 f1.ShowDialog(); //彈出對話框,注意與show的區別 } }
3. 為了實現:當點擊按鈕,從而觸發事件這一操作,
需要編寫事件中命令cad所做的具體操作邏輯,這就需要單獨編寫一個或多個類,可以添加一個類文件,將他們放在其中。
4.最后,為了點擊按鈕后能夠觸發相應的事件,在事件處理器中需要添加類似如下的代碼:
private void btnDrawToCad_Click(object sender, EventArgs e) { MyEntites m1 = new MyEntites((double)numericUpDown1.Value, (double)numericUpDown2.Value, (double)numericUpDown3.Value); //創建一個實例; datatool.AddEntity(m1.Ents); //將list作參數載入,將創建的圖形添加進模型空間塊表記錄中。 }
5. 綜合起來,在cad鍵入命令xxx后,彈出一個對話框,點擊按鈕后,在cad中自動畫出了一個圖形。
ps: 隨着繼續學習深入,其他的一些開發模式也會陸續更新~ to be continue~
