找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 149|回复: 0

[每日一码] AcDbPolyline和AcGeCurve2d互转函数

[复制链接]

1

主题

0

回帖

33

积分

管理员

积分
33
发表于 2024-3-14 20:50:42 | 显示全部楼层 |阅读模式
  1. static void convertPolylineToGeCurve(AcDbPolyline* pPoly, AcGeCurve2d*& out采用pGeCurve)
  2. {
  3.         AcGeVoidPointerArray geCurves;
  4.         AcGeVector3d normal = pPoly->normal();
  5.         // Is the polyline closed or open
  6.         int nSegs = -1;
  7.         if (pPoly->isClosed())
  8.                 nSegs = pPoly->numVerts();
  9.         else
  10.                 nSegs = pPoly->numVerts() - 1;
  11.         for (int i = 0; i < nSegs; i++)
  12.         {
  13.                 if (pPoly->segType(i) == AcDbPolyline::kLine)
  14.                 {
  15.                         AcGeLineSeg2d line;
  16.                         pPoly->getLineSegAt(i, line);
  17.                         AcGeLineSeg2d *pLine = new AcGeLineSeg2d(line);
  18.                         geCurves.append(pLine);
  19.                 }
  20.                 else if (pPoly->segType(i) == AcDbPolyline::kArc)
  21.                 {
  22.                         AcGeCircArc2d arc;
  23.                         pPoly->getArcSegAt(i, arc);
  24.                         AcGeCircArc2d *pArc = new AcGeCircArc2d(arc);
  25.                         geCurves.append(pArc);
  26.                 }
  27.         }// for
  28.         if (geCurves.length() == 1)
  29.                 out采用pGeCurve = (AcGeCurve2d*)(geCurves[0]);
  30.         else
  31.                 out采用pGeCurve = new AcGeCompositeCurve2d(geCurves);
  32. } // End of convertPolylineToGeCurve()
  33.   //------------------------------------------------------------------------
  34. static void convertGeCurveToPolyline(AcGeCurve2d* pCurve, AcDbPolyline*& pResultPoly)
  35. {
  36.         AcGeVoidPointerArray resultCurves;
  37.         AcGeCompositeCurve2d* pResultCurve;
  38.         if (pCurve->isKindOf(AcGe::kCompositeCrv2d))
  39.         {
  40.                 pResultCurve = (AcGeCompositeCurve2d*)pCurve;
  41.                 pResultCurve->getCurveList(resultCurves);
  42.         }
  43.         else
  44.                 resultCurves.append(pCurve);
  45.         int nCurves = resultCurves.length();
  46.         pResultPoly = new AcDbPolyline(nCurves);
  47.         AcGeCurve2d *pThisCurve = NULL;
  48.         int i = 0;
  49.         for (i = 0; i < nCurves; i++)
  50.         {
  51.                 pThisCurve = (AcGeCurve2d*)(resultCurves<i>);
  52.                 if (pThisCurve->isKindOf(AcGe::kCircArc2d))
  53.                 {
  54.                         AcGeCircArc2d *pArc = (AcGeCircArc2d*)pThisCurve;
  55.                         double ang = 0.25 * (pArc->endAng() - pArc->startAng());
  56.                         double bulge = tan(ang);
  57.                         if (pArc->isClockWise())
  58.                                 bulge = -bulge;
  59.                         pResultPoly->addVertexAt(i, pArc->startPoint(), bulge);
  60.                 }
  61.                 else if (pThisCurve->isKindOf(AcGe::kLineSeg2d))
  62.                 {
  63.                         AcGeLineSeg2d *pLine = (AcGeLineSeg2d*)pThisCurve;
  64.                         pResultPoly->addVertexAt(i, pLine->startPoint(), 0);
  65.                 }
  66.         }// for
  67.         AcGePoint2d endPt;
  68.         if (pThisCurve->hasEndPoint(endPt))
  69.                 pResultPoly->addVertexAt(i, endPt, 0);
  70. } // End of convertGeCurveToPolyline()
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-29 20:55 , Processed in 0.181242 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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