2014-02-25

以VisualStudio開發AutoCAD初體驗

以VSTA來做AutoCAD開發,似乎已成不可阻止的趨勢,然而AutoCAD推這塊也至少八、九年了,不過坊間不管中英文版,似乎都沒發現相關的書籍出版....

要說沒人用.Net來開發那也未必,端看Autodesk社區的.net討論版,就可以發現。或許易用度不高的情況下,只有專業軟體開發人員才會用到吧。

先來看看開發軟體與可執行的版本吧..(以下初步歸類,若有錯誤歡迎指正)

目前可進行開發的Visual Studio (以下簡稱VS)版本至少要2003以上,而可以於AutoCAD(以下簡稱ACAD)可調用的軟體版本為2005以上 ,可開發的程式語言,VB與C#都可以。因為筆者只熟悉VB,以下以VB做測試例。我使用的版本是VS2008+ACAD2008。

我們於VS新增專案,選擇的是建立類別庫(註:類別庫日後編譯成DLL檔供ACAD調用),

然後需加入必要的參考檔acdbmgd.dll 與 acmgd.dll (若要其他功能函數還要再另加),然後在除錯設定中我們要指定要驅動的ACAD檔案路徑,這樣基礎環境才算完成可以進行開發。
或許眼尖的大大發現,我在新增專案時有個AutoCAD Managed VB....的選項,這部份就是下面要跟各位提的。有鑑於上述設定繁雜,有 Enhanced AutoCAD .NET Project Application Wizard這類的輔助工具可以讓你快速設定好專案直接進行開發,不過2003/2005/2008這三版的Enhanced AutoCAD .NET Project Application Wizard並不能相容,各位開發時要選對版本。
for 2003 (參考)
for 2005
for 2008

因在下使用2008版是OK,所以提供下載網址,其餘版本上網請自行搜尋。安裝完成開啟VS,你就可以使用了。
 
回到主題,當您新增專案時選擇AutoCAD Managed VB...的選項,其中下方名稱將會是日後編譯後的DLL檔名,在此設為hello。



然後它會跳出個對話框,讓你設定



其中Command Name是您於ACAD中載入後要執行的指令,在此設為test。(其實這裡沒設好,在程式編輯視窗中可以編輯)。然後按OK完成。程式就會自動將必要的設定設好。

然後我們就來個Hello World吧!!
在程式中我加入了簡單的一行
ed.WriteMessage("Hello AutoCAD...")
就可以按F5來做Debug了...

當開始除錯後,程式會直接驅動ACAD開啟它。ACAD開啟後 請鍵入netload,並於<我的文件路徑>/Visual Studio 2008\Projects\hello\hello\bin\Debug資料匣中,找到hello.dll這個檔並加載它。



於命令列鍵入test你就會發現回應了Hello AutoCAD...(Ya!!成功!!)



以筆者過去使用VBA的經驗來說,利用VS來做開發還是感覺不太方便

首先因為坊間沒有發現是API的參考函數之類的書籍?(線上參考手冊 )

再來於開發階段,你每Debug一次,VS就給鎖定並執行ACAD開檔(ACAD開檔又有點慢),然後你又要netload來安裝編譯過的dll檔,再鍵入指令測試,要改碼又關掉ACAD後VS才能解鎖編修,若再Debug一次,又要循環上述複雜的步驟,比起前幾年用VBA開發來比,真的不方便很多,至少我是這樣認為啦。不過終究可以讓Hello AcutCAD給顯示出來,至少就VS的開發來說,是踏出了一小小步了。

5 則留言:

  1. 馬克你好:
    你寫的很好,簡明扼要。沒早幾天看到此篇網誌,讓我在網上白費了許多功夫。
    我以往用 AUTOCAD2006 VBA 處理了不少工作。研究轉換成VB.net(AUTOCAD2014 VS2012) 搞2天下來,覺得麻煩大了。
    幾點請教:
    1. 是否一定要用 Class 不能用 console application ? (像連結 Tekla API 用 console appl. 就很方便 不必編譯生成 dll 再進 Tekla 才能執行) 網上找到的 console appl. 功能受限頗多?
    2. code 編寫麻煩多多 新增條線都要寫回block table record and the transaction
    3. 如你文所言 每Debug > 執行ACAD開檔 > 關 ACAD > 改碼 > Debug > ... 鬼打牆。
    如你我曾用過VBA者,應該會覺得這個麻煩大了。Autodesk很奇怪,又不是每個programmer都是寫給別人用的,何必只有如此嚴謹龐雜的架構?重點就是,有沒有如以前VBA的簡單架構,但又有新的一堆.net好用函數的方法? 謝謝。

    回覆刪除
  2. 也無風雨也無晴 大大,您的來信沒有您的MAIL,無法與您對您所提的內容進行交流,方便的話能否寄封信給在下...^^(奇怪?看您是留言了怎麼系統沒有留下內容??怪..)

    回覆刪除
  3. 小弟在2006年把VBA的斷面展點程式改寫成.Net就發現這嚴重的問題,
    AutoDesk 應該要有像VBA的語言,不用隨.Net的版本聞風起舞。

    回覆刪除
    回覆
    1. 鄧兄日安,好久不見^^
      其實這種事實在很為難,目前A公司的系列軟體,感覺已全面改以.Net的形式來處理,雖然AutoCAD還支援VBA的額外安裝機制,但我覺得日後的開發考量來講(如Revit API...),似乎是不得不的方式..

      刪除