/// <summary> /// 在两条线之间生成指定数量的曲线 /// </summary> /// <param name="curve1">第一条</param> /// <param name="curve2">第二条</param> /// <param name="number">数量</param> /// <param name="accuracy">精度,如是直线和忽略</param> /// <param name="contain">是否包含起始</param> /// <returns>生成的曲线</returns> public static List <Curve> ByBetweenTwoCurves(Curve curve1, Curve curve2, int number, int accuracy = 2, bool contain = false) { List <Curve> outCurves = new List <Curve>(); int n = number; if (!contain) { n = number + 2; } double[] parameters = new double[n]; for (int i = 0; i < n; i++) { if (i == n) { parameters[i] = 1; } else { parameters[i] = i * (1.0 / (n - 1)); } } // 如果为Line if ((curve1 as Line) != null && (curve2 as Line) != null) { if (!DetermineDirection(curve1, curve2)) { curve2 = curve2.Reverse(); } var line1 = Line.ByStartPointEndPoint(curve1.StartPoint, curve2.StartPoint); var line2 = Line.ByStartPointEndPoint(curve1.EndPoint, curve2.EndPoint); List <Point> ptList1 = new List <Point>(); List <Point> ptList2 = new List <Point>(); foreach (var i in parameters) { ptList1.Add(line1.PointAtParameter(i)); ptList2.Add(line2.PointAtParameter(i)); } for (int i = 0; i < n; i++) { var crv = Line.ByStartPointEndPoint(ptList1[i], ptList2[i]); outCurves.Add(crv); } } // 如果为PolyCurve else if ((curve1 as PolyCurve) != null || (curve2 as PolyCurve) != null) { throw new Exception("暂不支持PolyCurve!"); } else { List <Curve> crossCurves = new List <Curve>() { curve1, curve2 }; Surface surface = Surface.ByLoft(crossCurves); outCurves = ByAlongSurface(surface, number, accuracy, 0); surface.Dispose(); } if (!contain) { outCurves.RemoveAt(0); outCurves.RemoveAt(outCurves.Count - 1); } return(outCurves); }