複製鏈接
請複製以下鏈接發送給好友

ObjectARX

鎖定
ObjectARX是AutoDesk公司針對AutoCAD平台上的二次開發而推出的一個開發軟件包,它提供了以C++為基礎的面向對象開發環境應用程序接口,能真正快速的訪問AutoCAD圖形數據庫。 與以往的 AutoCAD 二次開發工具 AutoLISP 和ADS不同,ObjectARX應用程序是一個DLL(動態鏈接庫),共享AutoCAD的地址空間,對AutoCAD進行直接函數調用。所以,使用ARX編程的函數的執行速度得以大大提高。ARX 類庫採用了標準的C++類庫的封裝形式,這也大大提高了程序員編程的可靠度和效率。
ObjectARX最新的版本是ObjectARX2018。它是開發AutoCAD的核心,是最為高效的開發AutoCAD的工具。通過支持XML,為ObjectARX開發網絡協作應用提供了有力的支持。
中文名
面向對象的AutoCAD運行時擴展
外文名
ObjectARX
開發商
AutoDesk公司
類    型
二次開發而推出的一個開發軟件包
形    式
採用了標準的C++類庫的封裝形式

ObjectARX開發概述

ObjectARX應用程序是一個動態鏈接庫(DLL),它共享AutoCAD的地址空間並直接調用AutoCAD的函數。我們可以利用ObjectARX直接訪問AutoCAD的數據庫結構、圖形系統以及AutoCAD幾何構造核心。我們可以向ObjectARX編程環境添加新類,並將其輸出以供其他程序調用。我們創建的自定義實體與AutoCAD內部實體沒有任何區別。我們也可以在運行時通過向既有的AutoCAD類添加函數來擴充ObjectARX協議。由ObjectARX定義的外部命令與AutoCAD內部命令的執行機制是一樣的。
ObjectARX應用程序的本質是Windows的DLL程序,而AutoCAD本身則是一個典型的Windows程序,ObjectARX應用程序與AutoCAD、Windows之間均採用Windows消息傳遞機制直接進行通信。
ObjectARX應用程序與AutoCAD在同一地址空間內運行並能直接利用AutoCAD核心數據庫結構和代碼。由ObjectARX應用程序定義的外部命令通過acedRegCmds()宏註冊。這些外部命令與AutoCAD本身固有命令一樣由AutoCAD本身執行。
ObjectARX應用程序以VisualC++語言為開發基礎,具有面向對象編程方式的數據可封裝性、可繼承性多態性等特點。由它開發的工程CAD軟件具有模塊性好、獨立性強、連接簡單、使用方便、內部功能高效實用以及代碼可重用性強等優點,而且支持微軟的MFC類庫,能簡潔高效的實現很多複雜的功能。

ObjectARX開發環境

運用ObjectARX進行二次開發,必須首先設置好ObjectARX的開發環境。常用的開發環境是Microsoft Visual C++ 6.0 、Microsoft visual studio 2005、Microsoft visual studio 2008、Microsoft visual studio 2010。同時,還需要安裝ObjectARX SDK,ObjectARX SDK可以在AutoDesk公司的網站上免費下載。不同的AutoCAD版本對應相應的ObjectARX SDK的版本,常用的是ObjectARX SDK for AutoCADR14和ObjectARX SDK for AutoCAD2000i。這兩個開發工具在設置上略有不同,將進行對比介紹。 安裝好VC++和ObjectARX後,就可以開始設置開發環境了。
尋找路徑
設置INC和LIB文件尋找路徑
INC和LIB文件尋找路徑為VC++的環境參數,設置一次即可,對以後的所有項目均有效。 選擇 Tools→Options …,出現Option對話框,選擇Directories頁,在Show Directories for中選擇Include files,然後在Directories中加上ARX的INC目錄路徑c:\objectarx\inc(假定ARX的開發工具在c:\objectarx\中)。 在Show Directories for中選擇Library files,然後在Directories中加上ARX的LIB目錄路徑c:\objectarx\lib(假定ARX的開發工具在c:\objectarx\中
項目環境
建立項目並設置編譯環境
一般來説,開發的ObjectARX應用程序都需要支持MFC(如採用對話框等),因此,我們可以直接建立支持MFC的ObjectARX開發項目。每個項目均應設置編譯環境,一般項目的編譯環境可以有兩個設置,分別為發佈版本(Win32 Release)和調試版本(Win32 Debug)。在本節裏,介紹的是發佈版本的設置,而調試版本的設置將在下一節介紹。ObjectARX SDK for AutoCADR14和ObjectARX SDK for AutoCAD2000i在設置上面存在着差別,下面分別進行介紹
1.對於ObjectARX SDK for ACADR14
a. 選擇 File→New ,選擇projects頁→MFC AppWizard,給定項目名(helloR14)及位置,選OK,在DLL type中選擇MFC Extension DLL(using share MFC DLL),再選擇Finish。建立項目。
b. 選擇Build→Set Active Configration…→helloR14 Win32 Release,然後選OK。
c. 選擇Project→Setting,出現Project Settings對話框,開始設置編譯環境。
d. General中,Microsoft Foundation Classes選擇Use MFC in a Share DLL。
e. C/C++→Code Generation中,Use run-time library選擇Multithreaded DLL。
f. C/C++→Preprocessor中,Preprocessor definitions填入ACRXAPP,RADPACK,WIN32,NDEBUG,_WINDOWS。
g. Link→General中,Output file Name填入helloR14.arx。
h. Link→Input中,Object/library modules添加Acad.lib acedapi.lib rxapi.lib libacge.lib庫文件名。
i. Link→Output中,Base address填入0xc10000,Entry-point symbol中填入DllEntryPoing@12。
j. 點擊OK退出Project Settings對話框。
k. 添加HelloR14.cpp主程序,為了使ARX支持MFC,把 HelloR14.cpp的內容直接替換為ObjectARX/UTILS/MFCEXTRAS/目錄下ARXMFCTMPL.CPP的內容,其中包含了MFC所需的支持函數。同時加入公用頭文件 resourcehelper.h到項目中去,這個頭文件也可以在上面的目錄找到。
l. 添加註冊命令,在 initApp ()函數中,用 acedRegCmds->addCommand()冊新的AutoCAD命令。
m. 添加HelloR14.def定義文件,EXPORTS下加入 acrxEntryPoint acrxGetApiVersion
n. 對話框的可以採用一般VC++的對話框,繼承 CDialog類。
2.對於ObjectARX SDK for ACAD2000i
a. 選擇 File→New ,選擇projects頁→MFC AppWizard,給定項目名(hello2000)及位置,選OK,在DLL type中選擇MFC Extension DLL(using share MFC DLL),再選擇Finish。建立項目。
b. 選擇Build→Set Active Configration…→hello2000 Win32 Release,然後選OK。
c. 選擇Project→Setting,出現Project Settings對話框,開始設置編譯環境。
d. C/C++→Code Generation中,Use run-time library選擇Multithreaded DLL。
e. C/C++→Preprocessor中,Preprocessor definitions填入ACRXAPP, WIN32,NDEBUG,_WINDOWS,_WINDLL,_AFXDLL,AFXEXT。
f. Link→General中,Output file Name填入hello2000.arx。
g. Link→Input中,Object/library modules添加acge15.lib acad.lib acedapi.lib acrx15.lib acdb15.lib acutil15.lib rxapi.lib acui15.lib adui15.lib庫文件名。
h. Link→Output中,Base address填入0xc1000000。
i. 點擊OK退出Project Settings對話框。
j. 添加Hello2000.cpp主程序,為了使ARX支持MFC,需要把 Hello2000.cpp的內容直接替換為ObjectARX/DOCSAMPS/MFCSAMPS/DYNAMIC/目錄下ARXMFCTMPL.CPP的內容,其中包含了MFC所需的支持函數。同時加入兩個公用頭文件 resourcehelper.h和stdafx.h到項目中去,這兩個頭文件也可以在上面的目錄找到。
k. 添加註冊命令,在 initApp ()函數中,用 acedRegCmds->addCommand()新的AutoCAD命令。
l. 修改Hello2000.def文件,在EXPORTS下加入 acrxEntryPoint acrxGetApiVersion
m. 對話框採用的是ObjectARX提供的對話框類型,採用MFC UI提供的相關類。類的頭文件為 acui.h和adui.h。使用時可以先按照一般VC++的對話框建立對話框,然後修改該對話框繼承的類為CAcUiDialog。可以通過查找和替換,直接把項目中的CDialog全部替換為CAcUiDialog。在引用該對話框時用採用下面的方法,如: HelloDlg Hello2000dlg(CWnd::FromHandle(adsw_acadMainWnd()))
加卸載
項目編譯完成後,就可以在AutoCAD中加載運行了。加載ObjectARX程序,可以選擇Tools→Load Application…,然後選擇相應的 arx文件,點擊Load即可。 運行ObjectARX程序則通過鍵入程序中所註冊的命令進行調用。 需要卸載程序時,可以選擇Tools→Load Application…,然後選擇相應的 arx文件,點擊Unload即可。也可以直接鍵入(arxunload “ARX 程序名 ” )。

ObjectARX調試技巧

程序編寫中需要進行大量的調試工作,ObjectARX程序的調試可以跟普通的VC++程序一樣通過設置斷點來跟蹤,同時,還有一些ObjectARX獨特的調試技巧。
斷點跟蹤
ObjectARX的跟蹤調試需要首先設置調試版本(Win32 Debug)的編譯環境。不同版本的調試環境設置也略有不同。 對於ObjectARX SDK for ACADR14
a. 選擇Build→Set Active Configration…→helloR14 Win32 Debug,然後選OK。
b. 選擇Project→Setting,出現Project Settings對話框,開始設置編譯環境。
c. General中,Microsoft Foundation Classes選擇Use MFC in a Share DLL。
d. Debug→General中,Executable for debug session中選擇AutocadR14運行程序的位置,如C:\Program Files\AutoCAD R14\acad.exe
e. C/C++→Code Generation中,Use run-time library選擇Debug Multithreaded DLL。
f. C/C++→Preprocessor、Link→General、Link→Input、Link→Output的設置均同發佈版本(Win32 Release)
g. 點擊OK退出Project Settings對話框。
h. 編譯完成後,點擊F9在相應位置設置斷點。
i. 點擊F5開始跟蹤調試,調試開始時會自動打開AutoCAD,加載運行ARX後,到達斷點的位置,進入調試界面,可以查詢程序中變量的當前值,點擊F5可以繼續調試。
j. 程序運行完成後,退出AutoCAD,結束調試。 對於ObjectARX SDK for 2000i,調試環境的設置與R14的基本相同,主要的區別在於第e 步中,Use run-time library需要選擇Multithreaded DLL,否則會出現DLL的版本問題,而導致ARX無法加載。
其他技巧
ObjectARX的程序由於是運行在AutoCAD圖形支撐環境下的,程序中很多元素都是對應着圖形中的相應位置,因此,在調試的時候,除了通過設置斷點跟蹤變量外,還可以通過圖形顯示來觀察變量。 但是,ObjectARX在AutoCAD裏面進行繪製時,需要與AutoCAD數據庫進行交互,代碼比較長,直接在程序裏面寫入容易造成混亂。因此,可以利用我們開發的ObjectARX基本繪圖函數庫(Plot1和Plot2)。該函數 庫提供了大量的圖形繪製函數、文字輸出函數以及圖形編輯函數,調用時只需一行代碼就可以完成,十分方便。其中常用的函數有以下這些:
l 繪圖相關函數 createLine 畫直線 createDimR 傾斜尺寸標註 createDim 水平或豎直尺寸標註 createPoint 創建點 createCircle 畫圓 createArc 畫圓弧 createText 寫字符串 createTextN 寫 一整數 createTextR 寫 一實數 createPline 畫等寬多義線 createHatch 區域填充 insertBlock 插入圖塊 l 圖形編輯相關函數 eraseByName 按實體的 ads_name 刪除實體 eraseById 按實體的ID刪除實體 changeLayerByName 按實體的 ads_name 改變實體的層 changeColorByName 按實體的 ads_name 改變實體的顏色 changeTextByName 按實體的 ads_name 改變實體字符內容 有了這個函數庫,就可以通過添加輔助線和輔助圖元、顯示不同位置的變量值、改變圖元的顏色等調試方法進行程序的調試了。