From 8521e4f3500b307ce684ba179833dece05a71abb Mon Sep 17 00:00:00 2001 From: zewen han Date: Thu, 28 Apr 2022 16:29:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9D=97=E4=B8=AD=E5=9D=90=E6=A0=87=E5=92=8C?= =?UTF-8?q?=E5=9B=BE=E7=BA=B8=E5=9D=90=E6=A0=87=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/IFoxCAD.Cad/ExtensionMethod/Enums.cs | 7 +++++- src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs | 23 ++++++++++++++++++- tests/Test/testeditor.cs | 20 +++++++++++++++- 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/src/IFoxCAD.Cad/ExtensionMethod/Enums.cs b/src/IFoxCAD.Cad/ExtensionMethod/Enums.cs index fc0fbaf..acec026 100644 --- a/src/IFoxCAD.Cad/ExtensionMethod/Enums.cs +++ b/src/IFoxCAD.Cad/ExtensionMethod/Enums.cs @@ -23,7 +23,12 @@ public enum CoordinateSystemCode /// /// 图纸空间坐标系 /// - PDcs + PDcs, + + /// + /// 块空间坐标系 + /// + Dcs } /// diff --git a/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs index 84b57f7..8934727 100644 --- a/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs +++ b/src/IFoxCAD.Cad/ExtensionMethod/GeometryEx.cs @@ -544,7 +544,28 @@ public static Vector3d Wcs2Dcs(this Vector3d vec, bool atPaperSpace) CoordinateSystemCode.Wcs, atPaperSpace ? CoordinateSystemCode.PDcs : CoordinateSystemCode.MDcs ); } - + /// + /// 某点在块内坐标系统和世界或者用户坐标系统的转换 + /// + /// 要变换的点 + /// 要变换的块 + /// 源坐标系 + /// 目标坐标系 + /// + public static Point3d TransNested(this Point3d pt, List btrList, CoordinateSystemCode from, CoordinateSystemCode to) + { + if (from == CoordinateSystemCode.Ucs) pt = pt.Ucs2Wcs(); + if (from == CoordinateSystemCode.Dcs) btrList.Reverse(); + if (from == CoordinateSystemCode.Dcs || to == CoordinateSystemCode.Dcs) + { + foreach (var btr in btrList) + { + Matrix3d geom = to == CoordinateSystemCode.Dcs ? btr.BlockTransform.Inverse() : btr.BlockTransform; + pt = pt.TransformBy(geom); + } + } + return to == CoordinateSystemCode.Ucs ? pt.Wcs2Ucs() : pt; + } #endregion Ucs diff --git a/tests/Test/testeditor.cs b/tests/Test/testeditor.cs index 9c71a9a..9e02b0a 100644 --- a/tests/Test/testeditor.cs +++ b/tests/Test/testeditor.cs @@ -51,10 +51,28 @@ public void testzoomextent() [CommandMethod("testssget")] public void testssget() { - var ss = + var ss = Env.Editor.SSGet(":S", messages: new string[2] { "get", "del" }, keywords: new string[2] { "A", "B" }); Env.Print(ss); } + + /// + /// 测试块中坐标和图纸坐标转换 + /// + [CommandMethod("pointtest")] + public static void Testhot() + { + using var tr = new DBTrans(); + Editor ed = Env.Editor; + PromptEntityResult BLK = ed.GetEntity("\n请选择一个图元:"); + if (BLK.Status != PromptStatus.OK) return; + var blk = BLK.ObjectId.GetObject(); + List blklist = new List(); + if (blk == null) return; + blklist.Add(blk); + Point3d p = new Point3d(4454, -1321, 0.0).TransNested(blklist, CoordinateSystemCode.Dcs, CoordinateSystemCode.Ucs); + ed.WriteMessage(p.ToString()); + } } -- Gitee