diff --git a/IFoxCAD.sln.DotSettings b/IFoxCAD.sln.DotSettings index fd6a7391d55dfaf3e9da52932a289b706352c250..19866cb828bde97f5a76b88b5328bd11014312ae 100644 --- a/IFoxCAD.sln.DotSettings +++ b/IFoxCAD.sln.DotSettings @@ -6,10 +6,12 @@ True True True + True True True True True + True True True True @@ -21,5 +23,8 @@ True True True + True + True + True True True \ No newline at end of file diff --git a/IFoxCAD.slnx b/IFoxCAD.slnx new file mode 100644 index 0000000000000000000000000000000000000000..baef3d3eb6c8cd7464f4b5c40b5d70c8d6665ce6 --- /dev/null +++ b/IFoxCAD.slnx @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/CADShared/Initialize/IAutoGo.cs b/src/CADShared/Initialize/IAutoGo.cs index a7c6dc198f2b937870fef93aba1f3b621c07d49d..aaa8fd89180f6e3b5f99452b00404c9c63229cec 100644 --- a/src/CADShared/Initialize/IAutoGo.cs +++ b/src/CADShared/Initialize/IAutoGo.cs @@ -355,7 +355,7 @@ static void RunFunctions(List runClassList) /// public static void DebugCheckCmdRecurrence() { - HashSet keys = new(); + HashSet keys = []; // 本dll中存在冲突命令,此时cad自动接口可以运行,但是加载命令之后会报错,因此利用断点告诉程序员 AutoReflection.AppDomainGetTypes(type => { @@ -376,7 +376,7 @@ public static void DebugCheckCmdRecurrence() // 其他dll中存在冲突命令,此时会覆盖命令,友好的提示程序员 keys.Clear(); - HashSet msgMod = new(); + HashSet msgMod = []; AutoReflection.AppDomainGetTypes(type => { var mets = type.GetMethods(); for (int ii = 0; ii < mets.Length; ii++) diff --git a/tests/TestAcad2025/GlobalUsings.cs b/tests/TestAcad2025/GlobalUsings.cs index 7fc7a822f636c8ea8bc9bd412723a6452da8c246..acbb5a299092fd08558909dfa32300f8f6d220c7 100644 --- a/tests/TestAcad2025/GlobalUsings.cs +++ b/tests/TestAcad2025/GlobalUsings.cs @@ -1,4 +1,4 @@ -/// 系统引用 +// 系统引用 global using System; global using System.Collections; global using System.Collections.Generic; @@ -17,7 +17,7 @@ global using Registry = Microsoft.Win32.Registry; global using RegistryKey = Microsoft.Win32.RegistryKey; -/// autocad 引用 +// autocad 引用 global using Autodesk.AutoCAD.ApplicationServices; global using Autodesk.AutoCAD.EditorInput; global using Autodesk.AutoCAD.Colors; @@ -43,8 +43,9 @@ global using Cad_ErrorStatus = Autodesk.AutoCAD.Runtime.ErrorStatus; -/// ifoxcad +// ifoxcad global using Fs.Fox.Cad; global using Fs.Fox.Basal; -global using Test; +global using IFoxTest; +global using static IFoxTest.FoxDesktop; diff --git a/tests/TestShared/CmdINI.cs b/tests/TestShared/CmdINI.cs index e4deab7421abeb2990a02f75dbac0bbf64dc6f90..24e613561238bfed32a4710759aad1d50daf6fad 100644 --- a/tests/TestShared/CmdINI.cs +++ b/tests/TestShared/CmdINI.cs @@ -1,8 +1,9 @@ //#define givePeopleTest + #if false using System.Diagnostics; -namespace Test; +namespace IFoxTest; /// /// 注册中心(自动执行接口): @@ -169,7 +170,6 @@ public void Terminate() #endif - #endif public class Init @@ -177,7 +177,6 @@ public class Init [CommandMethod(nameof(Initialize))] public void Initialize() { - // var assembly= Assembly.GetExecutingAssembly(); // Env.Printl(assembly.GetName().Name); // var info = new AssemInfo(assembly); @@ -188,6 +187,5 @@ public void Initialize() public void Terminate() { - } } \ No newline at end of file diff --git a/tests/TestShared/Copyclip.cs b/tests/TestShared/Copyclip.cs index 370936c4a4158fbc94fca8b843d321bfefa97382..6c532bd10479cb3245a5fd1d8007d610a1c3fabc 100644 --- a/tests/TestShared/Copyclip.cs +++ b/tests/TestShared/Copyclip.cs @@ -2,7 +2,7 @@ #define COPYCLIP #define PASTECLIP #if false -namespace Test; +namespace IFoxTest; using System; using System.Diagnostics; using System.Drawing.Imaging; diff --git a/tests/TestShared/IFoxDesktop.cs b/tests/TestShared/IFoxDesktop.cs new file mode 100644 index 0000000000000000000000000000000000000000..6b5c37faacb663455bcedff968ab5947de828e2b --- /dev/null +++ b/tests/TestShared/IFoxDesktop.cs @@ -0,0 +1,6 @@ +namespace IFoxTest; + +public static class FoxDesktop +{ + public static string DeskTop => Environment.GetFolderPath(Environment.SpecialFolder.Desktop); +} \ No newline at end of file diff --git a/tests/TestShared/TestAddEntity.cs b/tests/TestShared/TestAddEntity.cs index 3f401c37fdff39c3694c0a02b28f377d7c5d45f9..25f8ea14ee534ed31f9dc067545de58aac061b93 100644 --- a/tests/TestShared/TestAddEntity.cs +++ b/tests/TestShared/TestAddEntity.cs @@ -1,9 +1,9 @@ -namespace Test; +namespace IFoxTest; public partial class Test { /// - /// 测试矩形的对角线是否相等,相邻边是否平行,相邻边是否垂直 + /// 测试矩形的对角线是否相等,相邻边是否平行,相邻边是否垂直 /// [CommandMethod(nameof(Test_Rec))] public void Test_Rec() @@ -29,47 +29,52 @@ public void Test_Rec() pi90.Print(); // 测试对角线长度是否相等,并检查相邻边是否平行 - Tools.TestTimes(1000000, "对角线", () => - { - var result = false; - if (Math.Abs(p13.Length - p24.Length) <= 1e8) + Tools.TestTimes( + 1000000, + "对角线", + () => { - result = p41.IsParallelTo(p12); + if (Math.Abs(p13.Length - p24.Length) <= 1e8) p41.IsParallelTo(p12); } - }); - + ); #pragma warning disable CS0219 // 变量已被赋值,但从未使用过它的值 //使用三次点乘法测试相邻边是否垂直 - Tools.TestTimes(1000000, "三次点乘", () => - { - bool result = Math.Abs(p12.DotProduct(p23)) < 1e8 && - Math.Abs(p23.DotProduct(p34)) < 1e8 && - Math.Abs(p34.DotProduct(p41)) < 1e8; - }); + Tools.TestTimes( + 1000000, + "三次点乘", + () => + { + var unused = + Math.Abs(p12.DotProduct(p23)) < 1e8 + && Math.Abs(p23.DotProduct(p34)) < 1e8 + && Math.Abs(p34.DotProduct(p41)) < 1e8; + } + ); //使用三次平行测试相邻边是否垂直 - Tools.TestTimes(1000000, "三次垂直", () => - { - bool result = p12.IsParallelTo(p23) && - p23.IsParallelTo(p34) && - p34.IsParallelTo(p41); - }); + Tools.TestTimes( + 1000000, + "三次垂直", + () => + { + var unused = + p12.IsParallelTo(p23) && p23.IsParallelTo(p34) && p34.IsParallelTo(p41); + } + ); #pragma warning restore CS0219 // 变量已被赋值,但从未使用过它的值 } - - [CommandMethod(nameof(Test_EntRoration))] public void Test_EntRoration() { - var line = new Line(new(0, 0, 0), new(100, 0, 0)); + var line = new Line(new Point3d(0, 0, 0), new Point3d(100, 0, 0)); using DBTrans tr = new(); tr.CurrentSpace.AddEntity(line); var line2 = (Line)line.Clone(); tr.CurrentSpace.AddEntity(line2); - line2.Rotation(new(100, 0, 0), Math.PI / 2); + line2.Rotation(new Point3d(100, 0, 0), Math.PI / 2); } [CommandMethod(nameof(Test_TypeSpeed))] @@ -77,34 +82,45 @@ public void Test_TypeSpeed() { var line = new Line(); var line1 = line as Entity; - Tools.TestTimes(100000, "is 匹配:", () => { - var t = line1 is Line; - }); - Tools.TestTimes(100000, "name 匹配:", () => { - // var t = line.GetType().Name; - var tt = line1.GetType().Name == nameof(Line); - }); - Tools.TestTimes(100000, "dxfname 匹配:", () => { - // var t = line.GetType().Name; - var tt = line1.GetRXClass().DxfName == nameof(Line); - }); + Tools.TestTimes( + 100000, + "is 匹配:", + () => + { + var unused = line1 is Line; + } + ); + Tools.TestTimes( + 100000, + "name 匹配:", + () => + { + // var t = line.GetType().Name; + var unused = line1.GetType().Name == nameof(Line); + } + ); + Tools.TestTimes( + 100000, + "dxfName 匹配:", + () => + { + // var t = line.GetType().Name; + var unused = line1.GetRXClass().DxfName == nameof(Line); + } + ); } - [CommandMethod(nameof(Test_sleeptrans))] - public static void Test_sleeptrans() + [CommandMethod(nameof(Test_SleepTrans))] + public static void Test_SleepTrans() { using var tr = new DBTrans(); - for (int i = 0; i < 100; i++) + for (var i = 0; i < 100; i++) { var cir = CircleEx.CreateCircle(new Point3d(i, i, 0), 0.5); - if (cir is null) - { - return; - } cir.ColorIndex = i; tr.CurrentSpace.AddEntity(cir); tr.Editor?.Redraw(cir); - System.Threading.Thread.Sleep(10); + Thread.Sleep(10); } } } \ No newline at end of file diff --git a/tests/TestShared/TestBlock.cs b/tests/TestShared/TestBlock.cs index 20baa825524e98a23c29a8e527db295beaa9513e..127ce22615014a2d44f9e298d56f64afb792a150 100644 --- a/tests/TestShared/TestBlock.cs +++ b/tests/TestShared/TestBlock.cs @@ -1,27 +1,30 @@ - -namespace Test; +using System.Windows.Forms; + +namespace IFoxTest; public class TestBlock { // 一个命令就把块编辑搞定,减少用户记忆命令 - [CommandMethod(nameof(Test_Refedit), CommandFlags.Redraw | CommandFlags.Session)] - public void Test_Refedit() + [CommandMethod(nameof(Test_RefEdit), CommandFlags.Redraw | CommandFlags.Session)] + public void Test_RefEdit() { - Env.Printl($"{nameof(Test_Refedit)}-在位编辑块/在位保存块"); + Env.Printl($"{nameof(Test_RefEdit)}-在位编辑块/在位保存块"); // 全部用lisp发送命令是为了空格还是本命令 // 打开了块编辑器,就关闭掉,保存提示 if ((short)Env.GetVar("BlockEditor") == 1) { - Env.Editor.RunLisp("(command \"_.bclose\")"); + Env.Editor.RunLisp("(command \"_.bClose\")"); return; } + // 0x01 非在位编辑状态: 先选择块参照,然后在位编辑 // 0x02 在位编辑状态: 关闭并保存 - if (Env.GetVar("RefEditName").ToString() == "")//显示正在编辑的参照名称 - Env.Editor.RunLisp("(command \"_.refedit\")");//直接点选可以有嵌套层次 - else - Env.Editor.RunLisp("(command \"_.refclose\" \"s\")"); + Env.Editor.RunLisp( + Env.GetVar("RefEditName").ToString() == "" //显示正在编辑的参照名称 + ? "(command \"_.refEdit\")" + : "(command \"_.refClose\" \"s\")" + ); //直接点选可以有嵌套层次 } [CommandMethod(nameof(Test_GetBoundingBoxEx))] @@ -34,7 +37,7 @@ public void Test_GetBoundingBoxEx() foreach (var item in ents) { var box = item?.GetBoundingBoxEx(); - Env.Print("min:" + box?.BottomLeft + ";max" + box?.TopRight); + ("min:" + box?.BottomLeft + ";max" + box?.TopRight).Print(); if (box != null) tr.CurrentSpace.AddEntity(new Line(box.Value.BottomLeft, box.Value.TopRight)); } @@ -46,7 +49,8 @@ public void Test_BlockDef() { using DBTrans tr = new(); // var line = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0)); - tr.BlockTable.Add("test", + tr.BlockTable.Add( + "test", btr => { btr.Origin = new Point3d(0, 0, 0); @@ -55,67 +59,87 @@ public void Test_BlockDef() new List { new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0)) }, () => // 属性定义 { - var id1 = new AttributeDefinition() { Position = new Point3d(0, 0, 0), Tag = "start", Height = 0.2 }; - var id2 = new AttributeDefinition() { Position = new Point3d(1, 1, 0), Tag = "end", Height = 0.2 }; + var id1 = new AttributeDefinition + { + Position = new Point3d(0, 0, 0), + Tag = "start", + Height = 0.2, + }; + var id2 = new AttributeDefinition + { + Position = new Point3d(1, 1, 0), + Tag = "end", + Height = 0.2, + }; return new List { id1, id2 }; } ); // ObjectId objectId = tr.BlockTable.Add("a");// 新建块 // objectId.GetObject().AddEntity();// 测试添加空实体 - tr.BlockTable.Add("test1", - btr => - { - btr.Origin = new Point3d(0, 0, 0); - }, - () => - { - var line = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0)); - var acText = DBTextEx.CreateDBText(Point3d.Origin, "123", 2.5); - return new List { line, acText }; - }); + tr.BlockTable.Add( + "test1", + btr => + { + btr.Origin = new Point3d(0, 0, 0); + }, + () => + { + var line = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0)); + var acText = DBTextEx.CreateDBText(Point3d.Origin, "123", 2.5); + return new List { line, acText }; + } + ); } // 后台块定义 [CommandMethod(nameof(Test_BlockDefbehind))] public void Test_BlockDefbehind() { - using DBTrans tr = new(@"C:\Users\vic\Desktop\test.dwg"); + using DBTrans tr = new(Path.Combine(DeskTop, "test.dwg")); // var line = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0)); - tr.BlockTable.Add("test", + tr.BlockTable.Add( + "test", btr => { btr.Origin = new Point3d(0, 0, 0); }, - () => // 图元 - { - return new List { new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0)) }; - }, - () => // 属性定义 + () => new List { new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0)) }, // 图元 + () => { - var id1 = new AttributeDefinition() { Position = new Point3d(0, 0, 0), Tag = "start", Height = 0.2 }; - var id2 = new AttributeDefinition() { Position = new Point3d(1, 1, 0), Tag = "end", Height = 0.2 }; + var id1 = new AttributeDefinition + { + Position = new Point3d(0, 0, 0), + Tag = "start", + Height = 0.2, + }; + var id2 = new AttributeDefinition + { + Position = new Point3d(1, 1, 0), + Tag = "end", + Height = 0.2, + }; return new List { id1, id2 }; - } + } // 属性定义 ); // ObjectId objectId = tr.BlockTable.Add("a");// 新建块 // objectId.GetObject().AddEntity();// 测试添加空实体 - tr.BlockTable.Add("test1", - btr => - { - btr.Origin = new Point3d(0, 0, 0); - }, - () => - { - var line = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0)); - var acText = DBTextEx.CreateDBText(Point3d.Origin, "12345", 2.5); + tr.BlockTable.Add( + "test1", + btr => + { + btr.Origin = new Point3d(0, 0, 0); + }, + () => + { + var line = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0)); + var acText = DBTextEx.CreateDBText(Point3d.Origin, "12345", 2.5); - return new List { line, acText }; - }); + return new List { line, acText }; + } + ); tr.Database.SaveDwgFile(); } - - // 修改块定义 [CommandMethod(nameof(Test_BlockDefChange))] public void Test_BlockDefChange() @@ -132,27 +156,29 @@ public void Test_BlockDefChange() // }); - - tr.BlockTable.Change("test", btr => - { - foreach (var id in btr) + tr.BlockTable.Change( + "test", + btr => { - var ent = tr.GetObject(id); - using (ent!.ForWrite()) + foreach (var id in btr) { - switch (ent) + var ent = tr.GetObject(id); + using (ent!.ForWrite()) { - case Dimension dBText: - dBText.DimensionText = "234"; - dBText.RecomputeDimensionBlock(true); - break; - case Hatch hatch: - hatch.ColorIndex = 0; - break; + switch (ent) + { + case Dimension dBText: + dBText.DimensionText = "234"; + dBText.RecomputeDimensionBlock(true); + break; + case Hatch hatch: + hatch.ColorIndex = 0; + break; + } } } } - }); + ); tr.Editor?.Regen(); } @@ -162,11 +188,22 @@ public void Test_InsertBlockDef() using DBTrans tr = new(); var line1 = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0)); var line2 = new Line(new Point3d(0, 0, 0), new Point3d(-1, 1, 0)); - var att1 = new AttributeDefinition() { Position = new Point3d(10, 10, 0), Tag = "tagTest1", Height = 1, TextString = "valueTest1" }; - var att2 = new AttributeDefinition() { Position = new Point3d(10, 12, 0), Tag = "tagTest2", Height = 1, TextString = "valueTest2" }; + var att1 = new AttributeDefinition + { + Position = new Point3d(10, 10, 0), + Tag = "tagTest1", + Height = 1, + TextString = "valueTest1", + }; + var att2 = new AttributeDefinition + { + Position = new Point3d(10, 12, 0), + Tag = "tagTest2", + Height = 1, + TextString = "valueTest2", + }; tr.BlockTable.Add("test1", line1, line2, att1, att2); - List ents = []; var line5 = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0)); var line6 = new Line(new Point3d(0, 0, 0), new Point3d(-1, 1, 0)); @@ -174,29 +211,36 @@ public void Test_InsertBlockDef() ents.Add(line6); tr.BlockTable.Add("test44", ents); - var line3 = new Line(new Point3d(5, 5, 0), new Point3d(6, 6, 0)); var line4 = new Line(new Point3d(5, 5, 0), new Point3d(-6, 6, 0)); - var att3 = new AttributeDefinition() { Position = new Point3d(10, 14, 0), Tag = "tagTest3", Height = 1, TextString = "valueTest3" }; - var att4 = new AttributeDefinition() { Position = new Point3d(10, 16, 0), Tag = "tagTest4", Height = 1, TextString = "valueTest4" }; - tr.BlockTable.Add("test2", new List { line3, line4 }, new List { att3, att4 }); + var att3 = new AttributeDefinition + { + Position = new Point3d(10, 14, 0), + Tag = "tagTest3", + Height = 1, + TextString = "valueTest3", + }; + var att4 = new AttributeDefinition + { + Position = new Point3d(10, 16, 0), + Tag = "tagTest4", + Height = 1, + TextString = "valueTest4", + }; + tr.BlockTable.Add( + "test2", + new List { line3, line4 }, + new List { att3, att4 } + ); // tr.CurrentSpace.InsertBlock(new Point3d(4, 4, 0), "test1"); // 测试默认 // tr.CurrentSpace.InsertBlock(new Point3d(4, 4, 0), "test2"); // tr.CurrentSpace.InsertBlock(new Point3d(4, 4, 0), "test3"); // 测试插入不存在的块定义 // tr.CurrentSpace.InsertBlock(new Point3d(0, 0, 0), "test1", new Scale3d(2)); // 测试放大2倍 // tr.CurrentSpace.InsertBlock(new Point3d(4, 4, 0), "test1", new Scale3d(2), Math.PI / 4); // 测试放大2倍,旋转45度 - var def1 = new Dictionary - { - { "tagTest1", "1" }, - { "tagTest2", "2" } - }; + var def1 = new Dictionary { { "tagTest1", "1" }, { "tagTest2", "2" } }; tr.CurrentSpace.InsertBlock(new Point3d(0, 0, 0), "test1", atts: def1); - var def2 = new Dictionary - { - { "tagTest3", "1" }, - { "tagTest4", "" } - }; + var def2 = new Dictionary { { "tagTest3", "1" }, { "tagTest4", "" } }; tr.CurrentSpace.InsertBlock(new Point3d(10, 10, 0), "test2", atts: def2); tr.CurrentSpace.InsertBlock(new Point3d(20, 20, 0), "test2"); tr.CurrentSpace.InsertBlock(new Point3d(-10, 0, 0), "test44"); @@ -205,28 +249,34 @@ public void Test_InsertBlockDef() [CommandMethod(nameof(Test_InsertBlockWithDoubleDatabase))] public void Test_InsertBlockWithDoubleDatabase() { - using var tr = new DBTrans(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.dwg")); + using var tr = new DBTrans( + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.dwg") + ); using var trans = new DBTrans(); - tr.BlockTable.Add("test456", + tr.BlockTable.Add( + "test456", btr => { - btr.Origin = new(0, 0, 0); + btr.Origin = new Point3d(0, 0, 0); }, () => { - var line = new Line(new(0, 0, 0), new(1, 1, 0)); - var actext = DBTextEx.CreateDBText(Point3d.Origin, "123", 2.5, database: tr.Database); + var line = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0)); + var actext = DBTextEx.CreateDBText( + Point3d.Origin, + "123", + 2.5, + database: tr.Database + ); return new List { line, actext }; - - }); + } + ); tr.CurrentSpace.InsertBlock(Point3d.Origin, "test456"); tr.Database.SaveDwgFile(); } - - [CommandMethod(nameof(Test_AddAttsDef))] public void Test_AddAttsDef() { @@ -235,9 +285,21 @@ public void Test_AddAttsDef() var btf = tr.GetObject(blockid); if (btf is null) return; - var att1 = new AttributeDefinition() { Position = new Point3d(20, 20, 0), Tag = "addtagTest1", Height = 1, TextString = "valueTest1" }; - var att2 = new AttributeDefinition() { Position = new Point3d(10, 12, 0), Tag = "tagTest2", Height = 1, TextString = "valueTest2" }; - tr.BlockTable.AddAttsToBlocks(btf.BlockTableRecord, new() { att1, att2 }); + var att1 = new AttributeDefinition + { + Position = new Point3d(20, 20, 0), + Tag = "addtagTest1", + Height = 1, + TextString = "valueTest1", + }; + var att2 = new AttributeDefinition + { + Position = new Point3d(10, 12, 0), + Tag = "tagTest2", + Height = 1, + TextString = "valueTest2", + }; + tr.BlockTable.AddAttsToBlocks(btf.BlockTableRecord, [att1, att2]); } [CommandMethod(nameof(Test_BlockNullBug))] @@ -258,18 +320,21 @@ public void Test_BlockNullBug() public void Test_BlockFile() { using DBTrans tr = new(); - var id = tr.BlockTable.GetBlockFrom(@"C:\Users\vic\Desktop\test.dwg", false); + var id = tr.BlockTable.GetBlockFrom(Path.Combine(DeskTop, "test.dwg"), false); tr.CurrentSpace.InsertBlock(Point3d.Origin, id); } [CommandMethod(nameof(Test_BlockFiledxf))] public void Test_BlockFiledxf() { - string [] files; - var folder= new System.Windows.Forms.FolderBrowserDialog(); - if (folder.ShowDialog() == System.Windows.Forms.DialogResult.OK) - { - files = Directory.GetFiles(folder.SelectedPath,"*.dxf",SearchOption.AllDirectories); + var folder = new FolderBrowserDialog(); + if (folder.ShowDialog() == DialogResult.OK) + { + string[] files = Directory.GetFiles( + folder.SelectedPath, + "*.dxf", + SearchOption.AllDirectories + ); using DBTrans tr = new(); foreach (var item in files) { @@ -280,51 +345,49 @@ public void Test_BlockFiledxf() tr.CurrentSpace.InsertBlock(pt.Value, id); Env.Editor.Redraw(); } - } - } - - } [CommandMethod(nameof(Test_ClipBlock))] public void Test_ClipBlock() { using DBTrans tr = new(); - tr.BlockTable.Add("test1", btr => - { - btr.Origin = new Point3d(0, 0, 0); - btr.AddEntity(new Line(new Point3d(0, 0, 0), new Point3d(10, 10, 0)), - new Line(new Point3d(10, 10, 0), new Point3d(10, 0, 0))); - }); + tr.BlockTable.Add( + "test1", + btr => + { + btr.Origin = new Point3d(0, 0, 0); + btr.AddEntity( + new Line(new Point3d(0, 0, 0), new Point3d(10, 10, 0)), + new Line(new Point3d(10, 10, 0), new Point3d(10, 0, 0)) + ); + } + ); // tr.BlockTable.Add("hah"); var id = tr.CurrentSpace.InsertBlock(new Point3d(0, 0, 0), "test1"); var brf1 = tr.GetObject(id)!; - var pts = new List { new Point3d(3, 3, 0), new Point3d(7, 3, 0), new Point3d(7, 7, 0), new Point3d(3, 7, 0) }; + var pts = new List { new(3, 3, 0), new(7, 3, 0), new(7, 7, 0), new(3, 7, 0) }; brf1.XClip(pts); - var id1 = tr.CurrentSpace.InsertBlock(new Point3d(20, 20, 0), "test1"); + var unused = tr.CurrentSpace.InsertBlock(new Point3d(20, 20, 0), "test1"); var brf2 = tr.GetObject(id); brf2?.XClip(new Point3d(13, 13, 0), new Point3d(17, 17, 0)); } - [CommandMethod(nameof(Test_ClipBlock1))] public void Test_ClipBlock1() { using DBTrans tr = new(); var ent = Env.Editor.GetEntity("pick block"); - if (ent.Status != PromptStatus.OK) return; + if (ent.Status != PromptStatus.OK) + return; var brf1 = tr.GetObject(ent.ObjectId)!; - var pts = new List { new Point3d(3, 3, 0), new Point3d(7, 3, 0), new Point3d(7, 7, 0), new Point3d(3, 7, 0) }; + var pts = new List { new(3, 3, 0), new(7, 3, 0), new(7, 7, 0), new(3, 7, 0) }; brf1.XClip(pts); - } - - // 给用户的测试程序,不知道对错 [CommandMethod(nameof(Test_Block_ej))] public void Test_Block_ej() @@ -345,16 +408,19 @@ public void Test_Block_ej() // } - string fullFileName = @"C:\Users\vic\Desktop\001.dwg"; - var blockdef = tr.BlockTable.GetBlockFrom(fullFileName, false); + var fullFileName = Path.Combine(DeskTop, "001.dwg"); + var blockdef = tr.BlockTable.GetBlockFrom(Path.Combine(DeskTop, fullFileName), false); - tr.Database.Clayer = tr.LayerTable["0"];// 当前图层切换为0图层 - tr.LayerTable.Change(tr.Database.Clayer, ltr => - { - ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, 2); // ColorMethod.ByAci可以让我们使用AutoCAD ACI颜色索引……这里为2(表示黄色) - }); + tr.Database.Clayer = tr.LayerTable["0"]; // 当前图层切换为0图层 + tr.LayerTable.Change( + tr.Database.Clayer, + ltr => + { + ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, 2); // ColorMethod.ByAci可以让我们使用AutoCAD ACI颜色索引……这里为2(表示黄色) + } + ); - var id = tr.ModelSpace.InsertBlock(Point3d.Origin, blockdef);// 插入块参照 + var id = tr.ModelSpace.InsertBlock(Point3d.Origin, blockdef); // 插入块参照 var brf = tr.GetObject(id); brf?.Draw(); } @@ -375,45 +441,44 @@ public void Test_Block_ej() var btr = tr2.BlockTable[brf2.Name]; - tr2.BlockTable.Change(btr, ltr => - { - foreach (ObjectId oid in ltr) + tr2.BlockTable.Change( + btr, + ltr => { - var ent = tr2.GetObject(oid); - if (ent is MText mText) + foreach (var oid in ltr) { - using (ent.ForWrite()) - switch (mText.Text) + var ent = tr2.GetObject(oid); + if (ent is MText mText) + using (ent.ForWrite()) { - case "$$A": - mText.Contents = "hahaha"; - break; - case "$$B": - break; - default: - break; + switch (mText.Text) + { + case "$$A": + mText.Contents = "hahaha"; + break; + case "$$B": + break; + } } - } - else if (ent is DBText dBText) - { - using (ent.ForWrite()) - dBText.TextString = "haha"; - } - else if (ent is Dimension dimension) - { - using (ent.ForWrite()) - switch (dimension.DimensionText) + else if (ent is DBText dBText) + using (ent.ForWrite()) { - case "$$pipeLen": - dimension.DimensionText = "350"; - dimension.RecomputeDimensionBlock(true); - break; - default: - break; + dBText.TextString = "haha"; + } + else if (ent is Dimension dimension) + using (ent.ForWrite()) + { + switch (dimension.DimensionText) + { + case "$$pipeLen": + dimension.DimensionText = "350"; + dimension.RecomputeDimensionBlock(true); + break; + } } } } - }); + ); tr2.Editor?.Regen(); } @@ -421,12 +486,11 @@ public void Test_Block_ej() public void Test_QuickBlockDef2() { // Database db = HostApplicationServices.WorkingDatabase; - Editor ed = Acap.DocumentManager.MdiActiveDocument.Editor; PromptSelectionOptions promptOpt = new() { - MessageForAdding = "请选择需要快速制作块的对象" + MessageForAdding = "请选择需要快速制作块的对象", }; - string blockName = "W_BLOCK_" + DateTime.Now.ToString("yyyyMMdd_HHmmss"); + var blockName = "W_BLOCK_" + DateTime.Now.ToString("yyyyMMdd_HHmmss"); // var rss = ed.GetSelection(promptOpt); var rss = Env.Editor.GetSelection(promptOpt); using DBTrans tr = new(); @@ -457,11 +521,11 @@ public void Test_QuickBlockDef2() // } // } // ents = ents.OrderBy(x => x.Value).ToList(); - var ents = rss.Value.GetEntities(); + var ents = rss.Value.GetEntities().ToList(); // ents.ForEach(ent => extents.AddExtents(ent.GeometricExtents)); - var extents = ents!.GetExtents(); - Point3d pt = extents.MinPoint; - Matrix3d matrix = Matrix3d.Displacement(Point3d.Origin - pt); + var extents = ents.GetExtents(); + var pt = extents.MinPoint; + var matrix = Matrix3d.Displacement(Point3d.Origin - pt); // List newEnts = []; // foreach (var ent in ents) // { @@ -474,8 +538,7 @@ public void Test_QuickBlockDef2() // Acap.ShowAlertDialog(Environment.NewLine + "块名重复,程序退出!"); // return; // } - ents.ForEach(ent => - ent?.ForWrite(e => e?.TransformBy(matrix))); + ents.ForEach(ent => ent?.ForWrite(e => e?.TransformBy(matrix))); // var newents = ents.Select(ent => // { // var maping = new IdMapping(); @@ -485,9 +548,9 @@ public void Test_QuickBlockDef2() // ents.ForEach(ent => ent.ForWrite(e => e.Erase(true))); // 删除实体就会卡死,比较奇怪,估计是Clone()函数的问题 // 经过测试不是删除的问题 - var btrId = tr.BlockTable.Add(blockName, newents!); + tr.BlockTable.Add(blockName, newents!); ents.ForEach(ent => ent?.ForWrite(e => e?.Erase(true))); - var bId = tr.CurrentSpace.InsertBlock(pt, blockName); + tr.CurrentSpace.InsertBlock(pt, blockName); // tr.GetObject(bId, OpenMode.ForWrite).Move(Point3d.Origin, Point3d.Origin); // var ed = Acap.DocumentManager.MdiActiveDocument.Editor; // ed.Regen(); @@ -506,16 +569,16 @@ public void Test_QuickBlockDef2() [CommandMethod(nameof(Test_QuickBlockDef1))] public void Test_QuickBlockDef1() { - var dm = Acap.DocumentManager; + var dm = Acaop.DocumentManager; var doc = dm.MdiActiveDocument; var db = doc.Database; var ed = doc.Editor; PromptSelectionOptions promptOpt = new() { - MessageForAdding = "请选择需要快速制作块的对象" + MessageForAdding = "请选择需要快速制作块的对象", }; - string blockName = "W_BLOCK_" + DateTime.Now.ToString("yyyyMMdd_HHmmss"); + var blockName = "W_BLOCK_" + DateTime.Now.ToString("yyyyMMdd_HHmmss"); var rss = Env.Editor.GetSelection(promptOpt); if (rss.Status != PromptStatus.OK) return; @@ -523,16 +586,14 @@ public void Test_QuickBlockDef1() using var tr = db.TransactionManager.StartTransaction(); var ids = rss.Value.GetObjectIds(); var bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; - var btr = new BlockTableRecord - { - Name = blockName - }; + var btr = new BlockTableRecord { Name = blockName }; foreach (var item in ids) { var ent = tr.GetObject(item, OpenMode.ForRead) as Entity; btr.AppendEntity(ent!.Clone() as Entity); ent.ForWrite(e => e.Erase(true)); } + bt!.UpgradeOpen(); bt.Add(btr); tr.AddNewlyCreatedDBObject(btr, true); @@ -544,10 +605,7 @@ public void Test_QuickBlockDef1() // { // var bt = tr1.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; var btr1 = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord; - var brf = new BlockReference(Point3d.Origin, bt[blockName]) - { - ScaleFactors = default - }; + var brf = new BlockReference(Point3d.Origin, bt[blockName]) { ScaleFactors = default }; btr1!.AppendEntity(brf); tr.AddNewlyCreatedDBObject(brf, true); btr1.DowngradeOpen(); @@ -556,38 +614,31 @@ public void Test_QuickBlockDef1() // ed.Regen(); } - void Wblock() + private void Wblock() { var curdb = HostApplicationServices.WorkingDatabase; - PromptSelectionOptions opts = new() - { - MessageForAdding = "选择对象" - }; + PromptSelectionOptions opts = new() { MessageForAdding = "选择对象" }; var ss = Env.Editor.GetSelection(opts).Value; using ObjectIdCollection ids = new(ss.GetObjectIds()); var db = curdb.Wblock(ids, Point3d.Origin); db.SaveAs(@"c:\test.dwg", DwgVersion.Current); } + [CommandMethod(nameof(ChangeDynameicBlock))] public void ChangeDynameicBlock() { - var pro = new Dictionary - { - { "haha", 1 } - }; + var pro = new Dictionary { { "haha", 1 } }; var blockid = Env.Editor.GetEntity("选择个块").ObjectId; using DBTrans tr = new(); var brf = tr.GetObject(blockid)!; brf.ChangeBlockProperty(pro); // 这是第一个函数的用法 } + [CommandMethod(nameof(ChangeBlockProperty))] public void ChangeBlockProperty() { - Dictionary? pro = new() - { - { "haha", "1" } - }; + Dictionary pro = new() { { "haha", "1" } }; var blockid = Env.Editor.GetEntity("选择个块").ObjectId; using DBTrans tr = new(); var brf = tr.GetObject(blockid)!; @@ -598,25 +649,27 @@ public void ChangeBlockProperty() [CommandMethod(nameof(Test_Back))] public void Test_Back() { - string dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); - string dwg = dir + "\\test.dwg"; + var dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); + var dwg = dir + "\\test.dwg"; if (!File.Exists(dwg)) { - System.Windows.Forms.MessageBox.Show(dwg, "你还没有创建此文件"); + MessageBox.Show(dwg, "你还没有创建此文件"); return; } using DBTrans tr = new(dwg); - tr.ModelSpace.GetEntities().ForEach(ent => - { - ent.ForWrite(e => e.ColorIndex = 3); - }); + tr.ModelSpace.GetEntities() + .ForEach(ent => + { + ent.ForWrite(e => e.ColorIndex = 3); + }); tr.Database.SaveAs(dwg, DwgVersion.Current); - tr.ModelSpace.GetEntities().ForEach(ent => - { - ent.ForWrite(e => e.ColorIndex = 4); - }); + tr.ModelSpace.GetEntities() + .ForEach(ent => + { + ent.ForWrite(e => e.ColorIndex = 4); + }); tr.Database.SaveAs(dwg, DwgVersion.Current); } @@ -629,7 +682,7 @@ public void Test_ExplodeBlock() using var tr = new DBTrans(); if (tr.GetObject(r1.ObjectId, OpenMode.ForWrite) is not BlockReference brf) return; - var dboc = new DBObjectCollection(); + var unused = new DBObjectCollection(); // brf.Explode(dboc); brf.ExplodeToOwnerSpace(); // foreach (Entity item in dboc) @@ -643,24 +696,23 @@ public void Test_ExplodeBlock() } } - - public static class Blocks { + private static ObjectIdCollection _idsAdded = []; [CommandMethod("TestExplodeToOwnerSpace3")] public static void TestExplodeToOwnerSpace3_Method() { - Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; + var ed = Acaop.DocumentManager.MdiActiveDocument.Editor; try { - PromptEntityOptions prEntOpt = new PromptEntityOptions("\nSelect an INSERT:"); + var prEntOpt = new PromptEntityOptions("\nSelect an INSERT:"); prEntOpt.SetRejectMessage("\nIt is not an INSERT!"); prEntOpt.AddAllowedClass(typeof(BlockReference), true); - PromptEntityResult selRes = ed.GetEntity(prEntOpt); + var selRes = ed.GetEntity(prEntOpt); if (selRes.Status == PromptStatus.OK) { - ObjectIdCollection ids = ExplodeToOwnerSpace3(selRes.ObjectId); + var ids = ExplodeToOwnerSpace3(selRes.ObjectId); ed.WriteMessage("{0} entities were added into database.", ids.Count); } else @@ -668,7 +720,7 @@ public static void TestExplodeToOwnerSpace3_Method() ed.WriteMessage("\nEntity Selection failed!"); } } - catch (System.Exception ex) + catch (Exception ex) { ed.WriteMessage(ex.Message); } @@ -681,55 +733,54 @@ public static void ExplodeToOwnerSpace2(ObjectId id, bool erase = true) public static void ExplodeToOwnerSpace2(this BlockReference br) { - ExplodeToOwnerSpace3(br); + br.ExplodeToOwnerSpace3(); } - public static ObjectIdCollection ExplodeToOwnerSpace3(ObjectId id, bool erase = true) + private static ObjectIdCollection ExplodeToOwnerSpace3(ObjectId id, bool erase = true) { - ObjectIdCollection ids; + using var tr = id.Database.TransactionManager.StartTransaction(); + var br = (BlockReference)tr.GetObject(id, OpenMode.ForRead); + var ids = br.ExplodeToOwnerSpace3(); - using (Transaction tr = id.Database.TransactionManager.StartTransaction()) + if (erase) { - BlockReference br = (BlockReference)tr.GetObject(id, OpenMode.ForRead); - ids = br.ExplodeToOwnerSpace3(); - - if (erase) - { - br.UpgradeOpen(); - br.Erase(); - } - - tr.Commit(); + br.UpgradeOpen(); + br.Erase(); } + tr.Commit(); + return ids; } - private static ObjectIdCollection idsAdded = []; - public static ObjectIdCollection ExplodeToOwnerSpace3(this BlockReference br) + private static ObjectIdCollection ExplodeToOwnerSpace3(this BlockReference br) { - idsAdded = new ObjectIdCollection(); + _idsAdded = new ObjectIdCollection(); - Transaction tr = br.Database.TransactionManager.TopTransaction; - BlockTableRecord spaceBtr = (BlockTableRecord)tr.GetObject(br.BlockId, OpenMode.ForWrite); - LoopThroughInsertAndAddEntity2n3(br.BlockTransform, br, spaceBtr); + var tr = br.Database.TransactionManager.TopTransaction; + var spaceBtr = (BlockTableRecord)tr.GetObject(br.BlockId, OpenMode.ForWrite); + LoopThroughInsertAndAddEntity2N3(br.BlockTransform, br, spaceBtr); - return idsAdded; + return _idsAdded; } + // 不能用于非等比 - public static void LoopThroughInsertAndAddEntity2n3(Matrix3d mat, BlockReference br, BlockTableRecord space) + private static void LoopThroughInsertAndAddEntity2N3( + Matrix3d mat, + BlockReference br, + BlockTableRecord space + ) { - Transaction tr = space.Database.TransactionManager.TopTransaction; - BlockTableRecord btr = (BlockTableRecord)tr.GetObject(br.BlockTableRecord, OpenMode.ForRead); + var tr = space.Database.TransactionManager.TopTransaction; + var btr = (BlockTableRecord)tr.GetObject(br.BlockTableRecord, OpenMode.ForRead); - foreach (ObjectId id in btr) + foreach (var id in btr) { - DBObject obj = tr.GetObject(id, OpenMode.ForRead); - Entity? ent = obj.Clone() as Entity; - if (ent is BlockReference) + var obj = tr.GetObject(id, OpenMode.ForRead); + var ent = obj.Clone() as Entity; + if (ent is BlockReference br1) { - BlockReference br1 = (BlockReference)ent; - LoopThroughInsertAndAddEntity2n3(br1.BlockTransform.PreMultiplyBy(mat), br1, space); + LoopThroughInsertAndAddEntity2N3(br1.BlockTransform.PreMultiplyBy(mat), br1, space); } else { @@ -737,128 +788,104 @@ public static void LoopThroughInsertAndAddEntity2n3(Matrix3d mat, BlockReference space.AppendEntity(ent); tr.AddNewlyCreatedDBObject(ent, true); - idsAdded.Add(ent!.ObjectId); + _idsAdded.Add(ent!.ObjectId); } } } - } - public class BlockImportClass { [CommandMethod(nameof(Test_Cbll))] public void Test_Cbll() { - string filename = @"C:\Users\vic\Desktop\Drawing1.dwg"; + var filename = Path.Combine(DeskTop, "Drawing1.dwg"); using DBTrans tr = new(); using DBTrans tr1 = new(filename); // tr.BlockTable.GetBlockFrom(filename, true); - string blkdefname = SymbolUtilityServices.RepairSymbolName(SymbolUtilityServices.GetSymbolNameFromPathName(filename, "dwg"), false); + var blkdefname = SymbolUtilityServices.RepairSymbolName( + SymbolUtilityServices.GetSymbolNameFromPathName(filename, "dwg"), + false + ); tr.Database.Insert(blkdefname, tr1.Database, false); // 插入了块定义,未插入块参照 } - [CommandMethod(nameof(Test_CombineBlocksIntoLibrary))] public void Test_CombineBlocksIntoLibrary() { - Document doc = Acap.DocumentManager.MdiActiveDocument; - Editor ed = doc.Editor; - Database destDb = doc.Database; + var doc = Acaop.DocumentManager.MdiActiveDocument; + var ed = doc.Editor; + var destDb = doc.Database; - PromptResult pr = ed.GetString("\nEnter the folder of source drawings: "); + var pr = ed.GetString("\nEnter the folder of source drawings: "); if (pr.Status != PromptStatus.OK) return; - string pathName = pr.StringResult; + var pathName = pr.StringResult; if (!Directory.Exists(pathName)) { ed.WriteMessage("\nDirectory does not exist: {0}", pathName); return; } - string[] fileNames = Directory.GetFiles(pathName, "*.dwg"); - int imported = 0, failed = 0; - foreach (string fileName in fileNames) - { - if (fileName.EndsWith(".dwg", - StringComparison.InvariantCultureIgnoreCase)) - { + + var fileNames = Directory.GetFiles(pathName, "*.dwg"); + int imported = 0, + failed = 0; + foreach (var fileName in fileNames) + if (fileName.EndsWith(".dwg", StringComparison.InvariantCultureIgnoreCase)) // Catch exceptions at the file level to allow skipping try { // Suggestion from Thorsten Meinecke... - - string destName = - SymbolUtilityServices.GetSymbolNameFromPathName( - fileName, "dwg" - ); + var destName = SymbolUtilityServices.GetSymbolNameFromPathName(fileName, "dwg"); // And from Dan Glassman... - - destName = - SymbolUtilityServices.RepairSymbolName( - destName, false - ); + destName = SymbolUtilityServices.RepairSymbolName(destName, false); // Create a source database to load the DWG into - using Database db = new(false, true); - // Read the DWG into our side database + // Read the DWG into our side database db.ReadDwgFile(fileName, FileShare.Read, true, ""); - bool isAnno = db.AnnotativeDwg; + var isAnno = db.AnnotativeDwg; // Insert it into the destination database as // a named block definition - - ObjectId btrId = destDb.Insert( - destName, - db, - false - ); + var btrId = destDb.Insert(destName, db, false); if (isAnno) { // If an annotative block, open the resultant BTR // and set its annotative definition status - - Transaction tr = - destDb.TransactionManager.StartTransaction(); + var tr = destDb.TransactionManager.StartTransaction(); using (tr) { - BlockTableRecord btr = - (BlockTableRecord)tr.GetObject( - btrId, - OpenMode.ForWrite - ); + var btr = (BlockTableRecord)tr.GetObject(btrId, OpenMode.ForWrite); btr.Annotative = AnnotativeStates.True; tr.Commit(); } } // Print message and increment imported block counter - ed.WriteMessage("\nImported from \"{0}\".", fileName); imported++; } - catch (System.Exception ex) + catch (Exception ex) { ed.WriteMessage( - "\nProblem importing \"{0}\": {1} - file skipped.", - fileName, ex.Message + "\nProblem importing \"{0}\": {1} - file skipped.", + fileName, + ex.Message ); failed++; } - } - } ed.WriteMessage( - "\nImported block definitions from {0} files{1} in " + - "\"{2}\" into the current drawing.", - imported, - failed > 0 ? " (" + failed + " failed)" : "", - pathName + "\nImported block definitions from {0} files{1} in " + + "\"{2}\" into the current drawing.", + imported, + failed > 0 ? " (" + failed + " failed)" : "", + pathName ); } - -} \ No newline at end of file +} diff --git a/tests/TestShared/TestCadFilePath.cs b/tests/TestShared/TestCadFilePath.cs index c0354d53598e2c502242888a31cdf9c84e6c5075..78a3c2b73d0cbe630fef075e7169523bbd58691f 100644 --- a/tests/TestShared/TestCadFilePath.cs +++ b/tests/TestShared/TestCadFilePath.cs @@ -1,5 +1,4 @@ - -namespace Test; +namespace IFoxTest; public class TestCadFilePath { @@ -12,16 +11,19 @@ public void TestCadFilePathfun() var profileskey = ackey?.OpenSubKey("Profiles"); var listkey = profileskey?.GetSubKeyNames(); - if (listkey == null) return; + if (listkey == null) + return; foreach (var item in listkey) { - if (profileskey == null) continue; + if (profileskey == null) + continue; var acadkey = profileskey.OpenSubKey($@"{item}\General", true); const string name = "ACAD"; var str = acadkey?.GetValue(name)?.ToString(); - if (str == null || str.Contains("nihao")) continue; - Env.Print(str); + if (str == null || str.Contains("nihao")) + continue; + str.Print(); acadkey?.SetValue(name, $@"{str}\nihao;", RegistryValueKind.String); } } -} +} \ No newline at end of file diff --git a/tests/TestShared/TestConvexHull.cs b/tests/TestShared/TestConvexHull.cs index 03692ae5ffc3cceec783cd35c053079e7374ba03..22c61057006677a56b73857ad94c819dc62ab6c5 100644 --- a/tests/TestShared/TestConvexHull.cs +++ b/tests/TestShared/TestConvexHull.cs @@ -1,5 +1,4 @@ -namespace Test; - +namespace IFoxTest; public class TestConvexHull { @@ -45,7 +44,6 @@ public void Test_ConvexHull() // tr.Editor.WriteMessage(a1.ToString()); // tr.Editor.WriteMessage(a2.ToString()); - // var vec1 = new Vector2d(1, 1); // var vec2 = new Vector2d(-1, 1); @@ -58,9 +56,19 @@ public void Test_ConvexHull() // var area3 = vec2.DotProduct(vec1); // var area4 = vec1.DotProduct(vec2); - var area5 = GeometryEx.GetArea(new List { new Point2d(0, 0), new Point2d(1, 1), new Point2d(-1, 1) }); - - var area6 = GeometryEx.GetArea(new List { new Point2d(0, 0), new Point2d(-1, 1), new Point2d(1, 1) }); + var area5 = new List + { + new(0, 0), + new(1, 1), + new(-1, 1) + }.GetArea(); + + var area6 = new List + { + new(0, 0), + new(-1, 1), + new(1, 1) + }.GetArea(); // Env.Editor.WriteMessage($"vec1 的法向量= {vec3} \n"); // Env.Editor.WriteMessage($"vec2 的法向量= {vec4} \n"); diff --git a/tests/TestShared/TestCurve.cs b/tests/TestShared/TestCurve.cs index 91ae9247cc00e09f0fad5aa02fc8e3ee4d7a9d33..946ff3f42921623197fac1f5cb5c63e3457c651f 100644 --- a/tests/TestShared/TestCurve.cs +++ b/tests/TestShared/TestCurve.cs @@ -1,4 +1,4 @@ -namespace Test; +namespace IFoxTest; public class TestGraph { @@ -16,9 +16,9 @@ public void Test_PointInDict() { pt2, 2 }, { pt3, 3 }, { pt4, 4 }, - { pt5, 5 } + { pt5, 5 }, }; - Env.Print(dict[pt1]); + dict[pt1].Print(); } #if false @@ -81,54 +81,50 @@ public void Test_Graphspeed() #endif } - - public partial class TestCurve { [CommandMethod(nameof(Test_CurveExtend))] public void Test_CurveExtend() { - using var tr = new DBTrans(); + using var tr = new DBTrans(); var ent = Env.Editor.GetEntity("pick curve").ObjectId.GetObject(); if (ent is Curve curve) curve.ForWrite(e => e.Extend(e.EndParam + 1)); - } - - private Arc ToArc1(CircularArc2d a2d) + private Arc ToArc1(CircularArc2d a2D) { - double startangle, endangle; - double refangle = a2d.ReferenceVector.Angle; + double startangle, + endangle; + var refangle = a2D.ReferenceVector.Angle; - if (a2d.IsClockWise) + if (a2D.IsClockWise) { - startangle = -a2d.EndAngle + refangle; - endangle = -a2d.StartAngle + refangle; + startangle = -a2D.EndAngle + refangle; + endangle = -a2D.StartAngle + refangle; } else { - startangle = a2d.StartAngle + refangle; - endangle = a2d.EndAngle + refangle; + startangle = a2D.StartAngle + refangle; + endangle = a2D.EndAngle + refangle; } - return - new Arc( - new Point3d(new Plane(), a2d.Center), - Vector3d.ZAxis, - a2d.Radius, - startangle, - endangle); + return new Arc( + new Point3d(new Plane(), a2D.Center), + Vector3d.ZAxis, + a2D.Radius, + startangle, + endangle + ); } - #if false [CommandMethod(nameof(Test_Curve_ToArc))] public void Test_Curve_ToArc() { using var tr = new DBTrans(); var gearc = new CircularArc2d(new Point2d(0,0),new Point2d(0.5,0.5),new Point2d(1,0)); - var dbarc = gearc.ToArc(); + var dbarc = gearc.ToArc(); var dbarc1 = ToArc1(gearc); dbarc.ColorIndex = 1; tr.CurrentSpace.AddEntity(dbarc); @@ -258,17 +254,17 @@ public void Test_Curve_ToArc() #endif } - public partial class TestCurve { [CommandMethod(nameof(Test_BreakCurve))] public void Test_BreakCurve() { using DBTrans tr = new(); - var ents = Env.Editor.SSGet()?.Value.GetEntities(); - if (ents is null) + var ents = Env.Editor.SSGet().Value.GetEntities().ToList(); + if (ents.Count == 0) return; - var tt = CurveEx.BreakCurve(ents.ToList()!); + + var tt = ents.ToList().BreakCurve(); tt.ForEach(t => t.ForWrite(e => e.ColorIndex = 1)); tr.CurrentSpace.AddEntity(tt); } @@ -277,43 +273,43 @@ public void Test_BreakCurve() public void Test_CurveCurveIntersector3d() { using DBTrans tr = new(); - var ents = Env.Editor.SSGet()? + var ents = Env + .Editor.SSGet() .Value.GetEntities() - .Select(e => e?.ToCompositeCurve3d()).ToList(); - if (ents == null) - return; + .Select(e => e?.ToCompositeCurve3d()) + .ToList(); - var cci3d = new CurveCurveIntersector3d(); - for (int i = 0; i < ents.Count; i++) + var cci3D = new CurveCurveIntersector3d(); + for (var i = 0; i < ents.Count; i++) { var gc1 = ents[i]; var int1 = gc1?.GetInterval(); // var pars1 = paramss[i]; - for (int j = i; j < ents.Count; j++) + for (var j = i; j < ents.Count; j++) { var gc2 = ents[j]; // var pars2 = paramss[j]; var int2 = gc2?.GetInterval(); - cci3d.Set(gc1, gc2, int1, int2, Vector3d.ZAxis); - var d = cci3d.OverlapCount(); - var a = cci3d.GetIntersectionRanges(); - Env.Print($"{a[0].LowerBound}-{a[0].UpperBound} and {a[1].LowerBound}-{a[1].UpperBound}"); - for (int m = 0; m < d; m++) + cci3D.Set(gc1, gc2, int1, int2, Vector3d.ZAxis); + var d = cci3D.OverlapCount(); + var a = cci3D.GetIntersectionRanges(); + $"{a[0].LowerBound}-{a[0].UpperBound} and {a[1].LowerBound}-{a[1].UpperBound}".Print(); + for (var m = 0; m < d; m++) { - var b = cci3d.GetOverlapRanges(m); - Env.Print($"{b[0].LowerBound}-{b[0].UpperBound} and {b[1].LowerBound}-{b[1].UpperBound}"); + var b = cci3D.GetOverlapRanges(m); + $"{b[0].LowerBound}-{b[0].UpperBound} and {b[1].LowerBound}-{b[1].UpperBound}".Print(); } - for (int k = 0; k < cci3d.NumberOfIntersectionPoints; k++) + for (var k = 0; k < cci3D.NumberOfIntersectionPoints; k++) { // var a = cci3d.GetOverlapRanges(k); // var b = cci3d.IsTangential(k); // var c = cci3d.IsTransversal(k); // var d = cci3d.OverlapCount(); // var e = cci3d.OverlapDirection(); - var pt = cci3d.GetIntersectionParameters(k); - var pts = cci3d.GetIntersectionPoint(k); - Env.Print(pts); + var unused = cci3D.GetIntersectionParameters(k); + var pts = cci3D.GetIntersectionPoint(k); + pts.Print(); } } } @@ -321,4 +317,4 @@ public void Test_CurveCurveIntersector3d() // tt.ForEach(t => t.ForWrite(e => e.ColorIndex = 1)); // tr.CurrentSpace.AddEntity(tt); } -} \ No newline at end of file +} diff --git a/tests/TestShared/TestDBTrans.cs b/tests/TestShared/TestDBTrans.cs index 41eb67d81a467ecaa1183c6e1868921d79890b9a..ea40cd84f187c814190e868b7967fe368071a444 100644 --- a/tests/TestShared/TestDBTrans.cs +++ b/tests/TestShared/TestDBTrans.cs @@ -1,4 +1,4 @@ -namespace Test; +namespace IFoxTest; public class TestTrans { @@ -12,14 +12,10 @@ public void Test_DBTrans() tr.Editor.WriteMessage("\n----------开始测试--------------"); tr.Editor.WriteMessage("\n测试document属性是否工作"); if (tr.Document == Getdoc()) - { tr.Editor.WriteMessage("\ndocument 正常"); - } tr.Editor.WriteMessage("\n测试database属性是否工作"); if (tr.Database == Getdb()) - { tr.Editor.WriteMessage("\ndatabase 正常"); - } } private static Database Getdb() @@ -33,23 +29,21 @@ private static Document Getdoc() var doc = Acaop.DocumentManager.MdiActiveDocument; return doc; } - - - - - [CommandMethod(nameof(CmdTest_DBTransActiveOpenDwg), CommandFlags.Session)] - public static void CmdTest_DBTransActiveOpenDwg() + + [CommandMethod(nameof(Test_DBTransActiveOpenDwg), CommandFlags.Session)] + public static void Test_DBTransActiveOpenDwg() { using DBTrans tr = new(@"D:\桌面\AA.dwg", activeOpen: true); } - [CommandMethod(nameof(CmdTest_ForEachDemo))] - public static void CmdTest_ForEachDemo() + [CommandMethod(nameof(Test_ForEachDemo))] + public static void Test_ForEachDemo() { using DBTrans tr = new(); // 泛型扩展(用变量名来使用它) - tr.BlockTable.ForEach(action: (id) => { + tr.BlockTable.ForEach(action: id => + { //Debugger.Break();// 为什么cad工程不能断点进入呢? id.Print(); Console.WriteLine(id); @@ -61,60 +55,79 @@ public static void CmdTest_ForEachDemo() // id.Print(); //} - tr.BlockTable.ForEach(action: (id) => { - id.Print(); - }); - tr.BlockTable.ForEach(action: (id, state, index) => { + tr.BlockTable.ForEach(action: id => + { id.Print(); }); + tr.BlockTable.ForEach( + action: (id, _, _) => + { + id.Print(); + } + ); // 符号表扩展(会顶替泛型扩展) - tr.BlockTable.ForEach((btr) => { // 预处理设置不进入ForEach函数体内 - btr.Print();// 此处可以设置断点 - }, OpenMode.ForRead, checkIdOk: true); - tr.BlockTable.ForEach((btr, state) => {// 预处理设置不进入ForEach函数体内 - btr.Print();// 此处可以设置断点 - }, OpenMode.ForRead, checkIdOk: true); - tr.BlockTable.ForEach((btr, state, index) => { // 预处理设置不进入ForEach函数体内 - btr.Print();// 此处可以设置断点 - }, OpenMode.ForRead, checkIdOk: true); + tr.BlockTable.ForEach(btr => + { + // 预处理设置不进入ForEach函数体内 + btr.Print(); // 此处可以设置断点 + }); + tr.BlockTable.ForEach( + (btr, _) => + { + // 预处理设置不进入ForEach函数体内 + btr.Print(); // 此处可以设置断点 + } + ); + tr.BlockTable.ForEach( + (btr, _, _) => + { + // 预处理设置不进入ForEach函数体内 + btr.Print(); // 此处可以设置断点 + } + ); // 修改:此处有缺陷:cad08会获取已经删除的块表记录,需要检查id.IsOk(),用ForEach代替 // tr.BlockTable.Change("块表记录", btr => { // }); // 修改:此处无缺陷 - tr.BlockTable.Change(tr.ModelSpace.ObjectId, modelSpace => { // 特性设置不进入函数体内 - var ents = modelSpace.GetEntities(); // 此处不会检查id.IsOk() - - modelSpace.ForEach(id => { // 利用遍历检查id.IsOk() - if (id.IsOk()) - id.Print(); - }); - }); + tr.BlockTable.Change( + tr.ModelSpace.ObjectId, + modelSpace => + { + // 特性设置不进入函数体内 + var unused = modelSpace.GetEntities(); // 此处不会检查id.IsOk() + + modelSpace.ForEach(id => + { + // 利用遍历检查id.IsOk() + if (id.IsOk()) + id.Print(); + }); + } + ); } - - // 后台:不存在路径的dwg会在桌面进行临时保存 - [CommandMethod(nameof(FileNotExist))] - public void FileNotExist() + [CommandMethod(nameof(Test_FileNotExist))] + public void Test_FileNotExist() { using DBTrans tr = new("test.dwg"); tr.Database.SaveFile((DwgVersion)24, false); } // 前台:由于是弹出面板,此时路径不会起任何作用 - [CommandMethod(nameof(FileNotExist2))] - public void FileNotExist2() + [CommandMethod(nameof(Test_FileNotExist2))] + public void Test_FileNotExist2() { using DBTrans tr = new(); tr.Database.SaveFile(saveAsFile: "D:\\"); } // 后台:只有路径,没有文件名 - [CommandMethod(nameof(FileNotExist3))] - public void FileNotExist3() + [CommandMethod(nameof(Test_FileNotExist3))] + public void Test_FileNotExist3() { using DBTrans tr = new("D:\\"); tr.Database.SaveDwgFile(); @@ -123,22 +136,22 @@ public void FileNotExist3() tr2.Database.SaveFile(saveAsFile: "D:\\"); } - [CommandMethod(nameof(Test_SaveDwgFile))] public void Test_SaveDwgFile() { - string filename = @"C:\Users\vic\Desktop\test.dwg"; + var filename = Path.Combine(DeskTop, "test.dwg"); using DBTrans tr = new(filename); - var circle = CircleEx.CreateCircle(new Point3d(10, 10, 0), 20)!; + var circle = CircleEx.CreateCircle(new Point3d(10, 10, 0), 20); tr.ModelSpace.AddEntity(circle); // tr.Database.SaveAs(filename,DwgVersion.Current); tr.Database.SaveDwgFile(); } + [CommandMethod(nameof(Test_DBTransAbort))] public void Test_DBTransAbort() { using DBTrans tr = new(); - var circle = CircleEx.CreateCircle(new Point3d(10, 10, 0), 20)!; + var circle = CircleEx.CreateCircle(new Point3d(10, 10, 0), 20); tr.ModelSpace.AddEntity(circle); tr.Abort(); // tr.Commit(); @@ -165,39 +178,36 @@ public void Test_DBTransAbort() // tr.ModelSpace.AddCircle(new Point3d(0, 0, 0), 20); // } - [CommandMethod(nameof(Test_TopTransaction))] public void Test_TopTransaction() { // var pt = Env.Editor.GetPoint("pick pt:").Value; // var pl = Env.Editor.GetEntity("pick pl").ObjectId; - var tr1 = HostApplicationServices.WorkingDatabase.TransactionManager.TopTransaction; + var unused = HostApplicationServices.WorkingDatabase.TransactionManager.TopTransaction; using DBTrans tr2 = new(); var tr3 = HostApplicationServices.WorkingDatabase.TransactionManager.TopTransaction; var tr6 = Acaop.DocumentManager.MdiActiveDocument.TransactionManager.TopTransaction; - Env.Print(tr2.Transaction == tr3); - Env.Print(tr3 == tr6); + (tr2.Transaction == tr3).Print(); + (tr3 == tr6).Print(); using DBTrans tr4 = new(); var tr5 = HostApplicationServices.WorkingDatabase.TransactionManager.TopTransaction; var tr7 = Acaop.DocumentManager.MdiActiveDocument.TransactionManager.TopTransaction; - Env.Print(tr4.Transaction == tr5); - Env.Print(tr5 == tr7); - var trm = HostApplicationServices.WorkingDatabase.TransactionManager; - + (tr4.Transaction == tr5).Print(); + (tr5 == tr7).Print(); + var unused1 = HostApplicationServices.WorkingDatabase.TransactionManager; } [CommandMethod(nameof(Test_DBTrans_BlockCount))] public void Test_DBTrans_BlockCount() { using var tr = new DBTrans(); - var i = tr.CurrentSpace - .GetEntities() - .Where(ent => ent.GetBlockName() == "自定义块"); - + var i = tr + .CurrentSpace.GetEntities() + .Where(ent => ent.GetBlockName() == "自定义块") + .ToList(); + var block = i.ToList()[0]; - Env.Print(i.Count()); + i.Count.Print(); } - - -} \ No newline at end of file +} diff --git a/tests/TestShared/TestDBobject.cs b/tests/TestShared/TestDBobject.cs index f0cb142afe65c59161842eedc5ccfd0415047840..8b88500a88d6c420e2fa46de002845298a5983f4 100644 --- a/tests/TestShared/TestDBobject.cs +++ b/tests/TestShared/TestDBobject.cs @@ -1,27 +1,30 @@ - +namespace IFoxTest; -namespace TestShared +public static class TestDBobject { - public static class TestDBobject + [CommandMethod(nameof(TestForWrite))] + public static void TestForWrite() { - [CommandMethod(nameof(TestForWrite))] - public static void TestForWrite() - { - using var tr = new DBTrans(); - var ent = Env.Editor.GetEntity("\npick entity"); - if (ent.Status is not PromptStatus.OK) return; - var entid = ent.ObjectId.GetObject()!; - Tools.TestTimes3(100000, "using:", i => { + using var tr = new DBTrans(); + var ent = Env.Editor.GetEntity("\npick entity"); + if (ent.Status is not PromptStatus.OK) + return; + var entid = ent.ObjectId.GetObject()!; + Tools.TestTimes3( + 100000, + "using:", + i => + { using (entid.ForWrite()) { entid.ColorIndex = i % 7; } - }); - Tools.TestTimes3(100000, "action:", i => { - entid.ForWrite(e => { - e.ColorIndex = i % 7; - }); - }); - } + } + ); + Tools.TestTimes3( + 100000, + "action:", + i => { entid.ForWrite(e => { e.ColorIndex = i % 7; }); } + ); } -} +} \ No newline at end of file diff --git a/tests/TestShared/TestDwgFilerEx.cs b/tests/TestShared/TestDwgFilerEx.cs index 50eed0ed9c2b960d2f7b43540c0b7b242a0d1c76..ca96919b6d2e09c1a992e4b32ab03958284123b0 100644 --- a/tests/TestShared/TestDwgFilerEx.cs +++ b/tests/TestShared/TestDwgFilerEx.cs @@ -1,5 +1,5 @@ -#if false -namespace Test; +#if false +namespace IFoxTest; using DxfFiler = Fs.Fox.Cad.DxfFiler; diff --git a/tests/TestShared/TestDwgMark.cs b/tests/TestShared/TestDwgMark.cs index 7f869e2d79d023099512207d067f1eb339800c4a..10dd2f87afcca5222d7bbbf09bbba04357b32e44 100644 --- a/tests/TestShared/TestDwgMark.cs +++ b/tests/TestShared/TestDwgMark.cs @@ -1,11 +1,13 @@ -namespace Test; -using Fs.Fox.Cad; -public class TestDwgMark { - [CommandMethod(nameof(DwgMarktest))] - public void DwgMarktest() { - FileInfo file = new FileInfo(@"D:\TEST\1.dwg"); +namespace IFoxTest; + +public class TestDwgMark +{ + [CommandMethod(nameof(Hest_DwgMark))] + public void Hest_DwgMark() + { + var file = new FileInfo(@"D:\TEST\1.dwg"); DwgMark.AddMark(file, 0x4D); DwgMark.RemoveMark(file); - int A = DwgMark.GetMark(file); + var a = DwgMark.GetMark(file); } } \ No newline at end of file diff --git a/tests/TestShared/TestEditor.cs b/tests/TestShared/TestEditor.cs index 5f83345d9fa456752e52a55b975c6177a1c37b6a..1f1921c5e40fe6f1fd609145bd14f300fd1c6696 100644 --- a/tests/TestShared/TestEditor.cs +++ b/tests/TestShared/TestEditor.cs @@ -1,28 +1,23 @@ -namespace Test; +namespace IFoxTest; public class Testeditor { [CommandMethod(nameof(Test_Editor))] public void Test_Editor() { - var pts = new List - { - new Point2d(0,0), - new Point2d(0,1), - new Point2d(1,1), - new Point2d(1,0) - }; + var pts = new List { new(0, 0), new(0, 1), new(1, 1), new(1, 0) }; var res = EditorEx.GetLines(pts, false); var res1 = EditorEx.GetLines(pts, true); var res2 = pts.Select(pt => new TypedValue((int)LispDataType.Point2d, pt)).ToList(); - Editor ed = Acap.DocumentManager.MdiActiveDocument.Editor; + var ed = Acaop.DocumentManager.MdiActiveDocument.Editor; var pt = ed.GetPoint("qudiam", new Point3d(0, 0, 0)); var d = ed.GetDouble("qudoule"); var i = ed.GetInteger("quint"); var s = ed.GetString("qustr"); Env.Editor.WriteMessage(""); } + [CommandMethod(nameof(Test_Zoom))] public void Test_Zoom() { @@ -31,6 +26,7 @@ public void Test_Zoom() if (res.Status == PromptStatus.OK) Env.Editor.ZoomObject(res.ObjectId.GetObject()!); } + [CommandMethod(nameof(Test_ZoomExtents))] public void Test_ZoomExtents() { @@ -47,41 +43,61 @@ public void Test_ZoomExtents() [CommandMethod(nameof(Test_Zoom_1))] public void Test_Zoom_1() { - Env.Editor.Zoom(new(0, 0, 0),200,200); + Env.Editor.Zoom(new Point3d(0, 0, 0), 200, 200); } + [CommandMethod(nameof(Test_Zoom_2))] public void Test_Zoom_2() { - Env.Editor.ZoomWindow(new Point3d(-100,-100,0),new(100,100,0)); + Env.Editor.ZoomWindow(new Point3d(-100, -100, 0), new Point3d(100, 100, 0)); } [CommandMethod(nameof(Test_Ssget))] public void Test_Ssget() { - var keyword = new Dictionary { - { "D", ("你好", () => { Env.Print("this is c"); }) }, - { "B", ("hello", () => { Env.Print("this is b"); }) } + { + "D", + ( + "你好", + () => + { + "this is c".Print(); + } + ) + }, + { + "B", + ( + "hello", + () => + { + "this is b".Print(); + } + ) + }, }; - var ss = Env.Editor.SSGet(/*":S", */ messages: ("get", "del" ), - keywords: keyword); - Env.Print(ss!); + var ss = Env.Editor.SSGet( /*":S", */ + messages: ("get", "del"), + keywords: keyword + ); + ss.Print(); } [CommandMethod(nameof(Test_ExportWMF), CommandFlags.Modal | CommandFlags.UsePickSet)] public void Test_ExportWMF() { - var psr = Env.Editor.SelectImplied();// 预选 + var psr = Env.Editor.SelectImplied(); // 预选 if (psr.Status != PromptStatus.OK) - psr = Env.Editor.GetSelection();// 手选 + psr = Env.Editor.GetSelection(); // 手选 if (psr.Status != PromptStatus.OK) return; var ids = psr.Value.GetObjectIds(); // acad21(acad08没有)先选择再执行..会让你再选择一次 // 而且只发生在启动cad之后第一次执行. - Env.Editor.ComExportWMF(@"C:\Users\vic\Desktop\aaa.dwg", ids); + Env.Editor.ComExportWMF(Path.Combine(DeskTop, "aaa.dwg"), ids); } -} \ No newline at end of file +} diff --git a/tests/TestShared/TestEntity/TestAddEntity.cs b/tests/TestShared/TestEntity/TestAddEntity.cs index 920e6e03772c73b068e522d4d2a27374ad5c76f6..33342d1d406b24420b1a8c197bbf087b7b74f613 100644 --- a/tests/TestShared/TestEntity/TestAddEntity.cs +++ b/tests/TestShared/TestEntity/TestAddEntity.cs @@ -1,14 +1,14 @@ -namespace Test; +namespace IFoxTest; public class TestAddEntity { -#region 直线 + #region 直线 [CommandMethod(nameof(Test_AddLinetoCurrentSpace))] public void Test_AddLinetoCurrentSpace() { using DBTrans tr = new(); // 开启事务 - Line line = new(new(0, 0, 0), new(1, 1, 0)); // 定义一个直线 + Line line = new(new Point3d(0, 0, 0), new Point3d(1, 1, 0)); // 定义一个直线 tr.CurrentSpace.AddEntity(line); // 将直线添加到当前空间 } @@ -17,7 +17,7 @@ public void Test_AddLinetoModelSpace() { using DBTrans tr = new(); // 开启事务 - Line line = new(new(0, 0, 0), new(1, 1, 0)); // 定义一个直线 + Line line = new(new Point3d(0, 0, 0), new Point3d(1, 1, 0)); // 定义一个直线 tr.ModelSpace.AddEntity(line); // 将直线添加到模型空间 } @@ -26,7 +26,7 @@ public void Test_AddLinetoPaperSpace() { using DBTrans tr = new(); // 开启事务 - Line line = new(new(0, 0, 0), new(1, 1, 0)); // 定义一个直线 + Line line = new(new Point3d(0, 0, 0), new Point3d(1, 1, 0)); // 定义一个直线 tr.PaperSpace.AddEntity(line); // 将直线添加到图纸空间 } @@ -46,7 +46,7 @@ public void Test_AddEntities() List lines = [line1, line2, line3]; tr.CurrentSpace.AddEntity(lines); // 或者可以传入个数组 - Line[] lines1 = [line1, line2, line3]; + Entity[] lines1 = [line1, line2, line3]; tr.CurrentSpace.AddEntity(lines1); // 图元数组 Entity[] lines2 = [line1, line2, line3, circle]; @@ -54,45 +54,50 @@ public void Test_AddEntities() // c#12 新语法,集合表达式 tr.CurrentSpace.AddEntity([line1, line2, circle]); } -#endregion + #endregion -#region 圆 + #region 圆 [CommandMethod(nameof(Test_AddCircle))] public void Test_AddCircle() { - var cir = CircleEx.CreateCircle(Point3d.Origin, new(1,0,0)); // 两点创建圆 - var cir1 = CircleEx.CreateCircle(Point3d.Origin, new(1,1,0), new(2,0,0)); //三点创建圆 + var cir = CircleEx.CreateCircle(Point3d.Origin, new Point3d(1, 0, 0)); // 两点创建圆 + var cir1 = CircleEx.CreateCircle(Point3d.Origin, new Point3d(1, 1, 0), new Point3d(2, 0, 0)); //三点创建圆 var cir2 = CircleEx.CreateCircle(Point3d.Origin, 5); // 圆心半径创建圆 using DBTrans tr = new(); tr.CurrentSpace.AddEntity(cir, cir2); - + // 由于三点不一定能成功创建一个圆,因此返回值是可空的,需要判空 if (cir1 is not null) { tr.CurrentSpace.AddEntity(cir1); } } -#endregion + #endregion -#region 圆弧 + #region 圆弧 [CommandMethod(nameof(Test_AddArc))] public void Test_AddArc() { using DBTrans tr = new(); - Arc arc1 = ArcEx.CreateArcSCE(new Point3d(2, 0, 0), new Point3d(0, 0, 0), new Point3d(0, 2, 0));// 起点,圆心,终点 - Arc arc2 = ArcEx.CreateArc(new Point3d(4, 0, 0), new Point3d(0, 0, 0), Math.PI / 2); // 起点,圆心,弧度 - Arc arc3 = ArcEx.CreateArc(new Point3d(1, 0, 0), new Point3d(0, 0, 0), new Point3d(0, 1, 0)); // 起点,圆上一点,终点 + Arc arc1 = ArcEx.CreateArcSCE( + new Point3d(2, 0, 0), + new Point3d(0, 0, 0), + new Point3d(0, 2, 0) + ); // 起点,圆心,终点 + Arc arc2 = ArcEx.CreateArc(new Point3d(4, 0, 0), new Point3d(0, 0, 0), Math.PI / 2); // 起点,圆心,弧度 + Arc arc3 = ArcEx.CreateArc( + new Point3d(1, 0, 0), + new Point3d(0, 0, 0), + new Point3d(0, 1, 0) + ); // 起点,圆上一点,终点 tr.CurrentSpace.AddEntity(arc1, arc2, arc3); } -#endregion - - + #endregion - -#region 多段线 + #region 多段线 [CommandMethod(nameof(Test_AddPolyline1))] public void Test_AddPolyline1() { @@ -115,13 +120,13 @@ public void Test_AddPolyline2() // 集合表达式 List<(Point3d, double, double, double)> pts = [ - (new Point3d(0,0,0),0,0,0), - (new Point3d(10,0,0),0,0,0), - (new Point3d(10,10,0),0,0,0), - (new Point3d(0,10,0),0,0,0), - (new Point3d(5,5,0),0,0,0) + (new Point3d(0, 0, 0), 0, 0, 0), + (new Point3d(10, 0, 0), 0, 0, 0), + (new Point3d(10, 10, 0), 0, 0, 0), + (new Point3d(0, 10, 0), 0, 0, 0), + (new Point3d(5, 5, 0), 0, 0, 0), ]; - + using DBTrans tr = new(); var pl = pts.CreatePolyline(); tr.CurrentSpace.AddEntity(pl); @@ -132,13 +137,7 @@ public void Test_AddPolyline3() { using var tr = new DBTrans(); - List pts = - [ - new(0, 0, 0), - new(0, 1, 0), - new(1, 1, 0), - new(1, 0, 0) - ]; + List pts = [new(0, 0, 0), new(0, 1, 0), new(1, 1, 0), new(1, 0, 0)]; var pline = pts.CreatePolyline(); tr.CurrentSpace.AddEntity(pline); @@ -151,7 +150,5 @@ public void Test_AddPolyline3() }); tr.CurrentSpace.AddEntity(pline1); } - -#endregion - + #endregion } diff --git a/tests/TestShared/TestEnv.cs b/tests/TestShared/TestEnv.cs index d1df3b805e85db341e0c5d2b1dac25f400984ba3..a0314f5fd0b465329cb39cde0a7c9ceebf5625e0 100644 --- a/tests/TestShared/TestEnv.cs +++ b/tests/TestShared/TestEnv.cs @@ -1,12 +1,15 @@ -namespace Test; +// ReSharper disable StringLiteralTypo +// ReSharper disable CommentTypo +namespace IFoxTest; -public class Testenv +public class TestEnv { [CommandMethod(nameof(Test_Enum))] public void Test_Enum() { Env.CmdEcho = true; } + [CommandMethod(nameof(Test_Enum1))] public void Test_Enum1() { @@ -17,18 +20,19 @@ public void Test_Enum1() public void Test_Dimblk() { Env.Dimblk = Env.DimblkType.Dot; - Env.Print(Env.Dimblk); - Env.Print(Env.GetDimblkId(Env.DimblkType.Dot)); + Env.Dimblk.Print(); + Env.GetDimblkId(Env.DimblkType.Dot).Print(); Env.Dimblk = Env.DimblkType.Default; - Env.Print(Env.Dimblk); - Env.Print(Env.GetDimblkId(Env.DimblkType.Default)); + Env.Dimblk.Print(); + Env.GetDimblkId(Env.DimblkType.Default).Print(); Env.Dimblk = Env.DimblkType.Oblique; - Env.Print(Env.Dimblk); - Env.Print(Env.GetDimblkId(Env.DimblkType.Oblique)); + Env.Dimblk.Print(); + Env.GetDimblkId(Env.DimblkType.Oblique).Print(); Env.Dimblk = Env.DimblkType.ArchTick; - Env.Print(Env.Dimblk); - Env.Print(Env.GetDimblkId(Env.DimblkType.ArchTick)); + Env.Dimblk.Print(); + Env.GetDimblkId(Env.DimblkType.ArchTick).Print(); } + [CommandMethod(nameof(Test_Dimblk1))] public void Test_Dimblk1() { @@ -51,6 +55,7 @@ public void Test_Osmode() Env.OSMode ^= Env.OSModeType.Center; Env.Editor.WriteMessage(Env.OSMode.ToString()); } + [CommandMethod(nameof(Test_Osmode1))] public void Test_Osmode1() { @@ -67,7 +72,7 @@ public void Test_Cadver() 1.Print(); "1".Print(); } -#endif +#endif [CommandMethod(nameof(Test_GetVar))] public void Test_GetVar() { @@ -77,8 +82,6 @@ public void Test_GetVar() Env.SetVar("dbmod1", 1); } - - //[CommandMethod(nameof(Test_DwgVersion))] //public void TestDwgVersion() //{ @@ -88,24 +91,24 @@ public void Test_GetVar() // ((DwgVersion)a).Print(); //} - #if !zcad // 通过此功能获取全部变量,尚不清楚此处如何设置,没有通过测试 - [CommandMethod(nameof(Test_GetvarAll))] - public static void Test_GetvarAll() + [CommandMethod(nameof(Test_GetVarAll))] + public static void Test_GetVarAll() { - GetvarAll(); + GetVarAll(); } - public static Dictionary GetvarAll() + private static Dictionary GetVarAll() { var dict = new Dictionary(); var en = new SystemVariableEnumerator(); while (en.MoveNext()) { - Console.WriteLine(en.Current.Name + "-----" + en.Current.Value);// Value会出现异常 + Console.WriteLine(en.Current.Name + "-----" + en.Current.Value); // Value会出现异常 dict.Add(en.Current.Name, en.Current.Value); } + return dict; } #endif @@ -123,13 +126,14 @@ public static void Test_GetEnv() Env.Printl("GetEnv:" + Env.GetEnv("abc")); Env.Printl("GetEnv PATH:" + Env.GetEnv("PATH")); - + Env.Printl($"getenv-acad: {Env.GetEnv("ACAD")}"); Env.Printl($"getvar-acad: {Env.GetVar("TRUSTEDPATHS")}"); Env.Printl($"getenv-TRUSTEDPATHS: {Env.GetEnv("TRUSTEDPATHS")}"); Env.Printl($"getenv-osmode: {Env.GetEnv("osmode")}"); Env.Printl($"getvar-osmode: {Env.GetVar("osmode")}"); } + [CommandMethod(nameof(Test_AppendPath))] public static void Test_AppendPath() { @@ -140,9 +144,8 @@ public static void Test_AppendPath() Env.GetEnv("ACAD").Print(); // Env.SetEnv("ACAD", @"C:\Folder1;"+Env.GetEnv("ACAD")); Env.GetEnv("ACAD").Contains(@"C:\Folder1").Print(); - } - + [CommandMethod(nameof(Test_RemovePath))] public static void Test_RemovePath() { @@ -154,31 +157,26 @@ public static void Test_RemovePath() // Env.RemoveTrustedPath(@"c:\a\x"); Env.GetEnv("ACAD").Print(); } - + public static void AppendSupportPath(string path) { - - string key = HostApplicationServices.Current.UserRegistryProductRootKey; + var key = HostApplicationServices.Current.UserRegistryProductRootKey; // 计算机\HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD\R24.0\ACAD-4101:804 var ackey = Registry.CurrentUser.OpenSubKey($@"{key}\Profiles") ?? null; if (ackey != null) { - var listkey = ackey.GetSubKeyNames(); - foreach (var item in listkey) + var listKey = ackey.GetSubKeyNames(); + foreach (var item in listKey) { - var acadkey = ackey.OpenSubKey($@"{item}\General", true); + var acadKey = ackey.OpenSubKey($@"{item}\General", true); const string name = "ACAD"; - var str = acadkey?.GetValue(name)?.ToString(); + var str = acadKey?.GetValue(name)?.ToString(); if (str != null && !str.ToLower().Contains(path.ToLower())) - { - acadkey?.SetValue(name, $@"{str}{path};"); - } + acadKey?.SetValue(name, $@"{str}{path};"); } } ackey?.Close(); } - - -} \ No newline at end of file +} diff --git a/tests/TestShared/TestExtents.cs b/tests/TestShared/TestExtents.cs index 96c04db04ec8d7e080b1edf6ccd797b69afcc61e..0a8b242e395146b8861fba76ab9f2cca28e0e6fb 100644 --- a/tests/TestShared/TestExtents.cs +++ b/tests/TestShared/TestExtents.cs @@ -1,4 +1,4 @@ -namespace TestShared; +namespace IFoxTest; public class TestExtents { @@ -7,102 +7,95 @@ public void Test_BlockExtents() { using var tr = new DBTrans(); var ent = Env.Editor.GetEntity("pick the entity"); - if (ent.Status != PromptStatus.OK ) - { + if (ent.Status != PromptStatus.OK) return; - } var block = ent.ObjectId.GetObject(); if (block != null && block.Bounds.HasValue) { var extent = block.GeometricExtents; - List pts = [ + List pts = + [ extent.MinPoint, - new Point3d(extent.MinPoint.X,extent.MaxPoint.Y,0), + new(extent.MinPoint.X, extent.MaxPoint.Y, 0), extent.MaxPoint, - new Point3d(extent.MaxPoint.X,extent.MinPoint.Y,0), - + new(extent.MaxPoint.X, extent.MinPoint.Y, 0), ]; - tr.CurrentSpace.AddEntity(pts.CreatePolyline(action: e => e.ColorIndex = 1)); - + tr.CurrentSpace.AddEntity(pts.CreatePolyline(e => e.ColorIndex = 1)); + if (block is BlockReference block1) { var extents = block1.GeometryExtentsBestFit(); - List pts1 = + List pts1 = [ extents.MinPoint, - new Point3d(extents.MinPoint.X, extents.MaxPoint.Y, 0), + new(extents.MinPoint.X, extents.MaxPoint.Y, 0), extents.MaxPoint, - new Point3d(extents.MaxPoint.X, extents.MinPoint.Y, 0), + new(extents.MaxPoint.X, extents.MinPoint.Y, 0), ]; - tr.CurrentSpace.AddEntity(pts.CreatePolyline(action: e => e.ColorIndex = 2)); + tr.CurrentSpace.AddEntity(pts.CreatePolyline(e => e.ColorIndex = 2)); var extents2 = block1.GetBoundingBoxEx(); - tr.CurrentSpace.AddEntity(pts.CreatePolyline(action: e => e.ColorIndex = 3)); - + tr.CurrentSpace.AddEntity(pts.CreatePolyline(e => e.ColorIndex = 3)); + // 此处是计算块定义的包围盒,不是块参照的,所以一般情况下不需要使用。 var ext = new Extents3d(); ext.AddBlockExtents(block1.BlockTableRecord.GetObject()); - tr.CurrentSpace.AddEntity(ext.CreatePolyline(action: e => e.ColorIndex = 4)); + tr.CurrentSpace.AddEntity(ext.CreatePolyline(e => e.ColorIndex = 4)); } - - } } - - [CommandMethod(nameof(Test_entextents))] - public void Test_entextents() + + [CommandMethod(nameof(Test_Extents))] + public void Test_Extents() { using var tr = new DBTrans(); - var a = Env.Editor.GetSelection().Value. - GetEntities(OpenMode.ForWrite); + var a = Env.Editor.GetSelection().Value.GetEntities(OpenMode.ForWrite); foreach (var e in a) { - var b = e.Bounds.HasValue; //获取是否有包围盒 + var b = e.Bounds.HasValue; //获取是否有包围盒 var name = e.ObjectId.ObjectClass.DxfName; - Env.Print($"{name}是否有包围盒-" + b); + ($"{name}是否有包围盒-" + b).Print(); if (b) { - tr.CurrentSpace.AddEntity(e.Bounds!.Value.CreatePolyline(action: e => - { - e.ColorIndex = 4; - e.Closed = true; - })); + tr.CurrentSpace.AddEntity( + e.Bounds!.Value.CreatePolyline(polyline => + { + polyline.ColorIndex = 4; + polyline.Closed = true; + }) + ); var ext = e.GetBoundingBoxEx(); if (ext.HasValue) - { tr.CurrentSpace.AddEntity( - ext.Value.Extents3d.CreatePolyline(action: e => + ext.Value.Extents3d.CreatePolyline(polyline => { - e.ColorIndex = 5; - e.Closed = true; - })); - } - + polyline.ColorIndex = 5; + polyline.Closed = true; + }) + ); + if (e is Curve spline) { var ge = spline.GetGeCurve(); var box = ge.BoundBlock; - List lst = + List lst = [ box.BasePoint, box.BasePoint + box.Direction1, box.BasePoint + box.Direction2, box.BasePoint + box.Direction3, ]; - tr.CurrentSpace.AddEntity(lst.CreatePolyline(action: e => - { - e.ColorIndex = 6; - e.Closed = true; - })); + tr.CurrentSpace.AddEntity( + lst.CreatePolyline(polyline => + { + polyline.ColorIndex = 6; + polyline.Closed = true; + }) + ); } - } - - - - } } -} \ No newline at end of file +} diff --git a/tests/TestShared/TestFileDatabase.cs b/tests/TestShared/TestFileDatabase.cs index e5c58c326c09c5c083598fcbe1995940e2df70c0..33640ca529e2b9523779dd1608344bfc5a7cee53 100644 --- a/tests/TestShared/TestFileDatabase.cs +++ b/tests/TestShared/TestFileDatabase.cs @@ -1,9 +1,11 @@ -namespace Test; +using System.Windows; + +namespace IFoxTest; /************************************************************** -*作者:Leon -*创建时间:2022/2/11 9:55:32 -**************************************************************/ + *作者:Leon + *创建时间:2022/2/11 9:55:32 + **************************************************************/ public class TestFileDatabase { @@ -14,15 +16,15 @@ public void Test_FileDatabaseInit() { var fileName = @"C:\Users\Administrator\Desktop\合并详图测试BUG.dwg"; using DBTrans trans = new(fileName); - trans.ModelSpace.AddEntity(new Line(new(0, 0, 0), new(1000, 1000, 0))); + trans.ModelSpace.AddEntity(new Line(new Point3d(0, 0, 0), new Point3d(1000, 1000, 0))); if (trans.Document is not null && trans.Document.IsActive) - trans.Document.SendStringToExecute("_qsave\n", false, true, true); + trans.Document.SendStringToExecute("_qSave\n", false, true, true); else trans.Database.SaveAs(fileName, (DwgVersion)27); } - catch (System.Exception e) + catch (Exception e) { - System.Windows.MessageBox.Show(e.Message); + MessageBox.Show(e.Message); } } } \ No newline at end of file diff --git a/tests/TestShared/TestHatchinfo.cs b/tests/TestShared/TestHatch.cs similarity index 31% rename from tests/TestShared/TestHatchinfo.cs rename to tests/TestShared/TestHatch.cs index e241dfba01184c80bb1a7470f8e9048f39c92296..85264209913f858dc28d16a813eda7d56478eef6 100644 --- a/tests/TestShared/TestHatchinfo.cs +++ b/tests/TestShared/TestHatch.cs @@ -1,16 +1,16 @@ -namespace Test; +namespace IFoxTest; -public class TestHatchinfo +public class TestHatchInfo { - [CommandMethod(" TestHatchInfo")] - public void TestHatchInfo() + [CommandMethod(nameof(Test_HatchInfo))] + public void Test_HatchInfo() { using var tr = new DBTrans(); - var sf = new SelectionFilter(new TypedValue[] { new TypedValue(0, "*line,circle,arc") }); + var sf = new SelectionFilter([new TypedValue(0, "*line,circle,arc")]); var ids = Env.Editor.SSGet(null, sf).Value?.GetObjectIds(); - if (ids == null || ids.Count() <= 0) return; - var hf = new HatchInfo(ids!, false, null, 1, 0).Mode2UserDefined(); + if (ids == null || !ids.Any()) + return; + var hf = new HatchInfo(ids, false).Mode2UserDefined(); hf.Build(tr.CurrentSpace); } } - diff --git a/tests/TestShared/TestId.cs b/tests/TestShared/TestId.cs index 57f19cf512f635112ceef6637b3c36250ee02df5..4759e87f77627eab44fa2af14d90c684aaf99b76 100644 --- a/tests/TestShared/TestId.cs +++ b/tests/TestShared/TestId.cs @@ -1,6 +1,6 @@ -namespace Test; +namespace IFoxTest; -public class Testid +public class TestId { [CommandMethod(nameof(Test_Id))] public void Test_Id() @@ -11,13 +11,10 @@ public void Test_Id() tr.Dispose(); var res = Env.Editor.GetEntity("\npick ent:"); - if (res.Status == PromptStatus.OK) - { - res.ObjectId.Erase(); - } + if (res.Status == PromptStatus.OK) res.ObjectId.Erase(); // using (var tr = new DBTrans()) // { - // var res = Env.Editor.GetEntity("\npick ent:"); + // var res = Env.Editor.GetEntity("\n pick ent:"); // if(res.Status == PromptStatus.OK) // { // res.ObjectId.Erase(); @@ -29,16 +26,17 @@ public void Test_Id() [CommandMethod(nameof(Test_MyCommand))] public void Test_MyCommand() { - using DBTrans dbtrans = new(Env.Document, true, false); + using DBTrans dbTrans = new(Env.Document); using var trans = Env.Database.TransactionManager.StartTransaction(); var l1 = new Line(new Point3d(0, 0, 0), new Point3d(100, 100, 0)); - var blkred = trans.GetObject(Env.Database.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord; - blkred?.AppendEntity(l1); + var blkRed = trans.GetObject(Env.Database.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord; + blkRed?.AppendEntity(l1); trans.AddNewlyCreatedDBObject(l1, true); trans.Commit(); - // dbtrans.Dispose(); + // dbTrans.Dispose(); } + [CommandMethod(nameof(Test_TextStyle))] public void Test_TextStyle() { @@ -52,8 +50,8 @@ public void Test_TextStyle() tr.TextStyleTable.Add("romas", FontTTF.Romans, 0.8); - - tr.TextStyleTable.Add("daziti", ttr => { + tr.TextStyleTable.Add("daziti", ttr => + { ttr.FileName = "ascii.shx"; ttr.BigFontFileName = "gbcbig.shx"; }); diff --git a/tests/TestShared/TestJig.cs b/tests/TestShared/TestJig.cs index d0076f4fde2dd02dcf19b666e8a7bb79ba8c58b3..634c8b72bfd91e0338c2a5de937b86754d507554 100644 --- a/tests/TestShared/TestJig.cs +++ b/tests/TestShared/TestJig.cs @@ -1,8 +1,9 @@ -namespace Test; - using System.Windows.Forms; +using Application = System.Windows.Forms.Application; + +namespace IFoxTest; -public class Commands_Jig +public class CommandsJig { // 已在数据库的图元如何进入jig [CommandMethod(nameof(Test_Jig33))] @@ -17,8 +18,9 @@ public static void Test_Jig33() return; var oldSp = cir.StartPoint; JigEx? moveJig = null; - moveJig = new JigEx((mousePoint, drawEntitys) => { - moveJig!.SetOptions(oldSp);// 回调过程中也可以修改基点 + moveJig = new JigEx((mousePoint, _) => + { + moveJig!.SetOptions(oldSp); // 回调过程中也可以修改基点 // cir.UpgradeOpen();// 已经提权了,所以这里不需要提权 cir.Move(cir.StartPoint, mousePoint); // cir.DowngradeOpen(); @@ -30,9 +32,7 @@ public static void Test_Jig33() moveJig.SetOptions(cir.GeometricExtents.MinPoint); // 此处详见方法注释 - moveJig.DatabaseEntityDraw(draw => { - draw.RawGeometry.Draw(cir); - }); + moveJig.DatabaseEntityDraw(draw => { draw.RawGeometry.Draw(cir); }); while (true) { @@ -40,6 +40,7 @@ public static void Test_Jig33() if (prDrag.Status == PromptStatus.OK) break; } + moveJig.Dispose(); } @@ -62,7 +63,8 @@ public void Test_Jig44() * 所以需要先声明再传入指针,但是我发现null也可以. */ JigPromptPointOptions? options = null; - using var jig = new JigEx((mousePoint, drawEntitys) => { + using var jig = new JigEx((mousePoint, drawEntitys) => + { var closestPt = pl.GetClosestPointTo(mousePoint, false); // 回调过程中SetOptions会覆盖配置,所以如果想增加关键字或者修改基点, @@ -82,15 +84,15 @@ public void Test_Jig44() }); options = jig.SetOptions(per.PickedPoint); - + // 在这里加入关键字 // 如果没有这个,那么空格只会是 PromptStatus.None 而不是 PromptStatus.Keyword // options.Keywords.Add(" ", " ", "空格结束啊"); // jig.SetSpaceIsKeyword(); - options.Keywords.Add("A","A","A"); + options.Keywords.Add("A", "A", "A"); - bool flag = true; + var flag = true; while (flag) { var pr = Env.Editor.Drag(jig); @@ -99,79 +101,62 @@ public void Test_Jig44() switch (pr.StringResult) { case "A": - tr.Editor?.WriteMessage($"\n 您触发了关键字{pr.StringResult}"); - flag = false; - break; + tr.Editor?.WriteMessage($"\n 您触发了关键字{pr.StringResult}"); + flag = false; + break; case " ": - tr.Editor?.WriteMessage("\n 触发关键字空格"); - flag = false; - break; + tr.Editor?.WriteMessage("\n 触发关键字空格"); + flag = false; + break; } } - else if (pr.Status != PromptStatus.OK)// PromptStatus.None == 右键,空格,回车,都在这里结束 + else if (pr.Status != PromptStatus.OK) // PromptStatus.None == 右键,空格,回车,都在这里结束 { - tr.Editor?.WriteMessage(Environment.NewLine + pr.Status.ToString()); + tr.Editor?.WriteMessage(Environment.NewLine + pr.Status); return; } else + { flag = false; + } } + tr.CurrentSpace.AddEntity(jig.Entities); } [CommandMethod(nameof(Test_MessageFilter))] public void Test_MessageFilter() { - var dm = Acap.DocumentManager; + var dm = Acaop.DocumentManager; var ed = dm.MdiActiveDocument.Editor; // Create and add our message filter MyMessageFilter filter = new(); - System.Windows.Forms.Application.AddMessageFilter(filter); + Application.AddMessageFilter(filter); // Start the loop while (true) { // Check for user input events - System.Windows.Forms.Application.DoEvents(); + Application.DoEvents(); // Check whether the filter has set the flag - if (filter.bCanceled == true) + if (filter.BCanceled) { ed.WriteMessage("\nLoop cancelled."); break; } + ed.WriteMessage($"\nInside while loop...and {filter.Key}"); } + // We're done - remove the message filter - System.Windows.Forms.Application.RemoveMessageFilter(filter); - } - // Our message filter class - public class MyMessageFilter : IMessageFilter - { - public const int WM_KEYDOWN = 0x0100; - public bool bCanceled = false; - public Keys Key { get; private set; } - public bool PreFilterMessage(ref Message m) - { - if (m.Msg == WM_KEYDOWN) - { - // Check for the Escape keypress - Keys kc = (Keys)(int)m.WParam & Keys.KeyCode; - if (m.Msg == WM_KEYDOWN && kc == Keys.Escape) - bCanceled = true; - Key = kc; - // Return true to filter all keypresses - return true; - } - // Return false to let other messages through - return false; - } + Application.RemoveMessageFilter(filter); } [CommandMethod(nameof(Test_QuickText))] - static public void Test_QuickText() + public static void Test_QuickText() { - var dm = Acap.DocumentManager; + var dm = Acaop.DocumentManager; var doc = dm.MdiActiveDocument; var db = doc.Database; var ed = doc.Editor; @@ -205,27 +190,46 @@ static public void Test_QuickText() if (state != PromptStatus.OK && state != PromptStatus.Keyword) return; } + tr.Commit(); } + // Our message filter class + private class MyMessageFilter : IMessageFilter + { + private const int WmKeydown = 0x0100; + public bool BCanceled; + public Keys Key { get; private set; } + + public bool PreFilterMessage(ref Message m) + { + if (m.Msg == WmKeydown) + { + // Check for the Escape keypress + var kc = (Keys)(int)m.WParam & Keys.KeyCode; + if (m.Msg == WmKeydown && kc == Keys.Escape) + BCanceled = true; + Key = kc; + // Return true to filter all keypresses + return true; + } + + // Return false to let other messages through + return false; + } + } + #if true - class TextPlacementJig : EntityJig + private class TextPlacementJig(Transaction tr, Database db, Entity ent) : EntityJig(ent) { // Declare some internal state - readonly Database _db; - readonly Transaction _tr; + private readonly Database _db = db; + private readonly Transaction _tr = tr; + private double _angle, _txtSize = 1; - Point3d _position; - double _angle, _txtSize; + private Point3d _position; // Constructor - public TextPlacementJig(Transaction tr, Database db, Entity ent) : base(ent) - { - _db = db; - _tr = tr; - _angle = 0; - _txtSize = 1; - } protected override SamplerStatus Sampler(JigPrompts jp) { @@ -233,31 +237,30 @@ protected override SamplerStatus Sampler(JigPrompts jp) JigPromptPointOptions po = new("\nPosition of text") { UserInputControls = - UserInputControls.Accept3dCoordinates | - UserInputControls.NullResponseAccepted | - UserInputControls.NoNegativeResponseAccepted | - UserInputControls.GovernedByOrthoMode + UserInputControls.Accept3dCoordinates | + UserInputControls.NullResponseAccepted | + UserInputControls.NoNegativeResponseAccepted | + UserInputControls.GovernedByOrthoMode }; po.SetMessageAndKeywords( - "\nSpecify position of text or " + - "[Bold/Italic/LArger/Smaller/" + - "ROtate90/LEft/Middle/RIght]: ", - "Bold Italic LArger Smaller " + - "ROtate90 LEft Middle RIght" + "\nSpecify position of text or " + + "[Bold/Italic/LArger/Smaller/" + + "ROtate90/LEft/Middle/RIght]: ", + "Bold Italic LArger Smaller " + + "ROtate90 LEft Middle RIght" ); - PromptPointResult ppr = jp.AcquirePoint(po); + var ppr = jp.AcquirePoint(po); if (ppr.Status == PromptStatus.Keyword) { switch (ppr.StringResult) { case "Bold": - break; case "Italic": - break; + break; case "LArger": { - // Multiple the text size by two + // Multiply the text size by two _txtSize *= 2; break; } @@ -270,24 +273,21 @@ protected override SamplerStatus Sampler(JigPrompts jp) case "ROtate90": { // To rotate clockwise we subtract 90 degrees and - // then normalise the angle between 0 and 360 + // then normalize the angle between 0 and 360 _angle -= Math.PI / 2; - while (_angle < Math.PI * 2) - { - _angle += Math.PI * 2; - } + while (_angle < Math.PI * 2) _angle += Math.PI * 2; break; } case "LEft": - break; case "RIght": - break; case "Middle": - break; + break; } + return SamplerStatus.OK; } - else if (ppr.Status == PromptStatus.OK) + + if (ppr.Status == PromptStatus.OK) { // Check if it has changed or not (reduces flicker) if (_position.DistanceTo(ppr.Value) < Tolerance.Global.EqualPoint) @@ -296,13 +296,14 @@ protected override SamplerStatus Sampler(JigPrompts jp) _position = ppr.Value; return SamplerStatus.OK; } + return SamplerStatus.Cancel; } protected override bool Update() { // Set properties on our text object - DBText txt = (DBText)Entity; + var txt = (DBText)Entity; txt.Position = _position; txt.Height = _txtSize; txt.Rotation = _angle; diff --git a/tests/TestShared/TestJigExTransient.cs b/tests/TestShared/TestJigExTransient.cs index 52eb3f4be1f074790dfdaf2fea4e84c8a5c3dfb7..040f2322e99cda9ebe34f0d18f73c566a9514015 100644 --- a/tests/TestShared/TestJigExTransient.cs +++ b/tests/TestShared/TestJigExTransient.cs @@ -1,7 +1,6 @@ - -namespace Test; +namespace IFoxTest; -public partial class Test +public class TestJigEx { [CommandMethod(nameof(Test_JigExTransient))] public void Test_JigExTransient() @@ -20,7 +19,7 @@ public void Test_JigExTransient() // 将c1以默认模式,c2以亮显模式加到瞬态容器,即在图纸上显示 jet.Add(c1); - jet.Add(c2, Acgi.TransientDrawingMode.Highlight); + jet.Add(c2, TransientDrawingMode.Highlight); // 再取一点,再建一个圆c3 var r2 = Env.Editor.GetPoint("\n选择下一点"); @@ -55,10 +54,10 @@ public static void Test_JigExTransentDim() { PromptPointOptions ppo = new("") { - AppendKeywordsToMessage = false, + AppendKeywordsToMessage = false }; - List pts = new(); - for (int i = 0; i < 3; i++) + List pts = []; + for (var i = 0; i < 3; i++) { ppo.Message = $"\n选择标注点{i + 1}"; var ppr = Env.Editor.GetPoint(ppo); @@ -70,7 +69,7 @@ public static void Test_JigExTransentDim() using DBTrans tr = new(); using RotatedDimension dimension = new(); - dimension.SetDatabaseDefaults();// cad16没有这个不显示 + dimension.SetDatabaseDefaults(); // cad16没有这个不显示 dimension.Rotation = 0; dimension.XLine1Point = pts[0]; dimension.XLine2Point = pts[1]; @@ -85,4 +84,4 @@ public static void Test_JigExTransentDim() Env.Editor.GetPoint("\n此拾取无意义,仅为了暂停查看"); tr.CurrentSpace.AddEntity(dimension); } -} +} \ No newline at end of file diff --git a/tests/TestShared/TestJson.cs b/tests/TestShared/TestJson.cs index 281e1b1bce4ee8e0a21e9aa11696d9f83b7ae2fd..015c49eaf237a09d48228c4e03d806e1673a5d15 100644 --- a/tests/TestShared/TestJson.cs +++ b/tests/TestShared/TestJson.cs @@ -1,4 +1,6 @@ -namespace TestShared; +using System.Text.Json; + +namespace IFoxTest; public class TestJson { @@ -9,19 +11,12 @@ public class TestJson * * */ - [CommandMethod(nameof(JavaScriptSerializer))] - public void JavaScriptSerializer() + [CommandMethod(nameof(Test_JavaScriptSerializer))] + public void Test_JavaScriptSerializer() { - List RegisteredUsers = []; - RegisteredUsers.Add(0); - RegisteredUsers.Add(1); - RegisteredUsers.Add(2); - RegisteredUsers.Add(3); - - var serializedResult = System.Text.Json.JsonSerializer.Serialize(RegisteredUsers); - var deserializedResult = System.Text.Json.JsonSerializer.Deserialize>(serializedResult); + List registeredUsers = [0, 1, 2, 3]; - - + var serializedResult = JsonSerializer.Serialize(registeredUsers); + var deserializedResult = JsonSerializer.Deserialize>(serializedResult); } -} \ No newline at end of file +} diff --git a/tests/TestShared/TestLayer.cs b/tests/TestShared/TestLayer.cs index 62df5e1bf2723132947d5374c1f7b6d20389fbce..55b7dc5db82e7eff64df87e69fb1901634192663 100644 --- a/tests/TestShared/TestLayer.cs +++ b/tests/TestShared/TestLayer.cs @@ -1,4 +1,4 @@ -namespace Test; +namespace IFoxTest; public class TestLayer { @@ -7,18 +7,25 @@ public void Test_LayerAdd0() { using DBTrans tr = new(); tr.LayerTable.Add("1"); - tr.LayerTable.Add("2", lt => { - lt.Color = Color.FromColorIndex(ColorMethod.ByColor, 1); - lt.LineWeight = LineWeight.LineWeight030; - }); + tr.LayerTable.Add( + "2", + lt => + { + lt.Color = Color.FromColorIndex(ColorMethod.ByColor, 1); + lt.LineWeight = LineWeight.LineWeight030; + } + ); tr.LayerTable.Remove("3"); tr.LayerTable.Delete("0"); - tr.LayerTable.Change("4", lt => { - lt.Color = Color.FromColorIndex(ColorMethod.ByColor, 2); - }); + tr.LayerTable.Change( + "4", + lt => + { + lt.Color = Color.FromColorIndex(ColorMethod.ByColor, 2); + } + ); } - // 添加图层 [CommandMethod(nameof(Test_LayerAdd1))] public void Test_LayerAdd1() @@ -35,32 +42,31 @@ public void Test_LayerAdd2() tr.LayerTable.Add("test2", 2); // tr.LayerTable["3"] = new LayerTableRecord(); } + // 删除图层 [CommandMethod(nameof(Test_LayerDel))] public void Test_LayerDel() { using DBTrans tr = new(); - tr.LayerTable.Remove("0"); // 删除图层 0 - tr.LayerTable.Remove("Defpoints");// 删除图层 Defpoints - tr.LayerTable.Remove("1"); // 删除不存在的图层 1 - tr.LayerTable.Remove("2"); // 删除有图元的图层 2 - tr.LayerTable.Remove("3"); // 删除图层 3 // 删除图层 3 + tr.LayerTable.Remove("0"); // 删除图层 0 + tr.LayerTable.Remove("Defpoints"); // 删除图层 Defpoints + tr.LayerTable.Remove("1"); // 删除不存在的图层 1 + tr.LayerTable.Remove("2"); // 删除有图元的图层 2 + tr.LayerTable.Remove("3"); // 删除图层 3 // 删除图层 3 tr.LayerTable.Remove("2"); // 测试是否能强制删除 } - + [CommandMethod(nameof(Test_PrintLayerName))] public void Test_PrintLayerName() { using DBTrans tr = new(); foreach (var layerRecord in tr.LayerTable.GetRecords()) - { Env.Printl(layerRecord.Name); - } foreach (var layerRecord in tr.LayerTable.GetRecords()) { Env.Printl(layerRecord.Name); break; } } -} \ No newline at end of file +} diff --git a/tests/TestShared/TestLisp.cs b/tests/TestShared/TestLisp.cs index 4bd7b193b39beb6d5b61f31a5d4b7945ee7551f6..0dfb5224a2beca4b5db292f9d833e0a8ece25286 100644 --- a/tests/TestShared/TestLisp.cs +++ b/tests/TestShared/TestLisp.cs @@ -1,10 +1,10 @@ -namespace Test; +namespace IFoxTest; public class TestLisp { // 定义lisp函数 - [LispFunction(nameof(LispTest_RunLisp))] - public static object LispTest_RunLisp(ResultBuffer rb) + [LispFunction(nameof(Test_RunLisp))] + public static object Test_RunLisp(ResultBuffer rb) { CmdTest_RunLisp(); return null!; @@ -46,7 +46,7 @@ public static object LispTest_RunLisp(ResultBuffer rb) [CommandMethod("CmdTest_RunLisp17", CommandFlags.Interruptible)] // 命令不会被记录在命令历史记录 [CommandMethod("CmdTest_RunLisp18", CommandFlags.NoHistory)] -#if (!zcad) +#if !zcad // 命令不会被 UNDO取消 [CommandMethod("CmdTest_RunLisp19", CommandFlags.NoUndoMarker)] // 不能在参照块中使用命令 @@ -57,17 +57,16 @@ public static object LispTest_RunLisp(ResultBuffer rb) // acad09增,会被动作录制器捕捉 [CommandMethod("CmdTest_RunLisp22", CommandFlags.ActionMacro)] - // 推断约束时不能使用命令 [CommandMethod("CmdTest_RunLisp23", CommandFlags.NoInferConstraint)] // 命令允许在选择图元时临时显示动态尺寸 [CommandMethod("CmdTest_RunLisp24", CommandFlags.TempShowDynDimension)] #endif - public static void CmdTest_RunLisp() + private static void CmdTest_RunLisp() { // 测试方法1: (command "CmdTest_RunLisp1") // 测试方式2: (LispTest_RunLisp) - var dm = Acap.DocumentManager; + var dm = Acaop.DocumentManager; var doc = dm.MdiActiveDocument; var ed = doc.Editor; @@ -77,6 +76,7 @@ public static void CmdTest_RunLisp() sb.Append((byte)item); sb.Append(','); } + sb.Remove(sb.Length - 1, 1); var option = new PromptIntegerOptions($"\n输入RunLispFlag枚举值:[{sb}]"); var ppr = ed.GetInteger(option); @@ -88,10 +88,8 @@ public static void CmdTest_RunLisp() if (flag == EditorEx.RunLispFlag.AdsQueueexpr) { // 同步 - Env.Editor.RunLisp("(setq a 10)(princ)", - EditorEx.RunLispFlag.AdsQueueexpr); - Env.Editor.RunLisp("(princ a)", - EditorEx.RunLispFlag.AdsQueueexpr);// 成功输出 + Env.Editor.RunLisp("(setq a 10)(princ)"); + Env.Editor.RunLisp("(princ a)"); // 成功输出 } else if (flag == EditorEx.RunLispFlag.AcedEvaluateLisp) { @@ -115,8 +113,7 @@ public static void CmdTest_RunLisp() var str = "(setq c 40)(princ)"; Env.Editor.RunLisp(str, EditorEx.RunLispFlag.SendStringToExecute); // 异步,后发送 - Env.Editor.RunLisp("(princ c)", - EditorEx.RunLispFlag.AdsQueueexpr); // 同步,先发送了,输出是null + Env.Editor.RunLisp("(princ c)"); // 同步,先发送了,输出是null } } } \ No newline at end of file diff --git a/tests/TestShared/TestLoop.cs b/tests/TestShared/TestLoop.cs index 438253ae5a8b7e03c3a0660e9d31409db966afb8..b82e073705dec27e62967dadba10379c120233c7 100644 --- a/tests/TestShared/TestLoop.cs +++ b/tests/TestShared/TestLoop.cs @@ -1,4 +1,5 @@ -namespace Test; +namespace IFoxTest; + public class TestLoop { [CommandMethod(nameof(Test_LoopList))] @@ -14,12 +15,12 @@ public void Test_LoopList() 5 }; - Env.Print(loop); + loop.Print(); loop.SetFirst(loop.Last!); - Env.Print(loop); - Env.Print(loop.Min()); + loop.Print(); + loop.Min().Print(); loop.SetFirst(new LoopListNode(loop.Min(), loop)); - Env.Print(loop); + loop.Print(); } } \ No newline at end of file diff --git a/tests/TestShared/TestMarshal.cs b/tests/TestShared/TestMarshal.cs index c2c15f69be6162ed260363e85ab92522cbb845cf..22fa99dfbe46f5653241e870e254f218b64d11a5 100644 --- a/tests/TestShared/TestMarshal.cs +++ b/tests/TestShared/TestMarshal.cs @@ -1,12 +1,12 @@ -using System.Diagnostics; +using System.Diagnostics; using static Fs.Fox.Basal.WindowsAPI; -namespace TestShared; +namespace IFoxTest; public class TestMarshal { - [CommandMethod(nameof(TestToBytes))] - public void TestToBytes() + [CommandMethod(nameof(Test_ToBytes))] + public void Test_ToBytes() { var ptA = new Point3d(123, 456, 789); var bytes = StructToBytes(ptA); @@ -23,28 +23,32 @@ public void Test_ChangeLinePoint() using DBTrans tr = new(); - prs.Value.GetObjectIds().ForEach(id => { - var line = id.GetObject(); - if (line == null) - return; - using (line.ForWrite()) - unsafe + prs.Value.GetObjectIds() + .ForEach(id => + { + var line = id.GetObject(); + if (line == null) + return; + using (line.ForWrite()) { - // 不允许直接 &这个表达式进行取址(因为它是属性,不是字段) - // 实际上就是默认拷贝一份副本出来 - var p1 = line.StartPoint; - ((Point3D*)&p1)->X = 0; - ((Point3D*)&p1)->Y = 0; - ((Point3D*)&p1)->Z = 0; - line.StartPoint = p1;// 又放回去,节省了一个变量 - - var p2 = line.EndPoint; - ((Point3D*)&p2)->X = 100; - ((Point3D*)&p2)->Y = 100; - ((Point3D*)&p2)->Z = 0; - line.EndPoint = p2; + unsafe + { + // 不允许直接 &这个表达式进行取址(因为它是属性,不是字段) + // 实际上就是默认拷贝一份副本出来 + var p1 = line.StartPoint; + ((Point3D*)&p1)->X = 0; + ((Point3D*)&p1)->Y = 0; + ((Point3D*)&p1)->Z = 0; + line.StartPoint = p1; // 又放回去,节省了一个变量 + + var p2 = line.EndPoint; + ((Point3D*)&p2)->X = 100; + ((Point3D*)&p2)->Y = 100; + ((Point3D*)&p2)->Z = 0; + line.EndPoint = p2; + } } - }); + }); } [CommandMethod(nameof(Test_ImplicitPoint3D))] @@ -63,28 +67,29 @@ public void Test_ImplicitPoint3D() var pt2 = Point3D.Create(new IntPtr(&pt1)); DebugEx.Printl("pt1地址::" + (int)&pt1); DebugEx.Printl("pt2地址::" + (int)&pt2); - Debug.Assert(&pt1 == &pt2);//不相等,是申请了新内存 + Debug.Assert(&pt1 == &pt2); //不相等,是申请了新内存 } } [CommandMethod(nameof(Test_Marshal))] public void Test_Marshal() { - var dm = Acap.DocumentManager; + var dm = Acaop.DocumentManager; var doc = dm.MdiActiveDocument; var ed = doc.Editor; // 0x01 如何修改Point3d内容? Point3d pt = new(100, 50, 0); - ed.WriteMessage("\n原始:" + pt.ToString()); + ed.WriteMessage("\n原始:" + pt); // 0x02 最佳方法: // 将Point3d内存转为Point3D,以此避开get保护,实现修改内部值 // 为了避免在安全类型中转换,多了栈帧(无法内联),直接用指针处理 unsafe { - ((Point3D*)&pt)->X = 12345;//必须强转成这个指针类型,不然它为(Point3d*) + ((Point3D*)&pt)->X = 12345; //必须强转成这个指针类型,不然它为(Point3d*) } - ed.WriteMessage("\n指针法:" + pt.ToString()); + + ed.WriteMessage("\n指针法:" + pt); // 0x03 此方法仍然需要不安全操作,而且多了几个函数调用... unsafe @@ -94,17 +99,21 @@ public void Test_Marshal() result2.X = 220; result2.ToPtr(p); } + "封送法:".Print(); pt.Print(); // 拷贝到数组,还原指针到结构,最后将内存空间转换为目标结构体 // 浪费内存,这不闹嘛~ - int typeSize = Marshal.SizeOf(pt); - byte[] bytes = new byte[typeSize]; - IntPtr structPtr = Marshal.AllocHGlobal(Marshal.SizeOf(pt)); + var typeSize = Marshal.SizeOf(pt); + var bytes = new byte[typeSize]; + var structPtr = Marshal.AllocHGlobal(Marshal.SizeOf(pt)); Marshal.StructureToPtr(pt, structPtr, true); Marshal.Copy(structPtr, bytes, 0, typeSize); - var result = (Point3d)(Marshal.PtrToStructure(structPtr, typeof(Point3d)) ?? throw new InvalidOperationException()); + var result = (Point3d)( + Marshal.PtrToStructure(structPtr, typeof(Point3d)) + ?? throw new InvalidOperationException() + ); "内存拷贝:".Print(); result.Print(); @@ -120,4 +129,4 @@ public void Test_Marshal() // 释放内存 Marshal.FreeHGlobal(structPtr); } -} \ No newline at end of file +} diff --git a/tests/TestShared/TestMirrorFile.cs b/tests/TestShared/TestMirrorFile.cs index 76ac0337f5b8d657fbe37014ed74e07d24699c46..579168dc8bad70b2b7fa4de0a5640609d978c432 100644 --- a/tests/TestShared/TestMirrorFile.cs +++ b/tests/TestShared/TestMirrorFile.cs @@ -1,73 +1,87 @@ -namespace Test; +namespace IFoxTest; public class MirrorFile { - const string file = "D:/JX.dwg"; - const string fileSave = "D:/JX222.dwg"; + private const string File = "D:/JX.dwg"; + private const string FileSave = "D:/JX222.dwg"; /// - /// 测试:后台打开图纸,镜像文字是否存在文字偏移 - /// 答案:不存在 + /// 测试:后台打开图纸,镜像文字是否存在文字偏移 + /// 答案:不存在 /// - [CommandMethod(nameof(CmdTest_MirrorFile))] - public static void CmdTest_MirrorFile() + [CommandMethod(nameof(Test_MirrorFile))] + public static void Test_MirrorFile() { var yaxis = new Point3d(0, 1, 0); - using DBTrans tr = new(file, fileOpenMode: FileOpenMode.OpenForReadAndReadShare); - tr.BlockTable.Change(tr.ModelSpace.ObjectId, modelSpace => { - modelSpace.ForEach(entId => { - var dbText = tr.GetObject(entId, OpenMode.ForRead)!; - if (dbText is null) - return; + using DBTrans tr = new(File, fileOpenMode: FileOpenMode.OpenForReadAndReadShare); + tr.BlockTable.Change( + tr.ModelSpace.ObjectId, + modelSpace => + { + modelSpace.ForEach(entId => + { + var dbText = tr.GetObject(entId); + if (dbText is null) + return; - dbText.UpgradeOpen(); - var pos = dbText.Position; - // text.Move(pos, Point3d.Origin); - // Y轴 - dbText.Mirror(Point3d.Origin, yaxis); - // text.Move(Point3d.Origin, pos); - dbText.DowngradeOpen(); - }); - }); - var ver = (DwgVersion)27;/*AC1021 AutoCAD 2007/2008/2009.*/ - tr.Database.SaveAs(fileSave, ver); + dbText.UpgradeOpen(); + var pos = dbText.Position; + // text.Move(pos, Point3d.Origin); + // Y轴 + dbText.Mirror(Point3d.Origin, yaxis); + // text.Move(Point3d.Origin, pos); + dbText.DowngradeOpen(); + }); + } + ); + var ver = (DwgVersion)27; /*AC1021 AutoCAD 2007/2008/2009.*/ + tr.Database.SaveAs(FileSave, ver); } /// - /// 测试:后台设置 dbText.IsMirroredInX 属性会令文字偏移 - /// 答案:存在,并提出解决方案 + /// 测试:后台设置 dbText.IsMirroredInX 属性会令文字偏移 + /// 答案:存在,并提出解决方案 /// [CommandMethod(nameof(CmdTest_MirrorFile2))] public static void CmdTest_MirrorFile2() { - using DBTrans tr = new(file); + using DBTrans tr = new(File); - tr.Task(() => { + tr.Task(() => + { var yaxis = new Point3d(0, 1, 0); - tr.BlockTable.Change(tr.ModelSpace.ObjectId, modelSpace => { - modelSpace.ForEach(entId => { - var entity = tr.GetObject(entId, OpenMode.ForWrite)!; - if (entity is DBText dbText) + tr.BlockTable.Change( + tr.ModelSpace.ObjectId, + modelSpace => + { + modelSpace.ForEach(entId => { - dbText.Mirror(Point3d.Origin, yaxis); - dbText.IsMirroredInX = true; // 这句将导致文字偏移 + var entity = tr.GetObject(entId, OpenMode.ForWrite)!; + if (entity is DBText dbText) + { + dbText.Mirror(Point3d.Origin, yaxis); + dbText.IsMirroredInX = true; // 这句将导致文字偏移 - // 指定文字的垂直对齐方式 - if (dbText.VerticalMode == TextVerticalMode.TextBase) - dbText.VerticalMode = TextVerticalMode.TextBottom; + // 指定文字的垂直对齐方式 + if (dbText.VerticalMode == TextVerticalMode.TextBase) + dbText.VerticalMode = TextVerticalMode.TextBottom; - // 指定文字的水平对齐方式 - dbText.HorizontalMode = dbText.HorizontalMode switch - { - TextHorizontalMode.TextLeft => TextHorizontalMode.TextRight, - TextHorizontalMode.TextRight => TextHorizontalMode.TextLeft, - _ => dbText.HorizontalMode - }; - dbText.AdjustAlignment(tr.Database); - } - }); - }); + // 指定文字的水平对齐方式 + dbText.HorizontalMode = dbText.HorizontalMode switch + { + TextHorizontalMode.TextLeft => TextHorizontalMode.TextRight, + TextHorizontalMode.TextRight => TextHorizontalMode.TextLeft, + _ => dbText.HorizontalMode, + }; + dbText.AdjustAlignment(tr.Database); + } + }); + } + ); }); - tr.Database.SaveAs(fileSave, (DwgVersion)27 /*AC1021 AutoCAD 2007/2008/2009.*/); + tr.Database.SaveAs( + FileSave, + (DwgVersion)27 /*AC1021 AutoCAD 2007/2008/2009.*/ + ); } -} \ No newline at end of file +} diff --git a/tests/TestShared/TestPoint.cs b/tests/TestShared/TestPoint.cs index b69afeaec8a2e1a781ed669b371fee360d94c7e9..b13505439e2892bc9ccd6e3ec9c6ea5607df15b8 100644 --- a/tests/TestShared/TestPoint.cs +++ b/tests/TestShared/TestPoint.cs @@ -1,4 +1,6 @@ -namespace Test; +// ReSharper disable ReturnValueOfPureMethodIsNotUsed +namespace IFoxTest; + public class TestPoint { #if false @@ -22,76 +24,62 @@ public void Test_Endtoend() { var pts = new Point2dCollection { - new(0, 0), - new(0, 1), - new(1, 1), - new(1, 0) + new Point2d(0, 0), + new Point2d(0, 1), + new Point2d(1, 1), + new Point2d(1, 0), }; - - foreach (Point2d pt in pts) - { + foreach (var pt in pts) Env.Printl($"X={pt.X},Y={pt.Y}"); - } pts.End2End(); Env.Printl("-------"); - foreach (Point2d pt in pts) - { + foreach (var pt in pts) Env.Printl($"X={pt.X},Y={pt.Y}"); - } Env.Printl("--------"); var ptss = new Point3dCollection { - new(0, 0,0), - new(0, 1,0), - new(1, 1,0), - new(1, 0,0) + new Point3d(0, 0, 0), + new Point3d(0, 1, 0), + new Point3d(1, 1, 0), + new Point3d(1, 0, 0), }; - + foreach (Point3d pt in ptss) - { Env.Printl($"X={pt.X},Y={pt.Y},Z={pt.Z}"); - } ptss.End2End(); Env.Printl("-------"); foreach (Point3d pt in ptss) - { Env.Printl($"X={pt.X},Y={pt.Y},Z={pt.Z}"); - } - } - + /// - /// 红黑树排序点集 + /// 红黑树排序点集 /// [CommandMethod(nameof(Test_PtSortedSet))] public void Test_PtSortedSet() { var ss1 = new SortedSet { - new Point2d(1, 1), - new Point2d(4.6, 2), - new Point2d(8, 3), - new Point2d(4, 3), - new Point2d(5, 40), - new Point2d(6, 5), - new Point2d(1, 6), - new Point2d(7, 6), - new Point2d(9, 6) + new(1, 1), + new(4.6, 2), + new(8, 3), + new(4, 3), + new(5, 40), + new(6, 5), + new(1, 6), + new(7, 6), + new(9, 6), }; /*判断区间,超过就中断*/ foreach (var item in ss1) - { - if (item.X > 3 && item.X < 7) + if (item.X is > 3 and < 7) DebugEx.Printl(item); else if (item.X >= 7) break; - } } - - [CommandMethod(nameof(Test_PtGethash))] public void Test_PtGethash() { @@ -100,52 +88,57 @@ public void Test_PtGethash() // Tools.TestTimes2(1_000_000, "新语法", () => { // pt.GetHashString2(); // }); - Tools.TestTimes2(1_000_000, "旧语法", () => { - pt.GetHashString(); - }); + Tools.TestTimes2( + 1_000_000, + "旧语法", + () => + { + pt.GetHashString(); + } + ); } [CommandMethod(nameof(Test_Point3dHash))] public void Test_Point3dHash() { - Env.Print($"4位小数的hash:{new Point3d(0.0_001, 0.0_002, 0.0).GetHashCode()}"); - Env.Print($"5位小数的hash:{new Point3d(0.00_001, 0.00_002, 0.0).GetHashCode()}"); - Env.Print($"6位小数的hash:{new Point3d(0.000_001, 0.000_002, 0.0).GetHashCode()}"); - Env.Print($"7位小数的hash:{new Point3d(0.000_0_001, 0.000_0_002, 0.0).GetHashCode()}"); - Env.Print($"8位小数的hash:{new Point3d(0.000_00_001, 0.000_00_002, 0.0).GetHashCode()}"); - Env.Print($"9位小数的hash:{new Point3d(0.000_000_001, 0.000_000_002, 0.0).GetHashCode()}"); - Env.Print($"10位小数的hash:{new Point3d(0.000_000_0001, 0.000_000_0002, 0.0).GetHashCode()}"); - Env.Print($"10位小数的hash:{new Point3d(0.000_000_0001, 0.000_000_0001, 0.0).GetHashCode()}"); + $"4位小数的hash:{new Point3d(0.0_001, 0.0_002, 0.0).GetHashCode()}".Print(); + $"5位小数的hash:{new Point3d(0.00_001, 0.00_002, 0.0).GetHashCode()}".Print(); + $"6位小数的hash:{new Point3d(0.000_001, 0.000_002, 0.0).GetHashCode()}".Print(); + $"7位小数的hash:{new Point3d(0.000_0_001, 0.000_0_002, 0.0).GetHashCode()}".Print(); + $"8位小数的hash:{new Point3d(0.000_00_001, 0.000_00_002, 0.0).GetHashCode()}".Print(); + $"9位小数的hash:{new Point3d(0.000_000_001, 0.000_000_002, 0.0).GetHashCode()}".Print(); + $"10位小数的hash:{new Point3d(0.000_000_0001, 0.000_000_0002, 0.0).GetHashCode()}".Print(); + $"10位小数的hash:{new Point3d(0.000_000_0001, 0.000_000_0001, 0.0).GetHashCode()}".Print(); - Env.Print($"11位小数的hash:{new Point3d(0.000_000_000_01, 0.000_000_000_02, 0.0).GetHashCode()}"); - Env.Print($"11位小数的hash:{new Point3d(0.000_000_000_01, 0.000_000_000_01, 0.0).GetHashCode()}"); + $"11位小数的hash:{new Point3d(0.000_000_000_01, 0.000_000_000_02, 0.0).GetHashCode()}".Print(); + $"11位小数的hash:{new Point3d(0.000_000_000_01, 0.000_000_000_01, 0.0).GetHashCode()}".Print(); - Env.Print($"12位小数的hash:{new Point3d(0.000_000_000_001, 0.000_000_000_002, 0.0).GetHashCode()}"); - Env.Print($"12位小数的hash:{new Point3d(0.000_000_000_001, 0.000_000_000_001, 0.0).GetHashCode()}"); + $"12位小数的hash:{new Point3d(0.000_000_000_001, 0.000_000_000_002, 0.0).GetHashCode()}".Print(); + $"12位小数的hash:{new Point3d(0.000_000_000_001, 0.000_000_000_001, 0.0).GetHashCode()}".Print(); - Env.Print($"13位小数的hash:{new Point3d(0.000_000_000_0001, 0.000_000_000_0002, 0.0).GetHashCode()}"); - Env.Print($"13位小数的hash:{new Point3d(0.000_000_000_0001, 0.000_000_000_0001, 0.0).GetHashCode()}"); + $"13位小数的hash:{new Point3d(0.000_000_000_0001, 0.000_000_000_0002, 0.0).GetHashCode()}".Print(); + $"13位小数的hash:{new Point3d(0.000_000_000_0001, 0.000_000_000_0001, 0.0).GetHashCode()}".Print(); - Env.Print($"14位小数的hash:{new Point3d(0.000_000_000_000_01, 0.000_000_000_000_02, 0.0).GetHashCode()}"); - Env.Print($"14位小数的hash:{new Point3d(0.000_000_000_000_01, 0.000_000_000_000_01, 0.0).GetHashCode()}"); + $"14位小数的hash:{new Point3d(0.000_000_000_000_01, 0.000_000_000_000_02, 0.0).GetHashCode()}".Print(); + $"14位小数的hash:{new Point3d(0.000_000_000_000_01, 0.000_000_000_000_01, 0.0).GetHashCode()}".Print(); - Env.Print($"15位小数的hash:{new Point3d(0.000_000_000_000_001, 0.000_000_000_000_002, 0.0).GetHashCode()}"); - Env.Print($"15位小数的hash:{new Point3d(0.000_000_000_000_001, 0.000_000_000_000_001, 0.0).GetHashCode()}"); + $"15位小数的hash:{new Point3d(0.000_000_000_000_001, 0.000_000_000_000_002, 0.0).GetHashCode()}".Print(); + $"15位小数的hash:{new Point3d(0.000_000_000_000_001, 0.000_000_000_000_001, 0.0).GetHashCode()}".Print(); - Env.Print($"16位小数的hash:{new Point3d(0.000_000_000_000_000_1, 0.000_000_000_000_000_2, 0.0).GetHashCode()}"); - Env.Print($"16位小数的hash:{new Point3d(0.000_000_000_000_000_1, 0.000_000_000_000_000_1, 0.0).GetHashCode()}"); + $"16位小数的hash:{new Point3d(0.000_000_000_000_000_1, 0.000_000_000_000_000_2, 0.0).GetHashCode()}".Print(); + $"16位小数的hash:{new Point3d(0.000_000_000_000_000_1, 0.000_000_000_000_000_1, 0.0).GetHashCode()}".Print(); - Env.Print($"17位小数的hash:{new Point3d(0.000_000_000_000_000_01, 0.000_000_000_000_000_02, 0.0).GetHashCode()}"); - Env.Print($"17位小数的hash:{new Point3d(0.000_000_000_000_000_01, 0.000_000_000_000_000_01, 0.0).GetHashCode()}"); + $"17位小数的hash:{new Point3d(0.000_000_000_000_000_01, 0.000_000_000_000_000_02, 0.0).GetHashCode()}".Print(); + $"17位小数的hash:{new Point3d(0.000_000_000_000_000_01, 0.000_000_000_000_000_01, 0.0).GetHashCode()}".Print(); - Env.Print($"18位小数的hash:{new Point3d(0.000_000_000_000_000_001, 0.000_000_000_000_000_002, 0.0).GetHashCode()}"); - Env.Print($"18位小数的hash:{new Point3d(0.000_000_000_000_000_001, 0.000_000_000_000_000_001, 0.0).GetHashCode()}"); + $"18位小数的hash:{new Point3d(0.000_000_000_000_000_001, 0.000_000_000_000_000_002, 0.0).GetHashCode()}".Print(); + $"18位小数的hash:{new Point3d(0.000_000_000_000_000_001, 0.000_000_000_000_000_001, 0.0).GetHashCode()}".Print(); - Env.Print($"19位小数的hash:{new Point3d(0.000_000_000_000_000_000_1, 0.000_000_000_000_000_000_2, 0.0).GetHashCode()}"); - Env.Print($"19位小数的hash:{new Point3d(0.000_000_000_000_000_000_1, 0.000_000_000_000_000_000_1, 0.0).GetHashCode()}"); + $"19位小数的hash:{new Point3d(0.000_000_000_000_000_000_1, 0.000_000_000_000_000_000_2, 0.0).GetHashCode()}".Print(); + $"19位小数的hash:{new Point3d(0.000_000_000_000_000_000_1, 0.000_000_000_000_000_000_1, 0.0).GetHashCode()}".Print(); - Env.Print($"20位小数的hash:{new Point3d(0.000_000_000_000_000_000_01, 0.000_000_000_000_000_000_02, 0.0).GetHashCode()}"); - Env.Print($"20位小数的hash:{new Point3d(0.000_000_000_000_000_000_01, 0.000_000_000_000_000_000_01, 0.0).GetHashCode()}"); + $"20位小数的hash:{new Point3d(0.000_000_000_000_000_000_01, 0.000_000_000_000_000_000_02, 0.0).GetHashCode()}".Print(); + $"20位小数的hash:{new Point3d(0.000_000_000_000_000_000_01, 0.000_000_000_000_000_000_01, 0.0).GetHashCode()}".Print(); } [CommandMethod(nameof(Test_ListEqualspeed))] @@ -154,17 +147,66 @@ public void Test_ListEqualspeed() var lst1 = new List { 1, 2, 3, 4 }; var lst2 = new List { 1, 2, 3, 4 }; lst1.SequenceEqual(null!); - Tools.TestTimes2(1000000, "eqaulspeed:", () => { - lst1.SequenceEqual(lst2); - }); + Tools.TestTimes2( + 1000000, + "eqaulspeed:", + () => + { + lst1.SequenceEqual(lst2); + } + ); } [CommandMethod(nameof(Test_Contains))] public void Test_Contains() { // test list and dict contains speed - var lst = new List { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; - var hashset = new HashSet { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; + var lst = new List + { + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + }; + var hashset = new HashSet + { + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + }; var dict = new Dictionary { { 1, 0 }, @@ -189,16 +231,31 @@ public void Test_Contains() { 20, 20 }, }; - Tools.TestTimes2(100_0000, "list:", () => { - lst.Contains(20); - }); + Tools.TestTimes2( + 100_0000, + "list:", + () => + { + lst.Contains(20); + } + ); - Tools.TestTimes2(100_0000, "hashset:", () => { - hashset.Contains(20); - }); + Tools.TestTimes2( + 100_0000, + "hashset:", + () => + { + hashset.Contains(20); + } + ); - Tools.TestTimes2(100_0000, "dict:", () => { - dict.ContainsKey(20); - }); + Tools.TestTimes2( + 100_0000, + "dict:", + () => + { + dict.ContainsKey(20); + } + ); } -} \ No newline at end of file +} diff --git a/tests/TestShared/TestPointEx.cs b/tests/TestShared/TestPointEx.cs index 39ec186514fdec152ece92e8a84e23f52067743d..020e7cdc0990de1de3737e84dc6a3e30fca5740e 100644 --- a/tests/TestShared/TestPointEx.cs +++ b/tests/TestShared/TestPointEx.cs @@ -1,4 +1,4 @@ -namespace Test; +namespace IFoxTest; public class TestPointEx { diff --git a/tests/TestShared/TestPointOnRegion.cs b/tests/TestShared/TestPointOnRegion.cs index 62996a70d0b3672950126ea3be1c8e5371df844d..9773213327132e6b8f9056a6180169b34c936166 100644 --- a/tests/TestShared/TestPointOnRegion.cs +++ b/tests/TestShared/TestPointOnRegion.cs @@ -1,9 +1,9 @@ -namespace TestAcad2025; +namespace IFoxTest; public static class TestPointOnRegion { - [CommandMethod(nameof(TestPointOnRegionCommand))] - public static void TestPointOnRegionCommand() + [CommandMethod(nameof(Test_PointOnRegionCommand))] + public static void Test_PointOnRegionCommand() { var r1 = Env.Editor.GetEntity("\n选择多段线"); if (r1.Status != PromptStatus.OK) @@ -21,4 +21,4 @@ public static void TestPointOnRegionCommand() stretchPoints.PointOnRegion(pt).Print(); } } -} \ No newline at end of file +} diff --git a/tests/TestShared/TestQuadTree.cs b/tests/TestShared/TestQuadTree.cs index 1c2e2a880eac3880a65558d5475e90cb187fae59..4146d54a7d6510107f3085ef0657d6b6b81743d9 100644 --- a/tests/TestShared/TestQuadTree.cs +++ b/tests/TestShared/TestQuadTree.cs @@ -1,4 +1,6 @@ -namespace Test; +using Color = System.Drawing.Color; + +namespace IFoxTest; /* * 这里属于用户调用例子, @@ -7,35 +9,38 @@ namespace Test; */ public class CadEntity : QuadEntity { - public ObjectId ObjectId; - // 这里加入其他字段 - public List? Link;// 碰撞链 - public System.Drawing.Color Color; public double Angle; + + public Color Color; + + // 这里加入其他字段 + public List? Link; // 碰撞链 + public ObjectId ObjectId; + public CadEntity(ObjectId objectId, Rect box) : base(box) { ObjectId = objectId; } + public int CompareTo(CadEntity? other) { if (other == null) return -1; return GetHashCode() ^ other.GetHashCode(); } + public override int GetHashCode() { return (base.GetHashCode(), ObjectId.GetHashCode()).GetHashCode(); } } - - - - -public partial class TestQuadTree +public class TestQuadTree { - QuadTree? _quadTreeRoot; + private QuadTree? _quadTreeRoot; + #region 四叉树创建并加入 + [CommandMethod(nameof(Test_QuadTree))] public void Test_QuadTree() { @@ -71,21 +76,22 @@ public void Test_QuadTree() // 数据库边界 var pl = dbExt.ToPoints(); var databaseBoundary = new List<(Point3d, double, double, double)> - { - (new Point3d(pl[0].X,pl[0].Y,0),0,0,0), - (new Point3d(pl[1].X,pl[1].Y,0),0,0,0), - (new Point3d(pl[2].X,pl[2].Y,0),0,0,0), - (new Point3d(pl[3].X,pl[3].Y,0),0,0,0), - }; - tr.CurrentSpace.AddEntity(databaseBoundary.CreatePolyline(action: e => e.Closed = true)); + { + (new Point3d(pl[0].X, pl[0].Y, 0), 0, 0, 0), + (new Point3d(pl[1].X, pl[1].Y, 0), 0, 0, 0), + (new Point3d(pl[2].X, pl[2].Y, 0), 0, 0, 0), + (new Point3d(pl[3].X, pl[3].Y, 0), 0, 0, 0) + }; + tr.CurrentSpace.AddEntity(databaseBoundary.CreatePolyline(e => e.Closed = true)); // 生成多少个图元,导致cad会令undo出错(八叉树深度过大 treemax) // int maximumItems = 30_0000; - int maximumItems = 1000; + var maximumItems = 1000; // 随机图元生成 - List ces = new(); // 用于随机获取图元 - Tools.TestTimes(1, "画圆消耗时间:", () => { + List ces = []; // 用于随机获取图元 + Tools.TestTimes(1, "画圆消耗时间:", () => + { // 生成外边界和随机圆形 var grc = GenerateRandomCircle(maximumItems, dbExt); foreach (var ent in grc) @@ -109,23 +115,24 @@ public void Test_QuadTree() var dbPointCe = new CadEntity(entId, entRect); ces.Add(dbPointCe); } - });// 30万图元±3秒.cad2021 + }); // 30万图元±3秒.cad2021 // 测试只加入四叉树的时间 - Tools.TestTimes(1, "插入四叉树时间:", () => { - for (int i = 0; i < ces.Count; i++) - _quadTreeRoot.Insert(ces[i]); - });// 30万图元±0.7秒.cad2021 + Tools.TestTimes(1, "插入四叉树时间:", () => + { + foreach (var t in ces) + _quadTreeRoot.Insert(t); + }); // 30万图元±0.7秒.cad2021 tr.Editor?.WriteMessage($"\n加入图元数量:{maximumItems}"); } /// - /// 创建随机圆形 + /// 创建随机圆形 /// /// 创建数量 /// 数据库边界 - static IEnumerable GenerateRandomCircle(int createNumber, Rect dbExt) + private static IEnumerable GenerateRandomCircle(int createNumber, Rect dbExt) { var x1 = (int)dbExt.X; var x2 = (int)(dbExt.X + dbExt.Width); @@ -133,7 +140,7 @@ public void Test_QuadTree() var y2 = (int)(dbExt.Y + dbExt.Height); var rand = RandomEx.GetRandom(); - for (int i = 0; i < createNumber; i++) + for (var i = 0; i < createNumber; i++) { var x = rand.Next(x1, x2) + rand.NextDouble(); var y = rand.Next(y1, y2) + rand.NextDouble(); @@ -143,10 +150,9 @@ public void Test_QuadTree() /* 啊惊: 有点懒不想改了*/ #if true2 - // 选择加入到四叉树 - [CommandMethod(nameof(CmdTest_QuadTree21))] - public void CmdTest_QuadTree21() + [CommandMethod(nameof(Test_QuadTree21))] + public void Test_QuadTree21() { var dm = Acap.DocumentManager; var doc = dm.MdiActiveDocument; @@ -162,8 +168,8 @@ public void CmdTest_QuadTree21() } // 自动加入全图到四叉树 - [CommandMethod(nameof(CmdTest_QuadTree20))] - public void CmdTest_QuadTree20() + [CommandMethod(nameof(Test_QuadTree20))] + public void Test_QuadTree20() { var dm = Acap.DocumentManager; var doc = dm.MdiActiveDocument; @@ -183,7 +189,7 @@ public void CmdTest_QuadTree20() { // var ent = item.ToEntity(tr); ss.Add(item); - ++entnum;// 图元数量:100000, 遍历全图时间:0.216秒 CmdTest_QuadTree2 + ++entnum;// 图元数量:100000, 遍历全图时间:0.216秒 Test_QuadTree2 } return false; }); @@ -221,10 +227,10 @@ void AddQuadTreeRoot(Database db, Editor ed, List ss) /* 测试: * 为了测试删除内容释放了分支,再重复加入是否报错 - * 先创建 CmdTest_QuadTree1 - * 再减去 CmdTest_QuadTree0 + * 先创建 Test_QuadTree1 + * 再减去 Test_QuadTree0 * 然后原有黑色边界,再生成边界 CmdTest_Create00,对比删除效果. - * 然后加入 CmdTest_QuadTree2 + * 然后加入 Test_QuadTree2 * 然后原有黑色边界,再生成边界 CmdTest_Create00,对比删除效果. */ @@ -257,11 +263,10 @@ void AddQuadTreeRoot(Database db, Editor ed, List ss) /* 啊惊: 有点懒不想改了*/ #if true2 - #region 节点边界显示 // 四叉树减去节点 - [CommandMethod(nameof(CmdTest_QuadTree0))] - public void CmdTest_QuadTree0() + [CommandMethod(nameof(Test_QuadTree0))] + public void Test_QuadTree0() { var dm = Acap.DocumentManager; var doc = dm.MdiActiveDocument; @@ -281,8 +286,8 @@ public void CmdTest_QuadTree0() } // 创建节点边界 - [CommandMethod(nameof(CmdTest_CreateNodesRect))] - public void CmdTest_CreateNodesRect() + [CommandMethod(nameof(Test_CreateNodesRect))] + public void Test_CreateNodesRect() { var dm = Acap.DocumentManager; var doc = dm.MdiActiveDocument; @@ -332,24 +337,25 @@ public void CmdTest_CreateNodesRect() #endif #region 四叉树查询节点 + // 选择范围改图元颜色 - [CommandMethod(nameof(CmdTest_QuadTree3))] - public void CmdTest_QuadTree3() + [CommandMethod(nameof(Test_QuadTree3))] + public void Test_QuadTree3() { Ssget(QuadTreeSelectMode.IntersectsWith); } - [CommandMethod(nameof(CmdTest_QuadTree4))] - public void CmdTest_QuadTree4() + [CommandMethod(nameof(Test_QuadTree4))] + public void Test_QuadTree4() { Ssget(QuadTreeSelectMode.Contains); } /// - /// 改颜色 + /// 改颜色 /// /// - void Ssget(QuadTreeSelectMode mode) + private void Ssget(QuadTreeSelectMode mode) { if (_quadTreeRoot is null) return; @@ -365,20 +371,21 @@ void Ssget(QuadTreeSelectMode mode) // 仿选择集 var ces = _quadTreeRoot.Query(rect, mode); - ces.ForEach(item => { + ces.ForEach(item => + { var ent = tr.GetObject(item.ObjectId, OpenMode.ForWrite); - ent!.Color = Color.FromColor(item.Color); + ent!.Color = Autodesk.AutoCAD.Colors.Color.FromColor(item.Color); ent.DowngradeOpen(); ent.Dispose(); }); } /// - /// 交互获取 + /// 交互获取 /// /// /// - public static Rect? GetCorner(Editor ed) + private static Rect? GetCorner(Editor ed) { var optionsA = new PromptPointOptions($"{Environment.NewLine}起点位置:"); var pprA = ed.GetPoint(optionsA); @@ -386,17 +393,18 @@ void Ssget(QuadTreeSelectMode mode) return null; var optionsB = new PromptCornerOptions(Environment.NewLine + "输入矩形角点2:", pprA.Value) { - UseDashedLine = true,// 使用虚线 - AllowNone = true,// 回车 + UseDashedLine = true, // 使用虚线 + AllowNone = true // 回车 }; var pprB = ed.GetCorner(optionsB); if (pprB.Status != PromptStatus.OK) return null!; return new Rect(new Point2d(pprA.Value.X, pprA.Value.Y), - new Point2d(pprB.Value.X, pprB.Value.Y), - true); + new Point2d(pprB.Value.X, pprB.Value.Y), + true); } + #endregion } diff --git a/tests/TestShared/TestSelectfilter.cs b/tests/TestShared/TestSelectfilter.cs index cab6c92c10c3b97915bf39ac743edb9e938e1031..44d22dc9b0cf2d29a9fec643e081211091404bde 100644 --- a/tests/TestShared/TestSelectfilter.cs +++ b/tests/TestShared/TestSelectfilter.cs @@ -1,4 +1,4 @@ -namespace Test; +namespace IFoxTest; public class Testselectfilter { @@ -6,16 +6,17 @@ public class Testselectfilter public void Test_Filter() { var p = new Point3d(10, 10, 0); - var f = OpFilter.Build( - e => !(e.Dxf(0) == "line" & e.Dxf(8) == "0") - | e.Dxf(0) != "circle" & e.Dxf(8) == "2" & e.Dxf(10) >= p); - - - var f2 = OpFilter.Build( - e => e.Or( - !e.And(e.Dxf(0) == "line", e.Dxf(8) == "0"), - e.And(e.Dxf(0) != "circle", e.Dxf(8) == "2", - e.Dxf(10) <= new Point3d(10, 10, 0)))); + var f = OpFilter.Build(e => + !((e.Dxf(0) == "line") & (e.Dxf(8) == "0")) + | ((e.Dxf(0) != "circle") & (e.Dxf(8) == "2") & (e.Dxf(10) >= p)) + ); + + var f2 = OpFilter.Build(e => + e.Or( + !e.And(e.Dxf(0) == "line", e.Dxf(8) == "0"), + e.And(e.Dxf(0) != "circle", e.Dxf(8) == "2", e.Dxf(10) <= new Point3d(10, 10, 0)) + ) + ); SelectionFilter f3 = f; SelectionFilter f4 = f2; @@ -37,12 +38,11 @@ public class TestSelectObjectType public void Test_Select_type() { var sel = Env.Editor.SSGet(); - if (sel.Status != PromptStatus.OK) return; + if (sel.Status != PromptStatus.OK) + return; var ids = sel.Value.GetObjectIds(); foreach (var item in ids) - { item.Print(); - } var dxfName = RXObject.GetClass(typeof(Dimension)).DxfName; dxfName.Print(); @@ -52,7 +52,5 @@ public void Test_Select_type() item.Print(); item.ObjectClass.DxfName.Print(); } - } - -} \ No newline at end of file +} diff --git a/tests/TestShared/TestShared.projitems b/tests/TestShared/TestShared.projitems index 4dfb640586b4c0444d0b39fc6e8c99ffe1433c47..c2056cbcdf942270fc1ef12639a7979fceec9b64 100644 --- a/tests/TestShared/TestShared.projitems +++ b/tests/TestShared/TestShared.projitems @@ -1,53 +1,54 @@  - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - ced63d2d-0af6-4831-806d-5e8e9b0d0a07 - - - TestShared - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + ced63d2d-0af6-4831-806d-5e8e9b0d0a07 + + + TestShared + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/TestShared/TestShared.shproj b/tests/TestShared/TestShared.shproj index 31ea779a25d8b662fbe52cf640dbcceff700c326..6ad3dd111c47a5dc2c3569c03fd23d22e521a5cb 100644 --- a/tests/TestShared/TestShared.shproj +++ b/tests/TestShared/TestShared.shproj @@ -1,13 +1,13 @@ - - ced63d2d-0af6-4831-806d-5e8e9b0d0a07 - 14.0 - - - - - - - + + ced63d2d-0af6-4831-806d-5e8e9b0d0a07 + 14.0 + + + + + + + diff --git a/tests/TestShared/TestSingleKeyWordHook.cs b/tests/TestShared/TestSingleKeyWordHook.cs index 73fe216cf7e19ba408589117d8f99a58290527bb..98953e1a1de29441c33584e2edcbdfd5621c9441 100644 --- a/tests/TestShared/TestSingleKeyWordHook.cs +++ b/tests/TestShared/TestSingleKeyWordHook.cs @@ -1,14 +1,18 @@ -namespace TestShared; +namespace IFoxTest; + public static class TestSingleKeyWordHook { - [CommandMethod(nameof(TestSingleKeyWordHookDemo))] - public static void TestSingleKeyWordHookDemo() + [CommandMethod(nameof(Test_SingleKeyWordHook))] + public static void Test_SingleKeyWordHook() { var line1 = new Line(Point3d.Origin, new Point3d(100, 100, 0)); line1.SetDatabaseDefaults(); - using var j1 = new JigEx((mpw, _) => { - line1.Move(line1.StartPoint, mpw); - }); + using var j1 = new JigEx( + (mpw, _) => + { + line1.Move(line1.StartPoint, mpw); + } + ); j1.DatabaseEntityDraw(wd => wd.Geometry.Draw(line1)); var jppo = j1.SetOptions("\n选择位置或"); jppo.Keywords.Add("A", "A", "旋转90°(A)"); @@ -29,19 +33,22 @@ public static void TestSingleKeyWordHookDemo() switch (skwh.IsResponsed ? skwh.StringResult : r1.StringResult.ToUpper()) { case "A": - line1.Rotation(line1.StartPoint, Math.PI * 0.5, Vector3d.ZAxis); - break; + line1.Rotation(line1.StartPoint, Math.PI * 0.5, Vector3d.ZAxis); + break; case "D": - line1.Rotation(line1.StartPoint, Math.PI * 0.25, Vector3d.ZAxis); - break; + line1.Rotation(line1.StartPoint, Math.PI * 0.25, Vector3d.ZAxis); + break; } + continue; } + if (r1.Status == PromptStatus.OK) { using var tr = new DBTrans(); tr.CurrentSpace.AddEntity(line1); } + return; } } diff --git a/tests/TestShared/TestText.cs b/tests/TestShared/TestText.cs index b25dab69dab226d5dbcbc7708afb9c7bb8240209..3e57e28af2707d162c4cb2783d4ceb2513b078be 100644 --- a/tests/TestShared/TestText.cs +++ b/tests/TestShared/TestText.cs @@ -1,49 +1,73 @@ - -namespace TestShared; +namespace IFoxTest; public class TestText { - - [CommandMethod(nameof(TestDBText))] - public void TestDBText() + [CommandMethod(nameof(Test_DBText))] + public void Test_DBText() { using var tr = new DBTrans(); - tr.CurrentSpace.AddEntity(DBTextEx.CreateDBText(new(-1, -1, 0), "123", 2.5, action:t=> t.ColorIndex = 1)); + tr.CurrentSpace.AddEntity( + DBTextEx.CreateDBText(new Point3d(-1, -1, 0), "123", 2.5, action: t => t.ColorIndex = 1) + ); - tr.CurrentSpace.AddEntity(DBTextEx.CreateDBText(new(-1, -1, 0), "123", 2.5, action: t => { - t.Justify = AttachmentPoint.BaseCenter; - t.AlignmentPoint = new(1, 1, 0); - t.ColorIndex = 2; - })); + tr.CurrentSpace.AddEntity( + DBTextEx.CreateDBText( + new Point3d(-1, -1, 0), + "123", + 2.5, + action: t => + { + t.Justify = AttachmentPoint.BaseCenter; + t.AlignmentPoint = new Point3d(1, 1, 0); + t.ColorIndex = 2; + } + ) + ); } - [CommandMethod(nameof(TestBackDBText))] - public void TestBackDBText() + [CommandMethod(nameof(Test_BackDBText))] + public void Test_BackDBText() { - using var tr = new DBTrans(@"C:\Users\vic\Desktop\test.dwg"); - tr.CurrentSpace.AddEntity(DBTextEx.CreateDBText(new(-1, -1, 0), "123", 2.5, action: t => t.ColorIndex = 1)); + using var tr = new DBTrans(Path.Combine(DeskTop, "test.dwg")); + tr.CurrentSpace.AddEntity( + DBTextEx.CreateDBText(new Point3d(-1, -1, 0), "123", 2.5, action: t => t.ColorIndex = 1) + ); - tr.CurrentSpace.AddEntity(DBTextEx.CreateDBText(new(-1, -1, 0), "123", 2.5, action: t => - { - t.Justify = AttachmentPoint.BaseCenter; - t.AlignmentPoint = new(1, 1, 0); - t.ColorIndex = 2; - })); + tr.CurrentSpace.AddEntity( + DBTextEx.CreateDBText( + new Point3d(-1, -1, 0), + "123", + 2.5, + action: t => + { + t.Justify = AttachmentPoint.BaseCenter; + t.AlignmentPoint = new Point3d(1, 1, 0); + t.ColorIndex = 2; + } + ) + ); tr.Database.SaveDwgFile(); } - - - [CommandMethod(nameof(TestMText))] - public void TestMText() + [CommandMethod(nameof(Test_MText))] + public void Test_MText() { using var tr = new DBTrans(); - tr.CurrentSpace.AddEntity(MTextEx.CreateMText(new(5, 5, 0), "123", 2.5, action: t => t.ColorIndex = 1)); + tr.CurrentSpace.AddEntity( + MTextEx.CreateMText(new Point3d(5, 5, 0), "123", 2.5, action: t => t.ColorIndex = 1) + ); - tr.CurrentSpace.AddEntity(MTextEx.CreateMText(new(5, 5, 0), "123", 2.5, action: t => { - t.Attachment = AttachmentPoint.TopCenter; - t.ColorIndex = 2; - })); + tr.CurrentSpace.AddEntity( + MTextEx.CreateMText( + new Point3d(5, 5, 0), + "123", + 2.5, + action: t => + { + t.Attachment = AttachmentPoint.TopCenter; + t.ColorIndex = 2; + } + ) + ); } - } diff --git a/tests/TestShared/TestXRecord.cs b/tests/TestShared/TestXRecord.cs index 2b8b95fd96c170c38b64cbe0d7a2050da1b7e3ca..61ca140eadd38fae259b910baabdeb8c47cdbad8 100644 --- a/tests/TestShared/TestXRecord.cs +++ b/tests/TestShared/TestXRecord.cs @@ -1,4 +1,5 @@ -//#define ExtendedDataBinaryChunk +//#define ExtendedDataBinaryChunk + #define XTextString #if NewtonsoftJson @@ -6,7 +7,7 @@ using Newtonsoft.Json; using static Fs.Fox.Cad.WindowsAPI; -namespace Test_XRecord; +namespace IFoxTest; public class TestCmd_XRecord { diff --git a/tests/TestShared/TestXdata.cs b/tests/TestShared/TestXdata.cs index a0c10afdeafa950b4893b6ef0445bfb9baa7fb32..9d5d9230f64b59e0fd3f57039a188b3d4ed50b1d 100644 --- a/tests/TestShared/TestXdata.cs +++ b/tests/TestShared/TestXdata.cs @@ -1,4 +1,4 @@ -namespace Test; +namespace IFoxTest; public class TestXdata { @@ -10,7 +10,7 @@ public class TestXdata public void Test_AddXdata() { using DBTrans tr = new(); - + tr.RegAppTable.Add("myapp1"); tr.RegAppTable.Add(Appname); // add函数会默认的在存在这个名字的时候返回这个名字的regapp的id,不存在就新建 tr.RegAppTable.Add("myapp3"); @@ -18,28 +18,28 @@ public void Test_AddXdata() var line = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0)) { - XData = new XDataList() - { - { DxfCode.ExtendedDataRegAppName, "myapp1" }, // 可以用dxfcode和int表示组码 - { DxfCode.ExtendedDataAsciiString, "xxxxxxx" }, - {1070, 12 }, - { DxfCode.ExtendedDataRegAppName, Appname }, // 可以用dxfcode和int表示组码,移除中间的测试 - { DxfCode.ExtendedDataAsciiString, "要移除的我" }, - { DxfCode.ExtendedDataAsciiString, "要移除的我" }, - { DxfCode.ExtendedDataAsciiString, "要移除的我" }, - { DxfCode.ExtendedDataAsciiString, "要移除的我" }, - {1070, 12 }, - { DxfCode.ExtendedDataRegAppName, "myapp3" }, // 可以用dxfcode和int表示组码 - { DxfCode.ExtendedDataAsciiString, "aaaaaaaaa" }, - {1070, 12 }, - { DxfCode.ExtendedDataRegAppName, "myapp4" }, // 可以用dxfcode和int表示组码 - { DxfCode.ExtendedDataAsciiString, "bbbbbbbbb" }, - {1070, 12 } - } + XData = new XDataList + { + { DxfCode.ExtendedDataRegAppName, "myapp1" }, // 可以用dxfcode和int表示组码 + { DxfCode.ExtendedDataAsciiString, "xxxxxxx" }, + { 1070, 12 }, + { DxfCode.ExtendedDataRegAppName, Appname }, // 可以用dxfcode和int表示组码,移除中间的测试 + { DxfCode.ExtendedDataAsciiString, "要移除的我" }, + { DxfCode.ExtendedDataAsciiString, "要移除的我" }, + { DxfCode.ExtendedDataAsciiString, "要移除的我" }, + { DxfCode.ExtendedDataAsciiString, "要移除的我" }, + { 1070, 12 }, + { DxfCode.ExtendedDataRegAppName, "myapp3" }, // 可以用dxfcode和int表示组码 + { DxfCode.ExtendedDataAsciiString, "aaaaaaaaa" }, + { 1070, 12 }, + { DxfCode.ExtendedDataRegAppName, "myapp4" }, // 可以用dxfcode和int表示组码 + { DxfCode.ExtendedDataAsciiString, "bbbbbbbbb" }, + { 1070, 12 } + } }; - var line1 = new Line(new(0, 0, 0), new(2, 0, 0)); - line1.XData = new XDataList() + var line1 = new Line(new Point3d(0, 0, 0), new Point3d(2, 0, 0)); + line1.XData = new XDataList { { DxfCode.ExtendedDataRegAppName, "myapp1" }, // 可以用dxfcode和int表示组码 { DxfCode.ExtendedDataAsciiString, "xxxxxxx" }, @@ -59,15 +59,16 @@ public void Test_AddXdata() { 1070, 12 } }; - tr.CurrentSpace.AddEntity(line,line1); + tr.CurrentSpace.AddEntity(line, line1); } + // 删 [CommandMethod(nameof(Test_RemoveXdata))] public void Test_RemoveXdata() { var res = Env.Editor.GetEntity("\n select the entity:"); if (res.Status != PromptStatus.OK) return; - + using DBTrans tr = new(); var ent = tr.GetObject(res.ObjectId); if (ent == null || ent.XData == null) @@ -81,6 +82,7 @@ public void Test_RemoveXdata() ent.RemoveXData(Appname); Env.Printl("\n移除appName后:" + ent.XData); } + // 查 [CommandMethod(nameof(Test_GetXdata))] public void Test_GetXdata() @@ -91,12 +93,12 @@ public void Test_GetXdata() tr.RegAppTable.GetRecords().ForEach(rec => rec.Name.Print()); tr.RegAppTable.GetRecordNames().ForEach(name => name.Print()); tr.RegAppTable.ForEach(reg => reg.Name.Print(), checkIdOk: false); - + // 查询appName里面是否含有某个 var res = Env.Editor.GetEntity("\n select the entity:"); if (res.Status != PromptStatus.OK) return; - + var ent = tr.GetObject(res.ObjectId); if (ent == null || ent.XData == null) return; @@ -113,13 +115,14 @@ public void Test_GetXdata() else Env.Printl("不含有内容:" + str); } + // 改 [CommandMethod(nameof(Test_ChangeXdata))] public void Test_ChangeXdata() { var res = Env.Editor.GetEntity("\n select the entity:"); if (res.Status != PromptStatus.OK) return; - + using DBTrans tr = new(); var data = tr.GetObject(res.ObjectId)!; data.ChangeXData(Appname, DxfCode.ExtendedDataAsciiString, "change"); @@ -128,5 +131,4 @@ public void Test_ChangeXdata() return; Env.Printl(data.XData.ToString()); } - } \ No newline at end of file diff --git a/tests/TestShared/TestXrefEx.cs b/tests/TestShared/TestXrefEx.cs index 7fa7f3e8b7ae0542f611061f082e48ac44c44130..7cbdca5856653049f8403d96e0059aeb60bebb97 100644 --- a/tests/TestShared/TestXrefEx.cs +++ b/tests/TestShared/TestXrefEx.cs @@ -1,14 +1,14 @@ -namespace Test; +namespace IFoxTest; -public class TestCmd_BindXrefs +public class TestCmdBindXrefs { //后台绑定 [CommandMethod(nameof(Test_Bind1))] public static void Test_Bind1() { - string fileName = @"D:\Test.dwg"; + const string fileName = @"D:\Test.dwg"; using var tr = new DBTrans(fileName, - fileOpenMode: FileOpenMode.OpenForReadAndAllShare/*后台绑定特别注意*/); + fileOpenMode: FileOpenMode.OpenForReadAndAllShare /*后台绑定特别注意*/); tr.XrefFactory(XrefModes.Bind); tr.Database.SaveDwgFile(); } diff --git a/tests/TestShared/Timer.cs b/tests/TestShared/Timer.cs index 6bd03f1efb38e28c6da60571626f24edcdbafb56..0d346f468ebffaae28ad1c3a72315699cad9326e 100644 --- a/tests/TestShared/Timer.cs +++ b/tests/TestShared/Timer.cs @@ -1,6 +1,4 @@ - - -namespace Test; +namespace IFoxTest; /* // 测试例子,同时验证两个计时器 @@ -15,51 +13,42 @@ namespace Test; */ /// -/// 时间定时类 +/// 时间定时类 /// public class Timer { /// - /// 时间单位枚举 + /// 时间单位枚举 /// public enum TimeEnum { /// - /// 秒 + /// 秒 /// Second, + /// - /// 毫秒 + /// 毫秒 /// Millisecond, + /// - /// 微秒 + /// 微秒 /// Microsecond, + /// - /// 纳秒 + /// 纳秒 /// - Nanosecond, + Nanosecond } - [DllImport("Kernel32.dll")] - private static extern bool QueryPerformanceCounter(out long lpPerformanceCount); - - /// - /// 这个函数会检索性能计数器的频率. - /// 性能计数器的频率在系统启动时是固定的,并且在所有处理器上都是一致的 - /// 因此,只需在应用初始化时查询频率,即可缓存结果 - /// 在运行 Windows XP 或更高版本的系统上,该函数将始终成功,因此永远不会返回零 - /// - /// - /// - [DllImport("Kernel32.dll")] - private static extern bool QueryPerformanceFrequency(out long lpFrequency); + private readonly long _freq; private long _startTime, _stopTime; - private readonly long _freq; + /// - /// 构造函数 + /// 构造函数 /// /// public Timer() @@ -71,8 +60,43 @@ public Timer() throw new Win32Exception("不支持高性能计数器"); } + // 返回计时器经过时间 + /// + /// 秒 + /// + public double Second { get; private set; } + + /// + /// 毫秒 + /// + public double Millisecond => Second * 1000.0; + + /// + /// 微秒 + /// + public double Microsecond => Second * 1000000.0; + /// - /// 开始计时器 + /// 纳秒 + /// + public double Nanosecond => Second * 1000000000.0; + + [DllImport("Kernel32.dll")] + private static extern bool QueryPerformanceCounter(out long lpPerformanceCount); + + /// + /// 这个函数会检索性能计数器的频率. + /// 性能计数器的频率在系统启动时是固定的,并且在所有处理器上都是一致的 + /// 因此,只需在应用初始化时查询频率,即可缓存结果 + /// 在运行 Windows XP 或更高版本的系统上,该函数将始终成功,因此永远不会返回零 + /// + /// + /// + [DllImport("Kernel32.dll")] + private static extern bool QueryPerformanceFrequency(out long lpFrequency); + + /// + /// 开始计时器 /// public void Start() { @@ -81,7 +105,7 @@ public void Start() } /// - /// 停止计时器 + /// 停止计时器 /// public void Stop() { @@ -89,26 +113,8 @@ public void Stop() Second = (double)(_stopTime - _startTime) / _freq; } - // 返回计时器经过时间 - /// - /// 秒 - /// - public double Second { get; private set; } - - /// - /// 毫秒 - /// - public double Millisecond => Second * 1000.0; - /// - /// 微秒 - /// - public double Microsecond => Second * 1000000.0; - /// - /// 纳秒 - /// - public double Nanosecond => Second * 1000000000.0; /// - /// 计算执行委托的时间 + /// 计算执行委托的时间 /// /// 要执行的委托 /// 时间单位 diff --git a/tests/TestShared/Tools.cs b/tests/TestShared/Tools.cs index 4a9eefa144f623f27836936913f7ae06894632bd..b1d73c3cd88cb98b40bffb85b9b74e2256fca3d8 100644 --- a/tests/TestShared/Tools.cs +++ b/tests/TestShared/Tools.cs @@ -1,14 +1,16 @@ -namespace Test; +using System.Diagnostics; + +namespace IFoxTest; public static class Tools { /// - /// 计时器 + /// 计时器 /// - [System.Diagnostics.DebuggerStepThrough] + [DebuggerStepThrough] public static void TestTimes2(int count, string message, Action action) { - System.Diagnostics.Stopwatch watch = new(); + Stopwatch watch = new(); watch.Start(); // 开始监视代码运行时间 for (var i = 0; i < count; i++) action.Invoke(); // 需要测试的代码 @@ -26,12 +28,12 @@ public static void TestTimes2(int count, string message, Action action) } /// - /// 计时器 + /// 计时器 /// - [System.Diagnostics.DebuggerStepThrough] + [DebuggerStepThrough] public static void TestTimes3(int count, string message, Action action) { - System.Diagnostics.Stopwatch watch = new(); + Stopwatch watch = new(); watch.Start(); // 开始监视代码运行时间 for (var i = 0; i < count; i++) action.Invoke(i); // 需要测试的代码 @@ -48,28 +50,34 @@ public static void TestTimes3(int count, string message, Action action) $"{message} 代码执行 {count} 次的时间:{time} ({name})".Print(); // 总毫秒数 } - /// - /// 纳秒计时器 + /// 纳秒计时器 /// - [System.Diagnostics.DebuggerStepThrough] - public static void TestTimes(int count, string message, Action action, - Timer.TimeEnum timeEnum = Timer.TimeEnum.Millisecond) + [DebuggerStepThrough] + public static void TestTimes( + int count, + string message, + Action action, + Timer.TimeEnum timeEnum = Timer.TimeEnum.Millisecond + ) { - var time = Timer.RunTime(() => - { - for (var i = 0; i < count; i++) - action.Invoke(); - }, timeEnum); + var time = Timer.RunTime( + () => + { + for (var i = 0; i < count; i++) + action.Invoke(); + }, + timeEnum + ); var timeNameZn = timeEnum switch { Timer.TimeEnum.Millisecond => " 毫秒", Timer.TimeEnum.Microsecond => " 微秒", Timer.TimeEnum.Nanosecond => " 纳秒", - _ => " 秒" + _ => " 秒", }; $"{message} 代码执行 {count} 次的时间:{time} ({timeNameZn})".Print(); } -} \ No newline at end of file +} diff --git a/tests/TestShared/readme.md b/tests/TestShared/readme.md index 81b106fd2b210f7fc23c9a0297d73b54fc171b46..6c29a8bcb2147e6870dffb84c7c75d25799c1d83 100644 --- a/tests/TestShared/readme.md +++ b/tests/TestShared/readme.md @@ -1,13 +1,14 @@ # 测试项目文件结构 + - 图元类 - TestEntity - + TestAddEntity.cs - + TestRemoveEntity.cs - + .... + + TestAddEntity.cs + + TestRemoveEntity.cs + + .... - 事务类 - TestDBtrans - 符号表类 - TestSymTable - + TestLayer.cs - + TestTextStyle.cs - + ... + + TestLayer.cs + + TestTextStyle.cs + + ... - 选择集类 - 扩展数据类 - editor类