ACIS基礎培訓課程課件_第1頁
ACIS基礎培訓課程課件_第2頁
ACIS基礎培訓課程課件_第3頁
ACIS基礎培訓課程課件_第4頁
ACIS基礎培訓課程課件_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

ACIS基礎培訓課程安排屬性3ACISMFC3歷史機制3錯誤處理3HOOPS介紹3MFC環(huán)境和ACIS31屬性(Attribute)所有從ENTITY派生的類都可以擁有屬性屬性是在屬性類ATTRIB中實現(xiàn)的屬性可以保存兩個主要目的為了實現(xiàn)功能所做的記號由SPATIAL開發(fā)和實現(xiàn)由開發(fā)者定義&實現(xiàn)作為屬性信息,應用程序的最終用戶將會用到由開發(fā)者定義,應用程序的最終用戶使用2實體和屬性之間的關系ENTITYATTRIBATTRIBATTRIBATTRIBNULLNULL3ATTRIB類ENTITYATTRIBOrganizationAttributeClassApplicationSpecificAttributeClass從ENTITY類派生是一個抽象類組織實行(OrganizationAttribute)類從ATTRIB類派生應用程序特定屬性(ApplicationSpecificAttribute)類從組織屬性類派生4SPATIAL定義的屬性每個組件有各自的屬性實現(xiàn)特定的功能如混合(blend)的半徑和顏色普通屬性(GentricAttribute)普通屬性類來存儲一個字符串或一個字符串及其相關聯(lián)的一個屬性值(value)—ATTRIB_GEN_NAME屬性值可以是integer,real,string,position,vector,pointer,指向ENTITY的指針—從ATTRIB_GEN_NAME派生縮短了用戶開發(fā)的時間良好的兼容性5用戶自定義屬性定義組織屬性類用戶有必要使用”sentinel”,SPATIAL的技術支持應用程序特定屬性類應該從組織屬性類派生其它子類可以從應用程序特定屬性類中派生開發(fā)者可以定義屬性中包含的數(shù)據(jù)因為ATTRIB類是從ENTITY類派生的,因此用戶在定義自己的屬性時,掌握保存/恢復機制是很有幫助的,尤其是用戶自定義的屬性中包含ENTITY*時6以顏色屬性為例在ACIS中顏色是通過屬性來實現(xiàn)的ENTITYATTRIBATTRIB_STATTRIB_RGB組織屬性類應用程序特定屬性類7ATTRIB類的重要方法virtualvoidATTRIB::split_owner(ENTITY*)virtualvoidATTRIB::merge_owner(ENTITY*,lotical)virtualvoidATTRIB::trans_owner(SPAtransfconst&)8ACISMFCACISMFC從ACISR11開始,完全放棄使用ACISMFC原因是ACIS的一些顯示組件(如GL和GI)已經(jīng)完全放棄使用9ACISHOOPSAppWizardACISHOOPSAppWizard提供類似ACISMFC的基本功能由SPATIALJAPAN開發(fā)和維護10ACISHOOPSAppWizard主要特點使用HOOPS不用學習HOOPS就可以使用HOOPS基本的圖形功能如果用戶僅僅需要用到一些基本的圖形功能,那么就不需要直接用HOOPS來編程,也就是說使用這個AppWizard就已經(jīng)足夠了使得開發(fā)者在開發(fā)地初級間斷可以將經(jīng)理集中在ACIS上如果需要的話,開發(fā)者可以直接使用HOOPS來擴展應用程序的圖形顯示能力提供一些示例源代碼可以學習如何使用ACIS和InterOp和ACISMFC結構類似利用原有的AICSMFC用戶順利地使用GI/GL組件過度到使用HOOPS來顯示快速搭建測試環(huán)境11歷史機制(Historymechanism)歷史機制是什么?可以實現(xiàn)撤銷/恢復(Undo/Redo)Undo—向后滾動(rollback)Redo—向前滾動(rollforward)四個主要的類BULLETINBULLETIN_BOARDDELTA_STATEHISTORY_STREAM最常用的API函數(shù)api_part_start_state()api_part_note_state()12歷史的基本類DELTA_STATE是實現(xiàn)Undo/Redo的一個單元BULLETIN_BOARD基本上調用一個API函數(shù)都會創(chuàng)建一個BULLETIN記錄ENTITY改變前和改變后的狀態(tài)DSDSBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB13練習:歷史機制目標是通過使用ACISHOOPSAppWizard增加對歷史機制的理解使用ACISHOOPSAppWizard創(chuàng)建一個新的工程“History”作為示例AppWizard重一斤個實現(xiàn)SolidBlock的創(chuàng)建編譯和構建工程將實現(xiàn)函數(shù)“api_make_gear”的文件復制到該工程文件夾,并加入到該工程中在菜單中加入“Gear”,參考SolidBlock的實現(xiàn),實現(xiàn)創(chuàng)建齒輪的命令14練習:歷史機制續(xù)上頁注釋掉”API_BEGIN”和“API_END”宏,并哼名一個outcome類型的變量result使用“api_solid_cylinder_cone”函數(shù)創(chuàng)建一個半徑為3,高度為20的圓柱從gearbody中湔區(qū)圓柱注釋掉”check_outcome(result);”行intdepth=0;api_part_start_state(depth);//API_BEGIN outcomeresult=api_make_gear(pBody);

//check_outcome(result); //創(chuàng)建圓柱

//從齒輪中減去該圓柱

if(result.ok())m_pAHDoc->AddEntity(pBody);//API_ENDapi_part_note_state(result,depth);15練習:歷史機制intdepth=0;api_part_start_state(depth); outcomeresult=api_make_gear(pBody);

BODY*pCyl; SPApositionp3(0,0,-10); SPApositionp4(0,0,10); result=api_solid_cylinder_cone(p3,p4,3.0,3.0,3.0,(SPAposition*)NULL,pCyl); result=api_subtract(pCyl,pBody); if(result.ok())m_pAHDoc->AddEntity(pBody);api_part_note_state(result,depth);DSBBBBBBBBBBBBBBB16練習:歷史機制修改UNDO/REDO創(chuàng)建菜單“Gear2”并復制Gear實現(xiàn)的代碼按下面的程序進行相應的修改intdepth=0;api_part_start_state(depth); outcomeresult=api_make_gear(pBody);

if(result.ok())m_pAHDoc->AddEntity(pBody);api_part_note_state(result,depth);api_part_start_state(depth); BODY*pCyl; SPApositionp3(0,0,-10); SPApositionp4(0,0,10); result=api_solid_cylinder_cone(p3,p4,3.0,3.0,3.0,(SPAposition*)NULL,pCyl);

if(result.ok())m_pAHDoc->AddEntity(pCyl);api_part_note_state(result,depth);api_part_start_state(depth); result=api_subtract(pCyl,pBody); if(result.ok())m_pAHDoc->UpdateEntity(pBody);api_part_note_state(result,depth);17練習:歷史機制intdepth=0;api_part_start_state(depth); outcomeresult=api_make_gear(pBody);

if(result.ok())m_pAHDoc->AddEntity(pBody);api_part_note_state(result,depth);api_part_start_state(depth); BODY*pCyl; SPApositionp3(0,0,-10); SPApositionp4(0,0,10); result=api_solid_cylinder_cone(p3,p4,3.0,3.0,3.0,(SPAposition*)NULL,pCyl);

if(result.ok())m_pAHDoc->AddEntity(pCyl);api_part_note_state(result,depth);api_part_start_state(depth); result=api_subtract(pCyl,pBody); if(result.ok())m_pAHDoc->UpdateEntity(pBody);api_part_note_state(result,depth);DSBBBBBDSDSBBBBBBBBBB18BULLETIN類存儲ENTITY類對象在創(chuàng)建、刪除或修改時的信息擁有指向新的ENTITY和原來ENTITY的指針DSBBBBBold_entity_ptr()new_entity_ptr()BULLETINENTITYENTITYBULLETINnext()previous()19BULLETIN類old_entity_ptr()new_entity_ptr()BULLETINENTITYold_entity_ptr()new_entity_ptr()BULLETINNULLENTITYENTITYold_entity_ptr()new_entity_ptr()BULLETINENTITY新創(chuàng)建的ENTITY改變之后的ENTITY修改之前的ENTITY拷貝刪除的ENTITYChangeBulletinDeleteBulletinCreateBulletin20BULLETIN_BOARD類一般來說一個API創(chuàng)建一個BULLETIN_BOARDAPI函數(shù)中的API_BEGIN,API_END宏對創(chuàng)建一個BULLETIN_BOARD通過API函數(shù)中的返回值outcome可以得到指向相應的BULLETIN_BOARD的指針包含一個或多個BULLETINDSBBBBBend_bulletin()start_bulletin()BULLETIN_BOARDBULLETIN_BOARDnext()BULLETINBULLETINBULLETIN21DELTA_STATE類每個UNDO/REDO操作需要有一個DELTA_STATE每個DELTA_STATE可以包含一個或多個BULLETIN_BOARDDSBBBBBnext()prev()DELTA_STATEDELTA_STATEBULLETINBULLETINBULLETINpartner()bb()22DELTA_STATE類線性歷史(Linearhistory)DSDSDSDS分支歷史(Branchhistory)DSDSDSDSDSDSDSDSDS23HISTORY_STREAM類管理DELTA_STATE的實用類缺省情況下,系統(tǒng)啟動時定義了一個HISTORY_STREAMapi_get_default_history()開發(fā)者可以設置rollback(UNDO)的最大次數(shù)HISTORY_STREAM::set_max_states_to_keep()零件(PART)類有一個指向HISTORY_STREAM的指針如果使用到PART類,開發(fā)者可以使用一些有用的API函數(shù)api_part_start_state() 標志著一個DS的開始api_part_note_state() 標志著一個DS的結束api_part_roll_n_states() UNDO或REDOapi_part_name_state() state命名api_part_rooo_to_state() 移動到指定名稱的state中PART::history_stream() 得到HISTORY_STREAM24HISTORY_STREAM類HISTORY_STREAMget_root_ds()get_active_ds()get_current_ds()DELTA_STATEDELTA_STATEDELTA_STATEDELTA_STATE根DS當前活動DS創(chuàng)建DS25API_BEGIN,API_END宏intdepth=0;api_part_start_state(depth); result=api_make_gear();

result=api_solid_cylinder_cone();

result=api_subtract();api_part_note_state(result,depth);DSBBBBBDSDSBBBBBBBBBBAPI_BEGINAPI_ENDAPI_BEGINAPI_ENDAPI_BEGINAPI_END26API_BEGIN,API_END宏intdepth=0;api_part_start_state(depth); result=api_make_gear();

result=api_solid_cylinder_cone();

result=api_subtract();api_part_note_state(result,depth);API_BEGINAPI_ENDAPI_BEGINAPI_ENDAPI_BEGINAPI_ENDAPI_BEGINAPI_ENDDSBBBBBBBB27API_BEGIN,API_END宏intdepth=0;api_part_start_state(depth); result=api_make_gear();

result=api_solid_cylinder_cone();

result=api_subtract();api_part_note_state(result,depth);API_BEGINAPI_ENDAPI_BEGINAPI_ENDAPI_BEGINAPI_ENDAPI_BEGINAPI_ENDAPI_NOP_BEGINAPI_NOP_ENDDSBBBBBBBBBBBBBBAPI_NOP_BEGIN和API_NOP_END的效果和取消操作的效果一致,對應

的兩個宏之間的所有創(chuàng)建、修改和刪除是無效的,因此用戶需要注意在該宏

對之內的ENTITY是否有效28出錯處理(errorhandling)可以知道API函數(shù)調用的結果outcome::error_number()outcome::ok()check_outcome()函數(shù)為了創(chuàng)建穩(wěn)定的API,這是必要的調用系統(tǒng)錯誤出錯處理宏EXCEPTION_BEGIN,EXCEPTION_TRY,

EXCEPTION_CATCH,EXCEPTION_ENDAPI_BEGIN,API_END29出錯處理(errorhandling)明確地指出錯誤,并跟蹤該過程中發(fā)生了些什么將api_solid_cylinder_cone()函數(shù)中的半徑參數(shù)設置為0首先注釋掉API_BEGIN和API_END運行程序,嘗試Undo/Redo操作intdepth=0;api_part_start_state(depth);//API_BEGIN outcomeresult=api_make_gear(pBody);

BODY*pCyl; SPApositionp3(0,0,-10); SPApositionp4(0,0,10); result=api_solid_cylinder_cone(p3,p4,3.0,3.0,3.0,(SPAposition*)NULL,pCyl);

result=api_subtract(pCyl,pBody); if(result.ok())m_pAHDoc->UpdateEntity(pBody);//API_ENDapi_part_note_state(result,depth);30出錯處理(errorhandling)明確地指出錯誤,并跟蹤該過程中發(fā)生了些什么(續(xù)上頁)取消注釋API_BEGIN和API_END移去api_make_gear()前的“outcome”在圖示位置在每個api函數(shù)調用之后添加“check_outcome(result);”

溫馨提示

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

評論

0/150

提交評論