iCAx开思工具箱

标题: caa 求助: 怎樣知道選了什麼 [打印本页]

作者: catiaNew    时间: 2006-3-10 12:05
标题: caa 求助: 怎樣知道選了什麼
各位:
    如果我選了一條edge, 我在caa 中可以拿到一個CATPathElement, 但我怎知道我選了是一條edge而不是face呢?

多謝
作者: xyzhu    时间: 2006-3-10 20:05
CATPathElementAgent::GetElementValue() --> CATBaseUnknown* --> CATSpecObject --> CATSpecObject::GetType()
作者: catiaNew    时间: 2006-3-10 21:50
謝謝你的回復, 但是怎樣從CATBaseUnknown*   拿到 catspecobject 呢?
作者: xyzhu    时间: 2006-3-10 23:57
CATBaseUnknown* pUnk = pAgent->GetElementValue();
CATISpecObject_var spSpecOnElement(pUnk);
CATUnicodeString type = spSpecOnElement->GetType();
作者: catiaNew    时间: 2006-3-11 10:58
我嘗試用gettype(), 但是一運行這句時, catia 就死掉, 彈出一句"click ok to terminate".
我是從catcso->nextelement 拿到一個catbaseunknown*
CATBaseUnknown* pSelUnknown = pCSO->NextElement();
CATISpecObject_var selSpecObj(pSelUnknown);
CATUnicodeString type = selSpecObj->GetType();
不論我選了annotation 或是 face, 或是edge, catia 都會死掉.

請問為何會這樣呢?

感謝
作者: xyzhu    时间: 2006-3-12 02:23
你的那个CATBaseUnknown可能是个BRep,不是SpecObject. 可以试试CATBaseUnknown里未公开的IsA(), saeba在以前的贴子里提到过.或者将CATBaseUnknown QI 到与BRep相关的接口上.
作者: catiaNew    时间: 2006-3-12 10:34
我這個catbaseunknown 是一個catpathelement, 這樣可不可以qi 到 specobject 的 interface呢?
作者: xyzhu    时间: 2006-3-12 15:48
用CATPathElement::CurrentElement()得到CATBaseUnknown, 再看看它是什么.
作者: catiaNew    时间: 2006-3-13 10:14
都是CATPathElement.

我是從 CATCSO->NextElement() 拿到一個 CATBaseUnknown* pUnk
這個 CATBaseUnknown* pUnk->IsAKindOf("CATPathElement") return TRUE, 那麼 pUnk 是一個CATPathElement*

之後, CATPathElement pathElement(pUnk), pathElement.CurrentElement()得出來也是CATPathElement*
作者: catiaNew    时间: 2006-3-13 12:15
不好意思, pathelement->currentelement() 得出來原來不是 catpathelement, 但我不知道是什麼來的,

但是我怎可得到selected 的object 呢?
作者: xyzhu    时间: 2006-3-13 20:47
CATCSO::NextElement() --> CATPathElement --> CATPathElement::CurrentElement() --> CATBaseUnknown
如果这个CATBaseUnknown 能直接转换成CATISpecObject那就最好,若转化后为空指针,则试试转化成CATIMfBiDimResult,CATIMfMonoDimResult
作者: saeba    时间: 2006-3-13 22:02
QI不到CATISpecObject的话,也不会QI到CATIMfBiDimResult,CATIMfMonoDimResult的
因为只有feature才会实现CATIMfBiDimResult,CATIMfMonoDimResult。
如果QI CATISpecObject为NULL,就是BRep了,大概可以QI一些Geometry Interface (CATCurve, CATFace之类的)来判断形状吧。有点忘了

其实这些都是舍本逐末,在设置select的type时,不是能指定Interface吗,
选择发生以后,就用前面设置的type filter一下不就行了吗?
如果你的type指定的是CATISpecObject或者CATBaseUnknown之类的基类,
只能说,呵呵,太业余了。
作者: xyzhu    时间: 2006-3-13 23:15
稍微偷了一下懒,想当然了一下,就出错了. Saeba 说得对,应该是CATCurve, CATFace.
如果User可以任意选择的话,如果选了结构树的元素,应该是个SpecObject,如果选了3DViewer里的东西,则也有可能是个BRep. 如果不想对用户的选择限制,又要知道所选的是什么,就只能QI了吧.
作者: daoshou    时间: 2006-3-16 09:34
标题: SOS 大虾们:怎么在工具条里添加图标?
求助::各位大虾们:怎么在工具条里添加图标??
作者: catiaNew    时间: 2006-3-16 16:44
感謝saeba和xyzhu的回復,

如果我想加一個filter, 是不是用CATICSOFilter就可行了?

謝謝
作者: acoka    时间: 2006-3-17 08:14
原帖由  于 2006-3-16 16:44 发表
感謝saeba和xyzhu的回復,

如果我想加一個filter, 是不是用CATICSOFilter就可行了?

謝謝

给agent设个filter的函数

比如Agent接受曲线的输入
filter拒绝无限长的物体
这样就能实现限制用户选有限曲线
作者: catiaNew    时间: 2006-3-17 14:44
謝謝你的答覆,

我還有一個問題, 希望你能回答, 我想得到annotation view 中的coordinate, 可以拿個annotation 的view plane, 我看過你其中一篇文章, 提及用到
CATITPSView*    pITPSView   = NULL;
ispViewFeat->QueryInterface(IID_CATITPSView, (void **)&pITPSView);

CATMathPlane*   pPlane  = NULL;
pITPSView->GetMathPlane(&pPlane);

但是ispViewFeat 是什麼來的?

而我的步驟是這樣的: 用家選了一個annotation, 我便可得出一個CATBaseUnknown*,
之後用這個 CATBaseUnknown* 來queryinterface 得出一個CATITPSComponent*, 再從CATITPSComponent* 得出一個CATITPSSet*, 最後得到CATITPSView*, 可是從CATITPSComponent* QueryInterface 不到 CATITPSSet*, 故CATITPSSet* 是空指針.

我應該怎樣做才可得出annotation的view plane呢?




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