CAA創(chuàng)建基于草圖拉伸(Pad) 的狀態(tài)命令.doc_第1頁
CAA創(chuàng)建基于草圖拉伸(Pad) 的狀態(tài)命令.doc_第2頁
CAA創(chuàng)建基于草圖拉伸(Pad) 的狀態(tài)命令.doc_第3頁
CAA創(chuàng)建基于草圖拉伸(Pad) 的狀態(tài)命令.doc_第4頁
CAA創(chuàng)建基于草圖拉伸(Pad) 的狀態(tài)命令.doc_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

該例子在工具條創(chuàng)建一個狀態(tài)命令,用戶激活該命令后,根據(jù)提示依次選擇草圖,輸入拉伸長度,點擊確定完成一個拉伸特征的創(chuàng)建。通過該例子,可以熟悉零件文檔的基本結(jié)構(gòu)、獲取草圖工廠的方法,你還可以掌握如何獲得草圖支持面的方向。1. 創(chuàng)建對話框在名為CAAPadCreateCmd的Module中創(chuàng)建一個名為PadParamInputDlg的對話框,安裝如下方式布局并在對話框中添加對應(yīng)的控件:布局完成后在對話框外的空白處點鼠標左鍵,然后按CTRL+S進行保存,向?qū)詣痈聦?yīng)的資源文件和.h以及.cpp文件。最終該對話框?qū)?yīng)的布局代碼如下:123456789101112131415161718192021222324252627282930void PadParamInputDlg:Build()/ TODO: This call builds your dialog from the layout declaration file/ -/CAA2 WIZARD WIDGET CONSTRUCTION SECTION_Label001 = new CATDlgLabel(this, Label001);_Label001 - SetGridConstraints(0, 0, 1, 1, CATGRID_4SIDES);_EditorSketch = new CATDlgEditor(this, EditorSketch);_EditorSketch - SetGridConstraints(0, 1, 1, 1, CATGRID_4SIDES);_Label003 = new CATDlgLabel(this, Label003);_Label003 - SetGridConstraints(1, 0, 1, 1, CATGRID_4SIDES);_EditorOffset1 = new CATDlgEditor(this, EditorOffset1);_EditorOffset1 - SetGridConstraints(1, 1, 1, 1, CATGRID_4SIDES);_Label005 = new CATDlgLabel(this, Label005);_Label005 - SetGridConstraints(2, 0, 1, 1, CATGRID_4SIDES);_EditorOffset2 = new CATDlgEditor(this, EditorOffset2);_EditorOffset2 - SetGridConstraints(2, 1, 1, 1, CATGRID_4SIDES);/END CAA2 WIZARD WIDGET CONSTRUCTION SECTION/CAA2 WIZARD CALLBACK DECLARATION SECTION/END CAA2 WIZARD CALLBACK DECLARATION SECTION2. 添加獲取編輯框控件的成員方法為了方便命令類獲取對話框編輯框控件,以獲取或設(shè)置編輯框的內(nèi)容,給對話框類PadParamInputDlg添加成員函數(shù)GetEditorControl:12345678910111213/獲得對話框控件CATDlgEditor* PadParamInputDlg:GetEditorControl(int id)switch(id)case 1:return _EditorSketch;case 2:return _EditorOffset1;case 3:return _EditorOffset2;default:return NULL;3. 在命令類PadStateCmd添加成員變量下面是命令類CAApadCreateStCmd的頭文件:class CAAPadCreateStCmd: public CATStateCommand /省略其它向?qū)纱a /結(jié)束當前命令 void ExitCommand(); /選擇草圖 CATBoolean SelectSketch(void* data); /創(chuàng)建拉伸體 CATBoolean CreatePad(void* data); /驗證用戶輸入 CATBoolean ValidateInput();private: /參數(shù)輸入對話框 PadParamInputDlg* _pDlgInput; /草圖選擇代理 CATPathElementAgent* _pSelSketchAgent; /輸入對話框確定按鈕代理 CATDialogAgent* _pDlgOKAgent; /保存草圖對象 CATISpecObject_var _spSketchObj; /第一方向偏移長度 double _fOffset1; /第二方向偏移長度 double _fOffset2;在構(gòu)造函數(shù)對相關(guān)成員進行初始化:CAAPadCreateStCmd:CAAPadCreateStCmd() :CATStateCommand (CAAPadCreateStCmd, CATDlgEngOneShot, CATCommandModeExclusive)/ Valid states are CATDlgEngOneShot and CATDlgEngRepeat,_pDlgInput(NULL),_pSelSketchAgent(NULL),_pDlgOKAgent(NULL),_spSketchObj(NULL_var),_fOffset1(0.0),_fOffset2(0.0) /初始化對話框 _pDlgInput = new PadParamInputDlg(); _pDlgInput-Build(); _pDlgInput-SetVisibility(CATDlgShow); /添加創(chuàng)建直線對話框的消息回調(diào)函數(shù) AddAnalyseNotificationCB(_pDlgInput, _pDlgInput-GetWindCloseNotification(), (CATCommandMethod)&CAAPadCreateStCmd:ExitCommand, (void*)NULL); AddAnalyseNotificationCB(_pDlgInput, _pDlgInput-GetDiaCANCELNotification(), (CATCommandMethod)&CAAPadCreateStCmd:ExitCommand, (void*)NULL);在析構(gòu)函數(shù)添加相應(yīng)資源釋放的代碼:CAAPadCreateStCmd:CAAPadCreateStCmd() /析構(gòu)對話框 if(NULL != _pDlgInput) _pDlgInput-RequestDelayedDestruction(); _pDlgInput = NULL; /析構(gòu)草圖選擇代理 if(NULL != _pSelSketchAgent) _pSelSketchAgent-RequestDelayedDestruction(); _pSelSketchAgent = NULL; /析構(gòu)對話框確定按鈕代理 if(NULL != _pDlgOKAgent) _pDlgOKAgent-RequestDelayedDestruction(); _pDlgOKAgent = NULL; 4. 實現(xiàn)狀態(tài)轉(zhuǎn)換函數(shù)BuildGraph狀態(tài)轉(zhuǎn)換函數(shù)BuildGraph中實現(xiàn)了代理定義,狀態(tài)定義和狀態(tài)轉(zhuǎn)換的定義:void CAAPadCreateStCmd:BuildGraph() /- /1. 定義代理 /- /1.1 草圖選擇代理 _pSelSketchAgent = new CATPathElementAgent(SelSketch); _pSelSketchAgent-AddElementType(CATISketch); _pSelSketchAgent-SetBehavior(CATDlgEngWithPSOHSO); /1.2 初始化確定按鈕代理 _pDlgOKAgent = new CATDialogAgent(OKAgent); _pDlgOKAgent-AcceptOnNotify(_pDlgInput, _pDlgInput-GetDiaOKNotification(); /- /2. 定義狀態(tài) /- /2.1 選擇草圖 CATDialogState* pSelSketchState = GetInitialState(選擇一個草圖); pSelSketchState-AddDialogAgent(_pSelSketchAgent); /2.2 點擊確定 CATDialogState* pClickOKState = AddDialogState(輸入拉伸長度并點擊確定); pClickOKState-AddDialogAgent(_pDlgOKAgent); /- /3. 定義轉(zhuǎn)換 /- AddTransition(pSelSketchState, pClickOKState, IsOutputSetCondition(_pSelSketchAgent), Action(ActionMethod)&CAAPadCreateStCmd:SelectSketch); AddTransition(pClickOKState, NULL, IsOutputSetCondition(_pDlgOKAgent), Action(ActionMethod)&CAAPadCreateStCmd:CreatePad);關(guān)于狀態(tài)命令的相關(guān)介紹參考第一章的基本命令使用部分內(nèi)容,這里不再詳細介紹。5. 結(jié)束命令函數(shù)ExitCommand/結(jié)束當前命令void CAAPadCreateStCmd:ExitCommand(CATCommand * iCommand, CATNotification * iNotification, CATCommandClientData iUsefulData) this-RequestDelayedDestruction();6. 選擇草圖SelectSketch/選擇草圖CATBoolean CAAPadCreateStCmd:SelectSketch(void* data) /1. 獲取選擇對象 CATBaseUnknown* pBaseUnknown = _pSelSketchAgent-GetElementValue(); _pSelSketchAgent-InitializeAcquisition(); /2. 將選擇對象賦值給草圖對象 _spSketchObj = pBaseUnknown; if(NULL_var = _spSketchObj) return CATFalse; /3. 獲取編輯框指針 CATDlgEditor* pEditor = _pDlgInput-GetEditorControl(1); if(NULL = pEditor) return CATFalse; /4. 獲取對象別名 CATIAlias_var spAliasObj = _spSketchObj; if(NULL_var = spAliasObj) return CATFalse; CATUnicodeString strSketchName = spAliasObj-GetAlias(); /5. 將別名顯示到編輯框 pEditor-SetText(strSketchName); return CATTrue;7. 驗證用戶輸入ValidateInput/驗證用戶輸入CATBoolean CAAPadCreateStCmd:ValidateInput()/1. 獲取編輯框用戶輸入的偏移長度CATDlgEditor* pEditor1 = _pDlgInput-GetEditorControl(2);if(NULL = pEditor1)return CATFalse;CATDlgEditor* pEditor2 = _pDlgInput-GetEditorControl(3);if(NULL = pEditor2)return CATFalse;/2. 將用戶輸入的字符串轉(zhuǎn)換成浮點數(shù)CATUnicodeString strOffset();strOffset = pEditor1-GetText();strOffset.ConvertToNum(&_fOffset1);strOffset = pEditor2-GetText();strOffset.ConvertToNum(&_fOffset2);/3. 驗證草圖if(NULL_var = _spSketchObj)return CATFalse;return CATTrue;8. 創(chuàng)建拉伸體CratePad/創(chuàng)建拉伸體CATBoolean CAAPadCreateStCmd:CreatePad(void* data)/1. 重置按鈕響應(yīng)代理_pDlgOKAgent-InitializeAcquisition();/2. 驗證輸入數(shù)據(jù)if(!ValidateInput()return CATFalse;/3. 獲取零件工廠if(NULL_var = _spSketchObj)return CATFalse;CATIContainer_var spContainer = _spSketchObj-GetFeatContainer();if(NULL_var = spContainer)return CATFalse;CATIPrtFactory_var spPrtFactory = spContainer;if(NULL_var = spPrtFactory)return CATFalse;/4.獲取草圖方向CATMathDirection mathDirect(0,0,1);CATISketch_var spSketch = _spSketchObj;if(NULL_var = spSketch)return CATFalse;CATISpecObject_var spSketchPlaneObj = spSketch-GetSupport();if(NULL_var = spSketchPlaneObj)return CATFalse;CATPlane_var spSketchPlane = spSketchPlaneObj;if(NULL_var = spSketchPlane)return CATFalse;double planePos3 = 0;CATMathPoint ptCenter;CATMathVector coordVector;spSketchPlane-GetNormal(ptCenter, coordVector);mathDirect.SetCoord(coordVector.GetX(),coordVector.GetY(),coordVector.GetZ();/5. 創(chuàng)建拉伸CATIPad_var spPad = spPrtFactory-CreatePad(_spSketchObj,_fOffset1,_fOffset2,mathDirect);if(NULL_var = spPad)return CATFalse;CATISpecObject_var spPadObj = spPad;if(NULL_var = spPadObj)return CATFalse;spPadObj-Update();/6. 更新零件特征CATIPrtContainer_var spPrtContainer = spContainer;if(NULL_var = spPrtContainer)return CATFalse;CATISpecObject_var spPrtObj = spPrtContainer-GetPart();spPrtObj-Update();return CATTrue;CATISketch接口的GetSuppo

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論