From e0fe023484fee39d4f5054ed678ed522fd714aa8 Mon Sep 17 00:00:00 2001 From: cloudflight <cloudflight@126.com> Date: 星期日, 05 五月 2024 18:16:39 +0800 Subject: [PATCH] fix:工具窗体UI问题 --- Hydraulic/Hydro.MapUI/Map/MapViewer.cs | 74 +++++++++++++++++++++++++++++++++--- 1 files changed, 67 insertions(+), 7 deletions(-) diff --git a/Hydraulic/Hydro.MapUI/Map/MapViewer.cs b/Hydraulic/Hydro.MapUI/Map/MapViewer.cs index 80a5f96..e5390c5 100644 --- a/Hydraulic/Hydro.MapUI/Map/MapViewer.cs +++ b/Hydraulic/Hydro.MapUI/Map/MapViewer.cs @@ -1579,12 +1579,7 @@ return inside; } - //protected override void OnMouseDoubleClick(MouseEventArgs e) - //{ - // //base.OnMouseDoubleClick(e); - - //} public void InsertNet(Template temp) { _isInsertingObject = true; @@ -1667,6 +1662,25 @@ } + + /*鍒ゆ柇鏄惁瑙︾鍒板璞�*/ + { + // 閬嶅巻鎵�鏈夊璞�,鎵惧嚭鑼冨洿鍐呯殑瀵硅薄 + PointF clickedPoint = new PointF(e.X, e.Y); //ScreenToMap(new PointF(e.X, e.Y)); + var obj = GetObj_by_ScreenPoint(clickedPoint); + + hoveredObjs.ForEach(o => o.Hovered = false); + hoveredObjs.Clear(); + if (obj != null) + { + obj.Hovered = true; + hoveredObjs.Add(obj); + } + //bool isJunction = obj is NodeViewModel; + } + + + if (needInvalidate) this.Invalidate(); label_mouse.Text = $"X锛歿e.X.ToString("0")} Y锛歿e.Y.ToString("0")} [Map]X锛歿_MousePosition.X.ToString("0.00")} Y锛歿_MousePosition.Y.ToString("0.00")}"; _lastMouseX = e.X; @@ -2344,10 +2358,10 @@ p = new PointF(j.X, j.Y); } } - IBaseViewModel GetObj_by_ScreenPoint(PointF clickedPoint) + IBaseViewModel GetObj_by_ScreenPoint(PointF clickedPoint, float DistLimit = 15f) { float minDist = float.MaxValue; - float DistLimit = 15f; + int minIndex = -1; bool isJunction = true; IBaseViewModel obj = null; @@ -2389,6 +2403,50 @@ } } return obj; + } + + List<IBaseViewModel> GetObjs_by_ScreenPoint(PointF clickedPoint, float DistLimit = 15f) + { + float minDist = float.MaxValue; + + int minIndex = -1; + + IBaseViewModel obj = null; + List < IBaseViewModel > objs = new List<IBaseViewModel>(); + for (int i = 0; i < _Nodes.Count; i++) + { + var node = _Nodes[i] as NodeViewModel; + if (!node.Visible) continue; + PointF mapPos = WorldPointToMapPoint(node); + PointF currentPoint = MapToScreen(mapPos); + float dist = Get_dist(clickedPoint, currentPoint); + if (dist <= DistLimit) + { + objs.Add(node); + } + } + for (int i = 0; i < _Links.Count; i++) + { + var link = _Links[i] as LinkViewModel; + if (!link.Visible) continue; + //float dist = (clickedPoint.X - Pipes[i].X) * (clickedPoint.X - Pipes[i].X) + + // (clickedPoint.Y - Pipes[i].Y) * (clickedPoint.Y - Pipes[i].Y); + PointF mapPos1 = WorldPointToMapPoint(link.StartNode.Position, link.StartNode.Elev); + PointF currentPoint1 = MapToScreen(mapPos1); + PointF mapPos2 = WorldPointToMapPoint(link.EndNode.Position, link.EndNode.Elev); + PointF currentPoint2 = MapToScreen(mapPos2); + //鏍规嵁currentPoint1鍜宑urrentPoint2锛屽垽鏂璫lickedPoint绂荤嚎娈礳urrentPoint1鍜宑urrentPoint2鐨勮窛绂� + float dist = Get_dist(clickedPoint, currentPoint1, currentPoint2, DistLimit); + + //float dist = Get_dist(clickedPoint, currentPoint); + if (dist < minDist && dist <= DistLimit) + { + + + objs.Add(link); + } + } + return objs; } /// <summary> @@ -4516,6 +4574,8 @@ } Colour _NodeColour = null; Colour _LinkColour = null; + private List<IBaseViewModel> hoveredObjs=new List<IBaseViewModel>(); + private void cb_Node_Colour_Click(object sender, EventArgs e) { -- Gitblit v1.9.3