1.開發基本資料准備
用Vs2010進行Autocad 2010開發,首先下載ObjectArx 2010 SDK。
http://download.autodesk.com/akdlm/esd/dlm/objectarx/ObjectARX_2010_Win_64_and_32Bit.exe
2.使用Visual Studio .NET來創建一個新的類庫工程
(1)建立類庫項目
啟動Visual Studio.NET,選擇”文件>新建>工程”(File> New> Project)。在新建工程對話框中選擇工程類型為”Visual C#工程”,然后選擇“windows”>”類庫”模板,點擊確定按鈕來創建工程。
(2)添加引用
在項目引用中添加acdbmgd.dll和acmgd.dll,默認位置在c:/ObjectARX 2010/inc-win32下。
添加引用后,展開引用,單擊AcDbMgd和AcMgd,將其屬性復制到本地分別改為False,否則可能會出現編譯錯誤。
AutoCAD 2010 采用 .Net Framework 3.5 版本,Vs 2010 創建默認工程采用.Net Framework 4.0 版本,必須將目標框架改為Net Framework 3.5 。修改方法:菜單 項目>ClassLibrary1屬性>應用程序>框架屬性,選擇 .Net Framework 3.5 就可以了。
(3) 導入命名空間。
如:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
(4) 加入自定義命令
新建HelloWorld的自定義AutoCAD 命令,可以這么做:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.EditorInput;
- using Autodesk.AutoCAD.Runtime;
- namespace ClassLibrary1
- {
- public class Class1
- {
- [CommandMethod("HelloWorld")]
- public void HelloWorld()
- {
- Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
- ed.WriteMessage("Hello World");
- }
- }
- }
該命令在當前命令行顯示 Hello World。
3. 編譯和調試
(1)手動加載
點擊生成>生成解決方案,編譯完成。
要加載生成的DLL文件,必須用Netload命令。在AutoCAD命令行輸入Netload,選擇 ClassLibrary1.dll 就可以加載了。
在命令行輸入 HelloWorld 命令,就可以看到其執行效果了。
Netload加載的程序不能卸載,要想再調試只能退出Autocad,然后重新編譯、加載。
(2)自動加載
菜單 項目>ClassLibrary1屬性>調試>啟動操作,選擇啟動外部程序,程序名為AutoCAD.exe ,默認安裝位置在c:/Program Files/AutoCAD 2010/acad.exe;命令行參數設置 /nologo /b "d:/ClassLibrary1/ClassLibrary1/bin/debug/start.scr" 。
start.scr 文件是自己編寫的autocad運行腳本文件,該文件是文本文件,添加一行文本:netload "d:/ClassLibrary1/ClassLibrary1/bin/debug/ ClassLibrary1.dll"
這樣我們就可以直接運行調試了。
(3)調試
按照以上步驟運行后,不支持斷點調試,我們還應修改acad.exe.config.xml文件,該文件在c:/Program Files/AutoCAD 2010/下,增加一行 <supportedRuntime version="v2.0.50727"/>內容。修改后的acad.exe.config.xml的內容如下:
<configuration>
<startup>
<supportedRuntime version="v2.0.50727"/>
</startup>
<!--All assemblies in AutoCAD are fully trusted so there's no point generating publisher evidence-->
<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
</configuration>