From 368869e50aa1bc741d4cc319dbd24e798e48b3a2 Mon Sep 17 00:00:00 2001
From: cloudflight <cloudflight@126.com>
Date: 星期六, 20 七月 2024 11:12:06 +0800
Subject: [PATCH] 更新项目名称

---
 Hydraulic/Hydro.Inp2.2/Hydro.Inp.csproj                            |    0 
 Hydraulic/Hydro.Revit2022/Hydro.Revit2022.csproj                   |    1 
 Hydraulic/Hydro.MapView/Model/RepeaterViewModel.cs                 |    2 
 Hydraulic/Hydro.Core/NetWork/NetWork.cs                            | 1084 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 HydroV1.1Core.sln                                                  |   21 -
 Hydro.ClientCore/Hydro.Tool.csproj                                 |    1 
 Hydraulic/Hydro.HydraulicCore/HydraulicCore.vcxproj                |    2 
 Hydraulic/Hydro.Core/NetWork/NetRelationExtentions.cs              |   17 
 Hydraulic/Hydro.MapUI/Map/MapViewer.cs                             |    2 
 Hydraulic/Hydro.MapView/Template/Template.cs                       |    2 
 Hydraulic/Hydro.HydraulicOptimizer/Hydro.HydraulicOptimizer.csproj |    4 
 Hydraulic/Hydro.MapView/MapViewNetWork.cs                          |    2 
 Hydraulic/Hydro.Core/Yw.Epanet.Calcu.Core.csproj                   |    4 
 Hydraulic/Hydro.ConfigModel/Hydro.ConfigModel.csproj               |    2 
 Hydraulic/Hydro.Core/Yw.Epanet.Calcu.Core.csproj.user              |    0 
 Hydraulic/Hydro.HydraulicModel/Yw.EPAnet.Core.csproj               |    0 
 Hydraulic/Hydro.MapView/Common/MapObjectExtensions.cs              |    2 
 Hydraulic/Hydro.HydraulicHelper/Hydro.HydraulicHelper.csproj       |    2 
 Hydraulic/Hydro.MapView/Hydro.MapView.csproj                       |    1 
 Hydraulic/Hydro.MapUI/Hydro.MapUI.csproj                           |    1 
 20 files changed, 1,115 insertions(+), 35 deletions(-)

diff --git a/Hydraulic/Hydro.ConfigModel/Hydro.ConfigModel.csproj b/Hydraulic/Hydro.ConfigModel/Hydro.ConfigModel.csproj
index 79224ae..aee530b 100644
--- a/Hydraulic/Hydro.ConfigModel/Hydro.ConfigModel.csproj
+++ b/Hydraulic/Hydro.ConfigModel/Hydro.ConfigModel.csproj
@@ -57,7 +57,7 @@
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\Hydro.CommonBase\Hydro.CommonBase.csproj" />
-    <ProjectReference Include="..\Hydro.HydraulicModel\Hydro.HydraulicModel.csproj" />
+    <ProjectReference Include="..\Hydro.HydraulicModel\Yw.EPAnet.Core.csproj" />
   </ItemGroup>
   <ItemGroup>
     <Analyzer Include="..\..\packages\Microsoft.DependencyValidation.Analyzers.0.11.0\analyzers\dotnet\cs\Microsoft.DependencyValidation.Analyzers.resources.dll" />
diff --git a/Hydraulic/Hydro.Core/NetWork/NetRelationExtentions.cs b/Hydraulic/Hydro.Core/NetWork/NetRelationExtentions.cs
new file mode 100644
index 0000000..e330a03
--- /dev/null
+++ b/Hydraulic/Hydro.Core/NetWork/NetRelationExtentions.cs
@@ -0,0 +1,17 @@
+锘縰sing Hydro.Core.Model;
+using Hydro.Model;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hydro.Core
+{
+    public static class NetRelationExtentions
+    {
+        
+    }
+}
diff --git a/Hydraulic/Hydro.Core/NetWork/NetWork.cs b/Hydraulic/Hydro.Core/NetWork/NetWork.cs
new file mode 100644
index 0000000..2bd1f14
--- /dev/null
+++ b/Hydraulic/Hydro.Core/NetWork/NetWork.cs
@@ -0,0 +1,1084 @@
+锘縰sing Hydro.CommonBase;
+using 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;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+using static Hydro.Core.EpanetEnum;
+using static Hydro.Core.ObjectEnum;
+
+namespace Hydro.Core
+{
+    [Serializable]
+    public class NetWork //: INetWork
+    {
+        public NetWork()
+        {
+        }
+
+        public List<JunctionModel> Junctions
+        {
+            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 virtual void AddJunctions(List<JunctionModel> junctions)
+        {
+            junctions.ForEach(junction => { AddJunction(junction); });
+        }
+
+        public virtual void AddTank(TankModel tank)
+        {
+            CheckNodesExist(tank);
+            Nodes.Add(tank);
+        }
+
+        public virtual void AddTanks(List<TankModel> tanks)
+        {
+            tanks.ForEach(tank => { AddTank(tank); });
+        }
+
+        public virtual void AddPipe(PipeModel pipe)
+        {
+            CheckLinksExist(pipe);
+            Links.Add(pipe);
+        }
+
+        public virtual void AddPipes(List<PipeModel> pipes)
+        {
+            pipes.ForEach(pipe => { AddPipe(pipe); });
+        }
+        public virtual void AddPump(PumpModel pump)
+        {
+            CheckLinksExist(pump);
+            Links.Add(pump);
+        }
+
+        public virtual void AddPumps(List<PumpModel> pumps)
+        {
+            pumps.ForEach(pump => { AddPump(pump); });
+        }
+        public virtual void AddValve(ValveModel valve)
+        {
+            CheckLinksExist(valve);
+            Links.Add(valve);
+        }
+
+        public virtual void AddValves(List<ValveModel> valves)
+        {
+            valves.ForEach(valve => { AddValve(valve); });
+        }
+        public virtual void AddReservos(ReservoisModel reservois)
+        {
+            CheckNodesExist(reservois);
+            Nodes.Add(reservois);
+        }
+        public virtual void AddReservoss(List<ReservoisModel> reservoiss)
+        {
+            reservoiss.ForEach(reservois => { AddReservos(reservois); });
+        }
+        public virtual void AddMeter(MeterModel meter)
+        {
+            CheckNodesExist(meter);
+            Nodes.Add(meter);
+        }
+        public virtual void AddMeters(List<MeterModel> meters)
+        {
+            meters.ForEach(meter => { AddMeter(meter); });
+        }
+        public virtual void AddNozzle(NozzleModel nozzle)
+        {
+            CheckNodesExist(nozzle);
+            Nodes.Add(nozzle);
+        }
+        public virtual void AddNozzles(List<NozzleModel> nozzles)
+        {
+            nozzles.ForEach(nozzle => { AddNozzle(nozzle); });
+        }
+
+        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鏂囦欢鐢熸垚
+        /// </summary>
+        /// <param name="InpPath"></param>
+        /// <returns></returns>
+        public virtual bool BuildFromInp(string InpPath)
+        {
+            if (InpPath == null || !File.Exists(InpPath)) return false;
+            List<Coor> points = new List<Coor>();
+            StreamReader sr = new StreamReader(InpPath);
+            //try
+            {
+                string line;
+                string section = "";
+                while ((line = sr.ReadLine()) != null)
+                {
+                    if (line.Trim().StartsWith("["))
+                    {
+                        section = line.TrimStart('[').TrimEnd(']');
+                    }
+                    else
+                    {
+                        string s = line.Trim('\t').Trim(' ');
+                        if (s.Length == 0 || s[0] == ';') continue;
+                        line = line.Replace("\t\t", "\t_\t").Replace("\t \t", "\t_\t");
+                        Parts parts = new Parts(line.Split(new char[] { '\t', ' ', ';' }, StringSplitOptions.RemoveEmptyEntries));
+                        switch (section)
+                        {
+                            case "JUNCTIONS":
+                                {
+                                    var ID = parts[0];
+                                    float elev;
+                                    float.TryParse(parts[1], out elev);
+                                    var Elev = elev;
+                                    float demand;
+                                    float.TryParse(parts[2], out demand);
+                                    var Demand = demand;
+                                    var PatternID = parts[3];
+                                    int level;
+                                    int.TryParse(parts[6], out level);
+                                    var Level = level;
+
+                                    if (parts[5] == "Meter")
+                                    {
+                                        AddMeter(new MeterModel()
+                                        {
+                                            ID = ID,
+                                            Elev = Elev,
+                                            Demand = Demand,
+                                            PatternID = PatternID,
+                                        });
+                                    }
+                                    else if (parts[5] == "Nozzle")
+                                    {
+                                        AddNozzle(new NozzleModel()
+                                        {
+                                            ID = ID,
+                                            Elev = Elev,
+                                            Demand = Demand,
+                                            PatternID = PatternID,
+                                        });
+                                    }
+                                    else
+                                    {
+                                        AddJunction(new JunctionModel()
+                                        {
+                                            ID = ID,
+                                            Elev = Elev,
+                                            Demand = Demand,
+                                            PatternID = PatternID,
+                                        });
+                                    }
+
+                                }
+                                break;
+                            case "RESERVOIRS":
+                                {
+                                    ReservoisModel r = new ReservoisModel();
+                                    r.ID = parts[0];
+                                    float head;
+                                    if (float.TryParse(parts[1], out head))
+                                        r.Head = head;
+                                    r.PatternID = parts.Length > 2 ? parts[2] : "";
+                                    int level;
+                                    //if (int.TryParse(parts[3], out level))
+                                    //    r.Level = level;
+                                    AddReservos(r);
+                                }
+                                break;
+                            case "TANKS":
+                                {
+                                    //TankModel tank = new TankModel(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8]);
+                                    float initLevel = 0;
+                                    float.TryParse(parts[2], out initLevel);
+
+                                    float minLevel = 0;
+                                    float.TryParse(parts[3], out minLevel);
+
+                                    float maxLevel = 0;
+                                    float.TryParse(parts[4], out maxLevel);
+
+                                    float diamter = 0;
+                                    float.TryParse(parts[5], out diamter);
+
+                                    float minVol = 0;
+                                    float.TryParse(parts[6], out minVol);
+                                    var tank = new TankModel()
+                                    {
+                                        ID = parts[0],
+                                        Elev = float.Parse(parts[1]),
+                                        InitLevel = initLevel,
+                                        MinLevel = minLevel,
+                                        MaxLevel = maxLevel,
+                                        Diameter = diamter,
+                                        MinVol = minVol,
+                                        VolCurve = "",
+                                        IsOverFlow = true
+                                    };
+                                    //int level;
+                                    //if (int.TryParse(parts[9], out level))
+                                    //    tank.Level = level;
+                                    AddTank(tank);
+                                }
+                                break;
+                            case "PIPES":
+                                {
+                                    PipeModel p = new PipeModel();
+                                    p.ID = parts[0];
+                                    p.Node1 = parts[1];
+                                    p.Node2 = parts[2];
+                                    float length;
+                                    if (float.TryParse(parts[3], out length))
+                                        p.Length = length;
+                                    float diameter;
+                                    if (float.TryParse(parts[4], out diameter))
+                                        p.Diameter = diameter;
+                                    float roughness;
+                                    if (float.TryParse(parts[5], out roughness))
+                                        p.Roughness = roughness;
+                                    float minorLoss;
+                                    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;
+                                    AddPipe(p);
+                                }
+                                break;
+                            case "VALVES":
+                                {
+                                    ValveModel valve = new ValveModel();
+                                    valve.ID = parts[0];
+
+                                    // 鍙栧嚭Node1鍜孨ode2涓殑瀛楁瘝閮ㄥ垎锛屼緥濡傗�淪201326593鈥濊鍙栧嚭涓衡��201326593鈥�
+                                    valve.Node1 = parts[1]; // Regex.Replace(parts[1], "[^0-9]", "");
+                                    valve.Node2 = parts[2]; // Regex.Replace(parts[2], "[^0-9]", "");
+
+                                    float diameter;
+                                    if (float.TryParse(parts[3], out diameter))
+                                        valve.Diameter = diameter;
+                                    valve.Type = parts[4];
+                                    valve.CurvSetting = parts[5];
+                                    float minorLoss;
+                                    if (float.TryParse(parts[6], out minorLoss))
+                                        valve.MinorLoss = minorLoss;
+                                    //int level;
+                                    //if (int.TryParse(parts[7], out level))
+                                    //    valve.Level = level;
+                                    AddValve(valve);
+                                }
+                                break;
+                            case "REPEATERS":
+                                {
+                                    //Repeater repeater = new Repeater();
+                                    //repeater.ID = parts[0];
+                                    //repeater.Node1 = parts[1];
+                                    //repeater.Node2 = parts[2];
+                                    //// 鍙栧嚭Node1鍜孨ode2涓殑瀛楁瘝閮ㄥ垎锛屼緥濡傗�淪201326593鈥濊鍙栧嚭涓衡��201326593鈥�
+                                    //repeater.TemplateID = parts[3];
+                                    //int repeatTimes;
+                                    //if (int.TryParse(parts[4], out repeatTimes))
+                                    //    repeater.RepeatTimes = repeatTimes;
+                                    //RepeatStatus status;
+                                    //if (Enum.TryParse(parts[5], out status))
+                                    //    repeater.Status = status;
+                                    //repeater.NetworkPreName = parts[6];
+                                    //int networkPreStartNum;
+                                    //if (int.TryParse(parts[7], out networkPreStartNum))
+                                    //    repeater.NetworkPreStartNum = networkPreStartNum;
+                                    //bool networkIsAscNum;
+                                    //if (bool.TryParse(parts[8], out networkIsAscNum))
+                                    //    repeater.NetworkIsAscNum = networkIsAscNum;
+                                    //repeater.NetworkShowName = parts[9];
+                                    //int level;
+                                    //if (int.TryParse(parts[10], out level))
+                                    //    repeater.Level = level;
+                                    //Links.Add(repeater);
+                                }
+                                break;
+                            case "COORDINATES":
+                                {
+                                    string id = parts[0];
+                                    float x;
+                                    float y;
+                                    if (float.TryParse(parts[1], out x) && float.TryParse(parts[2], out y))
+                                    {
+                                        points.Add(new Coor(id, new PointF(x, y)));
+                                    }
+                                }
+                                break;
+                        }
+                    }
+                }
+                sr.Close();
+
+                #region 鍧愭爣鍖归厤鏂规硶
+                #endregion
+
+                #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;
+                //    }
+                //});
+
+                //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;
+                //    }
+                //});
+
+                //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;
+                //    }
+                //});
+
+                //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;
+
+
+                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];
+
+                    }
+                    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锛屾鍚戜竴娆″惊鐜紝寤虹珛閾捐〃鍏崇郴
+                //鏃堕棿澶嶆潅搴� O(n)
+                Links.Sort((a, b) => string.Compare(a.Node1, b.Node1));
+                k1 = 0;
+                k2 = 0;
+                while (k2 < Links.Count)
+                {
+                    var p = Links[k2];
+                    var J = Nodes[k1];
+                    while (J.ID != p.Node1 && k1 < Nodes.Count)
+                    {
+                        k1++;
+                        if (k1 < Nodes.Count) J = Nodes[k1];
+
+                    }
+                    if (k1 == Nodes.Count)
+                    {
+                        throw new Exception($"鏈壘鍒癓ink[{p.ID}]鐨勮捣濮嬭妭鐐筟{p.Node1}]");
+                    }
+                    //p.StartNode = J;
+                    //if (J.MaxDiameter < p.Diameter) J.MaxDiameter = p.Diameter;
+                    //J.Links.Add(p);
+                    k2++;
+                }
+
+                //寤虹珛鐐圭嚎鍏崇郴閾捐〃StartNode锛屽厛灏嗙绾夸互Node2锛堣妭鐐�1鐨処D锛夋帓搴忥紝鍐嶅皢Nodes鎸塈D鎺掑簭锛屽缓绔嬩袱涓父鏍噆1銆乲2锛屾鍚戜竴娆″惊鐜紝寤虹珛閾捐〃鍏崇郴
+                //鏃堕棿澶嶆潅搴� O(n)
+                Links.Sort((a, b) => string.Compare(a.Node2, b.Node2));
+                k1 = 0;
+                k2 = 0;
+                while (k2 < Links.Count)
+                {
+                    var p = Links[k2];
+                    var J = Nodes[k1];
+                    while (J.ID != p.Node2 && k1 < Nodes.Count)
+                    {
+                        k1++;
+                        if (k1 < Nodes.Count) J = Nodes[k1];
+                    }
+                    if (k1 == Nodes.Count)
+                    {
+                        throw new Exception($"鏈壘鍒癓ink[{p.ID}]鐨勭粓姝㈣妭鐐筟{p.Node2}]");
+                    }
+                    //p.EndNode = J;
+                    //if (J.MaxDiameter < p.Diameter) J.MaxDiameter = p.Diameter;
+                    //J.Links.Add(p);
+                    k2++;
+                }
+                return true;
+            }
+        }
+
+        /// <summary>
+        /// 鐢熸垚INP鏂囦欢
+        /// </summary>
+        /// <param name="InpPath">Inp鏂囦欢璺緞</param>
+        /// <param name="TemplateInpFullPath">Inp妯℃澘鏂囦欢缁濆璺緞锛屽鏋滀负绌哄氨鐢ㄧ郴缁熼粯璁ゆā鏉挎枃浠�</param>
+        /// <exception cref="Exception"></exception>
+        public virtual void BuildToInp(string InpPath, string TemplateInpFullPath = "", string sourcePath = null, bool isReplace = false)
+        {
+
+            string tempString = "";
+            var tempPath = Path.Combine(Directory.GetCurrentDirectory(), @"template\inp\瀵煎嚭妯℃澘.inp");
+            if (!string.IsNullOrEmpty(TemplateInpFullPath))
+            {
+                tempPath = TemplateInpFullPath;
+            }
+            if (!File.Exists(tempPath))
+            {
+                throw new Exception("妯℃澘鏂囦欢涓嶅瓨鍦�," + tempPath);
+            }
+            
+            if (!File.Exists(InpPath))
+            {
+                FileInfo fi=new FileInfo(InpPath);
+                if (!Directory.Exists(fi.DirectoryName))
+                Directory.CreateDirectory(fi.DirectoryName);
+                File.Create(InpPath).Close();
+
+            }
+            tempString = File.ReadAllText(tempPath);
+            StringBuilder statusStringBuilder = new StringBuilder();
+            statusStringBuilder.AppendLine(";ID              \tStatus/Setting\r\n");
+
+            StringBuilder emitterStringBuilder = new StringBuilder();
+            emitterStringBuilder.AppendLine(";Junction        \tCoefficient");
+
+            StringBuilder coorStringBuilder = new StringBuilder();
+            coorStringBuilder.AppendLine(";Node            	X-Coord           	Y-Coord");
+
+            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");
+
+            Junctions.ForEach(j =>
+            {
+                junctionStringBuilder.AppendLine(j.ToString() + $"0\tJunction");
+                coorStringBuilder.AppendLine(j.ToCoorString());
+
+            });
+            Meters.ForEach(m =>
+            {
+                junctionStringBuilder.AppendLine(m.ToString() + $"0\tMeters");
+                coorStringBuilder.AppendLine(m.ToCoorString());
+            });
+            Nozzles.ForEach(no =>
+            {
+                junctionStringBuilder.AppendLine(no.ToString() + $"0\tNozzle\t{no.FlowCoefficient}");
+                emitterStringBuilder.Append(no.ToEmitterString());
+                coorStringBuilder.AppendLine(no.ToCoorString());
+            });
+
+            string junctionString = junctionStringBuilder.ToString();
+
+            StringBuilder reservoirStringBuilder = new StringBuilder();
+
+            reservoirStringBuilder.AppendLine(";ID              	Head        	Pattern ");
+
+            Reservos.ForEach(o =>
+            {
+                reservoirStringBuilder.AppendLine(o.ToString() + $"0\t{o.Elev}");
+                coorStringBuilder.AppendLine(o.ToCoorString());
+            });
+            string reserverString = reservoirStringBuilder.ToString();
+
+            StringBuilder tankStringBuilder = new StringBuilder();
+
+            tankStringBuilder.AppendLine(";ID              	Elevation   	InitLevel   	MinLevel    	MaxLevel    	Diameter    	MinVol      	VolCurve        	Overflow");
+
+            Tanks.ForEach(o =>
+            {
+                tankStringBuilder.AppendLine(o.ToString());// + $"0");
+                coorStringBuilder.AppendLine(o.ToCoorString());
+            });
+            string tankString = tankStringBuilder.ToString();
+
+            StringBuilder pipeStringBuilder = new StringBuilder();
+
+            pipeStringBuilder.AppendLine(";ID              	Node1           	Node2           	Length      	Diameter    	Roughness   	MinorLoss   	Status");
+
+            Pipes.ForEach(p =>
+            {
+                pipeStringBuilder.AppendLine(p.ToString());// + $"{p.Level}");
+                statusStringBuilder.Append(p.ToStatusString());
+            });
+
+            string pipeString = pipeStringBuilder.ToString();
+
+            StringBuilder valveStringBuilder = new StringBuilder();
+
+            valveStringBuilder.AppendLine(";ID              	Node1           	Node2           	Diameter    	Type	Setting     	MinorLoss  ");
+
+            Valves.ForEach(o =>
+            {
+                valveStringBuilder.AppendLine(o.ToString());// + $"0");
+                statusStringBuilder.Append(o.ToStatusString());
+            });
+            string valveString = valveStringBuilder.ToString();
+
+            StringBuilder pumpStringBuilder = new StringBuilder();
+
+            pumpStringBuilder.AppendLine(";ID              	Node1           	Node2           	Diameter    	Type	Setting     	MinorLoss  ");
+
+            Pumps.ForEach(o =>
+            {
+                pumpStringBuilder.AppendLine(o.ToString());// + $"0");
+                statusStringBuilder.Append(o.ToStatusString());
+            });
+            string pumpString = pumpStringBuilder.ToString();
+            StringBuilder curveStringBuilder = new StringBuilder();
+            curveStringBuilder.AppendLine(@";ID              	X-Value     	Y-Value
+                                            ;HEADLOSS: 
+                                             GPVDefault      	0           	0     
+                                             GPVDefault      	100         	0           
+                                            ;PUMP: 
+                                             PumpDefault     	0           	45.38       
+                                             PumpDefault     	83.33333333 	45.25       
+                                             PumpDefault     	111.1111111 	45.12       
+                                             PumpDefault     	138.8888889 	44.96       
+                                             PumpDefault     	166.6666667 	44.76       
+                                             PumpDefault     	194.4444444 	44.52       
+                                             PumpDefault     	222.2222222 	44.24       
+                                             PumpDefault     	250         	43.92       
+                                             PumpDefault     	277.7777778 	43.56       
+                                             PumpDefault     	305.5555556 	43.17       
+                                             PumpDefault     	333.3333333 	42.73       
+                                             PumpDefault     	361.1111111 	42.25       
+                                             PumpDefault     	388.8888889 	41.74       
+                                             PumpDefault     	416.6666667 	41.18       
+                                             PumpDefault     	444.4444444 	40.58       
+                                             PumpDefault     	472.2222222 	39.95       
+                                             PumpDefault     	500         	39.28       
+                                             PumpDefault     	527.7777778 	38.56       
+                                             PumpDefault     	555.5555556 	37.81       
+                                             PumpDefault     	583.3333333 	37.02       
+                                             PumpDefault     	611.1111111 	36.19       
+                                             PumpDefault     	638.8888889 	35.32       
+                                             PumpDefault     	666.6666667 	34.41       
+                                             PumpDefault     	694.4444444 	33.46       
+                                             PumpDefault     	722.2222222 	32.47       
+                                             PumpDefault     	750         	31.44       
+                                             PumpDefault     	777.7777778 	30.37       
+                                             PumpDefault     	805.5555556 	29.27    ");
+
+            Pumps.ForEach(o =>
+            {
+                curveStringBuilder.AppendLine(o.CreateFlowCurve());
+            });
+            string curveString = curveStringBuilder.ToString();
+            string coorString = coorStringBuilder.ToString();
+            string output = "";
+            string emitterString = emitterStringBuilder.ToString();
+            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(InpPath), "bk");
+            if (!Directory.Exists(backupFolderPath))
+                Directory.CreateDirectory(backupFolderPath);
+
+            string backupFileName = $"{Path.GetFileNameWithoutExtension(InpPath)}_{DateTime.Now:yyyyMMddHHmmss}{Path.GetExtension(InpPath)}";
+            string backupFilePath = Path.Combine(backupFolderPath, backupFileName);
+            FileCopy.Copy(InpPath, backupFilePath, true);
+
+            //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)
+        {
+            HydraulicModel.HydraulicCore epanet = new HydraulicModel.HydraulicCore(true);
+            var result = new List<TimePoint>();
+            var err = epanet.open(InpPath, "", "");
+
+            if (err != 0)
+            {
+                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);
+            const int MAXID = 31;
+
+            var sb = new StringBuilder(MAXID);
+
+            for (int i = 1; i <= nodeCount; i++)
+            {
+                epanet.getnodeid(i, sb);
+                var arr = new string[] {"Press", "Head", "Demand" }; //System.Enum.GetValues(typeof(HydraulicModel.NodeValueType));
+                var arrnum = new int[] { 10, 11, 9 };
+                for (var j = 0; j < arr.Length; j++)
+                {
+                    float v = 0;
+                    var t = (HydraulicModel.NodeValueType)j;
+                    epanet.getnodevalue(i, arrnum[j], ref v);
+                    result.Add(new TimePoint()
+                    {
+                        Key = arr[j] + "_"+sb.ToString(),
+                        Value = v,
+                    });
+                }
+            }
+
+            for (int i = 1; i <= linkCount; i++)
+            {
+                epanet.getlinkid(i, sb);
+                //var arr = System.Enum.GetValues(typeof(HydraulicModel.LinkValueType));
+                var arr = new string[] { "Flow", "Velocity", "Headloss" }; //System.Enum.GetValues(typeof(HydraulicModel.NodeValueType));
+                var arrnum = new int[] { 8, 9, 10 };
+                for (var j = 0; j < arr.Length; j++)
+                {
+                    float v = 0;
+                    var t = (HydraulicModel.LinkValueType)j;
+                    epanet.getlinkvalue(i, arrnum[j], ref v);
+                    result.Add(new TimePoint()
+                    {
+                        Key = arr[j] + "_" +sb.ToString(),
+                        Value = v,
+                    });
+                }
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 鍏堢敓鎴怚np鏂囦欢锛屽啀璁$畻
+        /// </summary>
+        /// <returns></returns>
+        public virtual List<TimePoint> Calc()
+        {
+
+            var inpPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"data\inp\calc.inp");
+            BuildToInp(inpPath);
+            return Calc(inpPath);
+        }
+
+        /// <summary>
+        /// 鏁版嵁鏈夋晥鎬ф牎楠�
+        /// </summary>
+        /// <returns></returns>
+        public virtual CheckModel Check()
+        {
+            var result = new CheckModel();
+
+            return result;
+        }
+
+        private string ReplaceContent(string text, string content, string replaceString)
+        {
+
+
+            string str = replaceString;
+
+            string replacedText = ReplaceCoordinatesSection(text, content, str);
+
+            return replacedText;
+            //Console.WriteLine(replacedText);
+        }
+
+        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[";
+                }
+                else
+                {
+                    return $"{match.Groups[1].Value}\n{str}\n[";
+                }
+            }, RegexOptions.Singleline);
+
+            return replacedText;
+        }
+
+    }
+
+ 
+
+
+}
diff --git a/Hydraulic/Hydro.Core/Hydro.Core.csproj b/Hydraulic/Hydro.Core/Yw.Epanet.Calcu.Core.csproj
similarity index 87%
rename from Hydraulic/Hydro.Core/Hydro.Core.csproj
rename to Hydraulic/Hydro.Core/Yw.Epanet.Calcu.Core.csproj
index 12e4508..5117ebd 100644
--- a/Hydraulic/Hydro.Core/Hydro.Core.csproj
+++ b/Hydraulic/Hydro.Core/Yw.Epanet.Calcu.Core.csproj
@@ -29,4 +29,8 @@
     <Compile Remove="Object\LinkObject.cs" />
     <Compile Remove="Object\VisualObject.cs" />
   </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Hydro.CommonBase\Hydro.CommonBase.csproj" />
+    <ProjectReference Include="..\Hydro.ConfigModel\Hydro.ConfigModel.csproj" />
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/Hydraulic/Hydro.Core/Hydro.Core.csproj.user b/Hydraulic/Hydro.Core/Yw.Epanet.Calcu.Core.csproj.user
similarity index 100%
rename from Hydraulic/Hydro.Core/Hydro.Core.csproj.user
rename to Hydraulic/Hydro.Core/Yw.Epanet.Calcu.Core.csproj.user
diff --git a/Hydraulic/Hydro.HydraulicCore/HydraulicCore.vcxproj b/Hydraulic/Hydro.HydraulicCore/HydraulicCore.vcxproj
index 8e9a251..a2d4214 100644
--- a/Hydraulic/Hydro.HydraulicCore/HydraulicCore.vcxproj
+++ b/Hydraulic/Hydro.HydraulicCore/HydraulicCore.vcxproj
@@ -31,7 +31,7 @@
     <RootNamespace>ModelEpaCalc</RootNamespace>
     <Keyword>ManagedCProj</Keyword>
     <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
-    <ProjectName>Hydro.HydraulicCore</ProjectName>
+    <ProjectName>Yw.EPAcore.Core</ProjectName>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
diff --git a/Hydraulic/Hydro.HydraulicHelper/Hydro.HydraulicHelper.csproj b/Hydraulic/Hydro.HydraulicHelper/Hydro.HydraulicHelper.csproj
index befd191..6eb755b 100644
--- a/Hydraulic/Hydro.HydraulicHelper/Hydro.HydraulicHelper.csproj
+++ b/Hydraulic/Hydro.HydraulicHelper/Hydro.HydraulicHelper.csproj
@@ -47,7 +47,7 @@
     <ProjectReference Include="..\Hydro.CodeProvider\Hydro.CodeProvider.csproj" />
     <ProjectReference Include="..\Hydro.CommonBase\Hydro.CommonBase.csproj" />
     <ProjectReference Include="..\Hydro.ConfigModel\Hydro.ConfigModel.csproj" />
-    <ProjectReference Include="..\Hydro.HydraulicModel\Hydro.HydraulicModel.csproj" />
+    <ProjectReference Include="..\Hydro.HydraulicModel\Yw.EPAnet.Core.csproj" />
   </ItemGroup>
   <ItemGroup>
     <Analyzer Include="..\..\packages\Microsoft.DependencyValidation.Analyzers.0.11.0\analyzers\dotnet\cs\Microsoft.DependencyValidation.Analyzers.resources.dll" />
diff --git a/Hydraulic/Hydro.HydraulicModel/Hydro.HydraulicModel.csproj b/Hydraulic/Hydro.HydraulicModel/Yw.EPAnet.Core.csproj
similarity index 100%
rename from Hydraulic/Hydro.HydraulicModel/Hydro.HydraulicModel.csproj
rename to Hydraulic/Hydro.HydraulicModel/Yw.EPAnet.Core.csproj
diff --git a/Hydraulic/Hydro.HydraulicOptimizer/Hydro.HydraulicOptimizer.csproj b/Hydraulic/Hydro.HydraulicOptimizer/Hydro.HydraulicOptimizer.csproj
index b7c56e4..35d8a83 100644
--- a/Hydraulic/Hydro.HydraulicOptimizer/Hydro.HydraulicOptimizer.csproj
+++ b/Hydraulic/Hydro.HydraulicOptimizer/Hydro.HydraulicOptimizer.csproj
@@ -17,9 +17,9 @@
     <ProjectReference Include="..\Hydro.CodeProvider\Hydro.CodeProvider.csproj" />
     <ProjectReference Include="..\Hydro.CommonBase\Hydro.CommonBase.csproj" />
     <ProjectReference Include="..\Hydro.ConfigModel\Hydro.ConfigModel.csproj" />
-    <ProjectReference Include="..\Hydro.Core\Hydro.Core.csproj" />
+    <ProjectReference Include="..\Hydro.Core\Yw.Epanet.Calcu.Core.csproj" />
     <ProjectReference Include="..\Hydro.HydraulicHelper\Hydro.HydraulicHelper.csproj" />
-    <ProjectReference Include="..\Hydro.HydraulicModel\Hydro.HydraulicModel.csproj" />
+    <ProjectReference Include="..\Hydro.HydraulicModel\Yw.EPAnet.Core.csproj" />
   </ItemGroup>
   <ItemGroup>
     <PackageReference Include="Dapper" Version="2.1.28" />
diff --git a/Hydraulic/Hydro.Inp2.2/Hydro.Inp2.2.csproj b/Hydraulic/Hydro.Inp2.2/Hydro.Inp.csproj
similarity index 100%
rename from Hydraulic/Hydro.Inp2.2/Hydro.Inp2.2.csproj
rename to Hydraulic/Hydro.Inp2.2/Hydro.Inp.csproj
diff --git a/Hydraulic/Hydro.MapUI/Hydro.MapUI.csproj b/Hydraulic/Hydro.MapUI/Hydro.MapUI.csproj
index bfa1cf6..5b262d0 100644
--- a/Hydraulic/Hydro.MapUI/Hydro.MapUI.csproj
+++ b/Hydraulic/Hydro.MapUI/Hydro.MapUI.csproj
@@ -55,7 +55,6 @@
   <ItemGroup>
     <ProjectReference Include="..\Hydro.CommonBase\Hydro.CommonBase.csproj" />
     <ProjectReference Include="..\Hydro.Core\Hydro.Core.csproj" />
-    <ProjectReference Include="..\Hydro.Inp2.2\Hydro.Inp2.2.csproj" />
     <ProjectReference Include="..\Hydro.MapView\Hydro.MapView.csproj" />
   </ItemGroup>
   <ItemGroup>
diff --git a/Hydraulic/Hydro.MapUI/Map/MapViewer.cs b/Hydraulic/Hydro.MapUI/Map/MapViewer.cs
index eb20cc1..8aa6812 100644
--- a/Hydraulic/Hydro.MapUI/Map/MapViewer.cs
+++ b/Hydraulic/Hydro.MapUI/Map/MapViewer.cs
@@ -3,7 +3,7 @@
 using DevExpress.XtraEditors.Filtering;
 using Hydro.CommonBase;
 using Hydro.Core.Model;
-using Hydro.Inp;
+using Hydro.Core;
 //using ConfigApp;
 //using DevExpress.Diagram.Core.Layout;
 //using DevExpress.DirectX.NativeInterop.Direct2D;
diff --git a/Hydraulic/Hydro.MapView/Common/MapObjectExtensions.cs b/Hydraulic/Hydro.MapView/Common/MapObjectExtensions.cs
index c4e0d99..aa23090 100644
--- a/Hydraulic/Hydro.MapView/Common/MapObjectExtensions.cs
+++ b/Hydraulic/Hydro.MapView/Common/MapObjectExtensions.cs
@@ -1,4 +1,4 @@
-锘縰sing Hydro.Inp;
+锘縰sing Hydro.Core;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
diff --git a/Hydraulic/Hydro.MapView/Hydro.MapView.csproj b/Hydraulic/Hydro.MapView/Hydro.MapView.csproj
index 0970430..f4014f9 100644
--- a/Hydraulic/Hydro.MapView/Hydro.MapView.csproj
+++ b/Hydraulic/Hydro.MapView/Hydro.MapView.csproj
@@ -32,7 +32,6 @@
     <ProjectReference Include="..\Hydro.ConfigModel\Hydro.ConfigModel.csproj" />
     <ProjectReference Include="..\Hydro.Core\Hydro.Core.csproj" />
     <ProjectReference Include="..\Hydro.HydraulicModel\Hydro.HydraulicModel.csproj" />
-    <ProjectReference Include="..\Hydro.Inp2.2\Hydro.Inp2.2.csproj" />
   </ItemGroup>
   <ItemGroup>
     <PackageReference Include="MathNet.Numerics" Version="4.1.0" />
diff --git a/Hydraulic/Hydro.MapView/MapViewNetWork.cs b/Hydraulic/Hydro.MapView/MapViewNetWork.cs
index b776855..d99cb73 100644
--- a/Hydraulic/Hydro.MapView/MapViewNetWork.cs
+++ b/Hydraulic/Hydro.MapView/MapViewNetWork.cs
@@ -1,5 +1,5 @@
 锘縰sing Hydro.Core.Model;
-using Hydro.Inp;
+//using Hydro.Inp;
 using Newtonsoft.Json.Linq;
 using Newtonsoft.Json;
 using System;
diff --git a/Hydraulic/Hydro.MapView/Model/RepeaterViewModel.cs b/Hydraulic/Hydro.MapView/Model/RepeaterViewModel.cs
index 42b653c..2ce6a44 100644
--- a/Hydraulic/Hydro.MapView/Model/RepeaterViewModel.cs
+++ b/Hydraulic/Hydro.MapView/Model/RepeaterViewModel.cs
@@ -1,5 +1,5 @@
 锘縰sing Hydro.CommonBase;
-using Hydro.Inp;
+using Hydro.Core;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
diff --git a/Hydraulic/Hydro.MapView/Template/Template.cs b/Hydraulic/Hydro.MapView/Template/Template.cs
index a43dc2b..3043aa3 100644
--- a/Hydraulic/Hydro.MapView/Template/Template.cs
+++ b/Hydraulic/Hydro.MapView/Template/Template.cs
@@ -1,5 +1,5 @@
 锘縰sing Hydro.CommonBase;
-using Hydro.Inp;
+//using Hydro.Inp;
 using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
diff --git a/Hydraulic/Hydro.Revit2022/Hydro.Revit2022.csproj b/Hydraulic/Hydro.Revit2022/Hydro.Revit2022.csproj
index c21dfa4..2b68eb1 100644
--- a/Hydraulic/Hydro.Revit2022/Hydro.Revit2022.csproj
+++ b/Hydraulic/Hydro.Revit2022/Hydro.Revit2022.csproj
@@ -24,6 +24,5 @@
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\Hydro.Core\Hydro.Core.csproj" />
-    <ProjectReference Include="..\Hydro.Inp2.2\Hydro.Inp2.2.csproj" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/Hydro.ClientCore/Hydro.Tool.csproj b/Hydro.ClientCore/Hydro.Tool.csproj
index af57e82..cd48f09 100644
--- a/Hydro.ClientCore/Hydro.Tool.csproj
+++ b/Hydro.ClientCore/Hydro.Tool.csproj
@@ -23,7 +23,6 @@
     <ProjectReference Include="..\Hydraulic\Hydro.CommonBase\Hydro.CommonBase.csproj" />
     <ProjectReference Include="..\Hydraulic\Hydro.Core\Hydro.Core.csproj" />
     <ProjectReference Include="..\Hydraulic\Hydro.HydraulicOptimizer\Hydro.HydraulicOptimizer.csproj" />
-    <ProjectReference Include="..\Hydraulic\Hydro.Inp2.2\Hydro.Inp2.2.csproj" />
     <ProjectReference Include="..\Hydraulic\Hydro.MapUI\Hydro.MapUI.csproj" />
     <ProjectReference Include="..\Hydraulic\Hydro.MapView\Hydro.MapView.csproj" />
   </ItemGroup>
diff --git a/HydroV1.1Core.sln b/HydroV1.1Core.sln
index a9653a5..76d30d2 100644
--- a/HydroV1.1Core.sln
+++ b/HydroV1.1Core.sln
@@ -8,8 +8,6 @@
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hydro.Core", "Hydraulic\Hydro.Core\Hydro.Core.csproj", "{CA211620-16A7-4953-929D-723A5F9D3239}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hydro.Inp2.2", "Hydraulic\Hydro.Inp2.2\Hydro.Inp2.2.csproj", "{FFFBE974-BA86-420D-AA27-6DB215017C8C}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hydro.MapUI", "Hydraulic\Hydro.MapUI\Hydro.MapUI.csproj", "{50A0264A-17C1-4132-BF90-91E4BA593C88}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hydro.MapView", "Hydraulic\Hydro.MapView\Hydro.MapView.csproj", "{18E2E3D7-508E-4781-A760-BA852564E409}"
@@ -65,24 +63,6 @@
 		{CA211620-16A7-4953-929D-723A5F9D3239}.Release|x64.Build.0 = Release|Any CPU
 		{CA211620-16A7-4953-929D-723A5F9D3239}.Release|x86.ActiveCfg = Release|Any CPU
 		{CA211620-16A7-4953-929D-723A5F9D3239}.Release|x86.Build.0 = Release|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.Debug|x64.Build.0 = Debug|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.Debug|x86.Build.0 = Debug|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.dll_test|Any CPU.ActiveCfg = Debug|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.dll_test|Any CPU.Build.0 = Debug|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.dll_test|x64.ActiveCfg = Debug|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.dll_test|x64.Build.0 = Debug|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.dll_test|x86.ActiveCfg = Debug|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.dll_test|x86.Build.0 = Debug|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.Release|Any CPU.Build.0 = Release|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.Release|x64.ActiveCfg = Release|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.Release|x64.Build.0 = Release|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.Release|x86.ActiveCfg = Release|Any CPU
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C}.Release|x86.Build.0 = Release|Any CPU
 		{50A0264A-17C1-4132-BF90-91E4BA593C88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{50A0264A-17C1-4132-BF90-91E4BA593C88}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{50A0264A-17C1-4132-BF90-91E4BA593C88}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -305,7 +285,6 @@
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
 		{CA211620-16A7-4953-929D-723A5F9D3239} = {5B5DE24F-D205-4B5A-A439-8EA61C1B23C7}
-		{FFFBE974-BA86-420D-AA27-6DB215017C8C} = {5B5DE24F-D205-4B5A-A439-8EA61C1B23C7}
 		{50A0264A-17C1-4132-BF90-91E4BA593C88} = {5B5DE24F-D205-4B5A-A439-8EA61C1B23C7}
 		{18E2E3D7-508E-4781-A760-BA852564E409} = {5B5DE24F-D205-4B5A-A439-8EA61C1B23C7}
 		{78653BED-368A-470D-A021-929F2E583313} = {5B5DE24F-D205-4B5A-A439-8EA61C1B23C7}

--
Gitblit v1.9.3