找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

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

CAA中CATIGSMIntersect接口的问题

[复制链接]
跳转到指定楼层
1
发表于 2005-5-9 16:45:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
各位高手:
CATIGSMIntersect,可以取线线交点,面面交线等,请问怎么样判断得到的到底是交线还是交点?如下:
CATIGSMIntersect_var IntersectionPoint = g_Fact->CreateIntersect(Obj[i+1] , Obj[i-1]);
IntersectionPoint 这个类型怎么转换为CATPoint_var?
  
     
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2005-5-9 19:55:53 | 只看该作者
你可以试试看求它的CATBody,然后找domain, cell,...,  然后看最后的形状是什么
3
发表于 2005-5-9 20:14:37 | 只看该作者
怎么求CATBody呢?
4
发表于 2005-5-9 23:23:08 | 只看该作者
比如你可以写个函数
  
CATBody_var WSHSampleUtil::GetBodyFromFeature( const CATISpecObject_var& ispFeature )
{
   CATBody_var spBody = NULL_var;
   do {
      if( !ispFeature ) {
         break;
      }
      CATIMfBRep_var spBRepOnFeature = ispFeature;
      if( !!spBRepOnFeature ) {
         spBody = spBRepOnFeature->GetBody();
      }
      else {
  ...
      }
      if( !spBody ) {
         break;
      }
   } while(FALSE);
   return spBody;
}
5
发表于 2005-5-9 23:46:26 | 只看该作者
然后你可以在写一个函数,比如取一个只有一个点组成的body的CATPOint
  
CATPoint_var WSHSampleUtil::FindPointFromBody( const CATBody_var& ispBody )
{
   CATPoint_var spPoint = NULL_var;
   do {
      if ( !ispBody ) {
         break;
      }
  
    // we just limit to 1 domain only here
      CATLONG32 NbDomain = isBody->GetNbDomains();
      if ( NbDomain != 1 ) {
         break;
      }
  
      CATDomain_var spDomain = isBody->GetDomain( NbDomain );
      if ( !spDomain ) {
         break;
      }
  
      CATLONG32 NbCell = spDomain->GetNbCellUses();
      if ( NbCell < 1 ) {
         break;
      }
      CATCell_var spCell = spDomain->GetCell( 1);  
      if ( !spCell ) {
         break;
      }
  
      if ( !spCell->IsATypeOf( CATPointType ) ) {
         break;
      }
  
      CATVertex_var spVertex = spCell;
      if ( !spVertex ) {
         break;
      }
      spPoint = spVertex->GetCurve();
      if ( !spPoint ) {
         break;
      }
   } while (FALSE);
  
   return spPoint;
}
  
当然实际上还要考虑你的点会是个什么样的点,比如一个3D点和一个edge上的构成点的特性还是有些地方不同的,你有时候可能需要取RepGeomertry,或不能直接用smartpoint来转型
这2个函数只是看着帮助随便写的,所以可能实际上还需要对转型做些修正
6
发表于 2005-5-10 00:55:27 | 只看该作者
特别要注意的是CATIGSMFactory生成的东西要你自己agregate
  
如果你只是找交点坐标,还可以使用
CATHybIntersect* CATCreateTopIntersect( CATGeoFactory*  iFactory,  
  CATTopData*  iData,  
  CATBody*  iBody1ToIntersect,  
  CATBody*  iBody2ToIntersect)   
找到坐标后把resultbody给remove掉就好,比较好处理,避免内存泄漏
7
发表于 2005-5-10 11:45:00 | 只看该作者
谢谢acoka兄,前面的我已经懂了,这些是什么意思,是不是说已经选中了交点,求交点坐标?
  
CATHybIntersect* CATCreateTopIntersect( CATGeoFactory* iFactory,  
CATTopData* iData,  
CATBody* iBody1ToIntersect,  
CATBody* iBody2ToIntersect)  
找到坐标后把resultbody给remove掉就好,比较好处理,避免内存泄漏
8
发表于 2005-5-10 20:50:59 | 只看该作者
acoka兄,还有,在GetBodyFromFeature()中为什么用了
CATIMfBRep_var spBRepOnFeature = ispFeature;后,spBRepOnFeature 为空?我是这样调用GetBodyFromFeature()的:
  CATISpecObject_var spObj=spREdge;
//其中spREdge是CATIGSMIntersect_var类型的。  
  if(spObj!=NULL_var)
  {
  CATBody_var spBody=GetBodyFromFeature(spObj);
  
  }
结果在调用GetBodyFromFeature()时候出现了
spBRepOnFeature ==NULL_var请问怎么解决阿?
  
  
9
发表于 2005-5-11 01:00:08 | 只看该作者
那你就试试看
  
{
  CATBody_var spBody = NULL_var;
  do {
    if( !ispFeature ) {
      break;
    }
    CATIGeometricalElement_var spGeometricalElementOnFeature = ispFeature;
    if( !spGeometricalElementOnFeature ) {
      break;
    }
    spBody = spGeometricalElementOnFeature->GetBodyResult();
    if( !spBody ) {
      break;
    }
  } while(FALSE);
  return spBody;
}
  
CATCreateTopIntersect是operator,
10
发表于 2005-5-11 16:29:43 | 只看该作者
acoka兄,这次spBody 非空了。
谢谢你
:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2024-12-23 22:20 , Processed in 0.028635 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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