ObjectARX(培訓(xùn)講義二)-葉雄進_第1頁
ObjectARX(培訓(xùn)講義二)-葉雄進_第2頁
ObjectARX(培訓(xùn)講義二)-葉雄進_第3頁
ObjectARX(培訓(xùn)講義二)-葉雄進_第4頁
ObjectARX(培訓(xùn)講義二)-葉雄進_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

ObjectARXTrainer’Training

葉雄進2007-8-29北京自定義實體的思路什么是自定義實體如何創(chuàng)立自定義實體AcDbEntity虛函數(shù)的功能和使用現(xiàn)場創(chuàng)立一個自定義實體TipsandTricks自定義實體操作自定義實體Smiley什么是自定義實體自定義一個圖形對象、控制它圖形顯示,存儲的數(shù)據(jù),對拖拽的響應(yīng),對捕捉的響應(yīng),平移、旋轉(zhuǎn)等操作的響應(yīng)需要擴充自定義實體的哪些功能?結(jié)合操作,說明需要擴展的方面為什么需要自定義實體?存儲自定義數(shù)據(jù)擴展實體的功能連動操作拖拽捕捉拉伸……自定義對象兩類自定義對象從AcDbObject派生從AcDbEntity派生AcDbEntity從AcDbObject派生,包括了AcDbObject的所有功能。因此這里以講解從AcDbEntity派生的實體為主,重要的類繼承關(guān)系A(chǔ)cRxObjectAcDbObjectAcDbEntityAcDbDictionaryAcDbSymbolTableAcDbSymbolTableRecordAcGiDrawableDatabase

resident

objectsDrawable

objectsAcDbCurveAcDbLineAcDbBlockTable如何實現(xiàn)自定義實體創(chuàng)立一個新類從適宜的類派生實現(xiàn)AcRxObject的協(xié)議添加到運行時類層次圖中運行時類型識別〔RTTI〕RuntimeTypeIdentification(RTTI)協(xié)議擴充AcRxClassClass來描述每一個自定義類

appName

comparedTo

dxfName

isDerivedFrom

myParent

name

proxyFlags

建立運行時類層次rxInit(static)gpDesc(staticvariable)newAcRxClassacrxBuildClassHierarchy類別判斷函數(shù)最根底的類AcRxObject提供了類型識別函數(shù)virtualAcRxClass*isA()const;staticAcRxClass*gpDesc;staticAcRxClass*desc();staticCMyClass*cast(constAcRxObject*inPtr)Macros揭開研究ACDB_REGISTER_OBJECT_ENTRY_AUTOACRX_DECLARE_MEMBERSACRX_NO_CONS_DEFINE_MEMBERSACRX_CONS_DEFINE_MEMBERSACRX_DXF_DEFINE_MEMBERSACRX_DEFINE_MEMBERS圖形顯示函數(shù)worldDrawviewportDraw調(diào)用關(guān)系如下if(!entity->worldDraw(pWd))for(每一個相關(guān)視口)entity->viewportDraw(void);數(shù)據(jù)保存函數(shù)dwgInFieldsdwgOutFieldsdxfInFieldsdxfOutFields夾點操作函數(shù)設(shè)置對象夾點getGripPoints〔〕拖動夾點,自定義實體的行為moveGripPoints〔〕兩個重要函數(shù)assertWriteEnabled(

Adesk::BooleanautoUndo=Adesk::kTrue,Adesk::BooleanrecordModified=Adesk::kTrue);)

自定義類中任何修改函數(shù)都必須調(diào)用函數(shù)assertWriteEnabled〔〕,用于檢查對象是否是用寫的模式翻開,當(dāng)該函數(shù)被調(diào)用時,首先檢查參數(shù)recordModified,如果recordModified的值為Adesk::kFalse,那么不執(zhí)行任何撤銷操作,如果recordModified的值為Adesk::kTrue,那么檢查autoUndo參數(shù),如果參數(shù)autoUndo為Adesk::kTrue,那么AutoCAD將記錄對象的狀態(tài)以便執(zhí)行撤銷操作,當(dāng)對象的修改操作完成并關(guān)閉對象,操作對象的全部狀態(tài)將被保存到一個撤銷操作文件中,如果這時的用UNDO命令,AutoCAD調(diào)用對象的dwgInFields〔〕函數(shù)把這個撤銷操作文件的內(nèi)容讀入到數(shù)據(jù)庫中。assertReadEnabled()判斷是否可讀狀態(tài)其它重要重載函數(shù)設(shè)置自定義實體的捕捉函數(shù)getOsnapPoints〔〕對平移,復(fù)制,鏡像等操作的響應(yīng)函數(shù)transformBy〔〕生成代理實體的圖形形狀函數(shù)saveAs()相交函數(shù)interSectWith〔〕炸開函數(shù)Explode〔〕次常用重載函數(shù)深度克隆DeepClonewblockClone設(shè)計良好的程序架構(gòu)自定義實體代碼集中在DBX工程中用戶交互操作UI〔userinterface〕代碼放在ARX工程中DBX獨立存在.ARX依賴于DBXARX加載DBX代理對象當(dāng)自定義實體的定義模塊沒有加載時,用代理實體來管理用戶自定義實體。兩類代理對象(AcDbProxyObject)andCustomEntities(AcDbProxyEntity)被“PROXYSHOW”和“PROXYGRAPHICS”兩個系統(tǒng)變量控制。自動加載和按需加載Acad.rx,Acad.lsp,acad.dvbRegistryStartupProxyDetectionApploaddialog/Ldswitch用其它開發(fā)語言訪問自定義實體在VBA程序中訪問自定義對象MakesureCOMwrapperisregisteredCallAddCustomObjectmethod在.Net編程方式中訪問自定義實體mixed-managed.NETWrapperUsethe.NETwrapperclasstoinstantiateandmanageADNWhitepaper:TutorialtocreatemanagedwrappersforcustomARXfunctionsandobjectsTipsandtricks不要在worldDraw和viewPortDraw中以寫的方式翻開實體進行修改自定義實體的數(shù)據(jù)Fewotherclassesshouldbeavoided(eg.,AcDb2dPolyline,AcDbVertex,Ref:OARXHelp)防止訪問AutoCAD特殊功能,如環(huán)境和系統(tǒng)變量自定義實體的局限實現(xiàn)和維護稍復(fù)雜些End-User不喜歡彈出代理實體對話框?qū)嶋H創(chuàng)立一個自定義實體仍選其一一個三角形一個矩形寬度不變的圓環(huán)自定義實體總結(jié)全方面用戶自定義的對象幾何類幾何類〔AcGe庫〕AcGe庫是一個純數(shù)學(xué)的庫,提供幾何運算功能,與AcDbDatabase無關(guān),但也被AcDb和AcGi庫中函數(shù)使用包括點、直線、曲線、外表等相關(guān)的類。常用的二維幾何類有AcGePoint2d、AcGeVector2d、AcGeEntity2d、AcGeLinearEnt2d;常用的三維幾何類有AcGePoint3d、AcGeVector3d、AcGeEntity3d;表示公差類AcGeTolAcGe庫的功能點和向量求矢量間的夾角,判斷是否同向、是否平行、是否垂直,矩陣變換,加減乘除等運算,通過angle()函數(shù)可以得到矢量的角度線:線求交點、是否平行、求垂線、點是否在線上面公差浮點型數(shù)據(jù)的比較的需要轉(zhuǎn)換矩陣坐標(biāo)轉(zhuǎn)換和空間變換時需要一個應(yīng)用幾何類進行計算的實例ARXAcGe用戶界面內(nèi)容ObjectARX應(yīng)用程序中資源管理以及使用MFC。模態(tài)對話框和非模態(tài)對話框的創(chuàng)立方法。AcUi和AdUi的介紹和使用方法。資源問題什么是資源?.rc文件中的內(nèi)容,包括菜單,對話框,工具條,…為什么需要資源管理?AutoCAD有自己的資源ARX程序中也有資源程序的默認(rèn)資源從哪里加載?資源管理管理資源的切換類CAcModuleResourceOverrideARX命令非模態(tài)對話框讓對話框能讓用戶輸入操作響應(yīng)AutoCAD定義的一個消息#ifndefWM_ACAD_MFC_BASE#defineWM_ACAD_MFC_BASE(1000)#endif#ifndefWM_ACAD_KEEPFOCUS#defineWM_ACAD_KEEPFOCUS(WM_ACAD_MFC_BASE+1)#endifonAcadKeepFocusAdUi和AcUi的介紹和使用用來建立與AutoCAD界面風(fēng)格一致的控件庫CAdUi類可用于任何應(yīng)用程序于任何Autodesk產(chǎn)品的交互作用CAcUi類派生于CAdUi類,并專用于AutoCAD如何使用AcUi庫-例題說明classAsdkAcUiDialogSample:publicCAcUiDialog//{{AFX_DATA(AsdkAcUiDialogSample)enum{IDD=IDD_DIALOG1};CAcUiSymbolComboBoxm_ctrlRegAppComboBox;CAcUiListBoxm_ctrlBlockListBox;CAcUiPickButtonm_ctrlPickButton;CAcUiPickButtonm_ctrlAngleButton;CAcUiAngleEditm_ctrlAngleEdit;

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論