根据指定的多段线建立对应的几何类曲线

根据指定的多段线建立对应的几何类曲线:数组

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;
}
相关文章
相关标签/搜索