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