iCAx开思工具箱

标题: 获取实现最短距离的点 [打印本页]

作者: xieqling    时间: 2012-9-19 16:29
标题: 获取实现最短距离的点
我用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为空。


作者: 珊瑚草    时间: 2012-9-19 21:03
有试过GetSupportCells ?
作者: linlily0925    时间: 2012-9-20 13:15
百科全书中解释的是:Returns the points realizing the minimum distance (ADVANCED mode).
但是用户拓扑求最短距离用的是BASIC模式
pDistanceMinMin = CATCreateDistanceMinTopo(pGeomFactory,pTopoData,pBodyLine1,pBodyLine2,BASIC);

作者: xieqling    时间: 2012-9-20 15:20
珊瑚草 发表于 2012-9-19 21:03
有试过GetSupportCells ?

试过,用GetSupportCells 得到的oCell1不空
作者: xieqling    时间: 2012-9-20 15:32
珊瑚草 发表于 2012-9-19 21:03
有试过GetSupportCells ?

用GetSupportCells可以得到实现最小距离的那两个点吗?怎么得到?
作者: 珊瑚草    时间: 2012-9-20 17:26
xieqling 发表于 2012-9-20 15:20
试过,用GetSupportCells 得到的oCell1不空

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

pDistanceMinMin = CATCreateDistanceMinTopo(pGeomFactory,pTopoData,pBodyLine1,pBodyLine2,ADVANCED);这样改了后,oPoint1还是空的。会不会和模式没有关系呢?

作者: zheng.lei213@16    时间: 2012-10-7 15:03
水平有限,看不懂
作者: 圈圈眉    时间: 2013-11-6 09:27
请问LZ解决这个问题了吗?GetSupportCells 得到的cell都为空,也是两条不相交的直线,也用几何方法CreateDistanceMin试过,GetPointOnCurve直接就报错了,输入检索不到。都可以得到最短距离。
作者: 圈圈眉    时间: 2013-12-6 09:53
楼主跟我一样,获取CATGeoFactory方式不对,不能用::CATCreateCGMContainer(),应该从CATIContainerOfDocument获取




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