iCAx开思工具箱

标题: 请教一个CAA的问题!!!!! [打印本页]

作者: windswolftxl    时间: 2004-11-11 14:46
标题: 请教一个CAA的问题!!!!!
    我现在写了一个程序可以在CATIA中找到选定点的坐标!!!
  
可是现在又要求选定这些点所在的线,然后输出点的坐标!!
  
提取线的程序也有!!
  
请教在已经选择线的情况下,如何用CAA找到Curve上的点???
作者: acoka    时间: 2004-11-11 16:16
找到当前part的所有点(这个所有的范围要自己定)
然后求各点到线的距离,小于当前GeoFactory的GetResolution的就算在线
  
当然还可以用找子的方法等,看你对点的要求
作者: vontony    时间: 2004-11-11 17:29
问题的实质是没有完全理解CATIA V5是完全基于组建模型的。点,线,面不存在‘天然’的联系。见附件论文。
作者: acoka    时间: 2004-11-11 17:54
什么叫‘天然’的联系?
作者: windswolftxl    时间: 2004-11-12 14:04
多谢各位高手!!!
  
有没有能直接找到点的方法呀??
  
因为我有上千个点,判断起来会不会很慢呀???
  
多谢多谢!!!!
作者: vontony    时间: 2004-11-12 14:24
acoka wrote:
什么叫‘天然’的联系?

  
不准确,但形象的说法。有别于V4的点-线-面-体-实体的体系。
作者: vontony    时间: 2004-11-12 14:30
windswolftxl wrote:
多谢各位高手!!!  
   
  有没有能直接找到点的方法呀??  
   
  因为我有上千个点,判断起来会不会很慢呀???  
   
  多谢多谢!!!!

  
如果,点是由POINT ON  CURVER 做的还好办。否则只能按楼上acoka的方法做。几千个点应该不会太慢。
作者: windswolftxl    时间: 2004-11-12 15:16
shou dao  
!!!!
作者: acoka    时间: 2004-11-12 15:35
[quote][b]windswolftxl wrote:[/b]
多谢各位高手!!!  
  
  有没有能直接找到点的方法呀??  
  
  因为我有上千个点,判断起来会不会很慢呀???  
  
  多谢多谢!!!! [/quote]
  
如果你只要点的坐标
可以用GetResultBody之类的得到整个PartBody的形状,然后用GetDomain之类来得到所有1次元的元素(点)
给你1个从指定body求所有点的坐标的sample吧,不得照抄,如果在商业程序中使用,请通知我
HRESULT  WSHSampleOperator::GetMathPointListFromBody( const CATBody_var& ispBody, CATLISTV(CATMathPoint) &oLISTMathPoint )
{
  HRESULT rc = S_OK;
  
  do {
    
    if ( !ispBody ) {
      rc = E_FAIL;
      break;
    }
    
    CATLISTP(CATCell) LISTCell;
    ispBody->GetAllCells( LISTCell, 0 );
    for( int index = 1; index <= LISTCell.Size(); index++ ){
      CATCell *pPointCell = LISTCell[index];
      if(!pPointCell){
        continue;
      }
      CATCell_var spPointCell = pPointCell;
      if(!spPointCell){
        continue;
      };
      CATVertex_var spVertex = spPointCell;
      if( !spVertex ){
        continue;
      }
      CATPoint *pPoint = spVertex->GetPoint();
      if(!pPoint){
        continue;
      }
      double pointX = 0.0;
      double pointY = 0.0;
      double pointZ = 0.0;
      pPoint->GetCoord(pointX, pointY, pointZ);
      CATMathPoint mathPoint( pointX, pointY, pointZ );
      oLISTMathPoint.Append(mathPoint);
    }
  } while ( FALSE );
  
  return rc;
}
  
你是要用这个做逆向?
  
或许你该想想如何充分利用现有的command,比如用section, drafting之类
作者: windswolftxl    时间: 2004-11-15 10:57
多谢多谢!!!
  
再请教一下怎么求“点到线的距离”呀???
  
我找了一写方法都不能用呀???
  
而且您给我的程序怎么运行呢???
作者: acoka    时间: 2004-11-15 14:06
// 求2个body间的最短距离
CATDistanceMinBodyBody* pDistanceMinB2B = ::CATCreateDistanceMinTopo( pGeoFactory,pTopData, pBody1, pBody2, ADVANCED );
if ( !pDistanceMinB2B )  rc=E_FAIL;break;
pDistanceMinB2B->SetPointComputationMode( TRUE );
CATTry{
pDistanceMinB2B->Run();
}CATCatch ( CATError, pError){
delete pDistanceMinB2B;
pDistanceMinB2B = NULL;
rc=CATReturnError(pError);
break;
}CATEndTry;
double MiniDistance = pDistanceMinB2B->GetDistance();
delete pDistanceMinB2B;
pDistanceMinB2B = NULL;
//If the distance could not be computed, returns -1.  
if ( Temp1 < -ipImplicitGeoFactory->GetResolution() ) rc=E_FAIL;break;
  
你不是自己写了找点的程序了吗?你自己程序怎么运行的?
我给你的东西不过是参考呀
作者: windswolftxl    时间: 2004-11-16 08:50
我写的程序不是找点的,是用户选定点,用程序提取点的坐标,进行输出!
  
您那个程序中的
  
HRESULT WSHSampleOperator::GetMathPointListFromBody( const CATBody_var& ispBody, CATLISTV(CATMathPoint) &oLISTMathPoint )  
  
这个函数的oLISTMathPoint参数是之前定义好的吗?
作者: acoka    时间: 2004-11-16 11:06
windswolftxl wrote:
我写的程序不是找点的,是用户选定点,用程序提取点的坐标,进行输出!  
  
  您那个程序中的  
  
  HRESULT WSHSampleOperator::GetMathPointListFromBody( const CATBody_var& ispBody, CATLISTV(CATMathPoint) &oLISTMathPoint )   
  
  这个函数的oLISTMathPoint参数是之前定义好的吗?

  
o--输出
i-输入
  
那一样的呀,你不也得设CATFeatureImportAgent或CATPathElementAgent 接受用户的点选择,然后从Agent里取得点的CATISpecObject之类的interface
然后求坐标不的吧
作者: windswolftxl    时间: 2004-11-16 13:40
是呀!!
  
你的意思是说这个oLISTMathPoint参数是用来输出的吗??




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