我用以下代码获取了一个Part document中的所有参数,并使用CATICkeParm接口中的Valuate函数改变了参数L1的值,L1为我自己创建的用户参数,初始值为60mm,修改为100Mm,使用Valuate函数后,在命令窗中显示L1的值已经变为100,但是模型中L1的值仍然是60mm。我觉得是没有更新的问题,但是怎么更新呢?哪位高手提供一点思路啊,thank a lot in advance.
整个程序为批处理程序,使用CATDocumentServices::OpenDocument函数将一个Part.CATPart文档加载到内存中的。
代码如下,其中spPart为一个Part document的Part feature,即根节点,用CATIPrtContainer接口的GetPart()函数获取的,获取过程的代码省略了。
if (NULL_var != spPart)
{
CATIParmPublisher * pIParmPublisher = NULL;
rc = spPart->QueryInterface(IID_CATIParmPublisher,(void**)&pIParmPublisher);
if (FAILED(rc)) cout<<"Getting interface CATIParmPublisher failed"<<endl;
if (SUCCEEDED(rc)) cout<<"Getting interface CATIParmPublisher succeeded"<<endl;
CATLISTV (CATISpecObject_var) ParaList ;
pIParmPublisher->GetAllChildren("CATICkeParm",ParaList);
int Nb = ParaList.Size();
cout<<"Para number is:"<<Nb<<endl;
CATICkeParm *pICkeParm = NULL;
int i;
CATISpecObject_var UserPara1;
for(i=1;i<=Nb;i++)
{
CATISpecObject_var specObj = ParaList ;
rc = specObj->QueryInterface(IID_CATICkeParm,(void**) &pICkeParm);
cout<<pICkeParm->Name()<<endl;
CATUnicodeString ParaName("L1");
if(pICkeParm->RelativeName()==ParaName)
//CATISpecObject_var UserPara1;
UserPara1=specObj;
}
CATICkeParm *pICkeParmUser = NULL;
rc = UserPara1->QueryInterface(IID_CATICkeParm,(void**) &pICkeParmUser);
cout<<"The Value of "<<pICkeParmUser->RelativeName()<<" is:"<<pICkeParmUser->Content()<<endl;
pICkeParmUser->Valuate(0.1);
cout<<"The Value of Para "<<pICkeParmUser->RelativeName()<<" after modify is:"<<pICkeParmUser->Content()<<endl;