iCAx开思工具箱

标题: CAA: Annotation for Sketch [打印本页]

作者: xyzhu    时间: 2005-7-21 23:39
标题: CAA: Annotation for Sketch
我想给Sketch中的一条线加注.如果是Interactive的话,没问题,用CATPathElementAgent就能解决:
  
CATPathElement* pPath = apPathAgent->GetValue();
    
CATSO* pSo = new CATSO;
pSo->AddElement(pPath);
CATITPSFactoryAdvanced * piFactAdv = NULL;
HRESULT rc = CATTPSInstantiateComponent (DfTPS_ItfTPSFactoryAdvanced, (void**) [$ piFactAdv)]
    
CATITPSText* pText = NULL;
CATMathPlane Plane = CATMathOIJ;
CATUnicodeString text = "Hello";
rc = piFactAdv->CreateTextOnGeometry(pSo, [$Plane, &text, &pText)]
  
CATPathElement中最后元素是CATLine.
  
但如果自己创建一个Sketch,然后对其中的一条线加注,如何生成需要的CATPathElement呢?因为我只能得到CATISpecObject,实际上是CATI2DCurve:
  
CATI2DWFFactory_var sp2DWFFac(spSketch);
...
CATISpecObject_var spLine1 = sp2DWFFac->CreateLine(P1,P2);
  
请各位指点.
作者: acoka    时间: 2005-7-22 21:44
几点想法
  
1,你用CATPathElement得到的应该是sketch在3Dview上的BRep feature. 应该可以cast到CATISpecObject. 你得到CATLine不是sketch里面的直线本身,而是catia的sketch的结果形状(spec tree看到的sketch下的东西是sketch的input)
  
2,如果你只是为了给sketch的线加长度标注,那么可以建个约束,然后应该有method把这个标注给发布到sketch外头(退出sketcher后也可以在3DView里看到),
  
3.如果你是要给它加文字什么的,那么就到sketch的interface里找能变换到类似CATLine的CATPCurve的函数,
作者: xyzhu    时间: 2005-7-24 21:50
我用了CATIMmDecodeSubElem来取CATLine:
  
HRESULT rc = -1;
CATISketch_var spSketch = ...;
CATListValCATI2DWFGeometry_var wfList;
rc = spSketch->GetComponents("CATI2DLine", wfList);
int size = wfList.Size();
CATI2DLine_var sp2DLine = wfList[3]; // 某条线
  
CATISpecObject_var spSpecOnWfLine(wfList[1]);
CATIMmDecodeSubElem* pSubElem = NULL;
spSketch->QueryInterface(IID_CATIMmDecodeSubElem, (void**)[$pSubElem)]
CATListValCATBaseUnknown_var brepList;
rc = pSubElem->GetSpecificBRepAccess(spSpecOnWfLine, [$brepList)]
size = brepList.Size();
CATIBRepAccess_var spBRep = brepList[1];
CATLISTV(CATBaseUnknown_var) lineList;
spBRep->GetGeometries(lineList);
size = lineList.Size();
CATLine_var spLine (lineList[1]);
spLine->Completed();
  
CATISpecObject_var spSpecOn2DLine(sp2DLine);
CATPathElement* pPathElt = new CATPathElement(spLine);
CATISpecObject_var spFather = spSpecOn2DLine->GetFather();
while(!!spFather)
{
  pPathElt->AddFatherElement(spFather);
  spFather = spFather->GetFather();
}
  
但这样得出的CATPathElement和用CATPathElementAgent::GetValue()得到的就是不一样. 用我的CATPathElement 总出错,用CATPathElementAgent的就可以.
  
这是为什么呢?
作者: acoka    时间: 2005-7-24 22:57
sp2DLine是sketch的要素,所以你建的pathelement有可能与3DView下用PathElementAgent得到的value不同
  
你Agent是直接设CAT2DLine,在spec-tree上选线?
sketch的形状元素如果不自己进行特殊处理了话,在普通3DView界面下应该是无法直接pick到CAT2D***的feaure进来的,你可以按方向键看看鼠标下都有什么可以给你选,多半是 [Sketch1/Edge.1]而不是[Line.1](或许这就是你的pathelement的值会不同的原因)
  
以上是补充我上个回帖的第1点
  
不妨试试看以下思路
1,得到CATISketch和属下的CATI2DLine
2。Encode得到CATI2DLine的CATIBRepAccess
3. CATIBRepAccess featurzie
4. CreateTextOnGeometry(3得到的feature的path, sketch的support面的MathPlane?, [$text, &pText)]
  
搞不清你到底卡在哪里,胡乱说一些,希望能有点帮助
作者: xyzhu    时间: 2005-7-24 23:56
谢谢!
  
我用CAA做了一个Sketch,然后想对其中的线标注文字.我所能取到的只是CATI2DLine (即spec tree 中的元素),对它是不能标注的,即使是直接在CATIA下.
  
但在3DViewer中,我可以用Mouse选取Sketch中的线,然后标注.
但我的Sketch是用CAA生成的,对其标注也必须用CAA来自动完成,所以不能用PathElementAgent.
问题是,如何模拟Agent,取到与Sketch中对应的3DViewer中的线?
作者: xyzhu    时间: 2005-7-25 00:42
解决了.
实际上我绕了个弯,直接用spBRep构建CATPathElement即可,不必再QI到CATLine.
  
谢谢帮忙!
作者: xyzhu    时间: 2005-7-26 17:47
现在又有了新问题: 我想把Annotation里的Front View隐藏掉,应该怎么办?
作者: liuruixiao205    时间: 2005-7-27 09:51
2,如果你只是为了给sketch的线加长度标注,那么可以建个约束,然后应该有method把这个标注给发布到sketch外头(退出sketcher后也可以在3DView里看到),  
   
acoka兄,你知道这个method的吗?还有就是能不能让3DView里的标注在转换到2DView 时还可以看到,CATIA里面好像不能完成这功能。
作者: 圈圈眉    时间: 2013-5-23 11:49
xyzhu 发表于 2005-7-25 00:42
解决了.
实际上我绕了个弯,直接用spBRep构建CATPathElement即可,不必再QI到CATLine.
  

你好,我也遇到类似的问题,用CAA显式创建一个point,再把该poin标注。做法是:
1.把生成的点CATISpecObject_var spSpecPoint1,构造CATPathelement:
CATPathElement * pPathElement=new CATPathElement(spSpecPoint1);

2.然后再加入CATSO中:CATSO * pSelection=new CATSO();
pSelection->AddElement(pPathElement);

3.最后调用CreateTextOnGeometry():
CATITPSFactoryAdvanced * piFactAdv = NULL;
rc = CATTPSInstantiateComponent (DfTPS_ItfTPSFactoryAdvanced,(void**) & piFactAdv);
rc = piFactAdv -> CreateTextOnGeometry (pSelection, &Plane,&TextString , &piText);


也是在CreateTextOnGeometry返回了FAIL,请教一下,谢谢了!!

作者: liushaowei    时间: 2014-5-13 08:48
有人用过CATIMfgGeometryAnalyser接口不?谁能告诉我怎么通过操作GetGeometries?




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