From 3c8e996db701f2744af261e876455754ad182b62 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期五, 09 五月 2025 16:19:36 +0800
Subject: [PATCH] Merge branch 'master' of http://47.103.154.90:83/r/HStation/XHS.V1.0

---
 Desktop/HStation.Xhs.Hydro.Test.Core/Form3.cs |  156 ++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 139 insertions(+), 17 deletions(-)

diff --git a/Desktop/HStation.Xhs.Hydro.Test.Core/Form3.cs b/Desktop/HStation.Xhs.Hydro.Test.Core/Form3.cs
index ec9f399..2fd2bfb 100644
--- a/Desktop/HStation.Xhs.Hydro.Test.Core/Form3.cs
+++ b/Desktop/HStation.Xhs.Hydro.Test.Core/Form3.cs
@@ -10,16 +10,17 @@
 using Yw.WinFrmUI.Q3d;
 using Yw.EPAnet;
 using System.IO;
-
+using Newtonsoft.Json;
 
 namespace Hydro.ClientTool
 {
     public partial class Form3 : Form
     {
-        public NetworkViewModel _net { get; set; }
+        public NetworkViewModel _viewnet { get; set; }
 
         public Network _network { get; set; }
-
+        public Dictionary<string, Node> dictNodes { get; set; }
+        public Dictionary<string, Link> dictLinks { get; set; }
         public Form3()
         {
             InitializeComponent();
@@ -29,15 +30,63 @@
         {
             //鎵撳紑鏂囦欢瀵硅瘽妗嗭紝閫夋嫨inp绫诲瀷鐨勬枃浠�
             var ofd = new OpenFileDialog();
-            ofd.Filter = "inp鏂囦欢|*.inp";
+            ofd.Filter = "json鏂囦欢|*.json|inp鏂囦欢|*.inp";
             if (ofd.ShowDialog() == DialogResult.OK)
             {
 
                 //string inptxt = File.ReadAllText(ofd.FileName);
-                _network = InpInteropHelper.FromInpString(ofd.FileName);
+                //濡傛灉鏄痠np鏂囦欢锛岃皟鐢↖npInteropHelper.FromInpString鏂规硶锛屽皢inp鏂囦欢杞崲涓篘etwork瀵硅薄
+                //濡傛灉鏄痡son鏂囦欢锛岀洿鎺ヨ皟鐢↗sonConvert.DeserializeObject鏂规硶锛屽皢json鏂囦欢杞崲涓篘etwork瀵硅薄
+                if (ofd.FileName.EndsWith(".inp"))
+                    //_network = InpInteropHelper.FromInpString(ofd.FileName);
+                    _network = InpInteropHelper.FromInpString(ofd.FileName);
+                else
+                {
+                    string inptxt = File.ReadAllText(ofd.FileName);
+                    _network = JsonConvert.DeserializeObject<Network>(inptxt);
+                    //_network.GetAllNodes().ForEach(n =>
+                    //{
+                    //    n.Links = new List<Link>();
+                    //});
+                    dictNodes = _network.GetAllNodes().ToDictionary(n => n.Id);
+                    _network.GetAllLinks().ForEach(l =>
+                    {
+                        l.StartNode = dictNodes[l.StartNode.Id];
+                        l.EndNode = dictNodes[l.EndNode.Id];
 
-                _net = ConvertNetworkToNetworkViewModel(_network);
-                map.SetData(_net);
+                    });
+                    dictLinks = _network.GetAllLinks().ToDictionary(l => l.Id);
+
+                    _network.GetAllLinks().ForEach(l =>
+                    {
+                        if (l.StartNode.Links == null) l.StartNode.Links = new List<Link>();
+                        if (l.EndNode.Links == null) l.EndNode.Links = new List<Link>();
+                        l.StartNode.Links.Add(l);
+                        l.EndNode.Links.Add(l);
+                    });
+
+
+
+                }
+
+
+                _viewnet = ConvertNetworkToNetworkViewModel(_network);
+                map.SetData(_viewnet);
+                map.SelectedObjectsChanged += (oo, ee) =>
+                {
+                    if (map.selectedObjs.Count > 1)
+                    {
+                        propertyGrid1.SelectedObjects = map.selectedObjs.ToArray();
+                    }
+                    else if (map.selectedObjs.Count == 1)
+                    {
+                        propertyGrid1.SelectedObject = map.selectedObjs[0];
+                    }
+                    else
+                    {
+                        propertyGrid1.SelectedObject = null;
+                    }
+                };
             }
 
 
@@ -59,7 +108,7 @@
                         Length = (float)pipe.Length,
                         Diameter = (float)pipe.Diameter,
                         Roughness = (float)pipe.Roughness,
-                        Status = (ObjectEnum.StatusType)Enum.Parse(typeof(ObjectEnum.StatusType), pipe.LinkStatus.ToUpper()),
+                        Status = pipe.LinkStatus == null ? ObjectEnum.StatusType.DEFAULT : (ObjectEnum.StatusType)Enum.Parse(typeof(ObjectEnum.StatusType), pipe.LinkStatus.ToUpper()),
                     });
                 }
                 else if (l is Pump)
@@ -71,7 +120,7 @@
                         Node1 = pump.StartNode.Id,
                         Node2 = pump.EndNode.Id,
                         HeadCurve = pump.CurveQH,
-                        Status = (ObjectEnum.StatusType)Enum.Parse(typeof(ObjectEnum.StatusType), pump.LinkStatus.ToUpper()),
+                        Status = pump.LinkStatus == null ? ObjectEnum.StatusType.DEFAULT : (ObjectEnum.StatusType)Enum.Parse(typeof(ObjectEnum.StatusType), pump.LinkStatus.ToUpper()),
                     });
                 }
                 else if (l is Valve)
@@ -84,7 +133,7 @@
                         Node2 = valve.EndNode.Id,
                         Diameter = (float)valve.Diameter,
                         Setting = valve.ValveSetting,
-                        Status = (ObjectEnum.StatusType)Enum.Parse(typeof(ObjectEnum.StatusType), valve.LinkStatus.ToUpper()),
+                        Status = valve.LinkStatus == null ? ObjectEnum.StatusType.DEFAULT : (ObjectEnum.StatusType)Enum.Parse(typeof(ObjectEnum.StatusType), valve.LinkStatus.ToUpper()),
                     });
                 }
                 else if (l is Exchanger)
@@ -190,7 +239,7 @@
 
         private void Form3_Load(object sender, EventArgs e)
         {
-            
+
         }
 
 
@@ -200,6 +249,47 @@
             this.Close();
         }
 
+
+
+        private void 绠�鍗曡绠桾oolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            CalcuResult result = _network.Calcu(CalcuMode.Simple);
+            //灏嗚绠楃粨鏋滃缓绔媙ode瀛楀吀鍜宭ink瀛楀吀
+            Dictionary<string, CalcuNode> dictNodes = result.NodeList.ToDictionary(n => n.Id);
+            Dictionary<string, CalcuLink> dictLinks = result.LinkList.ToDictionary(l => l.Id);
+            //灏嗚绠楃粨鏋滄樉绀哄湪_net涓�
+            _viewnet.Links.ForEach(l =>
+            {
+                if (dictLinks.ContainsKey(l.ID))
+                {
+                    l.EN_FLOW = (float)dictLinks[l.ID].Flow;
+                    l.EN_VELOCITY = (float)dictLinks[l.ID].Velocity;
+                    l.EN_HEADLOSS = (float)dictLinks[l.ID].Headloss;
+
+                }
+            });
+            _viewnet.Nodes.ForEach(n =>
+            {
+                if (dictNodes.ContainsKey(n.ID))
+                {
+                    n.EN_HEAD = (float)dictNodes[n.ID].Head;
+                    n.EN_PRESSURE = (float)dictNodes[n.ID].Press;
+                    n.EN_DEMAND = (float)dictNodes[n.ID].Demand;
+
+                }
+            });
+
+
+
+
+
+        }
+
+        private void 灞�閮ㄦ崯澶辫绠桾oolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var result = _network.Calcu(CalcuMode.MinorLoss);
+        }
+
         private void 涓嬫父璺緞鍒嗘瀽ToolStripMenuItem_Click(object sender, EventArgs e)
         {
             if (_network == null)
@@ -207,16 +297,48 @@
                 MessageBox.Show("璇峰厛鎵撳紑鏂囦欢");
                 return;
             }
-            if (map.selectedObjs.Count>0 && map.selectedObjs[0] is NodeViewModel node)
+            if (map.selectedObjs.Count > 0 && map.selectedObjs[0] is NodeViewModel node)
             {
-                var calcResult= _network.Calcu(CalcuMode.MinorLoss);
-                var Snode=_network.GetAllNodes().FirstOrDefault(n=>n.Id== node.ID);
+                var calcResult = _network.Calcu(CalcuMode.MinorLoss);
+                var Snode = _network.GetAllNodes().FirstOrDefault(n => n.Id == node.ID);
                 var links = _network.AnalyzeDownstreamPath(Snode, calcResult);
-                map.SetSelectObj(links.Select(l=>l.Id).ToList());
+                if (links == null || links.Count <= 0) return;
+                map.SetSelectObj(links.Select(l => l.Id).ToList());
 
             }
-            
-            
+
+
+        }
+        private void 娌跨▼绾垫柇闈㈠垎鏋怲oolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            if (_network == null)
+            {
+                MessageBox.Show("璇峰厛鎵撳紑鏂囦欢");
+                return;
+            }
+            if (map.selectedObjs.Count > 0 && map.selectedObjs[0] is NodeViewModel node)
+            {
+                var calcResult = _network.Calcu(CalcuMode.MinorLoss);
+                var Snode = _network.GetAllNodes().FirstOrDefault(n => n.Id == node.ID);
+                var links = _network.AnalyzeDownstreamPath(Snode, calcResult);
+                if (links == null || links.Count <= 0) return;
+
+                map.SetSelectObj(links.Select(l => l.Id).ToList());
+                var result = _network.GetChartNodeByPathLinks(links, calcResult);
+
+            }
+
+        }
+
+        private void iNPToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            //鎵撳紑鏂囦欢瀵硅瘽妗�,灏� _network.ToInpString();瀵煎嚭
+            var sfd = new SaveFileDialog();
+            sfd.Filter = "inp鏂囦欢|*.inp";
+            if (sfd.ShowDialog() == DialogResult.OK)
+            {
+                File.WriteAllText(sfd.FileName, _network.ToInpString());
+            }
         }
     }
 }

--
Gitblit v1.9.3