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

iCAx开思网

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

[求助] 获取实现最短距离的点

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

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

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

x
我用CATDistanceMinBodyBody接口的GetDistance()来获取两直线之间的最短距离,然后我想获得实现这最短距离的两个点,我用的是GetPoints( CATPoint*&  oPoint1, CATPoint*& oPoint2) ,但结果oPoint1和oPoint2是空的,我想请问这是为什么呀?直线的类型是GSMLine。具体代码如下:
CATISpecObject_var TheLine1 = pIDescendantOnOpenBody1->GetChildAtPosition(1);
CATISpecObject_var TheLine2 = pIDescendantOnOpenBody1->GetChildAtPosition(14);

CATGeoFactory* pGeomFactory = ::CATCreateCGMContainer();
  CATSoftwareConfiguration *pConfig = NULL;
  pConfig = new CATSoftwareConfiguration();
  CATCGMJournalList *pJournal = NULL;
  pJournal = new CATCGMJournalList();
  CATTopData* pTopoData = NULL;
  pTopoData = new CATTopData(pConfig,pJournal);

CATIGeometricalElement_var spGeoLine1 = TheLine1;
CATIGeometricalElement_var spGeoLine2 = TheLine2;
CATBody* pBodyLine1 = spGeoLine1->GetBodyResult();
CATBody* pBodyLine2 = spGeoLine2->GetBodyResult();
if(pBodyLine1 == NULL || pBodyLine2 == NULL)
  {
          cout<<"Error in Inputs !"<<endl;
  }
  CATDistanceMinBodyBody *pDistanceMinMin = NULL;
  pDistanceMinMin = CATCreateDistanceMinTopo(pGeomFactory,pTopoData,pBodyLine1,pBodyLine2,BASIC);
  double totallength = 0.0;
  totallength = pDistanceMinMin->GetDistance(); //得出最短距离
  cout << "totallength   "<< totallength << endl;

CATPoint *oPoint1 = NULL;
  CATPoint *oPoint2 = NULL;
  pDistanceMinMin -> GetPoints(oPoint1,oPoint2);//获取实现最短距离的两个点
  if (NULL == oPoint1)
  {
          cout<<"oPoint1为空"<<endl;
  }
  cout << "The X cordinate is :" << oPoint1 -> GetX() << endl;
最短距离能够正确得到,但输出oPoint1为空。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2012-9-19 21:03:47 | 只看该作者
有试过GetSupportCells ?
3
发表于 2012-9-20 13:15:09 | 只看该作者
百科全书中解释的是:Returns the points realizing the minimum distance (ADVANCED mode).
但是用户拓扑求最短距离用的是BASIC模式
pDistanceMinMin = CATCreateDistanceMinTopo(pGeomFactory,pTopoData,pBodyLine1,pBodyLine2,BASIC);
4
发表于 2012-9-20 15:20:30 | 只看该作者
珊瑚草 发表于 2012-9-19 21:03
有试过GetSupportCells ?

试过,用GetSupportCells 得到的oCell1不空
5
发表于 2012-9-20 15:32:13 | 只看该作者
珊瑚草 发表于 2012-9-19 21:03
有试过GetSupportCells ?

用GetSupportCells可以得到实现最小距离的那两个点吗?怎么得到?
6
发表于 2012-9-20 17:26:06 | 只看该作者
xieqling 发表于 2012-9-20 15:20
试过,用GetSupportCells 得到的oCell1不空

ocell1输出出来是什么?能转成Point的类型吗?不好意思,我没做过,只是建议试试
7
发表于 2012-9-21 08:56:02 | 只看该作者
linlily0925 发表于 2012-9-20 13:15
百科全书中解释的是:Returns the points realizing the minimum distance (ADVANCED mode).
但是用户拓扑 ...

pDistanceMinMin = CATCreateDistanceMinTopo(pGeomFactory,pTopoData,pBodyLine1,pBodyLine2,ADVANCED);这样改了后,oPoint1还是空的。会不会和模式没有关系呢?
8
发表于 2012-10-7 15:03:07 | 只看该作者
水平有限,看不懂
9
发表于 2013-11-6 09:27:35 | 只看该作者
请问LZ解决这个问题了吗?GetSupportCells 得到的cell都为空,也是两条不相交的直线,也用几何方法CreateDistanceMin试过,GetPointOnCurve直接就报错了,输入检索不到。都可以得到最短距离。
10
发表于 2013-12-6 09:53:15 | 只看该作者
楼主跟我一样,获取CATGeoFactory方式不对,不能用::CATCreateCGMContainer(),应该从CATIContainerOfDocument获取
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2025-1-24 14:50 , Processed in 0.031122 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

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