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