public static Polyline JiaMiArcSegment(this Polyline polyline, double dStep = 1.0)
{
Point3dCollection pts = new Point3dCollection();
int verticesNum = polyline.NumberOfVertices;
for (int i = 0; i < verticesNum; i++)
{
SegmentType segmentType = polyline.GetSegmentType(i);
if (segmentType == SegmentType.Arc)
{
CircularArc3d cirSeg = polyline.GetArcSegmentAt(i);
double dBugle = polyline.GetBulgeAt(i);
double dWidthS = polyline.GetStartWidthAt(i);
double dWidthE = polyline.GetEndWidthAt(i);
double dLenArc = cirSeg.GetLength(cirSeg.GetParameterOf(cirSeg.StartPoint), cirSeg.GetParameterOf(cirSeg.EndPoint), 0);
double dParam = polyline.GetParameterAtDistance(dLenArc);
double dStart = polyline.GetDistanceAtParameter(dParam);
double dLenStart = polyline.GetDistAtPoint(cirSeg.StartPoint);
double dTemp = dLenStart + dStep;
pts.Add(cirSeg.StartPoint);
int nIndex = 1;
while (dTemp < dLenStart + dLenArc)
{
dParam = polyline.GetParameterAtDistance(dTemp);
Point3d pt = polyline.GetPointAtParameter(dParam);
pts.Add(pt);
//Circle circle = new Circle(pt, Vector3d.ZAxis, 0.5);
//circle.ColorIndex = 2;
//circle.ToModelSpace();
nIndex++;
//polyline.AddVertexAt(i+ nIndex++, pt.ToPoint2d(), dBugle, dWidthS, dWidthE);
dTemp += dStep;
}
pts.Add(cirSeg.EndPoint);
//verticesNum += nIndex;
//i += nIndex;
}
else if (segmentType == SegmentType.Line)
{
LineSegment3d lineSeg = polyline.GetLineSegmentAt(i);
pts.Add(lineSeg.StartPoint);
pts.Add(lineSeg.EndPoint);
}
}
Polyline polyline1 = pts.CreateNewPolyline();
polyline1.Elevation = polyline.Elevation;
return polyline1;
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务