lixiaojun
2024-08-13 0e0709e63ed50093d09fb88ac1ea4eb9b5a37afc
Hydro/Yw.EPAnet.Calcu.Core/04-Inp/InpInteropHelper.cs
@@ -1,11 +1,6 @@
using Hydro.CommonBase;
using System.Diagnostics.Metrics;
using System.Drawing;
using System.Text;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Xml.Linq;
using Hydro.CommonBase;
namespace Yw.EPAnet
{
@@ -22,7 +17,7 @@
        {
            string tempString = "";
            var tempPath = Path.Combine(Directory.GetCurrentDirectory(), @"template\template.inp");
            if (!File.Exists(tempPath))
            {
                throw new Exception("模板文件不存在," + tempPath);
@@ -58,8 +53,8 @@
            net.Junctions.ForEach(o =>
            {
                var pTemp = o.DemandPattern;
                if (string.IsNullOrEmpty(pTemp) || pTemp == ";" || pTemp=="_") pTemp = "";
                if (string.IsNullOrEmpty(pTemp) || pTemp == ";" || pTemp == "_") pTemp = "";
                junctionStringBuilder.AppendLine($"{o.Id}\t{o.Elev}\t{o.Demand}\t{pTemp}\t;\t" + $"0\tJunction");
                coorStringBuilder.AppendLine(o.Id + "    " + o.Position.X + "    " + o.Position.Y);
@@ -102,7 +97,7 @@
            {
                tankStringBuilder.AppendLine($"{o.Id}\t{o.PoolElev}\t{o.InitLevel}\t{o.MinLevel}\t{o.MaxLevel}\t{o.Diameter}\t{o.MinVol}\t{o.VolCurve}\t{o.Overflow}\t;\t");// + $"0");
                coorStringBuilder.AppendLine(o.Id + "    " + o.Position.X+"    "+o.Position.Y);
                coorStringBuilder.AppendLine(o.Id + "    " + o.Position.X + "    " + o.Position.Y);
            });
            string tankString = tankStringBuilder.ToString();
@@ -113,11 +108,13 @@
            net.Pipes.ForEach(o =>
            {
                if (o.Roughness == 0) o.Roughness = 110;
                string statusString = o.LinkStatus == LinkStatus.Closed ? "CLOSED" : "";
                string statusString = o.LinkStatus == PipeStatus.Closed ? "CLOSED" : "";
                pipeStringBuilder.AppendLine($"{o.Id}\t{o.StartNode.Id}\t{o.EndNode.Id}\t{o.Length}\t{o.Diameter}\t{o.Roughness}\t{o.MinorLoss}\t{statusString}\t;\t");// + $"{p.Level}");
                if (o.LinkStatus!=LinkStatus.Open)
                if (o.LinkStatus != PipeStatus.Open)
                {
                    statusStringBuilder.AppendLine(o.Id + "\t" + statusString);
                }
            });
            string pipeString = pipeStringBuilder.ToString();
@@ -129,7 +126,7 @@
            net.Valves.ForEach(o =>
            {
                valveStringBuilder.AppendLine($"{o.Id}\t{o.StartNode.Id}\t{o.EndNode.Id}\t{o.Diameter:F4}\t{o.ValveType}\t{o.ValveSetting}\t{o.MinorLoss:F4}\t;\t");// + $"0");
                if (!string.IsNullOrEmpty(o.LinkStatus ))
                if (!string.IsNullOrEmpty(o.LinkStatus))
                    statusStringBuilder.AppendLine(o.Id + "\t" + o.LinkStatus);
            });
            string valveString = valveStringBuilder.ToString();
@@ -142,7 +139,7 @@
            {
                pumpStringBuilder.AppendLine($"{o.Id}\t{o.StartNode.Id}\t{o.EndNode.Id}\tHead\t{o.CurveQH}\tSPEED\t{o.SpeedRatio}\t;\t");// + $"0");
                if (!string.IsNullOrEmpty(o.LinkStatus))
                    statusStringBuilder.AppendLine(o.Id+"\t"+ o.LinkStatus);
                    statusStringBuilder.AppendLine(o.Id + "\t" + o.LinkStatus);
            });
            string pumpString = pumpStringBuilder.ToString();
            StringBuilder curveStringBuilder = new StringBuilder();
@@ -202,14 +199,14 @@
            output = ReplaceContent(output, "STATUS", statusString);
            return output;
        }
        private static string ReplaceContent(string text, string content, string replaceString)
        {
@@ -370,7 +367,7 @@
                                {
                                    InpPipe p = new InpPipe();
                                    p.Id = parts[0];
                                    p.Node1 = parts[1] ;
                                    p.Node1 = parts[1];
                                    p.Node2 = parts[2];
                                    float length;
                                    if (float.TryParse(parts[3], out length))
@@ -384,7 +381,7 @@
                                    float minorLoss;
                                    if (float.TryParse(parts[6], out minorLoss))
                                        p.MinorLoss = minorLoss;
                                    p.LinkStatus = parts.Length > 7 ? LinkStatus.Closed : LinkStatus.Open;
                                    p.LinkStatus = parts.Length > 7 ? PipeStatus.Closed : PipeStatus.Open;
                                    //int level;
                                    //if (int.TryParse(parts[8], out level))
                                    //    p.Level = level;
@@ -408,7 +405,7 @@
                                    float minorLoss;
                                    if (float.TryParse(parts[6], out minorLoss))
                                        valve.MinorLoss = minorLoss;
                                    net.Valves.Add(valve);
                                }
                                break;
@@ -429,12 +426,12 @@
                }
                sr.Close();
                #region 优化方案
                int k1 = 0;
                int k2 = 0;
                var Nodes= net.GetAllNodes();
                var Nodes = net.GetAllNodes();
                var Links = net.GetAllLinks();
                Nodes.Sort((a, b) => string.Compare(a.Id, b.Id));
                points.Sort((a, b) => string.Compare(a.Id, b.Id));
@@ -457,7 +454,7 @@
                        //throw new Exception($"未找到Node[{J.Id}]的坐标");
                    }
                    J.Position=new Position2d();
                    J.Position = new Position2d();
                    J.Position.X = coor.Position.X;
                    J.Position.Y = coor.Position.Y;
@@ -488,7 +485,7 @@
                        //throw new Exception($"未找到Link[{p.Id}]的起始节点[{((IInpParser)p).Node1}]");
                    }
                    p.StartNode = J;
                    if (J.Links==null) J.Links = new List<ILink>();
                    if (J.Links == null) J.Links = new List<ILink>();
                    J.Links.Add(p);
                    k2++;
                }