iCAx开思网
标题:
CAA:新特征如何在修改参数后自动刷新?(acoka兄,很忙么)
[打印本页]
作者:
cms_nuaa
时间:
2005-8-23 11:26
标题:
CAA:新特征如何在修改参数后自动刷新?(acoka兄,很忙么)
在新特征下imp CATINavigateObject后建立参数,类似下面的Point特征:
Point.1
--x=0
--y=0
--z=0
现在在改变参数值的时候需要刷新此特征。从什么地方获取参数改变的响应事件?如何捕捉CATIParmEvents?百科全书有个例子:Subscribing to Events,但是感觉很烦,需要建立参数特征的Catalog,在建立一个Interface来获取Events。能否有比较简单的做法?
多谢各位关注!
作者:
acoka
时间:
2005-8-23 20:19
你没建catalog,没有imp的对象,怎么写build和CATINavigateObject?data extension你写的是什么?
有了catalog,当sp_in变化的时候,build会自动运行
最近放假,基本不做与工作有关的事,休工中
作者:
cms_nuaa
时间:
2005-8-23 22:45
我建了Catalog,也写了build和CATINavigateObject。
但是没有data extension。
是不是需要把此参数当成data extension?因为是坐标值,只是单纯的Double,data extension我都不知道怎么写,呵呵。能否详细一点?
多谢指教!打搅了。
作者:
saeba
时间:
2005-8-24 09:48
我猜想你Catalog中大概是写成类似这样的:
piAttribute = piSpecStartup->AddAttribute (sX, tk_double, sp_IN);
piAttribute = piSpecStartup->AddAttribute (sY, tk_double, sp_IN);
piAttribute = piSpecStartup->AddAttribute (sZ, tk_double, sp_IN);
你如果想让参数Feature(CATICkeParm)更新引起自定义Feature的更新,
必须把参数Feature设置为sp_IN的Attribute,类似这样:
piAttribute = piSpecStartup->AddAttribute (sX, tk_specobject, sp_IN );
piAttribute = piSpecStartup->AddAttribute (sY, tk_specobject, sp_IN );
piAttribute = piSpecStartup->AddAttribute (sZ, tk_specobject, sp_IN );
当然Build中也要相应改写,从参数Feature中取出Double值设置点坐标。
这样,参数Feature的值更新时就会引起自定义Feature的更新。
当然,还有一个重要前提:
Tools->Options中相应的项要确认是自动更新而不是手动更新(不只一个地方)
作者:
cms_nuaa
时间:
2005-8-24 16:55
saeba ,谢谢指教!
开始我按照你的方法改写之后,第一次是可以的。tk_specobject类型的参数。但是后面我发现,我SetAttribute 后去获取这个参数,CATISpecObject *piParamOkk = piCuboidPointAttrbute->GetSpecObject();再将其转换为CATICkeParm后,其值始终为Magnitude,这是为什么?我在set之前测过值,是正常的,然后马上去获得这个Attrbute,始终为Magnitude。能否告知一二?
作者:
saeba
时间:
2005-8-25 12:41
可以让我看看你的source吗?要Feature生成时(Factory)和Build()方法的source.要是不方便就算了。
下面是一般的做法:
1。Factory中生成Feature的时候:
MyFactory
reateMyFeature(...){
...
CATICkeParmFactory *piParmFactory = NULL;
CATICkeParm_var spLitDouble = NULL_var; //因为是坐标值,用double
CATISpecAttrAccess *piAccessOnFeature = NULL;
CATIDescendants *piDescendantOnFeat = NULL;
// Retrieve the param factory
...
//Instanciate a literal double
if (SUCCEEDED(hr) && piParmFactory) {
spLitDouble = piParmFactory-> CreateReal("X coord", 0.0);
piParmFactory->Release();
piParmFactory = NULL;
}
//piInstance是新生成Feature的Instance
if ((spLitDouble != NULL_var) && piInstance) {
//Add this double to the X attribute
hr = piInstance->QueryInterface( IID_CATISpecAttrAccess, (void**) [$piAccessOnFeature )]
if (SUCCEEDED(hr) && piAccessOnFeature) {
piAccessOnFeature->SetSpecObject(sX, spLitDouble );
piAccessOnFeature->Release();
piAccessOnFeature = NULL;
}
//Aggregate it under the feature
hr = piInstance->QueryInterface(IID_CATIDescendants, (void**) [$piDescendantOnFeat)]
if (SUCCEEDED(hr) && piDescendantOnFeat) {
piDescendantOnFeat->Append(spLitDouble );
piDescendantOnFeat->Release();
piDescendantOnFeat = NULL;
}
}
...
}
2。Build()方法里:
MyFeatureBuild::Build(){
...
//get the attribute which is a parameter (literal) feature
CATISpecObject *piParamX = piXAttrbute->GetSpecObject();
CATICkeParm_var spXParm(piParamX);
CATICkeInst_var spXValue = spXParm->Value();
double finallyWeGotMyX = spXValue->AsReal();
//make use of finallyWeGotMyX
...
}
不知道你的source是怎么样的。
另外,“值始终为Magnitude”是什么意思?我不太明白。
还有,你为什么要去SetAttribute?在那里SetAttribute?
是设置parameter feature的值吗?可是parameter feature的值应该是User去改变呀。。。
作者:
cms_nuaa
时间:
2005-8-25 20:00
saeba ,您真是详细,多谢先~~
我的程序基本上做好了,返回那个Magnitude,是因为我把CATICkeParm转换为了CATISpecObject,其实不用转换的,呵呵。
还有,我发现剪切-粘贴在有些Object上是做不起来的,系统提示使用拷贝-粘贴-删除来代替。我都不是很明白在什么情况下可以完成剪切,什么时候不能?大家不妨讨论一下。
作者:
saeba
时间:
2005-8-25 20:47
可以告诉我有哪些Object吗,我想试试看
作者:
cms_nuaa
时间:
2005-8-25 21:03
是我自己做的Object啊。系统提供的,好像还没发现……
呵呵。是不是做的Catalog有问题?有时候做的是支持剪切的。
怀疑是属性类型的问题,tk_specobject还是什么tk_componont,前者做的就可以,后者做的不能,其他实现都一样的。
作者:
saeba
时间:
2005-8-25 21:46
这个问题我真的没有注意过
应该看看CATICutAndPastable吧
有时间的时候让我试试
不敢保证能帮得上忙
作者:
acoka
时间:
2005-8-26 10:31
你的剪切是在catia的界面下的ctr-x, cre-v?
那么它归CATICCPable管,不imp了话是都可以,但在某些情况下,如果你的feature的数据结构有问题,可能会发生你说的问题
作者:
cms_nuaa
时间:
2005-8-26 11:41
那估计是数据结构有问题,我也觉得不太正常。呵呵。一般都不会去Imp CATICCPable的吧?
作者:
saeba
时间:
2005-8-26 11:45
你的剪切是对你的Object(Feature?)做的,还是对它下面的东西做的?
因为你提到了tk_componont,这种属性的东西一般是挂在你的Feature下面的东西,是不能单独剪切/删除的。
如果你指得确实是对你的Feature剪切,我就不知道为什么了。
能不能放一张系统提示的Screen shot?
欢迎光临 iCAx开思网 (https://www.icax.org/)
Powered by Discuz! X3.3