diff --git a/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs index 4056bc5eac600ab0ce9828e69f8e6eb04dcf8eb3..ad095857760a91762534cf7dcd7386a0c309b333 100644 --- a/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs +++ b/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs @@ -1,4 +1,4 @@ -namespace IFoxCAD.Cad; +namespace IFoxCAD.Cad; /// /// 实体类曲线扩展类 @@ -15,6 +15,7 @@ public static double GetLength(this Curve curve) return curve.GetDistanceAtParameter(curve.EndParam); } + /* /// /// 获取分割曲线集合 /// @@ -28,7 +29,52 @@ public static IEnumerable GetSplitCurves(this Curve curve, IEnumerable(); } - + */ + + /// + /// 获取分割曲线集合 + /// + /// 曲线 + /// 打断参数表 + /// 参数表排序委托 + /// + /// 默认: 按所提供的参数表进行分割打断
+ /// 否则:按委托排序后的参数表进行分割打断 + ///
+ /// + /// 打断后曲线的集合 + public static IEnumerable GetSplitCurves(this Curve curve, + IEnumerable pars, + Func, IEnumerable> func = null) + { + if (func != null) + pars = func.Invoke(pars); + return + curve + .GetSplitCurves(new DoubleCollection(pars.ToArray())) + .Cast(); + } + + /// + /// 获取分割曲线集合 + /// + /// 曲线 + /// 打断参数表 + /// 对参数表是否进行排序 + /// + /// :按参数值升序排序;
+ /// :不排序,默认值 + ///
+ /// + /// 打断后曲线的集合 + public static IEnumerable GetSplitCurves(this Curve curve, IEnumerable pars, bool isOrder = false) + { + return + curve + .GetSplitCurves(new DoubleCollection(isOrder ? pars.OrderBy(x => x).ToArray() : pars.ToArray())) + .Cast(); + } + /// /// 获取分割曲线集合 /// @@ -42,6 +88,31 @@ public static IEnumerable GetSplitCurves(this Curve curve, IEnumerable(); } + + /// + /// 获取分割曲线集合 + /// + /// 曲线 + /// 打断点表 + /// 对点表是否进行排序 + /// + /// :按参数值升序排序;
+ /// :不排序,默认值 + ///
+ /// + /// 打断后曲线的集合 + public static IEnumerable GetSplitCurves(this Curve curve, + IEnumerable points, + bool isOrder = false) + { + if (isOrder) + points = points.OrderBy(point => curve.GetParameterAtPoint( + curve.GetClosestPointTo(point, false))); + return + curve + .GetSplitCurves(new Point3dCollection(points.ToArray())) + .Cast(); + } /// /// 获取曲线集所围成的封闭区域的曲线集,注意此函数不能处理平行边(两个点及两条线组成的闭合环)