土木工程CAD技術(shù)基礎(chǔ)-第4章-AutoCAD應(yīng)用技術(shù)_第1頁
土木工程CAD技術(shù)基礎(chǔ)-第4章-AutoCAD應(yīng)用技術(shù)_第2頁
土木工程CAD技術(shù)基礎(chǔ)-第4章-AutoCAD應(yīng)用技術(shù)_第3頁
土木工程CAD技術(shù)基礎(chǔ)-第4章-AutoCAD應(yīng)用技術(shù)_第4頁
土木工程CAD技術(shù)基礎(chǔ)-第4章-AutoCAD應(yīng)用技術(shù)_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1第4章 AutoCAD應(yīng)用技術(shù)4.1 AutoCAD概述4.2 AutoCAD的基本概念4.3 Windows應(yīng)用程序設(shè)計入門4.4 AutoCAD的二次開發(fā)技術(shù)24.1 AutoCAD概述4.1.1 AutoCAD的發(fā)展20世紀(jì)80年代美國Autodesk公司開發(fā)專門用于設(shè)計工作的計算機(jī)繪圖軟件經(jīng)歷了多次升級目前的最新版本是AutoCAD 2009以往主要版本:1.0 2.0 9.0 12 13 14 2000 2007 2008已經(jīng)廣泛地應(yīng)用于多行業(yè):建筑、機(jī)械、電子、服裝等行業(yè)中34.1.2 AutoCAD的主要功能1. 提供交互式繪圖環(huán)境A. 二維圖形的建立、編輯功能 包括:線、圓、

2、弧、矩形等基本圖形 塊、外部參照等復(fù)合圖形 文本、尺寸等標(biāo)注圖形B. 三維圖形的建立、編輯及渲染功能2. 提供二次開發(fā)環(huán)境4中銀大廈外墻掛板施工管理信息系統(tǒng)(清華、中建建筑承包)567894.1.3 AutoCAD的二次開發(fā)環(huán)境主要有3種:1. Visual LISPAutoLISP是AutoCAD最早的二次開發(fā)工具來自Common LISP從AutoCAD的內(nèi)部運行Visual LISP是用來加速AutoLISP程序開發(fā)的工具軟件,嵌于2000以后版本中是一個集成開發(fā)環(huán)境(IDE)102. VBA即:Visual Basic for Application programming envir

3、onment 利用AutoCAD ActiveX(AutoCAD組件)從AutoCAD內(nèi)部或外部程序化地(交互式地)進(jìn)行繪圖操作 2000以上AutoCAD本身具有VBA開發(fā)環(huán)境 鍵入VBAIDE即可進(jìn)入113. ObjectARX來自ARX: AutoCAD Runtime eXtension programming environment是一個面向?qū)ο蟮亩伍_發(fā)環(huán)境使用C+語言進(jìn)行編程 利用AutoCAD提供的程序庫(包括類庫) 可以定義新類,或向已有類添加操作 從AutoCAD的內(nèi)部運行 AutoCAD的最強(qiáng)有力的二次開發(fā)工具學(xué)習(xí)ObjectARX所需的知識1. AutoCAD的基本知識

4、和使用經(jīng)驗 主要是 AutoCAD的基本概念、基本命令和操作 方法,有一些使用經(jīng)驗2. C+的知識 面向?qū)ο蟪绦蛟O(shè)計的概念 C+語法 Microsoft Visual C+的使用方法下節(jié)講述已補(bǔ)課12134.2 AutoCAD的基本概念14 共介紹9組基本概念1. 模型空間和圖紙空間 (Model Space and Paper Space)圖紙空間為規(guī)劃打印布局而設(shè)置在圖紙空間中只能編輯圖紙空間中的對象模型空間和圖紙空間之間可以切換2. 世界坐標(biāo)系(WCS)和用戶坐標(biāo)系(UCS)默認(rèn)為WCS,可切換為UCS點的坐標(biāo)輸入方法: 直角坐標(biāo)、極坐標(biāo)、球面坐標(biāo)、柱面坐標(biāo)153. 繪圖界限表明用戶的工

5、作區(qū)域和圖紙邊界4. 圖層(Layer)用來組織不同類型的圖形信息5. 命令使用系統(tǒng)功能的工具可從命令區(qū)輸入執(zhí)行,也可通過選菜單執(zhí)行6. 柵格、捕捉和正交模式繪圖的輔助功能167. AutoCAD數(shù)據(jù)庫和對象在AutoCAD中,圖被存儲在AutoCAD數(shù)據(jù)庫中AutoCAD數(shù)據(jù)庫是一系列對象的集合包括兩類: 實體 容器對象(可分為:符號表和字典兩類)8. 實體(Entity)實體是一個有圖形表示的數(shù)據(jù)庫對象e.g. line, circle, arc, text, solid179. 符號表和字典(Symbol Table and Dictionary) 二者本質(zhì)上具有相同功能:包含一些數(shù)據(jù)庫

6、對 象,每個對象用一個鍵(字符串)來查找 符號表:數(shù)目固定,共9個 每個只包含特定類型的對象 字典:默認(rèn)情況下包含兩個字典 組字典和MLINE形式字典 可創(chuàng)建任意數(shù)量的對象并將其添加到字典中184.3 Windows應(yīng)用程序設(shè)計入門見另附的ppt文件194.4 AutoCAD的二次開發(fā)技術(shù)4.4.1 ObjectARX基礎(chǔ)ObjectARX提供了可供C+調(diào)用的程序庫,用以:開發(fā)基于AutoCAD的應(yīng)用程序擴(kuò)展AutoCAD類及其成員函數(shù)創(chuàng)建與AutoCAD中的命令完全類似的命令ObjectARX應(yīng)用程序是一個與AutoCAD共享內(nèi)存空間的DLL(動態(tài)連接庫) 是在AutoCAD中運行的可執(zhí)行文

7、件(*.arx)20動態(tài)連接庫的概念一般以.dll文件的形式存在,在應(yīng)用程序運行時,操作系統(tǒng)才加載和連接該函數(shù)庫多個應(yīng)用程序可共享一個函數(shù)庫 MS-DOS使用靜態(tài)連接:把函數(shù)庫連接并包含在執(zhí)行程序中Windows應(yīng)用程序既可采用動態(tài)連接庫,也可采用靜態(tài)連接214.4.2 ObjectARX應(yīng)用程序開發(fā)環(huán)境包括以下4項1. Windows操作系統(tǒng) 建議使用Windows XP平臺2. AutoCAD 2008;3. Microsoft Visual C+ 8.0 即Visual Studio .NET 2005 作為集成開發(fā)環(huán)境,用于ObjectARX應(yīng)用程序的 編輯、編譯、連接和調(diào)試224.

8、ObjectARX SDK for AutoCAD 2008 (最新為2009) 包含了ObjectARX程序庫以及相關(guān)文檔 程序庫 體現(xiàn)為.h文件和.lib文件 包含了函數(shù)庫和類庫 相關(guān)文檔包含了豐富的內(nèi)容 編程時可以多參考:英文 可以到網(wǎng)絡(luò)學(xué)堂本課程的“參考資料”中下載 或從Autodesk公司的網(wǎng)站上下載2324ObjectARX類和函數(shù)分類1. AcRX用于綁定應(yīng)用程序及運行時類的注冊和識別2. AcEd用于注冊內(nèi)部命令和系統(tǒng)事件通知3. AcDb用于表示AutoCAD數(shù)據(jù)庫4. AcGi用于渲染AutoCAD實體5. AcGe用于線性代數(shù)和幾何對象的處理25前綴所需的程序庫AcRxa

9、cad.lib, rxapi.lib, acrx17.libAcEdacad.lib, rxapi.lib, acedapi.lib, acrx17.libAcDbacad.lib, rxapi.lib, acdb17.lib, acrx17.libAcGiacad.lib, rxapi.lib, acdb17.lib, acrx17.libAcGeacad.lib, rxapi.lib, acge17.lib, acrs17.lib應(yīng)用程序所需的ObjectARX程序庫26演示1:看ObjectARX Documentation的內(nèi)容1. ObjectARX Developers Guide

10、用于掌握ObjectARX的概念(教材)2. ObjectARX Reference用于查找有關(guān)內(nèi)容(手冊)只有英文資料大家學(xué)習(xí)專業(yè)英語的好機(jī)會:若有困難,請大家指出274.4.3 ObjectARX應(yīng)用程序框架通過一個簡單的例程序來說明firstARX:由.cpp和.def文件組成用來顯示一個對話框28/ firstARX.cpp程序清單程序清單# include # include void initApp(); void unloadApp(); void firstARX();void initApp()acedRegCmds-addCommand(LfirstARX_Commands

11、, /命令組名命令組名LfirstARX, /全局命令名全局命令名L第一次第一次, /本地本地/翻譯命令名,翻譯命令名,ACRX_CMD_TRANSPARENT,/命令模式命令模式firstARX/被調(diào)用的函數(shù)被調(diào)用的函數(shù));void unloadApp()acedRegCmds-removeGroup(LfirstARX_Commands); 1/329 void firstARX() ads_alert(L這是我的第一個這是我的第一個ARX應(yīng)用程序應(yīng)用程序!); extern C AcRx: AppRetCodeacrxEntryPoint(AcRx:AppMsgCode msg, voi

12、d* pkt) switch (msg) /msg是是AutoCAD傳遞給應(yīng)用程序的消息傳遞給應(yīng)用程序的消息case AcRx:kInitAppMsg:/解鎖應(yīng)用程序,才能被卸載解鎖應(yīng)用程序,才能被卸載acrxDynamicLinker-unlockApplication(pkt);acrxRegisterAppMDIAware(pkt);initApp(); break;case AcRx:kUnloadAppMsg:unloadApp(); break;default:break;return AcRx:kRetOK;2/330/ firstARX.def程序清單程序清單/ 用于輸出用于輸

13、出acrxEntryPoint()函數(shù),使函數(shù),使AutoCAD能夠訪問它能夠訪問它 LIBRARY firstARX EXPORTS acrxEntryPoint PRIVATE acrxGetApiVersion PRIVATE3/331程序說明:兩個重要的函數(shù)1. acrxEntryPoint程序的入口點,等價于C語言程序的main()函數(shù),用來與AutoCAD進(jìn)行通訊,響應(yīng)系統(tǒng)發(fā)來的各種消息,并裝入和執(zhí)行外部函數(shù)。當(dāng)應(yīng)用程序被加載,系統(tǒng)發(fā)出消息kInitAppMsg2. firstARX被裝入和執(zhí)行的外部函數(shù),真正執(zhí)行顯示對話框任務(wù)32演示2:在VC+中的實現(xiàn)步驟分為以下10步 1.

14、在VC+中新建Win32項目,項目名稱為test 2. 在應(yīng)用程序向?qū)е?,?yīng)用程序類型設(shè)為DLL 3. 在項目中,添加新項為C+文件,名為firstARX 4. 將相應(yīng)文件內(nèi)容拷貝到該文件中 5. 在項目中,添加新項為DEF文件,名為firstARX 6. 將相應(yīng)文件內(nèi)容拷貝到該文件中 7. 進(jìn)行項目屬性設(shè)置33 A. C/C+(編輯器)設(shè)置 常規(guī):附加包含目錄 代碼生成:運行時庫:多線程DLL B. 鏈接器設(shè)置 常規(guī):輸出文件:后綴arx 附加庫目錄 輸入:附加依賴項: rxapi.lib acdb17.lib acge17.lib acad.lib acedapi.lib34 8. 生成解

15、決方案 9. 在AutoCAD的工具菜單下,加載應(yīng)用程序 10. 在命令行中輸入命令 執(zhí)行應(yīng)用程序 11. 卸載應(yīng)用程序3536思考哪里體現(xiàn)出面向?qū)ο螅?若想增加一個命令,需要做什么?374.4.4 利用向?qū)нM(jìn)行應(yīng)用程序設(shè)計向?qū)В?ObjectARX AppWizard用以生成ObjectARX應(yīng)用程序的框架其中還包含了一些編程工具即:ObjectARX AddIn利用它,可以使程序設(shè)計高效地進(jìn)行為此需要在VC+中安裝ObjectARX AppWizard3 ObjectARX AppWizard的安裝分為3步1. 關(guān)閉VC+;2. 運行ObjectARX安裝目錄下 utils

16、ObjARXWiz子目錄中的 ArxWizards.msi文件3. 根據(jù)提示一步一步地完成安裝39AddIn40 ObjectARX AppWizard的使用 演示3:使用ObjectARX AppWizard建立應(yīng)用程序分為以下5步1. 在VC+中新建ObjectARX項目,名稱為test 選項全部采用缺省2. 查看自動生成的源程序 a. 自動生成了那些文件? b. acrxEntryPoint函數(shù)在那里?413. 利用AddIn中的ObjectARX Command添加1條命 令,名為firstARX A. 看生成什么相應(yīng)的代碼 B. 加入代碼4. 生成解決方案5. 加載應(yīng)用

17、程序4 ObjectARX AddIn的使用包含如下功能ObjectARX CommandsObjectARX Class ExplorerCode GalleryCode FinderLiveUpdateARX HelpAddIn ConfigurationAbout ARXAddInViz743e.g. ObjectARX Class Explorer使用該工具將打開一個目錄樹對話框在其中選擇條目,點擊右鍵可執(zhí)行各種功能44e.g. ARX Help將光標(biāo)放在源程序的一個ObjectARX函數(shù)名或類名,再單擊該按鈕,就可以得到相應(yīng)的幫助注意 第一次使用該工具時,需要指定幫助

18、文件所在位置,ObjectARX幫助文件為:ObjectARX安裝目錄docsarxref.hlp454.4.5 典型ObjectARX應(yīng)用程序功能實現(xiàn)作為繪圖軟件,需要實現(xiàn)1. 用戶界面輸入?yún)?shù),得到反饋- 人機(jī)交互2. 操作AutoCAD數(shù)據(jù)庫只有AutoCAD數(shù)據(jù)庫中的內(nèi)容才得到顯示,才可利用系統(tǒng)提供的功能進(jìn)行操作4 用戶界面實現(xiàn)輸入?yún)?shù),得到反饋典型的AutoCAD命令利用命令窗口ObjectARX提供了一系列函數(shù)用于獲取整數(shù)、實數(shù)、字符串、實體等參見下表及其后的典型程序段47序號函數(shù)名用于1acedGetInt 獲取一個整數(shù)值2acedGetReal 獲取一個實數(shù)值3

19、acedGetString 獲取一個字符串4acedGetAngle 獲取一個角度值5acedGetKword 獲取一個關(guān)鍵字6acedInitGet 對acedGetXXXX函數(shù)進(jìn)行初始化 7acedGetFileD 從文件對話框中選取一個文件8acedGetPoint 拾取一個點9acedEntSel 拾取一個單一實體10acedNEntSel 拾取一個單一的嵌套實體11acutSSGet 拾取多個實體12acutPrintf 在AutoCAD的文本區(qū)顯示信息ObjectARX的主要輸入和反饋函數(shù)48static void AsdkStep02_myInput(void) int stat

20、, iValue ; double rValue ; TCHAR kWord 133 ; acedInitGet (RSG_NONEG | RSG_NOZERO, L) ; if ( acedGetInt (LnEnter an integer value: , &iValue) != RTNORM ) return ; rValue =12.0 ; acedInitGet (RSG_NOZERO, LPI A B C) ; stat =acedGetReal (LnEnter a real value PI/A/B/C : , &rValue) ; switch (stat)

21、 case RTCAN: / 用戶取消用戶取消 return ; case RTKWORD: / 用戶輸入一個關(guān)鍵字用戶輸入一個關(guān)鍵字 if ( acedGetInput (kWord) != RTNORM ) return ;1/249 if ( ! _tcscmp(LPI, kWord) ) rValue =3.14 ; else if ( ! _tcscmp(LA, kWord) ) rValue =10 ; else if ( ! _tcscmp(LB, kWord) ) rValue =11 ; else if ( ! _tcscmp(LC, kWord) ) rValue =12

22、; break ; case RTNONE: / 用戶未輸入內(nèi)容用戶未輸入內(nèi)容 acutPrintf (LnTake default rValue %lf, rValue) ; break ; case RTNORM: / 用戶輸入一個有效值用戶輸入一個有效值 break ; default: return ; acutPrintf (LnInteger : %d, iValue) ; acutPrintf (LnReal : %lf, rValue) ;2/250典型的應(yīng)用程序演示4:ObjectARX 2008 Tutorial中的Step 2操作步驟1. 看Tutorial的內(nèi)容2. 在

23、AutoCAD中運行已生成的應(yīng)用程序3. 在VC+中生成相應(yīng)的應(yīng)用程序 a. 利用ObjectARX AppWizard生成程序框架 b. 加入命令myinput和myselect c. 實現(xiàn)這兩個命令51思考哪里體現(xiàn)出面向?qū)ο螅? AutoCAD數(shù)據(jù)庫的操作AutoCAD數(shù)據(jù)庫的組成AutoCAD數(shù)據(jù)庫是一系列對象的集合 對象可分為兩大類實體:e.g. 點、線、圓容器對象 符號表:包含9個,e.g. 塊表(Block Table) 命名對象字典:可包含多個子字典53AutoCAD數(shù)據(jù)庫的基本操作規(guī)則1. 對象(實體)被創(chuàng)建后,需要添加到適當(dāng)?shù)?容器對象中;2. 其中,實體須添

24、加到塊表記錄對象中, 后者須再添加到塊表對象中;3. 符號表記錄對象(塊表記錄對象是其中的一 種)須添加到適當(dāng)?shù)姆柋韺ο笾校?4. 其他對象須被加入到命名對象字典中,或被 其他對象所擁有的對象中54AutoCAD數(shù)據(jù)庫圖層表塊表命名對象字典實體實體實體實體對象對象對象對象其他符號表記錄其他符號表記錄其他符號表記錄其他符號表記錄塊表記錄塊表記錄塊表記錄塊表記錄圖層表記錄圖層表記錄圖層表記錄圖層表記錄符號表AutoCAD數(shù)據(jù)庫結(jié)構(gòu)事例符號表符號表其他符號表55在AutoCAD中對象的識別在AutoCAD中可以同時加載多個數(shù)據(jù)庫對象的識別方法1. 在特定的AutoCAD數(shù)據(jù)庫中 對象用句柄(han

25、dle)來識別2. 在AutoCAD進(jìn)程中 當(dāng)數(shù)據(jù)庫被打開時,對象用ID來識別 獲得ID即獲得對象的指針,即可對其操作56獲取對象ID的方法1. 將創(chuàng)建的對象添加到AutoCAD數(shù)據(jù)庫時 AutoCAD數(shù)據(jù)庫會返回2. 使用AutoCAD數(shù)據(jù)庫提供的函數(shù)3. 使用一些類成員函數(shù) 主要是符號表和字典對應(yīng)的類4. 使用迭代器(iterator)遍歷對象列表5. 通過選擇集進(jìn)行查詢57來看幾個例程序1. 創(chuàng)建直線實體2. 創(chuàng)建圖層3. 改變實體的顏色4. 多線實體的創(chuàng)建5. 多線實體頂點的遍歷6. 添加一個組58AcDbObjectId createLine() AcGePoint3d startP

26、t(4.0, 2.0, 0.0); AcGePoint3d endPt(10.0, 7.0, 0.0); AcDbLine *pLine = new AcDbLine(startPt, endPt); AcDbBlockTable *pBlockTable; acdbHostApplicationServices()-workingDatabase() -getSymbolTable(pBlockTable, AcDb:kForRead); AcDbBlockTableRecord *pBlockTableRecord; pBlockTable-getAt(ACDB_MODEL_SPACE,

27、pBlockTableRecord, AcDb:kForWrite); pBlockTable-close(); AcDbObjectId lineId; pBlockTableRecord- appendAcDbEntity(lineId, pLine); pBlockTableRecord-close(); pLine-close(); /注意注意:使用完任何使用完任何ObjectARX對象,必須關(guān)閉對象,必須關(guān)閉 return lineId;1. 直線實體的創(chuàng)建59直線AutoCAD數(shù)據(jù)庫塊表圖紙空間模型空間(塊表記錄)在AutoCAD數(shù)據(jù)庫中加入實體示意圓弧60思考哪里體現(xiàn)出面向?qū)ο螅?/p>

28、這里創(chuàng)建的直線段和VC+中創(chuàng)建的有何不同?61void createNewLayer() AcDbLayerTable *pLayerTable; acdbHostApplicationServices()-workingDatabase() -getSymbolTable(pLayerTable, AcDb:kForWrite); AcDbLayerTableRecord *pLayerTableRecord = new AcDbLayerTableRecord(); pLayerTableRecord-setName(LASDK_MYLAYER); / 若未明確規(guī)定,圖層的屬性將采用默認(rèn)值

29、若未明確規(guī)定,圖層的屬性將采用默認(rèn)值 pLayerTable-add(pLayerTableRecord); pLayerTable-close(); pLayerTableRecord-close();2. 圖層的創(chuàng)建62Acad:ErrorStatuschangeColor(AcDbObjectId entId, Adesk:UInt16 newColor) AcDbEntity *pEntity; acdbOpenObject(pEntity, entId, AcDb:kForWrite); pEntity-setColorIndex(newColor); pEntity-close()

30、; return Acad:eOk;3. 改變實體的顏色63void createPolyline() / 為多線設(shè)置為多線設(shè)置4個定點位置個定點位置 AcGePoint3dArray ptArr; ptArr.setLogicalLength(4); for (int i = 0; i setColorIndex(3); 4. 多線實體的創(chuàng)建1/264 AcDbBlockTable *pBlockTable; acdbHostApplicationServices()-workingDatabase() -getSymbolTable(pBlockTable, AcDb:kForRead);

31、 AcDbBlockTableRecord *pBlockTableRecord; pBlockTable-getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb:kForWrite); pBlockTable-close(); AcDbObjectId plineObjId; pBlockTableRecord-appendAcDbEntity(plineObjId, pNewPline); pBlockTableRecord-close(); / 設(shè)置該多線的圖層設(shè)置該多線的圖層. pNewPline-setLayer(L0); pNewPline-

32、close(); 2/265void iterate(AcDbObjectId plineId) AcDb2dPolyline *pPline; acdbOpenObject(pPline, plineId, AcDb:kForRead); AcDbObjectIterator *pVertIter= pPline-vertexIterator(); pPline-close(); / 設(shè)置必要的變量設(shè)置必要的變量 AcDb2dVertex *pVertex; AcGePoint3d location; AcDbObjectId vertexObjId; for (int vertexNumber = 0; !pVertIter-done(); vertexNumber+, pVertIter -step() vertexObjId = pVertIter-objectId(); 5. 多線實體頂點的遍歷1/266 acdbOpenObject(pVertex, verte

溫馨提示

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

評論

0/150

提交評論