iCAx开思网

标题: CAA中关于intersect特征的一个问题 [打印本页]

作者: cupcake    时间: 2005-8-15 21:21
标题: CAA中关于intersect特征的一个问题
各位高手:
      最近遇到一个问题,感觉十分茫然,如下图1,我用好多平面和PartBpdy进行求交,结果是一些交叉特征,每个交叉特征形状一样,尺寸不一样(单个交叉的形状如图2),我想得到每个交叉的和外面的圆弧相连的那条曲线的长度,现在长度是得到了,可是结果不对,那条线的长度竟然在每个交叉处的长度都一样,请问为什么?
作者: cupcake    时间: 2005-8-15 21:22
图2,求红色曲线的长度
作者: cupcake    时间: 2005-8-15 21:30
我先得到每个交叉特征的Body,然后得到每个交叉的所有的CATCurve,然后区分出了交叉上的我要求的那条曲线,得到了它的长度,不知道为什么长度总是一样,得到的错误的结果如下:
第3列为各个交叉上的那条线的长度
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
90.000000  6.000000  68.940042
请高手指点
:)
作者: cupcake    时间: 2005-8-15 21:31
图2 ,刚发的看不到。
作者: cupcake    时间: 2005-8-15 22:03
以下是得到一个交叉所有的曲线的函数,其中GetAliasOfFeature()显示参数的别名,GetBodyFromFeature()得到特征的CATBody_var,都是自己写的,List是输出参数,存放得到的所有的曲线。
  
void ChildCmd1::GetAllCurvesInFeature(CATISpecObject_var& spIntersect,CATLISTV(CATBaseUnknown_var)& List)
{
  CATLISTP(CATCell) LISTCell;
  if(NULL_var!=spIntersect)
  {  
   GetAliasOfFeature(spIntersect);
   CATBody_var spBodyOfIntersect=NULL_var;  
   spBodyOfIntersect=GetBodyFromFeature(spIntersect);
  if(NULL_var!=spBodyOfIntersect)
  {
   spBodyOfIntersect->GetAllCells(LISTCell, 1);  
   for(int index = 1; index <= LISTCell.Size(); index++ )
   {   
    CATCell_var spCell=LISTCell[index];  
     if(spCell!=NULL_var)
     {
    //  cout<<endl<<"spCell!=NULL_var"<<endl;
    CATEdge_var spEdge=spCell;  
    if(spEdge!=NULL_var)
    {
     //cout<<endl<<"spEdge!=NULL_var"<<endl;
     CATEdgeCurve* pEdgeCurve=spEdge->GetCurve();
     CATCurve* pCurve=pEdgeCurve->GetRefCurve();
      if(pCurve!=NULL)
      {
      // cout<<endl<<"pCurve!=NULL"<<endl;
      CATCurve_var spTheCurve=pCurve;    
      if(NULL_var!=spTheCurve)  
      {
        //cout<<endl<<"NULL_var!=spTheCurve in Findcurve()"<<endl;
      List.Append(spTheCurve);
       spCell=NULL_var;
       spEdge=NULL_var;
       pEdgeCurve=NULL;
       pCurve=NULL;
       spTheCurve = NULL_var;  
      }   
      }
            
    }
     }
        
   }//for end  
      
  }
  spBodyOfIntersect=NULL_var;     
  }
  LISTCell.RemoveAll();
}
作者: cupcake    时间: 2005-8-16 14:13
高手来看看吧
作者: hick    时间: 2005-8-16 15:53
代码不全,这些看不出问题
  
CATBody_var spBodyOfIntersect=NULL_var;  
spBodyOfIntersect=GetBodyFromFeature(spIntersect);  
  
建议检查看 spBodyOfIntersect  和  spIntersect
作者: wndcool    时间: 2005-8-16 16:25
你要用CATEdge的求长度函数,不能用curve,要不把curve弄出来,出错而且麻烦
作者: cupcake    时间: 2005-8-16 17:32
wndcool wrote:
你要用CATEdge的求长度函数,不能用curve,要不把curve弄出来,出错而且麻烦

  
就是感觉CATEdgeCurve的GetRefCurve()用的可能有问题,不知道什么是reference curve
作者: cupcake    时间: 2005-8-16 18:02
对,用了CATEdge的CalcLength();
长度对了,可是上面的用法为什么不对呢?
作者: wndcool    时间: 2005-8-17 10:09
CATEdge是用Vertex限定好了的,所以求出来的长度是对的,而它的几何Curve你把它弄出来,你还要找它的CATCrvParam来算长度,找起来会使程序变的复杂,而且你对CATCrvParam不很了解的话,常常找出来的还是错的,所以就错了
作者: cupcake    时间: 2005-8-17 10:49
谢谢各位回复
:)
作者: saeba    时间: 2005-8-24 15:11
CATCurve 是GeometricObjects,定义形状
CATEdge是TopologicalObjects,定义范围
所以求长度是要用TopologicalObjects的CATEdge,而不是CATCurve。
CATCurve的长度并不一定是你所见到的(3D viewer中的)那么长。
这也是常容易犯的错误之一。
作者: cupcake    时间: 2005-8-24 17:40
谢谢了
:)
作者: acoka    时间: 2005-8-29 13:43
R15开始
  
现在的
CalcLength被Deprecated,不能用1了
  
当然有了个新的更方便的替代interafce
CATDynMassProperties3D
作者: cupcake    时间: 2005-8-29 15:56
acoka兄消息真灵通阿
:)
作者: renlog123    时间: 2006-7-12 09:54
楼主:麻烦一下,请问您是如何实现平面与PartBody求交的?我怎么一试就退出,可不可以介绍一下如何做?谢谢!
作者: cupcake    时间: 2006-7-15 18:55
我的QQ:  58567710
欢迎讨论,好久没有来过了。




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