From afee92bdf8e49f62870e474628406402e46d4857 Mon Sep 17 00:00:00 2001 From: DYH <1742647821@qq.com> Date: Fri, 17 Mar 2023 12:24:46 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E7=9E=AC=E6=80=81=E5=9B=BA=E5=AE=9A?= =?UTF-8?q?=E7=9B=AE=E6=A0=87manager=EF=BC=8C=E9=81=BF=E5=85=8D=E5=A4=9A?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E5=88=87=E6=8D=A2=E5=90=8E=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E7=9E=AC=E6=80=81=E5=AE=B9=E5=99=A8=E6=94=B9=E5=8F=98=E9=80=A0?= =?UTF-8?q?=E6=88=90=E7=9A=84=E6=98=BE=E7=A4=BA=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExtensionMethod/JigExTransient.cs | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/CAD/IFox.CAD.Shared/ExtensionMethod/JigExTransient.cs b/src/CAD/IFox.CAD.Shared/ExtensionMethod/JigExTransient.cs index c7532b9..9d3bf6b 100644 --- a/src/CAD/IFox.CAD.Shared/ExtensionMethod/JigExTransient.cs +++ b/src/CAD/IFox.CAD.Shared/ExtensionMethod/JigExTransient.cs @@ -8,9 +8,10 @@ public class JigExTransient : IDisposable { #region 私有字段 // 整数集,暂时不知道有什么意义 - IntegerCollection _integerCollection; + readonly IntegerCollection _integerCollection; // 维护集合 - HashSet _entities; + readonly HashSet _entities; + readonly TransientManager _manager; #endregion #region 公开属性 @@ -31,7 +32,8 @@ public class JigExTransient : IDisposable public JigExTransient() { _integerCollection = new(); - _entities = new(); + _entities = new(); + _manager=TransientManager.CurrentTransientManager; } #endregion @@ -55,9 +57,7 @@ public void Add(Entity ent, TransientDrawingMode tdm = TransientDrawingMode.Main { if (_entities.Add(ent)) { - TransientManager - .CurrentTransientManager - .AddTransient(ent, tdm, 128, _integerCollection); + _manager.AddTransient(ent, tdm, 128, _integerCollection); } } @@ -70,9 +70,7 @@ public void Remove(Entity ent) { if (!Contains(ent)) return; - TransientManager - .CurrentTransientManager - .EraseTransient(ent, _integerCollection); + _manager.EraseTransient(ent, _integerCollection); _entities.Remove(ent); } @@ -83,9 +81,7 @@ public void Clear() { foreach (var ent in _entities) { - TransientManager - .CurrentTransientManager - .EraseTransient(ent, _integerCollection); + _manager.EraseTransient(ent, _integerCollection); } _entities.Clear(); } @@ -99,9 +95,7 @@ public void Update(Entity ent) { if (!Contains(ent)) return; - TransientManager - .CurrentTransientManager - .UpdateTransient(ent, _integerCollection); + _manager.UpdateTransient(ent, _integerCollection); } /// -- Gitee From d24a3cce830c4f9413a00cacf95c83b9ce3bc1b3 Mon Sep 17 00:00:00 2001 From: DYH <1742647821@qq.com> Date: Fri, 17 Mar 2023 18:25:04 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9B=B4=E5=AE=8C?= =?UTF-8?q?=E7=BE=8E=E7=9A=84=E6=9B=B2=E7=BA=BF=E6=89=93=E6=96=AD=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExtensionMethod/CurveEx.cs | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/src/CAD/IFox.CAD.Shared/ExtensionMethod/CurveEx.cs b/src/CAD/IFox.CAD.Shared/ExtensionMethod/CurveEx.cs index bfca634..b51b0ac 100644 --- a/src/CAD/IFox.CAD.Shared/ExtensionMethod/CurveEx.cs +++ b/src/CAD/IFox.CAD.Shared/ExtensionMethod/CurveEx.cs @@ -207,6 +207,77 @@ public static List BreakCurve(this List curves) return newCurves; } + /// + /// 打断曲线 + /// + /// 曲线列表 + /// 打断后的曲线列表 + /// 传入的曲线列表错误 + public static List BreakCurve2d(this List curves) + { + if (curves is null) + throw new ArgumentNullException(nameof(curves)); + + var curvesTemp = curves.Select(c => c.GetProjectedCurve(DYHEnv.PlaneZ, Vector3d.ZAxis)).ToList(); + var geCurves = new List(); // 存储曲线转换后的复合曲线 + var paramss = new List>(); // 存储每个曲线的交点参数值 + + for (int i = 0; i < curvesTemp.Count; i++) + { + paramss.Add(new HashSet()); + var cc3d = curvesTemp[i].ToCompositeCurve3d(); + if (cc3d is not null) + { + geCurves.Add(cc3d); + } + } + var newCurves = new List(); + var cci3d = new CurveCurveIntersector3d(); + + for (int i = 0; i < curvesTemp.Count; i++) + { + var gc1 = geCurves[i]; + var pars1 = paramss[i]; // 引用 + for (int j = i; j < curvesTemp.Count; j++) + { + var gc2 = geCurves[j]; + var pars2 = paramss[j]; // 引用 + + cci3d.Set(gc1, gc2, Vector3d.ZAxis); + + for (int k = 0; k < cci3d.NumberOfIntersectionPoints; k++) + { + var pars = cci3d.GetIntersectionParameters(k); + pars1.Add(pars[0]); // 引用修改会同步到源对象 + pars2.Add(pars[1]); // 引用修改会同步到源对象 + } + } + var curNow = curvesTemp[i]; + curNow.GetType().Name.Prompt(); + pars1.ForEach(p => p.Prompt()); + var length = curNow.GetLength(); + List np = pars1.Where(p => p >= 0 && p <= length).Select(curNow.GetParameterAtDistance).Where(p => !(Math.Abs(p - curNow.StartParam) < 1e-6 || Math.Abs(p - curNow.EndParam) < 1e-6)).ToList(); + np.ForEach(p => p.Prompt()); + if (np.Count > 0) + { + var splitCurs = curNow.GetSplitCurves(np, true); + if (splitCurs.Count() > 1) + { + newCurves.AddRange(splitCurs); + } + else + { + newCurves.Add(curNow.CloneEx()); + } + } + else + { + newCurves.Add(curNow.CloneEx()); + } + } + + return newCurves; + } // 转换DBCurve为GeCurved #region Curve -- Gitee From a9cb5eb279674d21f915f64abe3d46c347e8ccf9 Mon Sep 17 00:00:00 2001 From: DYH <1742647821@qq.com> Date: Fri, 17 Mar 2023 18:45:01 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=A0=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E5=8C=B9=E9=85=8D=E7=9A=84GetObject=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/CAD/IFox.CAD.Shared/Runtime/DBTrans.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/CAD/IFox.CAD.Shared/Runtime/DBTrans.cs b/src/CAD/IFox.CAD.Shared/Runtime/DBTrans.cs index b185b76..b685cc5 100644 --- a/src/CAD/IFox.CAD.Shared/Runtime/DBTrans.cs +++ b/src/CAD/IFox.CAD.Shared/Runtime/DBTrans.cs @@ -390,6 +390,21 @@ public static implicit operator Transaction(DBTrans tr) #region 获取对象 /// + /// 根据对象id获取对象 + /// + /// 对象id + /// 打开模式,默认为只读 + /// 是否打开已删除对象,默认为不打开 + /// 是否打开锁定图层对象,默认为不打开 + /// 数据库DBObject对象 + public DBObject GetObject(ObjectId id, + OpenMode openMode = OpenMode.ForRead, + bool openErased = false, + bool openLockedLayer = false) + { + return Transaction.GetObject(id, openMode, openErased, openLockedLayer); + } + /// /// 根据对象id获取图元对象 /// /// 要获取的图元对象的类型 -- Gitee From 09439ce306e641feb7641032b511749ce6cdb2ae Mon Sep 17 00:00:00 2001 From: DYH <1742647821@qq.com> Date: Sat, 18 Mar 2023 12:13:35 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9B=B2=E7=BA=BF?= =?UTF-8?q?=E6=89=93=E6=96=AD=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IFox.CAD.Shared/ExtensionMethod/CurveEx.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/CAD/IFox.CAD.Shared/ExtensionMethod/CurveEx.cs b/src/CAD/IFox.CAD.Shared/ExtensionMethod/CurveEx.cs index b51b0ac..f8b83b5 100644 --- a/src/CAD/IFox.CAD.Shared/ExtensionMethod/CurveEx.cs +++ b/src/CAD/IFox.CAD.Shared/ExtensionMethod/CurveEx.cs @@ -208,17 +208,17 @@ public static List BreakCurve(this List curves) } /// - /// 打断曲线 + /// 在z法向量平面打断曲线 /// /// 曲线列表 /// 打断后的曲线列表 /// 传入的曲线列表错误 - public static List BreakCurve2d(this List curves) + public static List BreakCurveOnZPlane(this List curves) { if (curves is null) throw new ArgumentNullException(nameof(curves)); - - var curvesTemp = curves.Select(c => c.GetProjectedCurve(DYHEnv.PlaneZ, Vector3d.ZAxis)).ToList(); + var zPlane = new Plane(Point3d.Origin, Vector3d.ZAxis); + var curvesTemp = curves.Select(c => c.GetProjectedCurve(zPlane, Vector3d.ZAxis)).ToList(); var geCurves = new List(); // 存储曲线转换后的复合曲线 var paramss = new List>(); // 存储每个曲线的交点参数值 @@ -253,11 +253,11 @@ public static List BreakCurve2d(this List curves) } } var curNow = curvesTemp[i]; - curNow.GetType().Name.Prompt(); - pars1.ForEach(p => p.Prompt()); var length = curNow.GetLength(); - List np = pars1.Where(p => p >= 0 && p <= length).Select(curNow.GetParameterAtDistance).Where(p => !(Math.Abs(p - curNow.StartParam) < 1e-6 || Math.Abs(p - curNow.EndParam) < 1e-6)).ToList(); - np.ForEach(p => p.Prompt()); + List np = pars1.Where(p => p >= 0 && p <= length) + .Select(curNow.GetParameterAtDistance) + .Where(p => !(Math.Abs(p - curNow.StartParam) < 1e-6 || Math.Abs(p - curNow.EndParam) < 1e-6)) + .ToList(); if (np.Count > 0) { var splitCurs = curNow.GetSplitCurves(np, true); -- Gitee From 683e827bcdcc46c6482c747120591eebf166e133 Mon Sep 17 00:00:00 2001 From: DYH <1742647821@qq.com> Date: Sat, 18 Mar 2023 12:19:57 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=B8=A6=E6=B3=9B=E5=9E=8B=E7=9A=84GetObje?= =?UTF-8?q?xt=E6=94=B9=E4=B8=BA=E4=B8=8D=E5=8C=B9=E9=85=8D=E6=8A=9B?= =?UTF-8?q?=E9=94=99=E5=90=8E=EF=BC=8C=E4=B8=8D=E8=83=BD=E5=86=8D=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E6=89=B9=E9=87=8F=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/CAD/IFox.CAD.Shared/ExtensionMethod/DBDictionaryEx.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/CAD/IFox.CAD.Shared/ExtensionMethod/DBDictionaryEx.cs b/src/CAD/IFox.CAD.Shared/ExtensionMethod/DBDictionaryEx.cs index 3942b6c..66fe217 100644 --- a/src/CAD/IFox.CAD.Shared/ExtensionMethod/DBDictionaryEx.cs +++ b/src/CAD/IFox.CAD.Shared/ExtensionMethod/DBDictionaryEx.cs @@ -18,9 +18,8 @@ public static IEnumerable GetAllObjects(this DBDictionary dict) where T : var tr = DBTrans.GetTopTransaction(dict.Database); foreach (DBDictionaryEntry e in dict) { - var ent = tr.GetObject(e.Value, OpenMode.ForRead); - if (ent is not null) - yield return ent; + if(tr.GetObject(e.Value) is T tobj) + yield return tobj; } } -- Gitee From 30ea32814993b67ef55f3ff6adf2dd216a700558 Mon Sep 17 00:00:00 2001 From: DYH <1742647821@qq.com> Date: Sun, 19 Mar 2023 13:54:53 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8DAddEntity=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E5=B5=8C=E5=A5=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/CAD/IFox.CAD.Shared/ExtensionMethod/SymbolTableRecordEx.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CAD/IFox.CAD.Shared/ExtensionMethod/SymbolTableRecordEx.cs b/src/CAD/IFox.CAD.Shared/ExtensionMethod/SymbolTableRecordEx.cs index 5a9cdf7..1518159 100644 --- a/src/CAD/IFox.CAD.Shared/ExtensionMethod/SymbolTableRecordEx.cs +++ b/src/CAD/IFox.CAD.Shared/ExtensionMethod/SymbolTableRecordEx.cs @@ -119,7 +119,7 @@ public static IEnumerable AddEntity(this BlockTableRecord btr, IEnu /// 对象 id 列表 public static IEnumerable AddEntity(this BlockTableRecord btr, params Entity[] ents) { - return btr.AddEntity(ents); + return btr.AddEntity(ents.ToList()); } #endregion -- Gitee