找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 21660|回复: 9
打印 上一主题 下一主题

CAA: Annotation for Sketch

[复制链接]
跳转到指定楼层
1
发表于 2005-7-21 23:39:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
我想给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);
  
请各位指点.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2005-7-22 21:44:46 | 只看该作者
几点想法
  
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的函数,
3
发表于 2005-7-24 21:50:01 | 只看该作者
我用了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的就可以.
  
这是为什么呢?
4
发表于 2005-7-24 22:57:27 | 只看该作者
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)]
  
搞不清你到底卡在哪里,胡乱说一些,希望能有点帮助
5
发表于 2005-7-24 23:56:14 | 只看该作者
谢谢!
  
我用CAA做了一个Sketch,然后想对其中的线标注文字.我所能取到的只是CATI2DLine (即spec tree 中的元素),对它是不能标注的,即使是直接在CATIA下.
  
但在3DViewer中,我可以用Mouse选取Sketch中的线,然后标注.
但我的Sketch是用CAA生成的,对其标注也必须用CAA来自动完成,所以不能用PathElementAgent.
问题是,如何模拟Agent,取到与Sketch中对应的3DViewer中的线?
6
发表于 2005-7-25 00:42:00 | 只看该作者
解决了.
实际上我绕了个弯,直接用spBRep构建CATPathElement即可,不必再QI到CATLine.
  
谢谢帮忙!
7
发表于 2005-7-26 17:47:21 | 只看该作者
现在又有了新问题: 我想把Annotation里的Front View隐藏掉,应该怎么办?
8
发表于 2005-7-27 09:51:04 | 只看该作者
2,如果你只是为了给sketch的线加长度标注,那么可以建个约束,然后应该有method把这个标注给发布到sketch外头(退出sketcher后也可以在3DView里看到),  
   
acoka兄,你知道这个method的吗?还有就是能不能让3DView里的标注在转换到2DView 时还可以看到,CATIA里面好像不能完成这功能。
9
发表于 2013-5-23 11:49:38 | 只看该作者
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,请教一下,谢谢了!!
10
发表于 2014-5-13 08:48:24 | 只看该作者
有人用过CATIMfgGeometryAnalyser接口不?谁能告诉我怎么通过操作GetGeometries?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-12-26 12:45 , Processed in 0.032855 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表