AUTOCAD二次開(kāi)發(fā)之ObjectARX_第1頁(yè)
AUTOCAD二次開(kāi)發(fā)之ObjectARX_第2頁(yè)
AUTOCAD二次開(kāi)發(fā)之ObjectARX_第3頁(yè)
AUTOCAD二次開(kāi)發(fā)之ObjectARX_第4頁(yè)
AUTOCAD二次開(kāi)發(fā)之ObjectARX_第5頁(yè)
已閱讀5頁(yè),還剩232頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1 2008 Autodesk ObjectARX 2009梁曉冬梁曉冬Autodesk DevTech2008年7月16日-7月18日 北京2 2008 Autodesk AutoCAD Raptor 認(rèn)識(shí)一下認(rèn)識(shí)一下 梁曉冬 開(kāi)發(fā)技術(shù)支持 Developer Technical Services (DevTech) Autodesk Developer Network (ADN) 主要負(fù)責(zé)機(jī)械和制造業(yè)CAD (MSD), Navisworks (AEC) email: Xiaodong.L你們是誰(shuí)? 3 2008 Autodesk AutoCAD Raptor DevTech 中國(guó)區(qū)團(tuán)隊(duì)中

2、國(guó)區(qū)團(tuán)隊(duì) Barbara 韓華秦洪現(xiàn)Joe 葉雄進(jìn)梁曉冬4 2008 Autodesk AutoCAD Raptor 培訓(xùn)目標(biāo)培訓(xùn)目標(biāo)培訓(xùn)內(nèi)容主要是 ObjectARX基礎(chǔ)知識(shí) 如何使用 ObjectARX 如何在以后的實(shí)際工作中獨(dú)立的獲取相關(guān)資源和幫助不是 如何使用 C+ 對(duì)所有的ObjectARX API做完整的講述5 2008 Autodesk AutoCAD Raptor Autodesk 系列產(chǎn)品開(kāi)發(fā)培訓(xùn)教程系列產(chǎn)品開(kāi)發(fā)培訓(xùn)教程 6 2008 Autodesk AutoCAD Raptor 課程安排課程安排時(shí)間 9:00 - 17:00早上 9:00 12:00午餐 12:00 13

3、:00下午 13:00 17:007月17日實(shí)體對(duì)象操作擴(kuò)充數(shù)據(jù)反應(yīng)器用戶界面7月18日自定義對(duì)象多文檔環(huán)境幾何類(lèi)測(cè)試 7月16日API 概覽ObjectARX基本知識(shí)用戶交互和選擇集數(shù)據(jù)庫(kù)操作7 2008 Autodesk AutoCAD Raptor API 概覽8 2008 Autodesk AutoCAD Raptor API 概覽概覽API 一般情況API類(lèi)型客戶端/服務(wù)器端交互客戶端代碼AutoCAD的API和集成開(kāi)發(fā)環(huán)境 (IDE)執(zhí)行性能比較9 2008 Autodesk AutoCAD Raptor API 概覽概覽什么是 API? (Application Program

4、Interface) 應(yīng)用程序留給對(duì)其調(diào)用的接口,客戶端程序通過(guò)調(diào)用 API 去執(zhí)行應(yīng)用程序的命令 ,訪問(wèn)其數(shù)據(jù)等等。要求兩方面內(nèi)容:包含執(zhí)行特定服務(wù)的入口點(diǎn)正確調(diào)用服務(wù)執(zhí)行API的代碼可以包裝為:源代碼模塊 (.h/.cpp 中C+)二進(jìn)制靜態(tài)庫(kù)DLLEXE 10 2008 Autodesk AutoCAD Raptor Application.exeAPI 包裝包裝1. 源代碼2. 靜態(tài)庫(kù)3. DLL4. EXEATL templatesAPI1Static MFC LibraryAPI2Win 32 API DLLsAPI3Client EXE, DLL, script, etc.API

5、411 2008 Autodesk AutoCAD Raptor 客戶端客戶端/服務(wù)器端交互服務(wù)器端交互 進(jìn)程內(nèi)客戶端/服務(wù)器端在同一進(jìn)程 本地 客戶端/服務(wù)器端在同一機(jī)器遠(yuǎn)程客戶端/服務(wù)器端在同一網(wǎng)絡(luò)12 2008 Autodesk AutoCAD Raptor .EXE.DLL.DLLAPIAutoCAD.ARX.ARXObjectARX APIs嵌入架構(gòu)嵌入架構(gòu)API被 可執(zhí)行程序(宿主程序)執(zhí)行可執(zhí)行程序(宿主程序)執(zhí)行 客戶端通常為dll13 2008 Autodesk AutoCAD Raptor 客戶端代碼形式客戶端代碼形式解釋代碼代碼腳本-AutoLISP封裝代碼預(yù)處理, 半解

6、釋代碼-編譯后的 Visual LISPAutoCAD.NET編譯為IL編譯代碼編譯器指令代碼-ObjectARX慢快14 2008 Autodesk AutoCAD Raptor AutoCAD 的的API和和IDEu APIObjectARXCOM Automation (VB, Java, Delphi, etc.)AutoLISP.NET 托管 APIu IDEVisual LISPVisual Basic, Applications Edition (VBA)15 2008 Autodesk API 實(shí)現(xiàn)實(shí)現(xiàn) IAutoCADObjectDBX3D graphics cachedwg

7、HEIDI2D graphics cache (WHIP!)PlotHDIDisplay drvPlotter drvObjectARX SDK (free, http:/ ADF (licensed, http:/ DDK (licensed, http:/ DDK (licensed, http:/ DDK (free, http:/)Legend:Input acquisitionInput drv16 2008 Autodesk AutoCAD API 實(shí)現(xiàn)實(shí)現(xiàn) IIAutoCADObjectARX APIaxdb.dllvl.arx VisualLISPCOMacvba.arxCOM

8、 VBA(進(jìn)程內(nèi))COM 客戶端(進(jìn)程外) .NETacdbmgd.dll acmgd.dll17 2008 Autodesk AutoCAD API 性能比較性能比較S.0.58 productionAutoCAD API PerformanceS.0.58 prodCreate 1000 CirclesCreate 1000 linesUpdate 1000 CirclesAdd XData to 1000 Entities Create 1000 2dPolylinesTotalCOM (VB)24.7023.757.149.7326.7992.11COM (VBA)1.401.340.

9、62LISP3.763.584.636.0828.0446.08ObjectARX0.290.214.62COM (VB)COM (VBA)LISPObjectARXCreate 1000 CirclesCreate 1000 linesUpdate 1000 CirclesAdd XData to 1000 EntitiesCreate 1000 2dPolylinesTotal0.0010.0020.0030.0040.0050.0060.0070.0080.0090.00100.00SecondsAutoCADs APIsMachine p

10、rofile:CPU: Pentium 150 MHzRAM: 64 MBS.0.58 API Performance18 2008 Autodesk 在AutoCAD中存儲(chǔ)數(shù)據(jù)不同API方式的比較數(shù)據(jù)容器存儲(chǔ)性能比較Time in seconds19 2008 Autodesk 在AutoCAD中存儲(chǔ)數(shù)據(jù)不同API方式的比較數(shù)據(jù)容器存儲(chǔ)性能比較Time in seconds20 2008 Autodesk 數(shù)據(jù)容器存儲(chǔ)性能比較Time in seconds在AutoCAD中存儲(chǔ)數(shù)據(jù)不同API方式的比較21 2008 Autodesk AutoCAD Raptor API 比較結(jié)果比較結(jié)果u速

11、度ObjectARX, .NET, VBAu功能ObjectARX , .NET (除了自定義實(shí)體)u易用性.NET , VBAu容易入門(mén).NET, VBA22 2008 Autodesk AutoCAD Raptor ObjectARX的優(yōu)勢(shì)的優(yōu)勢(shì)u 效率高u 功能強(qiáng)u 計(jì)算精度高u 適用開(kāi)發(fā)復(fù)雜的大型程序u 調(diào)試方便 23 2008 Autodesk AutoCAD Raptor ObjectARX基本知識(shí)24 2008 Autodesk AutoCAD Raptor 什么是什么是 ObjectARX?u AutoCAD 運(yùn)行擴(kuò)展(AutoCAD Runtime eXtension)一系列

12、面向?qū)ο蟮腃+庫(kù)一個(gè)框架一個(gè)DLL插件模塊 (.ARX)不單單是個(gè)工具包運(yùn)行在AutoCAD進(jìn)程中可訪問(wèn)AutoCAD同一塊內(nèi)存空間系統(tǒng)中包含特定的對(duì)象自定義實(shí)體反應(yīng)器.25 2008 Autodesk AutoCAD Raptor ObjectARX能做什么能做什么?u編輯和擴(kuò)展圖形數(shù)據(jù)庫(kù)創(chuàng)建/編輯/刪除對(duì)象創(chuàng)建新的對(duì)象類(lèi)型u編輯 AutoCAD 用戶接口命令工具條/對(duì)話框?qū)傩悦姘逶O(shè)計(jì)中心顯示系統(tǒng)u監(jiān)控/修改 AutoCAD 標(biāo)準(zhǔn)行為事件通知輸入點(diǎn)獲取26 2008 Autodesk AutoCAD Raptor 開(kāi)發(fā)環(huán)境開(kāi)發(fā)環(huán)境uMicrosoft Windows 2000, Servic

13、e Pack 4; Microsoft Windows XP Professional, Service Pack 2; Windows Vista Enterprise; Windows Vista Business; and Windows Vista UltimateuMicrosoft Visual Studio 2005, Service Pack 1uPentiumIV or lateru512 MB RAMu1024 x 768 VGA with True Color (minimum)uObjectARX 工具包27 2008 Autodesk AutoCAD Raptor 如

14、何得到如何得到ObjectARXSDK( Software Development Kits)免費(fèi)下載Autodesk 網(wǎng)站http:/ 網(wǎng)站,檢索ObjectARXhttp:/28 2008 Autodesk AutoCAD Raptor ObjectARX SDK 版本版本u objectARX 2009 SDK 和2008兼容,在2008上的ARX能在2009上運(yùn)行,但2009上的ARX不能在以前的版本上運(yùn)行u ObjectARX 2008 SDKAutoCAD 2008 和以前版本二進(jìn)制不兼容u ObjectARX 2007 SDKAutoCAD 2007u ObjectARX 200

15、6 SDKAutoCAD 2005 and 2006u ObjectARX 2004 SDK-AutoCAD 2004, 2005 and 200629 2008 Autodesk AutoCAD Raptor ObjectARX SDK 內(nèi)容內(nèi)容庫(kù)文件和頭文件開(kāi)發(fā)文檔示例程序?qū)嵱霉ぞ?0 2008 Autodesk AutoCAD Raptor 開(kāi)發(fā)資源開(kāi)發(fā)資源u SDK u SDK sampleu SDK arxlabsu ObjectARX 幫助u ADN網(wǎng)站u 網(wǎng)絡(luò)檢索 31 2008 Autodesk AutoCAD Raptor SDK Sample uObjectARXSampl

16、es目錄下(按照功能類(lèi)別組織 )COMEDITORDATABASEENTITYGRAPHICSMISC兩個(gè)很好的例子:PolySamp and ArxDbg32 2008 Autodesk AutoCAD Raptor SDK arxlabs33 2008 Autodesk AutoCAD Raptor ObjectARX 幫助幫助34 2008 Autodesk ADN網(wǎng)站網(wǎng)站http:/提問(wèn)case Solution(解決方案)WhitePaper(白皮書(shū)) 35 2008 Autodesk ADN網(wǎng)站網(wǎng)站36 2008 Autodesk 網(wǎng)站檢索網(wǎng)站檢索u Googleu Baiduu

17、http:/ u CAD討論BBS37 2008 Autodesk AutoCAD Raptor 實(shí)用工具類(lèi)實(shí)用工具類(lèi)u AutoCAD Facet Modeler(面建模器)aecmodeler50.libu AcBr AutoCAD 邊界表示法acbr17.lib acgex17.lib & DLLsu ObjectARX 2009 向?qū)?可從 ADN網(wǎng)站獲取最新版本ObjectARX 2009utilsObjARXWizu Teefy 將現(xiàn)有程序轉(zhuǎn)換為使用Unicode 字符集uARXDBGuDependency Walker C:Program FilesMicrosoft V

18、isual Studio 8Common7Toolsbindepends.exe 38 2008 Autodesk AutoCAD Raptor ObjectARX實(shí)用文檔實(shí)用文檔ObjectARX/docsObjectARX 幫助文檔(arxdoc.chm)ObjectARX 開(kāi)發(fā)指導(dǎo) (arxdev.hlp/chm)參考手冊(cè) (arxref.hlp/chm)移植幫助 (arxmigr.hlp)ObjectARX Readme (readarx.hlp/chm)ObjectARX 入門(mén)培訓(xùn)材料-LabsObjectARX/arxlabs/ObjectARXLabs.chm39 2008 Au

19、todesk AutoCAD Raptor ARXDBG ! (ARX Debug)40 2008 Autodesk AutoCAD Raptor .ARX = .DLL + 2 輸出函數(shù)輸出函數(shù).EXE.DLL.DLLAPIacrxEntryPointacrxGetApiVersionAutoCAD.ARX.ARXObjectARX APIs41 2008 Autodesk AutoCAD Raptor 主要的庫(kù)主要的庫(kù) - IuAcRx 對(duì)象和類(lèi)管理庫(kù) (rxapi.lib)uAcEd AutoCAD 編輯器工具庫(kù) (acedapi.lib)uAcDb AutoCAD 數(shù)據(jù)庫(kù)對(duì)象庫(kù) (ac

20、db17.lib)uAcGi AutoCAD 圖形接口庫(kù) (acgiapi.lib)uAcGe AutoCAD 幾何庫(kù) (acge17.lib)42 2008 Autodesk AutoCAD Raptor 主要的庫(kù)主要的庫(kù) - IIuAcUi/AdUi MFC 擴(kuò)展庫(kù)(adui17.lib acui17.lib)u自動(dòng)化庫(kù)(Automation) (axdb.lib oleaprot.lib)uInternet 超鏈接庫(kù) (achapi17.lib)uADS 函數(shù)集 (acad.lib)u靜態(tài)連接內(nèi)存管理庫(kù) (rxheap.lib)43 2008 Autodesk AutoCAD Rapto

21、r 主要的庫(kù)主要的庫(kù) - IIIuASI - ACAD SQL 接口 (asiapi17.lib)uASE - ACAD SQL 環(huán)境 (aseapi17.lib)uISM 圖象支持模塊 (acismobj17.lib)44 2008 Autodesk AutoCAD Raptor 主要的類(lèi)主要的類(lèi) IAcRx類(lèi)對(duì)象運(yùn)行類(lèi)識(shí)別類(lèi)協(xié)議擴(kuò)展對(duì)象比較對(duì)象拷貝AcEd類(lèi)定義和注冊(cè)AutoCAD新命令A(yù)cEdCommandStackAcEditorReactor 等監(jiān)控相關(guān)事件45 2008 Autodesk AutoCAD Raptor 主要的類(lèi)主要的類(lèi) IIAcDb 類(lèi)AutoCAD 數(shù)據(jù)庫(kù)類(lèi)表字典

22、實(shí)體屬性AutoCAD圖形實(shí)體類(lèi)系統(tǒng)變量 AcGi 類(lèi)圖形接口類(lèi)自定義實(shí)體顯示協(xié)議AcGe 類(lèi)幾何類(lèi)46 2008 Autodesk AutoCAD Raptor 加載加載 ObjectARX 程序程序 Iu 用戶加載ARX & APPLOAD 命令Drag & Dropu 按需加載 啟動(dòng)acad.rx 文件 每行列出一個(gè)ARX名。AUTOCAD每次啟動(dòng)時(shí)都會(huì)在搜索路徑下查找這個(gè)文件,如果有,則順序加載列表中的ARX程序Registry(arxload) in acad.lsp命令調(diào)用Registry:通過(guò)注冊(cè)表按請(qǐng)求從其他程序代理檢測(cè)Registry u 實(shí)時(shí) acrxLoa

23、dModule 參見(jiàn)PolySamp47 2008 Autodesk 加載加載 ObjectARX 程序程序 II1. LoadLibrary2. _DllMainCRTStartup (C/C+ 運(yùn)行庫(kù)的入口函數(shù))3. CRT_INIT (初始化C/C+運(yùn)行庫(kù)和靜態(tài)全局變量)4. DllMain (參考MSDN )5. acrxGetApiVersion6. acrxEntryPoint.ARXAutoCADOperating System.6.Rxapi.libCRT4.48 2008 Autodesk AutoCAD Raptor ObjectARXCRASH!錯(cuò)誤的錯(cuò)誤的

24、ARX內(nèi)存管理內(nèi)存管理AutoCAD/ObjectDBXMSVCRT .DLL.ARXMSVCRTD.DLL1. .ARX 通過(guò)debug 堆分配內(nèi)存2. .ARX把分配好的內(nèi)存?zhèn)鹘oAutoCAD3. AutoCAD 用release 的delete釋放內(nèi)存 - CRASHPiece of Memory9 2008 Autodesk ObjectARXAutoCAD/ObjectDBXMSVCRT .DLL.ARX1. .ARX 通過(guò)debug 堆分配內(nèi)存2. .ARX把分配好的內(nèi)存?zhèn)鹘oAutoCAD3. AutoCAD 用release 的delete釋放內(nèi)存 - OKPiec

25、e of Memory1.2.3.正確的ARX內(nèi)存管理 I50 2008 Autodesk ObjectARXAutoCAD/ObjectDBXMSVCRT .DLL.ARX1. .ARX 通過(guò)rxheap.lib分配內(nèi)存2. AutoCAD 在release堆上分配內(nèi)存3. .ARX 將內(nèi)存?zhèn)鬟f給AutoCAD4. AutoCAD 用release 的delete釋放內(nèi)存 - OKRxheap.lib1.3.4.Piece of Memory2.Libcmt.lib正確的正確的ARX內(nèi)存管理內(nèi)存管理 II51 2008 Autodesk AutoCAD Raptor AutoCAD 2008

26、 堆管理堆管理Windows Virtual Memory ManagerAcadHeapCRTVmemHeidiHeapGC Heap Win32 HeapASM HeapATIL HeapWin32 LFHAcDbWhip3D GSVisual LispManaged arx appsAdImagingUnmanagedArx apps52 2008 Autodesk AutoCAD Raptor AutoCAD 2009 堆管理堆管理Windows Virtual Memory ManagerCRTUHMGC Heap ASM HeapATIL HeapWin32 LFHAcDbWhip

27、3D GSVisual LispManaged arx appsAdImagingUnmanagedArx apps53 2008 Autodesk AutoCAD Raptor 命令機(jī)制命令機(jī)制 IAcEdCommandStackAutoCAD.ARX回調(diào)函數(shù)1. 添加命令2. 創(chuàng)建一個(gè)命令對(duì)象3. 參數(shù)化對(duì)象4. 用戶調(diào)用命令5. 查找命令對(duì)象6. 調(diào)用回調(diào)函數(shù)AcEdCommand2,.1.54 2008 Autodesk AutoCAD Raptor 命令機(jī)制命令機(jī)制 IIu 移出命令和添加命令一樣重要u 命令名稱(chēng)可能沖突 命令屬于不同的命令組(解決命令沖突的方法)u 命

28、令組必須是唯一的Registered Developer Symbol (RDS)http:/ 2008 Autodesk AutoCAD Raptor addCommand結(jié)合幫助講解 56 2008 Autodesk AutoCAD Raptor 演示演示手動(dòng)創(chuàng)建ARX程序 57 2008 Autodesk AutoCAD Raptor 演示演示通過(guò)ObjectARX向?qū)?chuàng)建工程 58 2008 Autodesk AutoCAD Raptor Lab 1通過(guò)ObjectARX向?qū)?chuàng)建工程,添加一個(gè)命令輸出字符串。 59 2008 Autodesk AutoCAD Raptor 什么是什么是

29、 RealDWG 和和 ObjectDBX?uObjectDBX 是 獨(dú)立于AutoCAD的 ObjectARX子集uRealDWG 是 在AutoCAD 之外的程序中使用 ObjectDBX 的許可u一組dll組成u提供自定義對(duì)象服務(wù)u擴(kuò)展程序開(kāi)發(fā)框架http:/ 2008 Autodesk AutoCAD 2000以前以前程序依靠 AutoCAD 管理數(shù)據(jù)61 2008 Autodesk 新的數(shù)據(jù)庫(kù)框架新的數(shù)據(jù)庫(kù)框架 從從 AutoCAD 2000開(kāi)始開(kāi)始62 2008 Autodesk 識(shí)別自定義對(duì)象識(shí)別自定義對(duì)象63 2008 Autodesk ObjectDBXObjectARX S

30、DKacad.libacedapi.libacui17.libadui17.liboleaprot.libAcTc.libAcTcUI.libSharedacdb17.libacge17.libacgiapi.libaxdb.libachapi17.librxapi.libacismobj17.librxheap.librcexelib.objObjectARX & ObjectDBX64 2008 Autodesk AutoCAD Raptor ObjectDBX 在在AutoCAD下能做什么下能做什么?u 創(chuàng)建/編輯 DWG/DXF 文件內(nèi)容 (.ARX)u 創(chuàng)建 自定義對(duì)象 (.

31、DBX)u 不能 創(chuàng)建獨(dú)立的程序 這需要RealDWG65 2008 Autodesk AutoCAD Raptor 用戶交互和選擇集66 2008 Autodesk AutoCAD Raptor 何為用戶交互?何為用戶交互?命令等待用戶輸入所需要的數(shù)據(jù)或參數(shù)AutoCAD根據(jù)參數(shù)返回相應(yīng)的狀態(tài),輸出相應(yīng)的結(jié)果67 2008 Autodesk AutoCAD Raptor 何為選擇集何為選擇集圖形實(shí)體集合68 2008 Autodesk AutoCAD Raptor 交互交互API (一般參數(shù)一般參數(shù)) 形如acedGetXXX()的全局函數(shù)獲取整數(shù)acedGetInt() 獲取實(shí)數(shù)acedG

32、etReal()獲取字串a(chǎn)cedGetString()獲取角度acedGetAngle()獲取距離acedGetDis() 獲取點(diǎn)acedGetPoint()獲取關(guān)鍵字acedGetKword()69 2008 Autodesk AutoCAD Raptor acedGetXXX常用狀態(tài)返回值常用狀態(tài)返回值RTNORM 成功RTCAN 取消RTKWORD 輸入關(guān)鍵字RTERROR 其它錯(cuò)誤RTNONE用戶只輸入EnterRTREJAutoCAD認(rèn)為無(wú)效的輸入頭文件:adscodes .h70 2008 Autodesk AutoCAD Raptor 演示演示交互API(一般參數(shù))使用演示Tra

33、iningSampleS_2_1:整數(shù)和實(shí)數(shù)S_2_2:字符串S_2_3:點(diǎn)和距離S_2_4:角度和角點(diǎn)71 2008 Autodesk AutoCAD Raptor 用戶交互用戶交互API acedInitGet控制其后的一個(gè)acedGetXXX()函數(shù)的用戶輸入 int acedInitGet (int val, const ACHAR *kwl) val設(shè)定輸入數(shù)據(jù)的范圍和方式, 控制位組合只控制緊隨其后的一個(gè)acedGetXXX()函數(shù)的輸入,之后立即失效 控制位的設(shè)置選項(xiàng)位位位值位值代碼代碼說(shuō)明說(shuō)明位01RSG_NONULL不允許空輸入位12RSG_NOZERO不允許輸入0位24RS

34、G_NONEG不允許輸入負(fù)數(shù)位38RSG_NOLIM不檢查圖形邊界(即使LIMCHECK為1)位416未使用位532RSG_DASH用虛線表示橡皮筋線或矩形框位664RSG_2D不考慮3D點(diǎn)的Z坐標(biāo)(只用于acedGetDist()函數(shù))位7128RSG_OTHER允許任意輸入(無(wú)論什么用戶類(lèi)型)位8256RSG_DDISTFIRST使直接距離輸入優(yōu)先于任意輸入位9512RSG_TRACKUCS對(duì)于面域允許UCS追蹤位101024RSG_NOORTHOZ在Z坐標(biāo)軸上,關(guān)閉極軸追蹤/對(duì)象追蹤/正交模式72 2008 Autodesk AutoCAD Raptor 用戶交互用戶交互API aced

35、InitGetKwl: 選項(xiàng)關(guān)鍵字列表 每個(gè)選項(xiàng)以空格分開(kāi) 只能是字母,數(shù)字和下劃線 可以隨意設(shè)置簡(jiǎn)寫(xiě),但不能矛盾 例如Red BLue yellOW 沒(méi)有簡(jiǎn)寫(xiě),則必須輸入整個(gè)關(guān)鍵字才能識(shí)別 關(guān)鍵字的全球化 acedInitGet(RSG_NONULL, Ja NEIN,N _ YES,Y No);用戶輸入完畢,用acedGetInput獲得輸入的字串73 2008 Autodesk 演示演示acedInitGet 控制輸入數(shù)據(jù)TrainingSampleS_2_5S_2_674 2008 Autodesk AutoCAD Raptor 選擇集選擇集API 實(shí)體選擇 acedSSGet 任何形

36、式選擇 acedEntSel 選擇單個(gè)實(shí)體(單選) acedNEntSel 選擇單個(gè)實(shí)體或復(fù)雜實(shí)體的子實(shí)體 acedNEntSelP 選擇單個(gè)實(shí)體或復(fù)雜實(shí)體的子實(shí)體 (常用)選擇輔助函數(shù) acedSSLength 獲取選擇集實(shí)體的個(gè)數(shù) acedSSName 獲取在選擇集中的實(shí)體,表示實(shí)體位置的序號(hào)從0開(kāi)始 acedSSFree 釋放指定的選擇集 acedSSDel 從選擇集中刪除指定的實(shí)體 acedSSAdd 創(chuàng)建新的選擇集或把實(shí)體添加到一個(gè)已存在的選擇集中 acedSSDel 從選擇集中刪除指定的實(shí)體 acedSSMemb 判斷一個(gè)實(shí)體是否已在選擇集中75 2008 Autodesk Aut

37、oCAD Raptor 命令流程控制命令流程控制 acedGetXXX所需參數(shù)關(guān)鍵字Option1關(guān)鍵字Option2.acedGetXXX執(zhí)行Option2的流程其它流程執(zhí)行Option1的流程后續(xù)操作76 2008 Autodesk AutoCAD Raptor resbuf結(jié)果緩沖區(qū)resbuf是結(jié)構(gòu)體,用rbnext字段可以把多個(gè)結(jié)果緩沖區(qū)鏈接成一個(gè)單鏈表可為選擇集函數(shù)設(shè)置過(guò)濾條件acutBuildList 創(chuàng)建resbufacutRelRb 刪除resbufstruct resbuf struct resbuf *rbnext; short restype; union ads_u_

38、val resval;77 2008 Autodesk resbuf-restype也是DXF組碼78 2008 Autodesk 演示演示TrainingSampleS_2_8:構(gòu)建resbuf,為acedCmd輸入?yún)?shù),運(yùn)行圓命令79 2008 Autodesk AutoCAD Raptor acedSSGetacedSSGet( const ACHAR * str, / 選擇模式 const void * pt1, /某些選擇模式需要輸入的點(diǎn)列 const void * pt2, /某些選擇模式需要輸入的點(diǎn)列 const struct resbuf * filter, /選擇條件過(guò)濾器

39、ads_name ss); /選擇集80 2008 Autodesk AutoCAD Raptor acedSSGet 選擇模式選擇模式Selection CodeDescriptionNULLSingle-point selection (if pt1 is specified)or user selection (if pt1 is also NULL)#Nongeometric (all, last, previous):$Prompts supplied.User pick:?Other callbacksAAllBBoxCCrossingCPCrossing Polygon:DDup

40、licates OK:EEverything in apertureFFenceGGroupsIImplied:KKeyword callbacksLLastMMultiplePPrevious:SForce single object selection onlyWWindowWPWindow PolygonXExtended search (search whole database)81 2008 Autodesk AutoCAD Raptor acedSSGet 過(guò)濾關(guān)系符和條件符過(guò)濾關(guān)系符和條件符82 2008 Autodesk AutoCAD Raptor 演示演示Training

41、SampleS_2_9: 默認(rèn)選擇S_2_10: Windows選擇S_2_11: 過(guò)濾條件83 2008 Autodesk AutoCAD Raptor Lab 21、處理用戶輸入函數(shù)2、處理選擇集 84 2008 Autodesk AutoCAD Raptor 數(shù)據(jù)庫(kù)操作85 2008 Autodesk AutoCAD Raptor 術(shù)語(yǔ)術(shù)語(yǔ)AutoCAD 會(huì)話是AutoCAD程序的一個(gè)實(shí)例 文檔當(dāng)前文檔 ObjectARX 處理的文檔(可能在后臺(tái))活動(dòng)文檔用戶在 UI看到的圖形文件數(shù)據(jù)庫(kù)工作數(shù)據(jù)庫(kù)當(dāng)前圖形, acdbCurDwg 定義為:acdbHostApplicationServic

42、es()-workingDatabase()對(duì)象(AcDbObject)所有存放于數(shù)據(jù)庫(kù)中的可操作目標(biāo)實(shí)體(AcDbEntity) 可用于顯示的圖形對(duì)象86 2008 Autodesk AutoCAD Raptor AutoCAD 圖形數(shù)據(jù)庫(kù)圖形數(shù)據(jù)庫(kù)AutoCAD數(shù)據(jù)庫(kù)是按一定結(jié)構(gòu)組織的所有AutoCAD對(duì)象的集合用于組織管理AutoCAD對(duì)象是AutoCAD對(duì)象在內(nèi)存中的表示AutoCAD 圖形文件是對(duì)象數(shù)據(jù)庫(kù)的永久狀態(tài)對(duì)象有唯一的標(biāo)識(shí) 對(duì)象可以被 別的對(duì)象引用 對(duì)象中可綁定數(shù)據(jù),比如實(shí)體自身屬性,對(duì)象的xdata87 2008 Autodesk AutoCAD Raptor AutoCA

43、D 圖形數(shù)據(jù)庫(kù)結(jié)構(gòu)圖形數(shù)據(jù)庫(kù)結(jié)構(gòu)符號(hào)表和各種類(lèi)型的符號(hào)表記錄,主要包括9種類(lèi)型的符號(hào)表命名對(duì)象詞典88 2008 Autodesk AutoCAD Raptor 重要的對(duì)象重要的對(duì)象塊表兩個(gè)缺省的塊表記錄*MODEL_SPACE*PAPER_SPACE, *PAPER_SPACE0實(shí)體只有添加到上面的以上塊表記錄中才能在AutoCAD可見(jiàn)塊表記錄只能存放實(shí)體對(duì)象命名對(duì)象詞典AutoCAD 新的符號(hào)表詞典可以放任何對(duì)象 (實(shí)體Entity除外)89 2008 Autodesk AutoCAD Raptor AcDbDatabase 操作操作獲取AutoCAD當(dāng)前活動(dòng)的數(shù)據(jù)庫(kù)對(duì)象acdbHostA

44、pplicationServices()-workingDatabase(); 訪問(wèn)其他打開(kāi)的文檔 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)對(duì)象 AcDbDatabase( bool buildDefaultDrawing = true, bool noDocument = false); 保存數(shù)據(jù)庫(kù)在對(duì)圖形數(shù)據(jù)做修改以及添加操作以后,結(jié)果仍然在內(nèi)存中,需要調(diào)用AcDbDatabase:saveAs()函數(shù)保存到磁盤(pán)文件打開(kāi)一個(gè)新圖形90 2008 Autodesk AutoCAD Raptor 演示演示TrainingSampleS_3_1: 獲取當(dāng)前數(shù)據(jù)庫(kù)S_3_2: 創(chuàng)建和保存數(shù)據(jù)庫(kù) 91 2008 Autode

45、sk AutoCAD Raptor 對(duì)象標(biāo)識(shí)對(duì)象標(biāo)識(shí) 句柄 (AcDbHandle)DWG文件中的每一個(gè)實(shí)體都有唯一的標(biāo)識(shí)符 對(duì)象ID (AcDbObjectId)數(shù)據(jù)庫(kù)中的實(shí)體對(duì)象都會(huì)在內(nèi)存中對(duì)應(yīng)一個(gè)唯一的對(duì)象ID 對(duì)象ID也是與實(shí)體對(duì)象相關(guān)聯(lián)的唯一的標(biāo)識(shí)符 指針 當(dāng)一個(gè)對(duì)象被打開(kāi)后,AutoCAD會(huì)返回指向AcDbEntity類(lèi)型的指針 92 2008 Autodesk AutoCAD Raptor ObjectDBX session句柄句柄,對(duì)象對(duì)象ID, 指針指針.dwgObjectClosedOpenAcDbObject.1. 對(duì)象從文件中讀取 Handle - Obj

46、ect ID2. 對(duì)象打開(kāi) Object ID - Pointer3. 新對(duì)象添加打數(shù)據(jù)庫(kù)中,分配新的 Object ID & Handle4. 對(duì)象關(guān)掉 指針無(wú)效 5. 對(duì)象保存到文件 句柄寫(xiě)入到文件 NewAcDbObject3.93 2008 Autodesk AutoCAD Raptor 對(duì)象對(duì)象 AdDbObjectId 和和 ads_nameads_name 是ADS時(shí)代的遺留下來(lái)的typedef _w64 long ads_name2; 二維長(zhǎng)整型數(shù)組第一個(gè)元素 是 AcDbObjectId第二個(gè)元素是實(shí)體所在的數(shù)據(jù)庫(kù),只讀相互轉(zhuǎn)換acdbGetAdsName(adsNa

47、me, objId);acdbGetObjectId(objId, adsName);94 2008 Autodesk AutoCAD Raptor 交換實(shí)體標(biāo)識(shí)交換實(shí)體標(biāo)識(shí) IAcDbObject:handOverTo新對(duì)象替換數(shù)據(jù)庫(kù)中的對(duì)象不能從數(shù)據(jù)庫(kù)中移除對(duì)象對(duì)象,只能做刪除標(biāo)記 OpenAcDbObjectNewAcDbObjectObjectDBX Sessionremovedadded95 2008 Autodesk ObjectDBX Session交換對(duì)象標(biāo)識(shí)交換對(duì)象標(biāo)識(shí) IIAcDbObject:swapIdWith() AcDbObjectAcDbObjectidid96

48、2008 Autodesk AutoCAD Raptor 打開(kāi)模式打開(kāi)模式打開(kāi) 獲取對(duì)象的訪問(wèn)權(quán)限Read同時(shí)可以有255 ReadersWriteOpen/Close 模型每次只有一個(gè) writerread/write 相互排斥事務(wù)(Transaction )模型允許多個(gè) writersread/write 不排斥Notify稍后介紹97 2008 Autodesk AutoCAD Raptor 打開(kāi)對(duì)象函數(shù)打開(kāi)對(duì)象函數(shù) acdbOpenObject Acad:ErrorStatus acdbOpenObject( AcDbEntity *& pEnt, AcDbObjectId i

49、d, AcDb:OpenMode mode);Acad:ErrorStatus acdbOpenObject( AcdbObject*& pObj, AcDbObjectId id, AcDb:OpenMode mode, bool openErased = false); 98 2008 Autodesk AutoCAD Raptor 打開(kāi)關(guān)閉模式打開(kāi)關(guān)閉模式Acad:ErrorStatus 返回對(duì)象打開(kāi)狀態(tài)eWasOpenForReadeWasOpenForWriteeWasErasedeOk成功打開(kāi)( Acad:eOk) 則需要關(guān)閉,不成功不需要關(guān)閉流程控制加以防范,避免程序崩潰

50、AcDbObject *pObj = NULL;es = acdbOpenObjectIf(Acad:eOk = es) /關(guān)閉對(duì)象 Else 99 2008 Autodesk AutoCAD Raptor 打開(kāi)關(guān)閉模式打開(kāi)關(guān)閉模式/ create a new lineAcDbLine *line = new AcDbLine();/ set the properties for itline-setStartPoint(AcGePoint3d(10,10,0);line-setEndPoint(AcGePoint3d(20,30,0); / now add it to the current

51、 spaceAcDbBlockTableRecord *curSpace = NULL;/ open the current space for writeAcad:ErrorStatus es = acdbOpenObject(AcDbBlockTableRecord *&)curSpace, curDoc()-database()-currentSpaceId(), AcDb:kForWrite); if (es = Acad:eOk) / add it to the space es = curSpace-appendAcDbEntity(line); / check that

52、everything was ok if (es != Acad:eOk) delete line; return; / now close everything line-close(); curSpace-close();100 2008 Autodesk AutoCAD Raptor 演示演示TrainingSampleS_3_3: 打開(kāi)對(duì)象,訪問(wèn)屬性 101 2008 Autodesk AutoCAD Raptor ObjectARX 智能指針智能指針AcDbObjectPointerTemplate Class負(fù)責(zé)對(duì)象關(guān)閉負(fù)責(zé)內(nèi)存回收AcDbSmartObjectPointer和Ac

53、DbObjectPointer兼容避免打開(kāi)沖突允許優(yōu)化打開(kāi) 允許打開(kāi)鎖定層上的實(shí)體非常強(qiáng)大,小心使用!102 2008 Autodesk AutoCAD Raptor 智能指針模式智能指針模式/ create a new lineAcDbObjectPointer line;line.create();/ set the properties for itline-setStartPoint(AcGePoint3d(10,10,0);line-setEndPoint(AcGePoint3d(20,30,0); / now add it to the current spaceAcDbBlock

54、TableRecordPointer curSpace(curDoc()-database()-currentSpaceId(), AcDb:kForWrite);/ if okif (curSpace.openStatus() = Acad:eOk) Acad:ErrorStatus es = curSpace-appendAcDbEntity(line); / check that everything was ok if (es != Acad:eOk) / no need for a delete as the smartpointer does this for us return;

55、 / everything will be closed automatically for us103 2008 Autodesk AutoCAD Raptor 符號(hào)表符號(hào)表 符號(hào)表是存儲(chǔ)數(shù)據(jù)庫(kù)對(duì)象的容器,用于組織和管理數(shù)據(jù)庫(kù)對(duì)象 每種符號(hào)表都有確定類(lèi)型的記錄與之關(guān)聯(lián) 不能創(chuàng)建或者刪除符號(hào)表,而只能增加或者修改符號(hào)表中記錄在開(kāi)始新建一個(gè)圖形時(shí),AutoCAD會(huì)在數(shù)據(jù)庫(kù)中自動(dòng)創(chuàng)建以下9種類(lèi)型的符號(hào)表:塊表(AcDbBlockTable;BLOCK)層表(AcDbLayerTable;LAYER)字型表(AcDbTextStyleTable;STYLE)線型表(AcDbLinetypeTable

56、;LTYPE)視表(AcDbViewTable;VIEW)UCS表(AcDbUCSTable;UCS)視區(qū)表(AcDbViewportTable;VPORT)注冊(cè)的應(yīng)用程序表(AcDbRegAppTable;)尺寸類(lèi)型表(AcDbDimStyleTable;DIMSTYLE)104 2008 Autodesk AutoCAD Raptor ArxDbg!105 2008 Autodesk AutoCAD Raptor ArxDbg!106 2008 Autodesk AutoCAD Raptor ObjectARX容器遍歷容器遍歷使用遍歷器的對(duì)象符號(hào)表塊表記錄字典PolylinesPolyFa

57、ceMesh & PolygonMeshACIS Solids叫做 traversers塊引用 (BlockReference) (Inserts)只在有Arribute時(shí)有用107 2008 Autodesk ObjectARXiterator1遍歷模式遍歷模式See Design Patterns by Erich Gamma et al. (ISBN 0-201-63361-2)用戶1用戶2需要初始化 條件:done 操作:next 集合記錄當(dāng)前所在的位置iterator1108 2008 Autodesk 符號(hào)表操作符號(hào)表操作 遍歷器遍歷器 符號(hào)表有三個(gè)主要的操作函數(shù):has(

58、) 判斷是否符號(hào)表記錄已經(jīng)存在getAt() 獲取符號(hào)表記錄add() 添加符號(hào)表記錄對(duì)于所有的符號(hào)表,操作是一樣的。AcDbLayerTableRecord *pLayerTableRecord = NULL;if(pLayerTable-getAt(_T(“AUTODESK”), / Layer string pLayerTableRecord / Layer Table Record AcDb:kForWrite / WirteMode Adesk:kFalse) = Acad:eOk)pLayerTableRecord-setIsOff(Adesk:kTrue);109 2008 Au

59、todesk 遍歷符號(hào)表遍歷符號(hào)表每個(gè)符號(hào)表都有對(duì)應(yīng)的遍歷器,可以使用newInterator()函數(shù)創(chuàng)建遍歷器 es = pCurDB-getSymbolTable(pLayerTable, AcDb:kForRead);AcDbLayerTableRecord *pLayerTableRecord = NULL;AcDbLayerTableIterator* tblIter = NULL;if(pLayerTable-newIterator(tblIter) = Acad:eOk) for(; !tblIter-done(); tblIter-step() es = tblIter-get

60、Record(pLayerTableRecord, AcDb:kForRead); delete tblIter; /切記刪除110 2008 Autodesk AutoCAD Raptor 演示演示TrainingSampleS_3_4:遍歷并操作符號(hào)表記錄 111 2008 Autodesk AutoCAD Raptor Lab 3n訪問(wèn)對(duì)象容器n符號(hào)表 112 2008 Autodesk AutoCAD Raptor 實(shí)體對(duì)象操作113 2008 Autodesk AutoCAD Raptor 實(shí)體對(duì)象(實(shí)體對(duì)象(AcDbEntity) 實(shí)體對(duì)象,具有圖形表示的數(shù)據(jù)庫(kù)對(duì)象用戶與AutoCAD交互的主要對(duì)象AutoCAD二次開(kāi)發(fā)者主要的操作對(duì)象 114 200

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論