diff --git a/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs
index 4056bc5eac600ab0ce9828e69f8e6eb04dcf8eb3..2a73a763ba5ce3e455a93e61398769e35b36bccf 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;
///
/// 实体类曲线扩展类
@@ -20,15 +20,45 @@ public static double GetLength(this Curve curve)
///
/// 曲线
/// 打断参数表
+ /// 参数表排序委托
+ ///
+ /// 默认: 按所提供的参数表进行分割打断
+ /// 否则:按委托排序后的参数表进行分割打断
+ ///
+ ///
/// 打断后曲线的集合
- public static IEnumerable GetSplitCurves(this Curve curve, IEnumerable pars)
+ 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 +72,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();
+ }
///
/// 获取曲线集所围成的封闭区域的曲线集,注意此函数不能处理平行边(两个点及两条线组成的闭合环)