CAA创建基于草图拉伸(Pad) 的状态命令.doc_第1页
CAA创建基于草图拉伸(Pad) 的状态命令.doc_第2页
CAA创建基于草图拉伸(Pad) 的状态命令.doc_第3页
CAA创建基于草图拉伸(Pad) 的状态命令.doc_第4页
CAA创建基于草图拉伸(Pad) 的状态命令.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

该例子在工具条创建一个状态命令,用户激活该命令后,根据提示依次选择草图,输入拉伸长度,点击确定完成一个拉伸特征的创建。通过该例子,可以熟悉零件文档的基本结构、获取草图工厂的方法,你还可以掌握如何获得草图支持面的方向。1. 创建对话框在名为CAAPadCreateCmd的Module中创建一个名为PadParamInputDlg的对话框,安装如下方式布局并在对话框中添加对应的控件:布局完成后在对话框外的空白处点鼠标左键,然后按CTRL+S进行保存,向导会自动更新对应的资源文件和.h以及.cpp文件。最终该对话框对应的布局代码如下: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. 添加获取编辑框控件的成员方法为了方便命令类获取对话框编辑框控件,以获取或设置编辑框的内容,给对话框类PadParamInputDlg添加成员函数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 /省略其它向导生成代码 /结束当前命令 void ExitCommand(); /选择草图 CATBoolean SelectSketch(void* data); /创建拉伸体 CATBoolean CreatePad(void* data); /验证用户输入 CATBoolean ValidateInput();private: /参数输入对话框 PadParamInputDlg* _pDlgInput; /草图选择代理 CATPathElementAgent* _pSelSketchAgent; /输入对话框确定按钮代理 CATDialogAgent* _pDlgOKAgent; /保存草图对象 CATISpecObject_var _spSketchObj; /第一方向偏移长度 double _fOffset1; /第二方向偏移长度 double _fOffset2;在构造函数对相关成员进行初始化: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); /添加创建直线对话框的消息回调函数 AddAnalyseNotificationCB(_pDlgInput, _pDlgInput-GetWindCloseNotification(), (CATCommandMethod)&CAAPadCreateStCmd:ExitCommand, (void*)NULL); AddAnalyseNotificationCB(_pDlgInput, _pDlgInput-GetDiaCANCELNotification(), (CATCommandMethod)&CAAPadCreateStCmd:ExitCommand, (void*)NULL);在析构函数添加相应资源释放的代码:CAAPadCreateStCmd:CAAPadCreateStCmd() /析构对话框 if(NULL != _pDlgInput) _pDlgInput-RequestDelayedDestruction(); _pDlgInput = NULL; /析构草图选择代理 if(NULL != _pSelSketchAgent) _pSelSketchAgent-RequestDelayedDestruction(); _pSelSketchAgent = NULL; /析构对话框确定按钮代理 if(NULL != _pDlgOKAgent) _pDlgOKAgent-RequestDelayedDestruction(); _pDlgOKAgent = NULL; 4. 实现状态转换函数BuildGraph状态转换函数BuildGraph中实现了代理定义,状态定义和状态转换的定义: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. 定义状态 /- /2.1 选择草图 CATDialogState* pSelSketchState = GetInitialState(选择一个草图); pSelSketchState-AddDialogAgent(_pSelSketchAgent); /2.2 点击确定 CATDialogState* pClickOKState = AddDialogState(输入拉伸长度并点击确定); pClickOKState-AddDialogAgent(_pDlgOKAgent); /- /3. 定义转换 /- AddTransition(pSelSketchState, pClickOKState, IsOutputSetCondition(_pSelSketchAgent), Action(ActionMethod)&CAAPadCreateStCmd:SelectSketch); AddTransition(pClickOKState, NULL, IsOutputSetCondition(_pDlgOKAgent), Action(ActionMethod)&CAAPadCreateStCmd:CreatePad);关于状态命令的相关介绍参考第一章的基本命令使用部分内容,这里不再详细介绍。5. 结束命令函数ExitCommand/结束当前命令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. 将用户输入的字符串转换成浮点数CATUnicodeString strOffset();strOffset = pEditor1-GetText();strOffset.ConvertToNum(&_fOffset1);strOffset = pEditor2-GetText();strOffset.ConvertToNum(&_fOffset2);/3. 验证草图if(NULL_var = _spSketchObj)return CATFalse;return CATTrue;8. 创建拉伸体CratePad/创建拉伸体CATBoolean CAAPadCreateStCmd:CreatePad(void* data)/1. 重置按钮响应代理_pDlgOKAgent-InitializeAcquisition();/2. 验证输入数据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. 创建拉伸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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论