diff --git a/tests/TestShared/TestJig.cs b/tests/TestShared/TestJig.cs index c0bf411415b308edf496decc3a0c1b8a736edafe..42fc57bea456434b4f4d7b09ae3eba24480c6fb7 100644 --- a/tests/TestShared/TestJig.cs +++ b/tests/TestShared/TestJig.cs @@ -1,4 +1,4 @@ -namespace Test; +namespace Test; using System.Windows.Forms; @@ -116,6 +116,79 @@ public void Test_Jig44() tr.CurrentSpace.AddEntity(jig.Entitys); } + // 不在数据库的图元如何进入jig 空格作为关键词 + [CommandMethod(nameof(Test_Jig442))] + public void Test_Jig44() + { + using DBTrans tr = new(); + var per = Env.Editor.GetEntity("\n请选择一条多段线:"); + if (per.Status != PromptStatus.OK) + return; + var ent = tr.GetObject(per.ObjectId, OpenMode.ForWrite); + if (ent is not Polyline pl) + return; + + /* + * 鼠标采样器执行时修改鼠标基点 + * 原因: 多段线与鼠标垂直点作为 BasePoint,jig鼠标点为确定点 + * 所以需要先声明再传入指针,但是我发现null也可以. + */ + JigPromptPointOptions? options = null; + using var jig = new JigEx((mousePoint, drawEntitys) => { + var closestPt = pl.GetClosestPointTo(mousePoint, false); + + // 回调过程中SetOptions会覆盖配置,所以如果想增加关键字或者修改基点, + // 不要这样做: jig.SetOptions(closestPt) 而是使用底层暴露 + options!.BasePoint = closestPt; + + // 需要避免重复加入同一个关键字 + // if (!options.Keywords.Contains("A")) + // options.Keywords.Add("A"); + + // 生成文字 + var dictString = (pl.GetDistAtPoint(closestPt) * 0.001).ToString("0.00"); + var acText = DBTextEx.CreateDBText(closestPt, dictString, 200); + + // 加入刷新队列 + drawEntitys.Enqueue(acText); + }); + + options = jig.SetOptions(per.PickedPoint); + + // 如果没有这个,那么空格只会是 PromptStatus.None 而不是 PromptStatus.Keyword + options.Keywords.Add("A", "A", "A"); + options.Keywords.Add(" ", " ", "空格是关键词"); + jig.SetSpaceIsKeyword(); + + bool flag = true; + while (flag) + { + var pr = jig.Drag(); + if (pr.Status == PromptStatus.Keyword) + { + switch (pr.StringResult) + { + case "A": + tr.Editor?.WriteMessage($"\n 您触发了关键字{pr.StringResult}"); + flag = false; + break; + case " ": + tr.Editor?.WriteMessage("\n 触发关键字空格"); + flag = false; + break; + } + } + else if (pr.Status != PromptStatus.OK)// PromptStatus.None == 右键,空格,回车,都在这里结束 + { + tr.Editor?.WriteMessage(Environment.NewLine + pr.Status.ToString()); + return; + } + else + flag = false; + } + tr.CurrentSpace.AddEntity(jig.Entitys); + } + [CommandMethod(nameof(Test_MessageFilter))] public void Test_MessageFilter() {