iCAx开思工具箱

标题: CATILinkableObject问题诚心请教 [打印本页]

作者: wndcool    时间: 2006-6-26 21:16
标题: CATILinkableObject问题诚心请教
CATLISTV(CATISpecObject_var) Planes;
  CATILinkableObject_var  geometry;
  CATIDescendants *pPartAsDescendant = 0;
  if( SUCCEEDED(spPart->QueryInterface(IID_CATIDescendants, (void**)&pPartAsDescendant)) )
  {
    pPartAsDescendant->GetAllChildren("CATPlane", Planes);  
        pPartAsDescendant->Release();
    if (Planes.Size())
    {
      geometry = Planes[1];
      GetProductConnector((CATILinkableObject *)geometry,
                           piInstanceProd2,
                           piProductOnRoot,
                           0,
                           pConnector2,
                           iCreation);
    }

  }      

这是CAAAssemblyUI.edu里的一端代码,是做个装配约束的。
spPart是CATIPrtPart_var这个类型
CATIDescendants ->GetAllChildren出来的CATListValCATISpecObject_var应该是CATISpecObject这个的表吧。
可是CATISpecObject的继承关系是这样的:
System.IUnknown
  |
  +---System.IDispatch
    |
    +---System.CATBaseUnknown
      |
      +---CATISpecObject
那么geometry = Planes[1];这句话是怎么弄的呢。

问题2:
CATILinkableObject这个里面只有GetDocument() 这个函数。
CATILinkableObject_var  geometry;它干吗把它名字叫geometry这个呢,是不是有些误导,
还是有别的意义?

高手指点一下啊?
谢谢!!!!
作者: acoka    时间: 2006-6-28 09:43
1,inteface的继承,一个instance何以有多个interface的imp
  建议看看java帮助理解

2,它要取第1个面(XY面?)的linkableobject吧,大名字是不太好,spPlaneGeometryAsLink/hrPlaneGeometryAsLink之类的比较好?
      DS的use case很老的,写得不够漂亮的地方也很多,注释也少
作者: xyzhu    时间: 2006-6-28 19:57
>>那么geometry = Planes[1];这句话是怎么弄的呢
geometry 是个smartPointer, geometry = Planes[1] 相当于用了QueryInterface(IIDCATILinkableObject, ...).
geometry 既是CATPlane, 也是CATILinkableObject, 也是...
从继承关系上是看不出来的,CAA不是C++,要看ObjectBrowser.
C++的继承关系在编译的时候就定了,用QueryInterface表达的继承关系只有在运行的时候才知道, 这是优点(灵活), 也是缺点(Runtime error, 找错难).
作者: wndcool    时间: 2006-6-28 22:03
谢谢两位,对于geometry = Planes[1];这个我现在知道了,原来我不知道智能指针已经做成了可以直接转接口代替QueryInterface这个,现在知道了。
但是还有一点我有点疑问,因为做装配约束,比如两平面offset之类的约束,至少应该知道这两个平面吧,但是我看CAA这个里面似乎难以知道这两个平面嘛,在GetProductConnector中CATILinkableObject *)geometry这个参数,也就是它的第一个参数,CAA帮助里面写到是相关的geometry,但实际上复值的CATISpecObject这个参数实际都是特征级别的组件需要实现的接口,也就是说输入的参数是个特征,一个特征所相关的几何内容就多了去了,比如一个孔,起码也有三个几何,还要带个轴,这样,在CAA构造约束的时候只给特征它怎么晓得用哪个几何来做约束呢?

另外,GetProductConnector这个函数的第一个参数帮助说是相关的几何,但是我在ObjectBrowser中查阅了一下,几何模块中的组件比如GSMPlane并没有实现CATILinkableObject 这个接口,也就是说这里需要的参数确实是至少特征级的,而不是几何级的,CAA如何来确定约束相关的几何呢,我很纳闷。
作者: wndcool    时间: 2006-6-30 16:20
顶一下,希望各位高手能够看到,我还没解决
作者: saeba    时间: 2006-7-5 13:47
>GetProductConnector中 CATILinkableObject *)geometry这个参数,也就是它的第一个参数,CAA帮助里面写到是相关的geometry,但实际上复值的CATISpecObject这个参数实际都是特征级别的组件需要实现的接口,也就是说输入的参数是个特征,

这是因为你看到的例子正好都是这样的‘;能QI到CATILinkableObject的SpecObject
但是能QI到CATILinkableObject的不一定都要是SpecObject呀

>但是我在ObjectBrowser中查阅了一下,几何模块中的组件比如GSMPlane并没有实现CATILinkableObject 这个接口

ObjectBrowser只能用来参考,因为它的功能并不完善。
你要知道LateType之间是可以继承的(比如GSMPlane继承自CATSpecObject),但是ObjectBrowser并没有完全考虑到这种继承关系,所以CATSpecObject已经实现的接口,你在GSMPlane上就不一定看得到。还是自己试试最保险。
作者: wndcool    时间: 2006-7-5 16:21
>ObjectBrowser并没有完全考虑到这种继承关系

这个到是个问题。ObjectBrowser这个东西做的不够全面,要是把继承体系都加如就好了。我一直想找个CAA组件之间的继承关系,类似于MFC类图,似乎好象从没有人有这个东西,不知道有没有人有,能否给我一份,非常感激。

另外谁有装配约束的例子,很简单的就可以,例如两个立方体的两个面做个offset之类的,或者孔轴同轴之类的,如果能给我个就好了,有现成的看看很快就明白了。如果没有我只好自己再搞搞。

》你要知道LateType之间是可以继承的(比如GSMPlane继承自CATSpecObject),但是ObjectBrowser并没有完全考虑到这种继承关系,所以CATSpecObject已经实现的接口,你在GSMPlane上就不一定看得到。还是自己试试最保险。

可以继承我到是知道,但是GSMPlane是继承自CATSpecObject吗?不知道您是从哪儿能够看到这样的关系呢,很想知道。因为CATISpecObject这个接口是专门针对特征的,所以和它差不多名字的CATSpecObject这个我也就自然而然的理解为特征级的组件,如果真是这样,那么GSMPlane这个似乎并不需要从CATSpecObject来继承啊。




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