diff --git a/tests/Test/TestQuadTree.cs b/tests/Test/TestQuadTree.cs index 19b3efacc46b21b3a65b7f03f931a03409b1b1fd..110dacb4a61b6891739821278c6189ee50265a05 100644 --- a/tests/Test/TestQuadTree.cs +++ b/tests/Test/TestQuadTree.cs @@ -1,4 +1,4 @@ -namespace Test; +namespace Test; /* * 这里属于用户调用例子, @@ -176,3 +176,59 @@ void Ssget(QuadTreeSelectMode mode) } #endregion } + +public void tt6() + { + using var tr = new DBTrans(); + var ed = tr.Editor; + //创建四叉树,默认参数无所谓 + var TreeRoot = new QuadTree(new Rect(0, 0, 32525, 32525)); + + var fil = OpFilter.Bulid(e => e.Dxf(0) == "LINE"); + var psr = ed.SSGet("\n 选择需要连接的直线", fil); + if (psr.Status != PromptStatus.OK) return; + var LineEnts = new List(psr.Value.GetEntities(OpenMode.ForWrite)!); + //将实体插入到四岔树 + foreach (var line in LineEnts) + { + var edge = line.GeometricExtents; + var entRect = new Rect(edge.MinPoint.X, edge.MinPoint.Y, edge.MaxPoint.X, edge.MaxPoint.Y); + var ce = new CadEntity(line.Id, entRect) + { + //四叉树数据 + Angle = line.Angle + }; + TreeRoot.Insert(ce); + } + + var ppo = new PromptPointOptions(Environment.NewLine + "\n指定标注点:<空格退出>") + { + AllowArbitraryInput = true,//任意输入 + AllowNone = true //允许回车 + }; + var ppr = ed.GetPoint(ppo);//用户点选 + if (ppr.Status != PromptStatus.OK) + return; + var rect = new Rect(ppr.Value.Point2d(),100,100); + tr.CurrentSpace.AddEntity(rect.ToPolyLine());//显示选择靶标范围 + + var nent = TreeRoot.FindNearEntity(rect);//查询最近实体,按逆时针 + var ent = tr.GetObject(nent.ObjectId, OpenMode.ForWrite);//打开实体 + ent.ColorIndex = Utility.GetRandom().Next(1, 256);//1~256随机色 + ent.DowngradeOpen();//实体降级 + ent.Dispose(); + + var res = TreeRoot.Query(rect, QuadTreeSelectMode.IntersectsWith);//查询选择靶标范围相碰的ID + res.ForEach(item => + { + if (item.Angle == 0|| item.Angle == Math.PI) //过滤直线角度为0或180的直线 + { + var ent = tr.GetObject(item.ObjectId, OpenMode.ForWrite); + ent.ColorIndex = Utility.GetRandom().Next(1, 7); + ent.DowngradeOpen(); + ent.Dispose(); + } + + }); + + } \ No newline at end of file