CAA创建基于草图拉伸Pad的状态命令.docx
- 文档编号:11823922
- 上传时间:2023-04-03
- 格式:DOCX
- 页数:11
- 大小:35.38KB
CAA创建基于草图拉伸Pad的状态命令.docx
《CAA创建基于草图拉伸Pad的状态命令.docx》由会员分享,可在线阅读,更多相关《CAA创建基于草图拉伸Pad的状态命令.docx(11页珍藏版)》请在冰豆网上搜索。
CAA创建基于草图拉伸Pad的状态命令
该例子在工具条创建一个状态命令,用户激活该命令后,根据提示依次选择草图,输入拉伸长度,点击确定完成一个拉伸特征的创建。
通过该例子,可以熟悉零件文档的基本结构、获取草图工厂的方法,你还可以掌握如何获得草图支持面的方向。
1.创建对话框
在名为CAAPadCreateCmd的Module中创建一个名为PadParamInputDlg的对话框,安装如下方式布局并在对话框中添加对应的控件:
布局完成后在对话框外的空白处点鼠标左键,然后按CTRL+S进行保存,向导会自动更新对应的资源文件和.h以及.cpp文件。
最终该对话框对应的布局代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
voidPadParamInputDlg:
:
Build()
{
// TODO:
Thiscallbuildsyourdialogfromthelayoutdeclarationfile
// -------------------------------------------------------------------
//CAA2WIZARDWIDGETCONSTRUCTIONSECTION
_Label001=newCATDlgLabel(this,"Label001");
_Label001->SetGridConstraints(0,0,1,1,CATGRID_4SIDES);
_EditorSketch=newCATDlgEditor(this,"EditorSketch");
_EditorSketch->SetGridConstraints(0,1,1,1,CATGRID_4SIDES);
_Label003=newCATDlgLabel(this,"Label003");
_Label003->SetGridConstraints(1,0,1,1,CATGRID_4SIDES);
_EditorOffset1=newCATDlgEditor(this,"EditorOffset1");
_EditorOffset1->SetGridConstraints(1,1,1,1,CATGRID_4SIDES);
_Label005=newCATDlgLabel(this,"Label005");
_Label005->SetGridConstraints(2,0,1,1,CATGRID_4SIDES);
_EditorOffset2=newCATDlgEditor(this,"EditorOffset2");
17
18
19
20
21
22
23
24
25
26
27
28
29
30
_EditorOffset2->SetGridConstraints(2,1,1,1,CATGRID_4SIDES);
//ENDCAA2WIZARDWIDGETCONSTRUCTIONSECTION
//CAA2WIZARDCALLBACKDECLARATIONSECTION
//ENDCAA2WIZARDCALLBACKDECLARATIONSECTION
}
2. 添加获取编辑框控件的成员方法
为了方便命令类获取对话框编辑框控件,以获取或设置编辑框的内容,给对话框类PadParamInputDlg添加成员函数GetEditorControl:
1
2
3
4
5
6
7
8
9
//获得对话框控件
CATDlgEditor*PadParamInputDlg:
:
GetEditorControl(intid){
switch(id){
case1:
return_EditorSketch;
case2:
return_EditorOffset1;
case3:
return_EditorOffset2;
10
11
12
13
default:
returnNULL;
}
}
3. 在命令类PadStateCmd添加成员变量
下面是命令类CAApadCreateStCmd的头文件:
classCAAPadCreateStCmd:
publicCATStateCommand
{
//省略其它向导生成代码
//结束当前命令
voidExitCommand();
//选择草图
CATBooleanSelectSketch(void*data);
//创建拉伸体
CATBooleanCreatePad(void*data);
//验证用户输入
CATBooleanValidateInput();
private:
//参数输入对话框
PadParamInputDlg*_pDlgInput;
//草图选择代理
CATPathElementAgent*_pSelSketchAgent;
//输入对话框确定按钮代理
CATDialogAgent*_pDlgOKAgent;
//保存草图对象
CATISpecObject_var_spSketchObj;
//第一方向偏移长度
double_fOffset1;
//第二方向偏移长度
double_fOffset2;
};
在构造函数对相关成员进行初始化:
CAAPadCreateStCmd:
:
CAAPadCreateStCmd():
CATStateCommand("CAAPadCreateStCmd",CATDlgEngOneShot,CATCommandModeExclusive)
//ValidstatesareCATDlgEngOneShotandCATDlgEngRepeat
_pDlgInput(NULL)
_pSelSketchAgent(NULL)
_pDlgOKAgent(NULL)
_spSketchObj(NULL_var)
_fOffset1(0.0)
_fOffset2(0.0)
{
//初始化对话框
_pDlgInput=newPadParamInputDlg();
_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中实现了代理定义,状态定义和状态转换的定义:
voidCAAPadCreateStCmd:
:
BuildGraph()
{
//---------------------------------
//1.定义代理
//---------------------------------
//1.1草图选择代理
_pSelSketchAgent=newCATPathElementAgent("SelSketch");
_pSelSketchAgent->AddElementType("CATISketch");
_pSelSketchAgent->SetBehavior(CATDlgEngWithPSOHSO);
//1.2初始化确定按钮代理
_pDlgOKAgent=newCATDialogAgent("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
//结束当前命令
voidCAAPadCreateStCmd:
:
ExitCommand(CATCommand*iCommand,
CATNotification*iNotification,
CATCommandClientDataiUsefulData){
this->RequestDelayedDestruction();
}
6.选择草图—SelectSketch
//选择草图
CATBooleanCAAPadCreateStCmd:
:
SelectSketch(void*data){
//1.获取选择对象
CATBaseUnknown*pBaseUnknown=_pSelSketchAgent->GetElementValue();
_pSelSketchAgent->InitializeAcquisition();
//2.将选择对象赋值给草图对象
_spSketchObj=pBaseUnknown;
if(NULL_var==_spSketchObj)
returnCATFalse;
//3.获取编辑框指针
CATDlgEditor*pEditor=_pDlgInput->GetEditorControl
(1);
if(NULL==pEditor)
returnCATFalse;
//4.获取对象别名
CATIAlias_varspAliasObj=_spSketchObj;
if(NULL_var==spAliasObj)
returnCATFalse;
CATUnicodeStringstrSketchName=spAliasObj->GetAlias();
//5.将别名显示到编辑框
pEditor->SetText(strSketchName);
returnCATTrue;
}
7. 验证用户输入—ValidateInput
//验证用户输入
CATBooleanCAAPadCreateStCmd:
:
ValidateInput(){
//1.获取编辑框用户输入的偏移长度
CATDlgEditor*pEditor1=_pDlgInput->GetEditorControl
(2);
if(NULL==pEditor1)
returnCATFalse;
CATDlgEditor*pEditor2=_pDlgInput->GetEditorControl(3);
if(NULL==pEditor2)
returnCATFalse;
//2.将用户输入的字符串转换成浮点数
CATUnicodeStringstrOffset("");
strOffset=pEditor1->GetText();
strOffset.ConvertToNum(&_fOffset1);
strOffset=pEditor2->GetText();
strOffset.ConvertToNum(&_fOffset2);
//3.验证草图
if(NULL_var==_spSketchObj)
returnCATFalse;
returnCATTrue;
}
8. 创建拉伸体—CratePad
//创建拉伸体
CATBooleanCAAPadCreateStCmd:
:
CreatePad(void*data){
//1.重置按钮响应代理
_pDlgOKAgent->InitializeAcquisition();
//2.验证输入数据
if(!
ValidateInput())
returnCATFalse;
//3.获取零件工厂
if(NULL_var==_spSketchObj)
returnCATFalse;
CATIContainer_varspContainer=_spSketchObj->GetFeatContainer();
if(NULL_var==spContainer)
returnCATFalse;
CATIPrtFactory_varspPrtFactory=spContainer;
if(NULL_var==spPrtFactory)
returnCATFalse;
//4.获取草图方向
CATMathDirectionmathDirect(0,0,1);
CATISketch_varspSketch=_spSketchObj;
if(NULL_var==spSketch)
returnCATFalse;
CATISpecObject_varspSketchPlaneObj=spSketch->GetSupport();
if(NULL_var==spSketchPlaneObj)
returnCATFalse;
CATPlane_varspSketchPlane=spSketchPlaneObj;
if(NULL_var==spSketchPlane)
returnCATFalse;
doubleplanePos[3]={0};
CATMathPointptCenter;
CATMathVectorcoordVector;
spSketchPlane->GetNormal(ptCenter,coordVector);
mathDirect.SetCoord(coordVector.GetX(),
coordVector.GetY(),
coordVector.GetZ());
//5.创建拉伸
CATIPad_varspPad=spPrtFactory->CreatePad(_spSketchObj,
_fOffset1,
_fOffset2,
mathDirect);
if(NULL_var==spPad)
returnCATFalse;
CATISpecObject_varspPadObj=spPad;
if(NULL_var==spPadObj)
returnCATFalse;
spPadObj->Update();
//6.更新零件特征
CATIPrtContainer_varspPrtContainer=spContainer;
if(NULL_var==spPrtContainer)
returnCATFalse;
CATISpecObject_varspPrtObj=spPrtContainer->GetPart();
spPrtObj->Update();
returnCATTrue;
}
CATISketch接口的GetSupport方法可以获取草图的支持面,该方法的返回类型是CATISpecObject_var。
草图支持面实现了CATPlane接口,可以通过CATPlane的GetNormal方法得到平面的法向,该方法的原型及API说明如下:
publicvirtualvoid GetNormal(
CATMathPoint&
ioOrigin,
CATMathVector&
ioNormal)const=0
Retrievestheoriginandthenormalof this CATPlane.
Parameters:
ioOrigin
Theorigin.
ioNormal
Thenormal.
拉伸体通过CATIPrtFactory接口的CreatePad方法创建,该方法的原型声明如下:
/**
*Createsanewpad.
*@paramihSketch
*Thesketchdefiningthepadprofile.
*@return
*Thepadfeature.
*/
virtualCATISpecObject_varCreatePad(constCATISpecObject_var&ihSketch=NULL_var)=0;
/**@nodoc*/
virtualCATISpecObject_varCreatePad(constCATISpecObject_var&ihSketch,doubleDim1,doubleDim2,constCATMathDirection&Direction)=0;
返回对象可以QI得到CATIPad接口,该接口的继承关系如下:
可以使用CATIPrism的方法设定拉伸体的相关参数。
(注:
可编辑下载,若有不当之处,请指正,谢谢!
)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CAA 创建 基于 草图 拉伸 Pad 状态 命令