根據指定的多段線建立對應的幾何類曲線

根據指定的多段線建立對應的幾何類曲線:數組

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;
}
相關文章
相關標籤/搜索