iCAx开思网

标题: CAA里如何通过CATEdge或CATEdgeCurve得到该线所在的面? [打印本页]

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

[ 本帖最后由 renlog123 于 2006-7-22 21:23 编辑 ]
作者: hick    时间: 2006-7-21 17:06
我是没看明白你的意思, 理解能力太差
作者: acoka    时间: 2006-7-21 17:42
问的问题有点难,不是太了解

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

有可能你还得用GetGeometricRep()

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

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

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

论坛元老还在吗  出来帮个忙啊 我用你的IsLyingOn老师执行不进去啊 。。。




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3