根据指定的多段线建立对应的几何类曲线:数组
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; }