找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 21074|回复: 12
打印 上一主题 下一主题

CAA:新特征如何在修改参数后自动刷新?(acoka兄,很忙么)

[复制链接]
跳转到指定楼层
1
发表于 2005-8-23 11:26:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
在新特征下imp CATINavigateObject后建立参数,类似下面的Point特征:
Point.1  
--x=0  
--y=0  
--z=0  
  
现在在改变参数值的时候需要刷新此特征。从什么地方获取参数改变的响应事件?如何捕捉CATIParmEvents?百科全书有个例子:Subscribing to Events,但是感觉很烦,需要建立参数特征的Catalog,在建立一个Interface来获取Events。能否有比较简单的做法?
  
多谢各位关注!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2005-8-23 20:19:22 | 只看该作者
你没建catalog,没有imp的对象,怎么写build和CATINavigateObject?data extension你写的是什么?
  
有了catalog,当sp_in变化的时候,build会自动运行
  
最近放假,基本不做与工作有关的事,休工中
  
  
3
发表于 2005-8-23 22:45:32 | 只看该作者
我建了Catalog,也写了build和CATINavigateObject。
但是没有data extension。
是不是需要把此参数当成data extension?因为是坐标值,只是单纯的Double,data extension我都不知道怎么写,呵呵。能否详细一点?
多谢指教!打搅了。
4
发表于 2005-8-24 09:48:46 | 只看该作者
我猜想你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中相应的项要确认是自动更新而不是手动更新(不只一个地方)
5
发表于 2005-8-24 16:55:59 | 只看该作者
saeba  ,谢谢指教!
开始我按照你的方法改写之后,第一次是可以的。tk_specobject类型的参数。但是后面我发现,我SetAttribute 后去获取这个参数,CATISpecObject *piParamOkk = piCuboidPointAttrbute->GetSpecObject();再将其转换为CATICkeParm后,其值始终为Magnitude,这是为什么?我在set之前测过值,是正常的,然后马上去获得这个Attrbute,始终为Magnitude。能否告知一二?
  
6
发表于 2005-8-25 12:41:24 | 只看该作者
可以让我看看你的source吗?要Feature生成时(Factory)和Build()方法的source.要是不方便就算了。
  
下面是一般的做法:
  
1。Factory中生成Feature的时候:
MyFactoryreateMyFeature(...){
...
  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去改变呀。。。
7
发表于 2005-8-25 20:00:45 | 只看该作者
saeba ,您真是详细,多谢先~~
  
我的程序基本上做好了,返回那个Magnitude,是因为我把CATICkeParm转换为了CATISpecObject,其实不用转换的,呵呵。
  
还有,我发现剪切-粘贴在有些Object上是做不起来的,系统提示使用拷贝-粘贴-删除来代替。我都不是很明白在什么情况下可以完成剪切,什么时候不能?大家不妨讨论一下。
8
发表于 2005-8-25 20:47:31 | 只看该作者
可以告诉我有哪些Object吗,我想试试看
9
发表于 2005-8-25 21:03:41 | 只看该作者
是我自己做的Object啊。系统提供的,好像还没发现……
呵呵。是不是做的Catalog有问题?有时候做的是支持剪切的。
怀疑是属性类型的问题,tk_specobject还是什么tk_componont,前者做的就可以,后者做的不能,其他实现都一样的。
10
发表于 2005-8-25 21:46:20 | 只看该作者
这个问题我真的没有注意过
应该看看CATICutAndPastable吧
有时间的时候让我试试
不敢保证能帮得上忙
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-12-24 01:22 , Processed in 0.027218 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表