根據指定的多段線建立對應的幾何類曲線:數組
bool CPubFunction::PolyToGeCurve(const AcDbPolyline *&pPline, AcGeCurve2d*&pGeCurve) { int nSegs; // 多段線的段數 AcGeLineSeg2d line, *pLine; // 幾何曲線的直線段部分 AcGeCircArc2d arc, *pArc; // 幾何曲線的圓弧部分 AcGeVoidPointerArray geCurves; // 指向組成幾何曲線各分段的指針數組 nSegs = pPline->numVerts() - 1; // 根據多段線建立對應的分段幾何曲線 for (int i = 0; i < nSegs; i++) { if (pPline->segType(i) == AcDbPolyline::kLine) { pPline->getLineSegAt(i, line); pLine = new AcGeLineSeg2d(line); geCurves.append(pLine); } else if (pPline->segType(i) == AcDbPolyline::kArc) { pPline->getArcSegAt(i, arc); pArc = new AcGeCircArc2d(arc); geCurves.append(pArc); } } // 處理閉合多段線最後一段是圓弧的狀況 if (pPline->isClosed() && pPline->segType(nSegs) ==AcDbPolyline::kArc) { pPline->getArcSegAt(nSegs, arc); pArc = new AcGeCircArc2d(arc); pArc->setAngles(arc.startAng(), arc.endAng() -(arc.endAng() - arc.startAng()) / 100); geCurves.append(pArc); } // 根據分段的幾何曲線建立對應的複合曲線 if (geCurves.length() == 1) { pGeCurve = (AcGeCurve2d *)geCurves[0]; } else { pGeCurve = new AcGeCompositeCurve2d(geCurves); } // 釋放動態分配的內存 if (geCurves.length() > 1) { for (i = 0; i < geCurves.length(); i++) { delete geCurves[i]; } } return true; }