用C 進行AutoCAD的二次開發

2021-05-01 04:09:53 字數 2328 閱讀 7111

在上一次的例子中我是通過引用autocad 2004 type library來進行c#與autocad之間的通訊,但這種方法存在兩個致命的缺點。第乙個缺點是每次除錯程式的時候c#都要重新啟動autocad,如果除錯的次數非常多(比如跟蹤錯誤然後除錯),那麼程式設計的效率就很低,因為啟動一次cad還是需要較長的時間。相對於第乙個缺點,第二個缺點則更要命。由於.net本身的問題,interop.autocad.dll檔案(就是通過它才實現了c#與autocad之間的通訊)存在著一些bug,因此雖然有時你的**是完全正確的,但c#編譯器還是丟擲莫名其妙的錯誤。那不是完蛋了嗎?我曾經有一階段就因為這兩個要命的東東差一點放棄了c#而想改學objectarx了,呵呵,不過還是運氣好,我偶爾一次在網上看了一篇外國人寫的文章,他專門介紹了這兩個問題的解決辦法。下面就來解決這兩個問題。

首先來看第二個難題,按以下步驟來進行:

2. 在visual studio .net命令列工具下用ildasm.exe(這個工具可以在visual studio .net安裝光碟中找到)把interop.autocad.dll檔案(這個檔案在步驟1中生成的專案的bin/release資料夾中)編譯成中間語言interop. autocad.il。注意:在步驟1中建立的專案的編譯設定為release模式。

ildasm.exe /source interop.autocad.dll /output=interop. autocad.il

又要注意了:把ildasm.exe,interop.autocad.dll放在同一目錄下。

3.在記事本中開啟interop. autocad.il檔案,然後查詢結尾是「sinkhelper」而開頭為 ".class private auto ansi sealed _dacad「的語句,把語句中的private 改為public,然後儲存interop. autocad.il檔案。

4.使用ilasm.exe把interop. autocad.il檔案編譯為interop.autocad.dll檔案,同樣是在visual studio .net命令列工具下進行。

ilasm.exe /resource=interop.autocad.res /dll interop.autocad.il /output=interop. autocad.dll

interop.autocad.res檔案是在步驟1中生成的。

interop.autocad.dll檔案拷貝進去。

好了,第二個問題解決了,接下來看第乙個。

在vba中,程式設計者可以使用getobject函式來獲得當前活動的autocad物件,但在c#中卻沒有,為了這個函式我幾乎把msdn給翻遍了,然後去各種c#論壇問各位高手,結果都沒得到解決,呵呵,可能國內使用c#的人比較少吧。還是在老外的論壇上看到了一篇就是講這個問題的文章才把這個難題給解決了。使用下面的語句就可以獲得當前活動的autocad物件了:

(對於cad2000和cad2002,則把16改為15)

using system;

using autocad;

using system.runtime.interopservices;

namespace acadexample

catch

catch

} }

// if the user doesn't call dispose, the

// garbage collector will upon destruction

~autocadconnector()

} // this is the user-callable version of dispose.

// it calls our internal version and removes the

// object from the garbage collector's queue.

public void dispose()

// this version of dispose gets called by our

// destructor.

protected virtual void dispose(bool disposing)

} }

利用visual studio.net 把上面的程式編譯成乙個類庫,你就可以在以後的程式中使用它了,下面的這個例子說明了它的用法。(首先把acadexample類庫包含在專案中)

using system;

using acadexample;

using autocad;

console.readline(); }

} }

這個例子是在c#視窗中顯示autocad中當前文件的標題。

AutoCAD進行二次開發

本文基於autocad 2006新推出的.net api為工具,介紹了在.net平台下對autocad進行二次開發的技術,並與目前常用的vba objectarx作了對比。同時討論了如何彌補.net api某些不足的功能。當前autocad的二次開發工具主要有 visuallisp vba和obje...

利用C 進行AutoCAD的二次開發

利用c sharp 進行autocad 的二次開發。在這一講中,主要介紹上一講例子中存在的問題。在上一次的例子中我是通過引用 autocad 2004 type library 來進行c sharp 與autocad 之間的通訊,但這種方法存在兩個致命的缺點。第乙個缺點是每次除錯程式的時候 c sh...

利用C 進行AutoCAD的二次開發(三)

利用c 進行 方法,比如要建立乙個圓,就是用addcircle方法,而非圖形物件的建立使用add方法。下面通過乙個簡單的例子來說明上面介紹的內容。這個例子是在 autocad中建立乙個新的層,然後在該層中畫乙個紅色的圓和一條綠色的直線。這是程式的源 請先把上一講中生成的interop.autocad...