马上注册,结交更多同行朋友,交流,分享,学习。
您需要 登录 才可以下载或查看,没有帐号?注册
x
在做一个参数化的例子,大体的流程是,在CATIA窗口打开一个三维零件(只有两个拉伸凸台特征,其中拉伸高度是想参数化的尺寸),通过菜单调出对话框,在对话框里输入两个拉伸凸台的高度值,点击确定完成模型更新,现在程序编译和运行都没问题,但是功能实现不了,模型不能更新,整了好几天没搞定,非常郁闷,求高手指点迷经!!
确定按钮响应函数程序如下(蓝色部分是参数赋值程序):
void TestDialog::OnOK(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
{
// Add your code here
//获取当前零件文档
HRESULT rc=E_FAIL;
CATDocument * pDocument=NULL;
CATFrmEditor* pEditor=CATFrmEditor::GetCurrentEditor();
if(NULL!=pEditor)
{
pDocument=pEditor->GetDocument();
CATInit *pInitOnDoc=NULL;
rc = pDocument->QueryInterface(IID_CATInit,(void**)&pInitOnDoc);
//获取零件的根容器
CATIPrtContainer *pIPrtCont = NULL;
pIPrtCont=(CATIPrtContainer *)pInitOnDoc->GetRootContainer("CATIPrtContainer");
//获取零件设计特征
CATISpecObject_var spSpecObjectPart = pIPrtCont->GetPart();
if (NULL_var != spSpecObjectPart)
{
//零件特征遍历
CATIDescendants * pIDescendants = NULL;
rc = spSpecObjectPart->QueryInterface(IID_CATIDescendants,(void**)&pIDescendants);
if (SUCCEEDED(rc))
{
CATLISTV (CATISpecObject_var) List ;
pIDescendants->GetAllChildren("CATIPad",List);
double firstLimit ; // First and second limits of the pad
double secondLimit = 0.;
CATMathDirection dirY(0., 1., 0.);
//第一个参数改变
CATIPad_var spPrism(List[0]);
firstLimit = _pL1Editor->GetValue();
spPrism->ModifyDirection(dirY);
spPrism->ModifyEndType(catOffsetLimit);
spPrism->ModifyEndOffset(firstLimit);
spPrism->ModifyStartType(catOffsetLimit);
spPrism->ModifyStartOffset(secondLimit);
//第二个参数改变
CATIPad_var spPris(List[1]);
firstLimit = _pL2Editor->GetValue();
spPris->ModifyDirection(dirY);
spPris->ModifyEndType(catOffsetLimit);
spPris->ModifyEndOffset(firstLimit);
spPris->ModifyStartType(catOffsetLimit);
spPris->ModifyStartOffset(secondLimit);
//更新模型
spSpecObjectPart->Update();
}
}
}
}
|