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