From 15d15d24fbccb9b70a305b46b71453b2ab1a720e Mon Sep 17 00:00:00 2001
From: qinjie <qinjie@163.com>
Date: 星期二, 19 十二月 2023 15:43:46 +0800
Subject: [PATCH] 提交代码

---
 Hydro.Inp/NetWork.cs |  610 ++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 469 insertions(+), 141 deletions(-)

diff --git a/Hydro.Inp/NetWork.cs b/Hydro.Inp/NetWork.cs
index b4156f0..2f4c527 100644
--- a/Hydro.Inp/NetWork.cs
+++ b/Hydro.Inp/NetWork.cs
@@ -1,6 +1,8 @@
 锘縰sing Hydro.Core.Model;
+//using Hydro.HydraulicModel;
 using System;
 using System.Collections.Generic;
+using System.Data;
 using System.Drawing;
 using System.IO;
 using System.IO.Ports;
@@ -20,76 +22,173 @@
         public NetWork()
         {
         }
-        public string Title { get; set; }
 
-        private List<JunctionModel> Junctions { get; set; } = new List<JunctionModel>();
-
-        private List<TankModel> Tanks { get; set; } = new List<TankModel>();
-
-        private List<PipeModel> Pipes { get; set; } = new List<PipeModel>();
-
-        private List<PumpModel> Pumps { get; set; } = new List<PumpModel>();
-
-        private List<ValveModel> Valves { get; set; } = new List<ValveModel>();
-
-        private List<ReservoisModel> Reservos { get; set; } = new List<ReservoisModel>();
-
-        private List<MeterModel> Meters { get; set; } = new List<MeterModel>();
-
-        private List<NozzleModel> Nozzles { get; set; } = new List<NozzleModel>();
-
-        public void AddJunction(JunctionModel junction)
+        public List<JunctionModel> Junctions
         {
-            Junctions.Add(junction);
+            get
+            {
+                var js = Nodes.Where(d => d is JunctionModel);
+                return js?.Select(d => d as JunctionModel).ToList();
+            }
+
+        }
+        public List<TankModel> Tanks
+        {
+            get
+            {
+                var js = Nodes.Where(d => d is TankModel);
+                return js?.Select(d => d as TankModel).ToList();
+            }
+        }
+
+        public List<PipeModel> Pipes
+        {
+            get
+            {
+                var js = Links.Where(d => d is PipeModel);
+                return js?.Select(d => d as PipeModel).ToList();
+            }
+        }
+
+        public List<PumpModel> Pumps
+        {
+            get
+            {
+                var js = Links.Where(d => d is PumpModel);
+                return js?.Select(d => d as PumpModel).ToList();
+            }
+        }
+
+        public List<ValveModel> Valves
+        {
+            get
+            {
+                var js = Links.Where(d => d is ValveModel);
+                return js?.Select(d => d as ValveModel).ToList();
+            }
+        }
+
+        public List<ReservoisModel> Reservos
+        {
+            get
+            {
+                var js = Nodes.Where(d => d is ReservoisModel);
+                return js?.Select(d => d as ReservoisModel).ToList();
+            }
+        }
+
+        public List<MeterModel> Meters
+        {
+            get
+            {
+                var js = Nodes.Where(d => d is MeterModel);
+                return js?.Select(d => d as MeterModel).ToList();
+            }
+        }
+
+        public List<NozzleModel> Nozzles
+        {
+            get
+            {
+                var js = Nodes.Where(d => d is NozzleModel);
+                return js?.Select(d => d as NozzleModel).ToList();
+            }
+        }
+
+        public virtual void AddJunction(JunctionModel junction)
+        {
+            CheckNodesExist(junction);
             Nodes.Add(junction);
         }
 
-        public void AddTank(TankModel tank)
+        public virtual void AddJunctions(List<JunctionModel> junctions)
         {
-            Tanks.Add(tank);
+            junctions.ForEach(junction => { AddJunction(junction); });
+        }
+
+        public virtual void AddTank(TankModel tank)
+        {
+            CheckNodesExist(tank);
             Nodes.Add(tank);
         }
 
-        public void AddPipe(PipeModel pipe)
+        public virtual void AddTanks(List<TankModel> tanks)
         {
-            Pipes.Add(pipe);
+            tanks.ForEach(tank => { AddTank(tank); });
+        }
+
+        public virtual void AddPipe(PipeModel pipe)
+        {
+            CheckLinksExist(pipe);
             Links.Add(pipe);
         }
 
-        public void AddPump(PumpModel pump)
+        public virtual void AddPipes(List<PipeModel> pipes)
         {
-            Pumps.Add(pump);
+            pipes.ForEach(pipe => { AddPipe(pipe); });
+        }
+        public virtual void AddPump(PumpModel pump)
+        {
+            CheckLinksExist(pump);
             Links.Add(pump);
         }
 
-        public void AddValve(ValveModel valve)
+        public virtual void AddPumps(List<PumpModel> pumps)
         {
-            Valves.Add(valve);
+            pumps.ForEach(pump => { AddPump(pump); });
+        }
+        public virtual void AddValve(ValveModel valve)
+        {
+            CheckLinksExist(valve);
             Links.Add(valve);
         }
 
-        public void AddReservos(ReservoisModel reservois)
+        public virtual void AddValves(List<ValveModel> valves)
         {
-            Reservos.Add(reservois);
+            valves.ForEach(valve => { AddValve(valve); });
+        }
+        public virtual void AddReservos(ReservoisModel reservois)
+        {
+            CheckNodesExist(reservois);
             Nodes.Add(reservois);
         }
-
-        public void AddMeter(MeterModel meter)
+        public virtual void AddReservoss(List<ReservoisModel> reservoiss)
         {
-            Meters.Add(meter);
+            reservoiss.ForEach(reservois => { AddReservos(reservois); });
+        }
+        public virtual void AddMeter(MeterModel meter)
+        {
+            CheckNodesExist(meter);
             Nodes.Add(meter);
-            Junctions.Add(meter.ToJunction());
         }
-
-        public void AddNozzle(NozzleModel nozzle)
+        public virtual void AddMeters(List<MeterModel> meters)
         {
-            Nozzles.Add(nozzle);
+            meters.ForEach(meter => { AddMeter(meter); });
+        }
+        public virtual void AddNozzle(NozzleModel nozzle)
+        {
+            CheckNodesExist(nozzle);
             Nodes.Add(nozzle);
-            Junctions.Add(nozzle.ToJunction());
+        }
+        public virtual void AddNozzles(List<NozzleModel> nozzles)
+        {
+            nozzles.ForEach(nozzle => { AddNozzle(nozzle); });
         }
 
-        public List<NodeModel> Nodes { get; set; } = new List<NodeModel>();
-        public List<LinkModel> Links { get; set; } = new List<LinkModel>();
+        private void CheckNodesExist(NodeCalcModel node)
+        {
+            if (Nodes.Any(d => d.ID == node.ID))
+                throw new Exception("宸插瓨鍦ㄩ噸澶嶇殑瀵硅薄");
+        }
+
+        private void CheckLinksExist(LinkCalcModel link)
+        {
+            if (Links.Any(d => d.ID == link.ID))
+                throw new Exception("宸插瓨鍦ㄩ噸澶嶇殑瀵硅薄");
+        }
+
+        public List<NodeCalcModel> Nodes { get; set; } = new List<NodeCalcModel>();
+        public List<LinkCalcModel> Links { get; set; } = new List<LinkCalcModel>();
 
         /// <summary>
         /// 鏍规嵁INP鏂囦欢鐢熸垚
@@ -141,7 +240,6 @@
                                             Elev = Elev,
                                             Demand = Demand,
                                             PatternID = PatternID,
-                                            Level = Level
                                         });
                                     }
                                     else if (parts[5] == "Nozzle")
@@ -152,7 +250,6 @@
                                             Elev = Elev,
                                             Demand = Demand,
                                             PatternID = PatternID,
-                                            Level = Level
                                         });
                                     }
                                     else
@@ -163,7 +260,6 @@
                                             Elev = Elev,
                                             Demand = Demand,
                                             PatternID = PatternID,
-                                            Level = Level
                                         });
                                     }
 
@@ -178,8 +274,8 @@
                                         r.Head = head;
                                     r.PatternID = parts.Length > 2 ? parts[2] : "";
                                     int level;
-                                    if (int.TryParse(parts[3], out level))
-                                        r.Level = level;
+                                    //if (int.TryParse(parts[3], out level))
+                                    //    r.Level = level;
                                     AddReservos(r);
                                 }
                                 break;
@@ -212,9 +308,9 @@
                                         VolCurve = "",
                                         IsOverFlow = true
                                     };
-                                    int level;
-                                    if (int.TryParse(parts[9], out level))
-                                        tank.Level = level;
+                                    //int level;
+                                    //if (int.TryParse(parts[9], out level))
+                                    //    tank.Level = level;
                                     AddTank(tank);
                                 }
                                 break;
@@ -237,9 +333,9 @@
                                     if (float.TryParse(parts[6], out minorLoss))
                                         p.MinorLoss = minorLoss;
                                     p.Status = parts.Length > 7 ? StatusType.CLOSED : StatusType.DEFAULT;
-                                    int level;
-                                    if (int.TryParse(parts[8], out level))
-                                        p.Level = level;
+                                    //int level;
+                                    //if (int.TryParse(parts[8], out level))
+                                    //    p.Level = level;
                                     AddPipe(p);
                                 }
                                 break;
@@ -260,9 +356,9 @@
                                     float minorLoss;
                                     if (float.TryParse(parts[6], out minorLoss))
                                         valve.MinorLoss = minorLoss;
-                                    int level;
-                                    if (int.TryParse(parts[7], out level))
-                                        valve.Level = level;
+                                    //int level;
+                                    //if (int.TryParse(parts[7], out level))
+                                    //    valve.Level = level;
                                     AddValve(valve);
                                 }
                                 break;
@@ -310,86 +406,94 @@
                 }
                 sr.Close();
 
-                //璇诲彇鍧愭爣
-                Junctions.ForEach(o =>
-                {
-                    var p = points.Where(d => d.ID == o.ID).FirstOrDefault();
-                    if (p != null)
-                    {
-                        o.X = p.Position.X;
-                        o.Y = p.Position.Y;
-                    }
-                });
+                #region 鍧愭爣鍖归厤鏂规硶
+                #endregion
 
-                Reservos.ForEach(o =>
-                {
-                    var p = points.Where(d => d.ID == o.ID).FirstOrDefault();
-                    if (p != null)
-                    {
-                        o.X = p.Position.X;
-                        o.Y = p.Position.Y;
-                    }
-                });
+                #region 鍒犻櫎
+                //[Cloudflight淇敼]2023-11-27    浜岄噸寰幆鍖归厤鍧愭爣閫熷害澶參
+                ////璇诲彇鍧愭爣
+                //Junctions.ForEach(o =>
+                //{
+                //    var p = points.Where(d => d.ID == o.ID).FirstOrDefault();
+                //    if (p != null)
+                //    {
+                //        o.X = p.Position.X;
+                //        o.Y = p.Position.Y;
+                //    }
+                //});
 
-                Tanks.ForEach(o =>
-                {
-                    var p = points.Where(d => d.ID == o.ID).FirstOrDefault();
-                    if (p != null)
-                    {
-                        o.X = p.Position.X;
-                        o.Y = p.Position.Y;
-                    }
-                });
+                //Reservos.ForEach(o =>
+                //{
+                //    var p = points.Where(d => d.ID == o.ID).FirstOrDefault();
+                //    if (p != null)
+                //    {
+                //        o.X = p.Position.X;
+                //        o.Y = p.Position.Y;
+                //    }
+                //});
 
-                Meters.ForEach(o =>
-                {
-                    var p = points.Where(d => d.ID == o.ID).FirstOrDefault();
-                    if (p != null)
-                    {
-                        o.X = p.Position.X;
-                        o.Y = p.Position.Y;
-                    }
-                });
+                //Tanks.ForEach(o =>
+                //{
+                //    var p = points.Where(d => d.ID == o.ID).FirstOrDefault();
+                //    if (p != null)
+                //    {
+                //        o.X = p.Position.X;
+                //        o.Y = p.Position.Y;
+                //    }
+                //});
 
-                Nozzles.ForEach(o =>
-                {
-                    var p = points.Where(d => d.ID == o.ID).FirstOrDefault();
-                    if (p != null)
-                    {
-                        o.X = p.Position.X;
-                        o.Y = p.Position.Y;
-                    }
-                });
+                //Meters.ForEach(o =>
+                //{
+                //    var p = points.Where(d => d.ID == o.ID).FirstOrDefault();
+                //    if (p != null)
+                //    {
+                //        o.X = p.Position.X;
+                //        o.Y = p.Position.Y;
+                //    }
+                //});
 
+                //Nozzles.ForEach(o =>
+                //{
+                //    var p = points.Where(d => d.ID == o.ID).FirstOrDefault();
+                //    if (p != null)
+                //    {
+                //        o.X = p.Position.X;
+                //        o.Y = p.Position.Y;
+                //    }
+                //});
+                #endregion
+
+                #region 浼樺寲鏂规
                 int k1 = 0;
                 int k2 = 0;
-                #region delete
 
-                //Nodes.Sort((a, b) => string.Compare(a.ID, b.ID));
-                //points.Sort((a, b) => string.Compare(a.ID, b.ID));
-                //k1 = 0;
-                //k2 = 0;
-                //while (k1 < Nodes.Count)
-                //{
-                //    var J = Nodes[k1];
-                //    var coor = points[k2];
 
-                //    while (J.ID != coor.ID && k2 < points.Count)
-                //    {
-                //        k2++;
-                //        if (k2 < points.Count) coor = points[k2];
+                Nodes.Sort((a, b) => string.Compare(a.ID, b.ID));
+                points.Sort((a, b) => string.Compare(a.ID, b.ID));
+                k1 = 0;
+                k2 = 0;
+                while (k1 < Nodes.Count)
+                {
+                    var J = Nodes[k1];
+                    var coor = points[k2];
 
-                //    }
-                //    if (k2 == points.Count)
-                //    {
-                //        throw new Exception($"鏈壘鍒癗ode[{J.ID}]鐨勫潗鏍�");
-                //    }
-                //    J.X = coor.Position.X;
-                //    J.Y = coor.Position.Y;
+                    while (J.ID != coor.ID && k2 < points.Count)
+                    {
+                        k2++;
+                        if (k2 < points.Count) coor = points[k2];
 
-                //    k1++;
-                //}
+                    }
+                    if (k2 == points.Count)
+                    {
+                        throw new Exception($"鏈壘鍒癗ode[{J.ID}]鐨勫潗鏍�");
+                    }
+                    J.X = coor.Position.X;
+                    J.Y = coor.Position.Y;
+
+                    k1++;
+                }
                 #endregion
+
 
 
                 //寤虹珛鐐圭嚎鍏崇郴閾捐〃StartNode锛屽厛灏嗙绾夸互Node1锛堣妭鐐�1鐨処D锛夋帓搴忥紝鍐嶅皢Nodes鎸塈D鎺掑簭锛屽缓绔嬩袱涓父鏍噆1銆乲2锛屾鍚戜竴娆″惊鐜紝寤虹珛閾捐〃鍏崇郴
@@ -439,7 +543,6 @@
                     //if (J.MaxDiameter < p.Diameter) J.MaxDiameter = p.Diameter;
                     //J.Links.Add(p);
                     k2++;
-
                 }
                 return true;
             }
@@ -451,7 +554,7 @@
         /// <param name="InpPath">Inp鏂囦欢璺緞</param>
         /// <param name="TemplateInpFullPath">Inp妯℃澘鏂囦欢缁濆璺緞锛屽鏋滀负绌哄氨鐢ㄧ郴缁熼粯璁ゆā鏉挎枃浠�</param>
         /// <exception cref="Exception"></exception>
-        public virtual void BuildToInp(string InpPath, string TemplateInpFullPath = "")
+        public virtual void BuildToInp(string InpPath, string TemplateInpFullPath = "", string sourcePath = null, bool isReplace = false)
         {
 
             string tempString = "";
@@ -462,7 +565,7 @@
             }
             if (!File.Exists(tempPath))
             {
-                throw new Exception("妯℃澘鏂囦欢涓嶅瓨鍦�");
+                throw new Exception("妯℃澘鏂囦欢涓嶅瓨鍦�," + tempPath);
             }
             if (!File.Exists(InpPath))
                 File.Create(InpPath).Close();
@@ -495,18 +598,18 @@
 
             Junctions.ForEach(j =>
             {
-                junctionStringBuilder.AppendLine(j.ToString() + $"{j.Level}\tJunction");
+                junctionStringBuilder.AppendLine(j.ToString() + $"0\tJunction");
                 coorStringBuilder.AppendLine(j.ToCoorString());
 
             });
             Meters.ForEach(m =>
             {
-                junctionStringBuilder.AppendLine(m.ToString() + $"{m.Level}\tMeter");
+                junctionStringBuilder.AppendLine(m.ToString() + $"0\tMeters");
                 coorStringBuilder.AppendLine(m.ToCoorString());
             });
             Nozzles.ForEach(no =>
             {
-                junctionStringBuilder.AppendLine(no.ToString() + $"{no.Level}\tNozzle\t{no.FlowCoefficient}");
+                junctionStringBuilder.AppendLine(no.ToString() + $"0\tNozzle\t{no.FlowCoefficient}");
                 emitterStringBuilder.Append(no.ToEmitterString());
                 coorStringBuilder.AppendLine(no.ToCoorString());
             });
@@ -519,7 +622,7 @@
 
             Reservos.ForEach(o =>
             {
-                reservoirStringBuilder.AppendLine(o.ToString() + $"{o.Level}\t{o.Elev}");
+                reservoirStringBuilder.AppendLine(o.ToString() + $"0\t{o.Elev}");
                 coorStringBuilder.AppendLine(o.ToCoorString());
             });
             string reserverString = reservoirStringBuilder.ToString();
@@ -530,7 +633,7 @@
 
             Tanks.ForEach(o =>
             {
-                tankStringBuilder.AppendLine(o.ToString() + $"{o.Level}");
+                tankStringBuilder.AppendLine(o.ToString());// + $"0");
                 coorStringBuilder.AppendLine(o.ToCoorString());
             });
             string tankString = tankStringBuilder.ToString();
@@ -541,7 +644,7 @@
 
             Pipes.ForEach(p =>
             {
-                pipeStringBuilder.AppendLine(p.ToString() + $"{p.Level}");
+                pipeStringBuilder.AppendLine(p.ToString());// + $"{p.Level}");
                 statusStringBuilder.Append(p.ToStatusString());
             });
 
@@ -553,7 +656,7 @@
 
             Valves.ForEach(o =>
             {
-                valveStringBuilder.AppendLine(o.ToString() + $"{o.Level}");
+                valveStringBuilder.AppendLine(o.ToString());// + $"0");
                 statusStringBuilder.Append(o.ToStatusString());
             });
             string valveString = valveStringBuilder.ToString();
@@ -564,7 +667,7 @@
 
             Pumps.ForEach(o =>
             {
-                pumpStringBuilder.AppendLine(o.ToString() + $"{o.Level}");
+                pumpStringBuilder.AppendLine(o.ToString());// + $"0");
                 statusStringBuilder.Append(o.ToStatusString());
             });
             string pumpString = pumpStringBuilder.ToString();
@@ -634,33 +737,249 @@
             //Global.ClearFileReadOnly(InpPath);
             File.WriteAllText(InpPath, output);
         }
+        //public void BuildToInp(string filePath, string userCoorString = null, string sourcePath = null, bool isReplace = false)
+        //{
 
+        //    if (sourcePath == null) sourcePath = filePath;
+
+        //    string tempString = "";
+        //    if (!isReplace)
+        //    {
+        //        var tempPath = Path.Combine(Directory.GetCurrentDirectory(), @"template\inp\瀵煎嚭妯℃澘.inp");
+        //        if (!File.Exists(tempPath))
+        //        {
+        //            //MessageBox.Show($"妯℃澘鏂囦欢涓嶅瓨鍦╗{tempPath}]");
+        //            return;
+        //        }
+        //        tempString = File.ReadAllText(tempPath);
+        //    }
+        //    else
+        //    {
+        //        tempString = File.ReadAllText(sourcePath);
+        //    }
+
+
+        //    Dictionary<string, string> dictExchange = new Dictionary<string, string>() {
+        //        {"{junctions}","{0}" },
+        //        {"{reservoirs}","{1}" },
+        //        {"{tanks}","{2}" },
+        //        {"{pipes}","{3}" },
+        //        {"{valves}","{4}" },
+        //        {"{pumps}","{5}" },
+
+        //        {"{coor}","{6}" },
+        //        {"{curve}","{7}" },
+        //    };
+        //    dictExchange.ToList().ForEach(m => tempString = tempString.Replace(m.Key, m.Value));
+
+        //    StringBuilder junctionStringBuilder = new StringBuilder();
+
+        //    junctionStringBuilder.AppendLine(";ID              	Elev        	Demand      	Pattern         Type");
+
+        //    Nodes.ForEach(o =>
+        //    {
+        //        //if (!o.Visible) return;
+        //        if (o is JunctionModel j)
+        //            junctionStringBuilder.AppendLine(j.ToString() + $"0\tJunction");
+        //        else if (o is MeterModel m)
+        //            junctionStringBuilder.AppendLine(m.ToString() + $"0\tMeter");
+        //        else if (o is NozzleModel no)
+        //            junctionStringBuilder.AppendLine(no.ToString() + $"0\tNozzle\t{no.FlowCoefficient}");
+        //    });
+        //    string junctionString = junctionStringBuilder.ToString();
+
+        //    StringBuilder reservoirStringBuilder = new StringBuilder();
+
+        //    reservoirStringBuilder.AppendLine(";ID              	Head        	Pattern ");
+
+        //    Reservos.ForEach(o =>
+        //    {
+        //        //if (!o.Visible) return;
+        //        reservoirStringBuilder.AppendLine(o.ToString() + $"0\t{o.Elev}");
+        //    });
+        //    string reserverString = reservoirStringBuilder.ToString();
+
+        //    StringBuilder tankStringBuilder = new StringBuilder();
+
+        //    tankStringBuilder.AppendLine(";ID              	Elevation   	InitLevel   	MinLevel    	MaxLevel    	Diameter    	MinVol      	VolCurve        	Overflow");
+
+        //    Tanks.ForEach(o =>
+        //    {
+        //        //if (!o.Visible) return;
+        //        tankStringBuilder.AppendLine(o.ToString() + $"0");
+        //    });
+        //    string tankString = tankStringBuilder.ToString();
+
+        //    StringBuilder pipeStringBuilder = new StringBuilder();
+
+        //    pipeStringBuilder.AppendLine(";ID              	Node1           	Node2           	Length      	Diameter    	Roughness   	MinorLoss   	Status");
+
+        //    Links.ForEach(o =>
+        //    {
+        //        //if (!o.Visible) return;
+        //        if (o is PipeModel p)
+        //            pipeStringBuilder.AppendLine(p.ToString() + $"0");
+        //        //else if (o is RepeaterViewModel r)
+        //        //    pipeStringBuilder.AppendLine(r.ToString());
+        //    });
+        //    string pipeString = pipeStringBuilder.ToString();
+
+        //    StringBuilder valveStringBuilder = new StringBuilder();
+
+        //    valveStringBuilder.AppendLine(";ID              	Node1           	Node2           	Diameter    	Type	Setting     	MinorLoss  ");
+
+        //    Valves.ForEach(o =>
+        //    {
+        //        //if (!o.Visible) return;
+        //        valveStringBuilder.AppendLine(o.ToString() + $"0");
+        //    });
+        //    string valveString = valveStringBuilder.ToString();
+
+        //    StringBuilder pumpStringBuilder = new StringBuilder();
+
+        //    pumpStringBuilder.AppendLine(";ID              	Node1           	Node2           	Diameter    	Type	Setting     	MinorLoss  ");
+
+        //    Pumps.ForEach(o =>
+        //    {
+        //        //if (!o.Visible) return;
+        //        pumpStringBuilder.AppendLine(o.ToString() + $"0");
+        //    });
+        //    string pumpString = pumpStringBuilder.ToString();
+
+
+        //    StringBuilder curveStringBuilder = new StringBuilder();
+
+
+
+        //    //pumps.ForEach(o =>
+        //    //{
+        //    //    if (!o.Visible || !o.Datasets.ContainsKey("娴侀噺鎵▼鏇茬嚎")) return;
+        //    //    curveStringBuilder.AppendLine(o.Datasets["娴侀噺鎵▼鏇茬嚎"].ToString());
+        //    //});
+        //    if (dict_dataset != null)
+        //        foreach (var kp in dict_dataset)
+        //        {
+        //            curveStringBuilder.AppendLine(kp.Value.ToString());
+        //        }
+        //    string curveString = curveStringBuilder.ToString();
+
+
+        //    StringBuilder coorStringBuilder = new StringBuilder();
+        //    if (userCoorString == null)
+        //    {
+
+        //        coorStringBuilder.AppendLine(";Node            	X-Coord           	Y-Coord");
+        //        Nodes.ForEach(o => coorStringBuilder.AppendLine(o.ToCoorString()));
+        //    }
+        //    else
+        //    {
+        //        coorStringBuilder.Append(userCoorString);
+        //    }
+
+
+
+        //    string coorString = coorStringBuilder.ToString();
+        //    string output = "";
+
+
+
+
+
+        //    StringBuilder emitterStringBuilder = new StringBuilder();
+        //    emitterStringBuilder.AppendLine(";Junction        \tCoefficient");
+        //    Nodes.ForEach(o => emitterStringBuilder.Append(o.ToEmitterString()));
+
+
+
+        //    string emitterString = emitterStringBuilder.ToString();
+
+
+
+
+
+        //    StringBuilder statusStringBuilder = new StringBuilder();
+        //    statusStringBuilder.AppendLine(";ID              \tStatus/Setting\r\n");
+        //    Links.ForEach(o => statusStringBuilder.Append(o.ToStatusString()));
+
+
+
+        //    string statusString = statusStringBuilder.ToString();
+
+
+
+        //    output = tempString;
+
+        //    output = ReplaceContent(output, "JUNCTIONS", junctionString);
+        //    output = ReplaceContent(output, "RESERVOIRS", reserverString);
+        //    output = ReplaceContent(output, "TANKS", tankString);
+        //    output = ReplaceContent(output, "PIPES", pipeString);
+        //    output = ReplaceContent(output, "VALVES", valveString);
+        //    output = ReplaceContent(output, "PUMPS", pumpString);
+        //    output = ReplaceContent(output, "CURVES", curveString);
+
+
+        //    output = ReplaceContent(output, "COORDINATES", coorString);
+        //    output = ReplaceContent(output, "EMITTERS", emitterString);
+        //    output = ReplaceContent(output, "STATUS", statusString);
+        //    string backupFolderPath = Path.Combine(Path.GetDirectoryName(filePath), "bk");
+        //    if (!Directory.Exists(backupFolderPath))
+        //    {
+        //        Directory.CreateDirectory(backupFolderPath);
+        //    }
+
+        //    string backupFileName = $"{Path.GetFileNameWithoutExtension(filePath)}_{DateTime.Now:yyyyMMddHHmmss}{Path.GetExtension(filePath)}";
+        //    string backupFilePath = Path.Combine(backupFolderPath, backupFileName);
+        //    if (File.Exists(filePath)) File.Copy(filePath, backupFilePath, true);
+
+
+        //    // 妫�鏌ユ枃浠舵槸鍚﹀瓨鍦�
+        //    try
+        //    {
+        //        Global.ClearFileReadOnly(filePath);
+
+        //        File.WriteAllText(filePath, output);
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        MessageBox.Show(ex.Message);
+        //    }
+
+        //    //MessageBox.Show($"淇濆瓨鎴愬姛!");
+        //}
         /// <summary>
         /// 鏍规嵁Inp鏂囦欢璁$畻
         /// </summary>
         /// <returns></returns>
         public virtual List<TimePoint> Calc(string InpPath)
         {
-            Epanet epanet = new Epanet();
+            HydraulicModel.Epanet epanet = new HydraulicModel.Epanet();
             var result = new List<TimePoint>();
             var err = epanet.open(InpPath, "d:\\5.log", "");
+
             if (err != 0)
             {
-                throw new Exception($"璁$畻澶辫触锛歿err}");
+                throw new Exception($"鎵撳紑璁$畻鏂囦欢澶辫触锛歿err}");
+            }
+            var errCal = epanet.solveH();
+            if (errCal != 0)
+            {
+                throw new Exception($"璁$畻澶辫触锛歿errCal}");
             }
             int nodeCount = 0, linkCount = 0;
             epanet.getcount((int)CountType.Node, ref nodeCount);
             epanet.getcount((int)CountType.Link, ref linkCount);
-            var sb = new StringBuilder(EpaHelper.MAXID);
+            const int MAXID = 31;
+
+            var sb = new StringBuilder(MAXID);
 
             for (int i = 1; i < nodeCount; i++)
             {
                 epanet.getnodeid(i, sb);
-                var arr = System.Enum.GetValues(typeof(NodeValueType));
+                var arr = System.Enum.GetValues(typeof(HydraulicModel.NodeValueType));
                 for (var j = 0; j < arr.Length; j++)
                 {
                     float v = 0;
-                    var t = (NodeValueType)j;
+                    var t = (HydraulicModel.NodeValueType)j;
                     epanet.getnodevalue(i, (int)t, ref v);
                     result.Add(new TimePoint()
                     {
@@ -673,11 +992,11 @@
             for (int i = 1; i < linkCount; i++)
             {
                 epanet.getlinkid(i, sb);
-                var arr = System.Enum.GetValues(typeof(LinkValueType));
+                var arr = System.Enum.GetValues(typeof(HydraulicModel.LinkValueType));
                 for (var j = 0; j < arr.Length; j++)
                 {
                     float v = 0;
-                    var t = (LinkValueType)j;
+                    var t = (HydraulicModel.LinkValueType)j;
                     epanet.getlinkvalue(i, (int)t, ref v);
                     result.Add(new TimePoint()
                     {
@@ -695,7 +1014,7 @@
         /// <returns></returns>
         public virtual List<TimePoint> Calc()
         {
-            var inpPath = Path.Combine(Directory.GetCurrentDirectory(), @"data\inp\calc.inp");
+            var inpPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"data\inp\calc.inp");
             BuildToInp(inpPath);
             return Calc(inpPath);
         }
@@ -713,17 +1032,24 @@
 
         private string ReplaceContent(string text, string content, string replaceString)
         {
+
+
             string str = replaceString;
+
             string replacedText = ReplaceCoordinatesSection(text, content, str);
+
             return replacedText;
+            //Console.WriteLine(replacedText);
         }
 
-        private string ReplaceCoordinatesSection(string text, string content, string str)
+        public static string ReplaceCoordinatesSection(string text, string content, string str)
         {
             string pattern = $@"(\[{content}\]).*?(\[|$)";
+
             string replacedText = Regex.Replace(text, pattern, match =>
             {
                 string section = match.Groups[2].Value.Trim();
+
                 if (!string.IsNullOrEmpty(section))
                 {
                     return $"{match.Groups[1].Value}\n{str}\n[";
@@ -733,7 +1059,9 @@
                     return $"{match.Groups[1].Value}\n{str}\n[";
                 }
             }, RegexOptions.Singleline);
+
             return replacedText;
         }
+
     }
 }

--
Gitblit v1.9.3