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