iCAx开思工具箱

标题: product下part面的颜色问题 [打印本页]

作者: wndcool    时间: 2007-1-29 17:45
标题: product下part面的颜色问题
当一个PRODUCT包含两个PART,这两个PART引用同一个PART文件而来,
这时候如果我改一个PART的某个面的颜色,则产品下另一个PART相应的面颜色也会被改,因为他们引自同一个PART文件嘛。
但是当我们用鼠标去选择的时候,选取某个一PART的元素,这个元素就会高亮,而另外一个PART相应元素不会有变化,如何用程序来实现这种机制呢,如果用CATVisPropertiesValues这种接口应该不行,会引起另外一个PART的相关元素颜色变化,不知道有什么办法达到我的目的呢?希望大家多多帮忙,发表意见。
我不想用预选择集合这样的办法,是否与CATRep 这个有关?
作者: wndcool    时间: 2007-1-29 17:53
CATI3DGeoVisu   -》 GiveRep()这样?
作者: xyzhu    时间: 2007-1-29 18:53
每个Part都有个Product-Instance,将这个实例QI到CATIVisProperties,然后用它改颜色,应该覆盖掉Part的颜色
作者: wndcool    时间: 2007-1-29 19:48
那么如何得到那个Part的Product-Instance呢,这样:
CATListValCATBaseUnknown_var*   ListChildren =
                piProductOnRoot->GetAllChildren();
        piProductOnRoot -> Release();
        piProductOnRoot = NULL;

CATIProduct_var spChild=(*ListChildren)[1];
这个spChild其实应该是part的Product-Instance吧,如果要让自己放心,那就用下面的方法:
CATIProduct_var spInstanceChild=piProductOnRoot->FindInstance(piProductOnRoot);
好,这下spInstanceChild这个应该是part的Product-Instance了吧,如果它是个PART的话。

那么如何用spInstanceChild这个来改变面的颜色呢,这里如果直接QI接口CATIVisProperties,
会把整个产品的颜色变掉,我现在要该里面的某个面的颜色,如果这样的话我应该要得到那个面,
然后再QI接口CATIVisProperties。
要怎么才能得到面呢?
我只知道:
CATIProduct_var spRef = spInstanceChild->GetReferenceProduct();
  
  if ( NULL_var != spRef )
  {
     CATILinkableObject * piLinkableObject = NULL;
     rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                           

     if ( SUCCEEDED(rc) )
     {
        // Do not release the document pointer
        CATDocument * pDocument = NULL ;
        pDocument = piLinkableObject->GetDocument();
}
}

这样得到这个PART的DOC,然后再去得到面,这样的话相当于又回到了Reference的part,又会全都改掉。
如何去得到那个instance的面呢?


作者: wndcool    时间: 2007-1-29 19:57
我想是不是应该每个PART-INSTANCE里面保存的应该是用于显示的CATRep,PART-INSTANCE里应该已经没有具体的拓扑几何了吧,只是用reference里的拓扑几何信息再加上位置矩阵构造CATRep,用于INSTANCE的显示?如果对的话应该是找CATRep这个。在part-instance里GiveRep可以得到CATRep,然后它会有很多孩子CATRep,然后定向到某个孩子身上来改变颜色就不会改到另外的PART的颜色了。
我这样想不知道是不是可行?猜测的。
但我只知道CATRep可以得到一个CATRep的孩子连表,怎么定位过去搞不清楚
作者: wndcool    时间: 2007-1-29 20:01
这里发帖子讨论效率慢啊,
我的QQ:240255705
希望高手来帮帮忙呀。
也欢迎CATIA二次开发的人来交流
作者: xyzhu    时间: 2007-1-29 20:54
我认为,可以用鼠标将某一面高亮,但不能只使其中之一变色,好象在CATIA下也做不到
作者: wndcool    时间: 2007-1-29 21:02
在CATIA里是做不到,本来我想做的,现在看来应该是做不到,我在乱搞。
看来要用CATISO 这个才正确,而不是去改颜色了。
不好意思,这下我应该快明白了,我的问题也应该可以解决了。
谢谢你的帮助!
作者: horizan    时间: 2007-1-29 21:07
instance实际引用同一个实体,修改任意instance对象必将影响到所引用实体的属性,所以只修改一个是不可能的;但是instance本身有自己的颜色等属性,可以定义整个instance的某个属性而不会影响到背后的实体。
作者: wndcool    时间: 2007-1-29 21:30
是的,我开始想改局部的属性,看来是不应该这样操作的,思路不正确。
我前面还发了个帖子,是在约束的作用下产品CATIMovable的问题,不知道你们有没有看到,
现在还没解决,给点提示啊,谢谢
作者: sunmell    时间: 2007-2-15 17:35
ding
作者: sunmell    时间: 2007-2-15 17:35
ding
作者: sunmell    时间: 2007-2-15 17:36
dingdingdingdingdingdingding
作者: sunmell    时间: 2007-2-15 17:36
dingdingdingding
作者: sunmell    时间: 2007-2-15 17:36
dingdingdingdingdingding
作者: sunmell    时间: 2007-2-15 17:37
dingdingdingdingdingdingding
作者: sunmell    时间: 2007-2-15 17:37
ding
作者: sunmell    时间: 2007-2-15 17:37
dingdingding
作者: sunmell    时间: 2007-2-15 17:37
dingdingdingding
作者: sunmell    时间: 2007-2-15 17:37
dingdingding
作者: sunmell    时间: 2007-2-15 17:37
dingdingdingdingding
作者: sunmell    时间: 2007-2-15 17:38
可惜我不会,太深了!看不懂
作者: acoka    时间: 2007-2-15 22:20
原帖由  于 2007-1-29 21:30 发表
是的,我开始想改局部的属性,看来是不应该这样操作的,思路不正确。
我前面还发了个帖子,是在约束的作用下产品CATIMovable的问题,不知道你们有没有看到,
现在还没解决,给点提示啊,谢谢



你可以像H版主一样发个sample workspace, 1个sample model出来呀

一堆文字的说明,不好理解。
作者: wndcool    时间: 2007-2-24 23:08
过年回家了,一直没上网,才看到。
恩,过几天我弄一个发上来看看,
我现在饶开自己控制约束下的位置了,CATIA的等下发出来再看看能不能用




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3