From 210dcfe502b0701000e40c97387a3df5e6add6f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=BA=91=E5=82=B2=E5=B4=96-=E5=BF=98=E9=9C=84?=
<702099480@qq.com>
Date: Fri, 12 Aug 2022 03:19:11 +0000
Subject: [PATCH] =?UTF-8?q?update=20src/IFoxCAD.Cad/ExtensionMethod/CurveE?=
=?UTF-8?q?x.cs.=20=E6=B7=BB=E5=8A=A0=E6=89=93=E6=96=AD=E7=82=B9=E8=A1=A8(?=
=?UTF-8?q?=E5=8F=82=E6=95=B0=E8=A1=A8)=E6=98=AF=E5=90=A6=E6=8E=92?=
=?UTF-8?q?=E5=BA=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: 云傲崖-忘霄 <702099480@qq.com>
---
src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs | 61 ++++++++++++++++++++--
1 file changed, 58 insertions(+), 3 deletions(-)
diff --git a/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/CurveEx.cs
index 4056bc5..2a73a76 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();
+ }
///
/// 获取曲线集所围成的封闭区域的曲线集,注意此函数不能处理平行边(两个点及两条线组成的闭合环)
--
Gitee