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

iCAx开思网

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

CAA里如何通过CATEdge或CATEdgeCurve得到该线所在的面?

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

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

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

x
通过读取平面与实体的交线intersect,得到该交线的指针,进一步得到其CATIGeometricalElement_var指针,并利用GetBodyResult获得交线所属的CATBody(该CATBody指针与实体的CATBody指针不是同一个),这个CATBody下只包括CATwire类型的Domain(有几个封闭交线就有几个Domain),进一步可得到其下的交线为CATEdge或CATEdgeCurve类型及其指针,我想通过该指针得到生成这个交线的两个面,或者说是该线所依附的面,但是直接从实体的CATBody里无法得到,找了一下不知道如何实现,哪怕是判断一条线或点在不在某个面上的函数也没找到,请指教!谢谢!

[ 本帖最后由 renlog123 于 2006-7-22 21:23 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 赞一下!赞一下!
2
发表于 2006-7-21 17:06:09 | 只看该作者
我是没看明白你的意思, 理解能力太差
3
发表于 2006-7-21 17:42:26 | 只看该作者
问的问题有点难,不是太了解

试试看
1,把你的线转成CATPCurve之类的面上线(用CATPCurveType检测后转型)
2,然后用GetSurface求CATPCurve的支持面

有可能你还得用GetGeometricRep()

或许你还可以试试看
CATBody的
public virtual CATTopLyingOnDiagnostic IsLyingOn( CATBody*  iDomain) = 0

[ 本帖最后由 acoka 于 2006-7-21 20:51 编辑 ]
4
发表于 2006-7-22 21:17:27 | 只看该作者
非常感谢!
得到的交线类型不是CATPCurveType,而是CATEdgeCurveType和CATCurveType类型,所以不能得到CATPCurve指针;
另采用IsLyingOn判别采用交线CATIGeometricalElement_var->GetBodyResult()的CATBody判断是否依赖于实体的CATBody,得到结果是CatTopLyingOn,说明依赖于实体,但是这有什么用?交线的CATBody中包括的是CATWire类型的Domain,有几个封闭的交线就有几个Domain
5
发表于 2006-7-24 15:03:10 | 只看该作者
try QI to CATIGSMIntersect
6
发表于 2006-8-14 19:14:42 | 只看该作者
感觉用拓扑可以找得到,参考 CAA Doc中Mechanical Design下的3D Functional Tolerancing & Annotation例子。
我没做过你要的,但我做过一个2D、3D下,在选中一个尺寸线后,找出生成该尺寸线时所用到的元素,
有时是一条直线,有时是2个直线,等等。。。。。这与你的要求很相似,你可以试一试。。
7
发表于 2006-8-17 15:41:25 | 只看该作者
原帖由 renlog123 于 2006-7-22 21:17 发表
非常感谢!
另采用IsLyingOn判别采用交线CATIGeometricalElement_var->GetBodyResult()的CATBody 判断是否依赖于实体的CATBody,得到结果是CatTopLyingOn,说明依赖于实体,但是这有什么用?交线的CATBody中包括的是 CATWire类型的Domain,有几个封闭的交线就有几个Domain


你是得在CATCell的层次上分析?试试看下面的方法能用不

先从交线的CATBody用GetAllCells(1)得到所有CATLISTP(CATEdge) EdgeList
然后从实体的CATBody用GetAllCells(2)得到所有面CATLISTP(CATFace) FaceList
for (  ii = 1; ii<= EdgeList.Size(); ii++) {
   for ( jj = 1; jj <= FaceList.Size(); jj++) {
       if (  EdgeList [ii]->IsLyingOn(FaceList[jj]) {
           CATFace* pFace = FaceList[jj];
           If ( ! pFace) {
               Continue;
           }
           CATGeometry* pGeo = pFace->GetSurface();
           If ( ! pGeo) {
               Continue;
           }
           CATIBRepAccess_var spIBRepAccess = ::CATBRepDecode( (CATCell_var) pGeo, CATIGeometricalElement_var(实体));
   }
}
8
发表于 2011-9-20 11:51:43 | 只看该作者
这个问题 有解决的吗  
9
发表于 2011-9-26 20:34:55 | 只看该作者
acoka 发表于 2006-8-17 15:41
你是得在CATCell的层次上分析?试试看下面的方法能用不

先从交线的CATBody用GetAllCells(1)得到所有 ...

论坛元老还在吗  出来帮个忙啊 我用你的IsLyingOn老师执行不进去啊 。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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