找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 740|回复: 0

BreakLine()函数

[复制链接]
发表于 2006-8-14 17:42:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×

  1.   [FONT=courier new]
  2. BOOL BreakLine(IN AcGePoint3d pt1,IN AcGePoint3d pt2,
  3.                            IN AcDbObjectId curveId,
  4.                            OUT AcDbObjectId& curId1,
  5.                            OUT AcDbObjectId& curId2)
  6. {
  7.         AcDbObjectPointer<AcDbCurve> spCurve(curveId,AcDb::kForRead);
  8.         if(spCurve.openStatus() != Acad::eOk)
  9.                 return FALSE;

  10.         AcGePoint3dArray breakPts;
  11.         if(pt1.distanceTo(pt2) <= 0.001)
  12.         {
  13.                 breakPts.append(pt1);
  14.         }
  15.         else
  16.         {
  17.                 breakPts.append(pt1);
  18.                 breakPts.append(pt2);
  19.         }

  20.         AcDbVoidPtrArray  curveSegments;
  21.         COLOR=red]spCurve->getSplitCurves(breakPts,curveSegments);//有是这里会报错,是何原因[/COLOR]        if(curveSegments.length() <= 2)
  22.         {
  23.                 for(int i = 0; i < curveSegments.length();i++)
  24.                 {
  25.                         AcDbCurve *pNewCurve = static_cast<AcDbCurve*>(curveSegments[i]);
  26.                         ArxDbgUtils::addToCurrentSpace(pNewCurve);
  27.                         if(i == 0)
  28.                         {
  29.                                 curId1 = pNewCurve->objectId();
  30.                         }
  31.                         else if(i == 1)
  32.                         {
  33.                                 curId2 = pNewCurve->objectId();
  34.                         }
  35.                         pNewCurve->close();
  36.                 }       
  37.         }
  38.         else if(curveSegments.length() >= 3)
  39.         {
  40.                 for(int i = 0; i < curveSegments.length();i++)
  41.                 {
  42.                         if(i % 2 == 1)
  43.                         {
  44.                                 AcDbCurve *pNewCurve = static_cast<AcDbCurve*>(curveSegments[i]);
  45.                                 delete pNewCurve;
  46.                         }
  47.                         else
  48.                         {
  49.                                 AcDbCurve *pNewCurve = static_cast<AcDbCurve*>(curveSegments[i]);
  50.                                 ArxDbgUtils::addToCurrentSpace(pNewCurve);
  51.                                 if(i == 0)
  52.                                 {
  53.                                         curId1 = pNewCurve->objectId();
  54.                                 }
  55.                                 else if(i == 2)
  56.                                 {
  57.                                         curId2 = pNewCurve->objectId();
  58.                                 }
  59.                                 pNewCurve->close();
  60.                         }
  61.                 }       
  62.         }
  63.         spCurve->upgradeOpen();
  64.         spCurve->erase();
  65.         return (curId1.isValid() && curId2.isValid());
  66. }
  67.   [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-23 16:21 , Processed in 0.280560 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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