From c44fcc54651c187d0883a041df60a3baf0164e9f Mon Sep 17 00:00:00 2001
From: ningshuxia <ningshuxia0927@outlook.com>
Date: 星期三, 26 三月 2025 17:25:17 +0800
Subject: [PATCH] 系统曲线

---
 WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/propertyform.cs                                         |    8 ++
 WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/MapViewer.cs                                            |  102 +++---------------------
 WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/00/drawmodel/Cube.cs                                    |   16 ++--
 WinFrmUI/Yw.WinFrmUI.Hydro.Q3d.Core/Map/Drawer.resx                                             |    8 +-
 WinFrmUI/PBS.WinFrmUI.Hydro/02-quick-modeling/04-model-draw/QuickModelingModelDrawWizardPage.cs |    6 -
 WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.cs                          |   95 +++++++++++++----------
 WinFrmUI/Yw.WinFrmUI.Hydro.Q3d.Core/Map/Drawer.Designer.cs                                      |    4 
 7 files changed, 94 insertions(+), 145 deletions(-)

diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/02-quick-modeling/04-model-draw/QuickModelingModelDrawWizardPage.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/02-quick-modeling/04-model-draw/QuickModelingModelDrawWizardPage.cs
index 00d0805..29c557e 100644
--- a/WinFrmUI/PBS.WinFrmUI.Hydro/02-quick-modeling/04-model-draw/QuickModelingModelDrawWizardPage.cs
+++ b/WinFrmUI/PBS.WinFrmUI.Hydro/02-quick-modeling/04-model-draw/QuickModelingModelDrawWizardPage.cs
@@ -615,9 +615,7 @@
             {
                 return false;
             }
-
-            _vm.Facility.ModelInfo = Yw.JsonHelper.Object2Json(_vm.Template);
-             
+            SaveModelTemplate();
             return true;
         }
 
@@ -665,7 +663,7 @@
 
             facility.ModelInfo = Yw.JsonHelper.Object2Json(_vm.Template);
             facility.ModelPath = fullPath;
-
+            SaveModelTemplate();
             if (!await BLLFactory<BLL.Facility>.Instance.Update(facility))
             {
                 TipFormHelper.ShowError("鏂板妯″瀷淇℃伅澶辫触!");
diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.cs
index cf4b184..aa86b4a 100644
--- a/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.cs
+++ b/WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/00-core/SystemCurvePage.cs
@@ -194,7 +194,7 @@
             var minDemand = 0;   // 鏈�灏忔�婚渶姘撮噺(m鲁/h)
             var maxDemand = _facility.MaxWaterDemand??45;  // 鏈�澶ф�婚渶姘撮噺(m鲁/h)
             var reservoirElevation = -4; //姘存睜鏍囬珮
-            var calcCount = 10;           // 璁$畻娆℃暟
+            var calcCount = 1000;           // 璁$畻娆℃暟
             var staticPressure = 22.5; //闈欏帇
             var requiredEndPressure = _facility.TerminalPressure??15; //闈欏帇
 
@@ -217,14 +217,20 @@
             using (var helper = new Yw.Epanet.InteropXHelper())
             {
                 var code = helper.Open(inpFilePath, "", "");
+                CheckCode(code);
                 code = helper.GetCount(Yw.Epanet.eCountType.Node, out int totalNodeCount);
-
+                CheckCode(code);
                 var rand = new Random();
                 for (int nodeIndex = 1; nodeIndex <= totalNodeCount; nodeIndex++)
                 {
                     helper.GetNodeType(nodeIndex, out Yw.Epanet.eNodeType nodeType);
                     if (nodeType == Yw.Epanet.eNodeType.Junction)
                     {
+                        code = helper.GetNodeId(nodeIndex, out string id);
+                        if (!id.Contains("M"))
+                        {
+                            continue;
+                        }
                         helper.GetNodeValue(nodeIndex, Yw.Epanet.eNodeProperty.Elevation, out double elevation);
                         nodeConfig.Add(new WaterDistributionCalculator.NodeConfig()
                         {
@@ -246,12 +252,14 @@
                 var allDemands = calculator.CalculateDistributions();
 
                 code = helper.OpenH();
+                CheckCode(code);
                 for (int count = 0; count < allDemands.Count; count++)
                 {
                     var calcNodelDict = new Dictionary<int, CalcNodeViewModel>(userNodeCount);
                     var calcEndPressure = double.MaxValue;
 
                     code = helper.InitH(false);
+                    CheckCode(code);
                     var demands = allDemands[count];
                     foreach (var node in nodeConfig)
                     {
@@ -267,18 +275,15 @@
                         };
                     }
 
-                    code = helper.RunH(out long t);
-
+                    code = helper.RunH(out long t); 
+                    CheckCode(code);
 
                     foreach (var node in nodeConfig)
                     {
                         var userNodeIndex = node.NodeIndex;
                         pressure = 0;
 
-                        //code = helper.GetNodeValue(userNodeIndex, Yw.Epanet.eNodeProperty.Pressure, out pressure);
-                        //CheckCode(code);
-                        //var endPressure = pressure + node.Elevation;
-
+                         
                         code = helper.GetNodeValue(userNodeIndex, Yw.Epanet.eNodeProperty.Pressure, out pressure);
                         CheckCode(code);
                         var endPressure = pressure + node.Elevation;
@@ -292,13 +297,14 @@
                         if (Math.Abs(calcEndPressure) > 100)
                         {
                             code = helper.GetNodeId(userNodeIndex, out string id);
+                            CheckCode(code);
                             var b = id;
                         }
                     }
 
 
                     code = helper.NextH(out long tstep);
-
+                    CheckCode(code);
                     var result = new CalcResultViewModel();
                     result.TotalFlow = demands.TotalDemand;
                     result.EndPressure = Math.Abs(calcEndPressure);
@@ -309,6 +315,7 @@
 
 
                 code = helper.Close();
+                CheckCode(code);
             }
 
 
@@ -359,39 +366,43 @@
                     averagePressurePtList.Add(new Yw.Geometry.Point2d(x, yAverage));
 
                 }
-
-                _curveUpperPressure = new Yw.Ahart.CubicCurve(upperPressurePtList);
-                _curveLowerPressure = new Yw.Ahart.CubicCurve(lowerPressurePtList);
-                _curveAveragePressure = new Yw.Ahart.CubicCurve(averagePressurePtList);
-
-                var upperPressureCurvePtList = _curveUpperPressure.GetPointList(100);
-                var lowerPressureCurvePtList = _curveLowerPressure.GetPointList(100);
-                var averagePressureCurvePtList = _curveAveragePressure.GetPointList(100);
-
-
-                foreach (var item in _waterPointList)
+                if (averagePressurePtList.Count >4)
                 {
-                    _seriesWaterPoint.Points.Add(new SeriesPoint(item.X, item.Y));
-                }
-                foreach (var item in upperPressureCurvePtList)
-                {
-                    _seriesUpperPressure.Points.Add(new SeriesPoint(item.X, item.Y));
-                }
-                foreach (var item in lowerPressureCurvePtList)
-                {
-                    _seriesLowerPressure.Points.Add(new SeriesPoint(item.X, item.Y));
-                }
-                foreach (var item in averagePressureCurvePtList)
-                {
-                    _seriesAveragePressure.Points.Add(new SeriesPoint(item.X, item.Y));
-                }
 
-                var minX = _waterPointList.Min(x => x.X);
-                var maxX = _waterPointList.Max(x => x.X);
 
-                var minY = _waterPointList.Min(x => x.Y);
-                var maxY = _waterPointList.Max(x => x.Y);
+                    _curveUpperPressure = new Yw.Ahart.CubicCurve(upperPressurePtList);
+                    _curveLowerPressure = new Yw.Ahart.CubicCurve(lowerPressurePtList);
+                    _curveAveragePressure = new Yw.Ahart.CubicCurve(averagePressurePtList);
 
+                    var upperPressureCurvePtList = _curveUpperPressure.GetPointList(100);
+                    var lowerPressureCurvePtList = _curveLowerPressure.GetPointList(100);
+                    var averagePressureCurvePtList = _curveAveragePressure.GetPointList(100);
+
+
+                    foreach (var item in _waterPointList)
+                    {
+                        _seriesWaterPoint.Points.Add(new SeriesPoint(item.X, item.Y));
+                    }
+                    foreach (var item in upperPressureCurvePtList)
+                    {
+                        _seriesUpperPressure.Points.Add(new SeriesPoint(item.X, item.Y));
+                    }
+                    foreach (var item in lowerPressureCurvePtList)
+                    {
+                        _seriesLowerPressure.Points.Add(new SeriesPoint(item.X, item.Y));
+                    }
+                    foreach (var item in averagePressureCurvePtList)
+                    {
+                        _seriesAveragePressure.Points.Add(new SeriesPoint(item.X, item.Y));
+                    }
+
+                    var minX = _waterPointList.Min(x => x.X);
+                    var maxX = _waterPointList.Max(x => x.X);
+
+                    var minY = _waterPointList.Min(x => x.Y);
+                    var maxY = _waterPointList.Max(x => x.Y);
+
+                }
 
                 //var minDynamicPressure = minY;
                 //_constantLineDynamicPressure.AxisValue = minDynamicPressure;
@@ -446,8 +457,12 @@
         {
             if (code != Yw.Epanet.eErrorCode.OK)
             {
-                var msg = code.GetDisplayText();
-                throw new Exception(msg);
+                if ((int)code>100)
+                {
+                    var msg = code.GetDisplayText();
+                    throw new Exception(msg);
+                }
+             
             }
         }
 
diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/00/drawmodel/Cube.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/00/drawmodel/Cube.cs
index b2d89c6..65eb937 100644
--- a/WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/00/drawmodel/Cube.cs
+++ b/WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/00/drawmodel/Cube.cs
@@ -16,14 +16,14 @@
         {
             Vertices = new List<PointF3D>
             {
-            new PointF3D(200, 200, 200), // Vertex 0
-            new PointF3D(200, 200, -200), // Vertex 1
-            new PointF3D(200, -200, 200), // Vertex 2
-            new PointF3D(200, -200, -200), // Vertex 3
-            new PointF3D(-200, 200, 200), // Vertex 4
-            new PointF3D(-200, 200, -200), // Vertex 5
-            new PointF3D(-200, -200, 200), // Vertex 6
-            new PointF3D(-200, -200, -200) // Vertex 7
+            new PointF3D(100, 100, 100), // Vertex 0
+            new PointF3D(100, 100, -100), // Vertex 1
+            new PointF3D(100, -100, 100), // Vertex 2
+            new PointF3D(100, -100, -100), // Vertex 3
+            new PointF3D(-100, 100, 100), // Vertex 4
+            new PointF3D(-100, 100, -100), // Vertex 5
+            new PointF3D(-100, -100, 100), // Vertex 6
+            new PointF3D(-100, -100, -100) // Vertex 7
             };
         }
 
diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/MapViewer.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/MapViewer.cs
index 82a8af8..c8b1335 100644
--- a/WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/MapViewer.cs
+++ b/WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/MapViewer.cs
@@ -310,9 +310,7 @@
             _needPaintAll = true;
             PMin_Show = ScreenToMap(new PointF(0, this.map.Height));
             PMax_Show = ScreenToMap(new PointF(this.map.Width, 0));
-            _timerDraw = true;
-
-
+            _timerDraw = true;  
         }
 
         public void SetStartEndPoint(String node1, string node2)
@@ -1435,7 +1433,7 @@
 
             }
 
-            //else
+
             /*鍒ゆ柇鏄惁瑙︾鍒板璞�*/
             if (_mouseHoverCheckFlag)
             {
@@ -1471,6 +1469,7 @@
             _lastMouseX = e.X;
             _lastMouseY = e.Y;
         }
+
         void CubeViewMouseUp(MouseEventArgs e)
         {
             //BookMark    锛氶紶鏍囨姮璧蜂簨浠�
@@ -2176,7 +2175,6 @@
 
         #region 鍙抽敭鑿滃崟
 
-
         private void 杞崲ToolStripMenuItem_Click(object sender, EventArgs e)
         {
             var nodes = selectedNodes;
@@ -2283,55 +2281,19 @@
         #region 缂栬緫妯″紡/娴忚妯″紡鍒囨崲宸ュ叿
 
 
-
         private void toolStripComboBox_expandRepeater_ButtonClick(object sender, EventArgs e)
         {
             _IsEditMode = !_IsEditMode;
-            //toolStripComboBox_娴忚妯″紡.Text = isEditMode ? "缂栬緫妯″紡" : "娴忚妯″紡";
-            //LoadData(true);
         }
 
         private void 娴忚妯″紡ToolStripMenuItem_Click(object sender, EventArgs e)
         {
             var obj = sender as ToolStripItem;
             _IsEditMode = obj.Text == "缂栬緫妯″紡";
-            //toolStripComboBox_娴忚妯″紡.Text = isEditMode ? "缂栬緫妯″紡" : "娴忚妯″紡";
-            //LoadData(true);
         }
+
         #endregion
-
-        /// <summary>
-        /// 宸ュ叿鏍忓彲鐢�
-        /// </summary>
-        public void EnableToolBar()
-        {
-            this.toolStrip1.Enabled = true;
-        }
-
-        /// <summary>
-        /// 宸ュ叿鏍忎笉鍙敤
-        /// </summary>
-        public void DisEnableToolBar()
-        {
-            this.toolStrip1.Enabled = false;
-        }
-
-        /// <summary>
-        /// 闅愯棌宸ュ叿鏍�
-        /// </summary>
-        public void HideToolBar()
-        {
-            this.toolStrip1.Visible = false;
-        }
-
-        /// <summary>
-        /// 鏄剧ず宸ュ叿鏍�
-        /// </summary>
-        public void ShowToolBar()
-        {
-            this.toolStrip1.Visible = true;
-        }
-
+        銆�
         #region 鍒嗘瀽宸ュ叿
 
         private void 姘村钩鏃嬭浆ToolStripMenuItem_Click(object sender, EventArgs e)
@@ -2408,9 +2370,9 @@
             float z = line.Z;
             float[,] rotationMatrix = new float[,]
             {
-        {cos + x * x * (1 - cos), x * y * (1 - cos) - z * sin, x * z * (1 - cos) + y * sin},
-        {y * x * (1 - cos) + z * sin, cos + y * y * (1 - cos), y * z * (1 - cos) - x * sin},
-        {z * x * (1 - cos) - y * sin, z * y * (1 - cos) + x * sin, cos + z * z * (1 - cos)}
+            {cos + x * x * (1 - cos), x * y * (1 - cos) - z * sin, x * z * (1 - cos) + y * sin},
+            {y * x * (1 - cos) + z * sin, cos + y * y * (1 - cos), y * z * (1 - cos) - x * sin},
+            {z * x * (1 - cos) - y * sin, z * y * (1 - cos) + x * sin, cos + z * z * (1 - cos)}
             };
 
             // 瀹氫箟缁撴灉闆嗗悎锛屽苟閬嶅巻杈撳叆鐐归泦鍚堣繘琛屾棆杞鐞�
@@ -2564,13 +2526,7 @@
             {
                 MessageBox.Show("鎷撴墤妫�鏌ラ�氳繃");
             }
-            //if (!string.IsNullOrEmpty(result))
-            //{
-            //    MessageBox.Show(result);
-            //    return;
-            //}
-
-
+            銆�銆�
         }
 
     
@@ -4280,11 +4236,7 @@
 
             //鑳屾櫙鍥剧粯鍒�
             if (this.mapOption.isShowPic && template != null && File.Exists(template.BackGroundImg_FullPath))
-
-            {
-                //var gs = bufferG.Save();
-                // 搴旂敤鐭╅樀鍙樻崲浠ユ姷娑堜箣鍓嶇殑缈昏浆鏁堟灉
-                //bufferG.ScaleTransform(1 / Zoom.X, 1 / Zoom.Y);
+            {銆�
                 List<PointF> p = new List<PointF>();
 
                 if (!this.mapOption.isAutoBackgroundImage)
@@ -5121,8 +5073,7 @@
         {
             var pointT = Get淇瑙掕繕鍘烶oint(point, z, MapCenter);
             pointT = Get骞抽潰杩樺師Point(pointT, MapCenter);
-
-            //var n=new PointF((float)pointR.X - Z(z).X, (float)(pointR.Y - Z(z).Y));
+            銆�
             return pointT;
         }
    
@@ -5185,14 +5136,14 @@
                     break;
             }
             return flag;
-
-
+            銆�
         }
 
 
         #endregion
 
         #region 鍒ゆ柇鍙鎬�
+
         private float Get_dist(PointF A, PointF B)
         {
             float dx = A.X - B.X;
@@ -5200,6 +5151,7 @@
             float dist = (float)Math.Sqrt(dx * dx + dy * dy);
             return dist;
         }
+
         //鍒ゆ柇A璺濈绾挎B鍜孋鐨勮窛绂伙紝濡傛灉瓒呭嚭浜嗙嚎娈电殑鑼冨洿锛屽垯杩斿洖鍒版渶杩戠殑绔偣鐨勮窛绂伙紱璺濈绾挎涓績鐐硅秺杩滐紝杩斿洖鐨勮窛绂昏秺澶э紱
         private float Get_dist(PointF A, PointF B, PointF C, float MaxOff)
         {
@@ -5250,31 +5202,7 @@
             else
                 return true;
         }
-
-        /// <summary>
-        /// 鍒ゆ柇鏄惁鍦ㄥ睆骞曞潗鏍囧唴
-        /// </summary>
-        /// <param name="screenPos"></param>
-        /// <returns></returns>
-        public bool isVisible(List<PointF> list_MapPos)
-        {
-            bool visible = false;
-            foreach (var MapPos in list_MapPos)
-            {
-                if (MapPos.X < PMin_Show.X || MapPos.X > PMax_Show.X || MapPos.Y < PMin_Show.Y || MapPos.Y > PMax_Show.Y)
-                {
-
-                }
-                else
-                {
-                    visible = true;
-                    return true;
-                }
-
-            }
-
-            return visible;
-        }
+銆�
         #endregion 
         #endregion
     }
diff --git a/WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/propertyform.cs b/WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/propertyform.cs
index 8485dd9..8a5a67d 100644
--- a/WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/propertyform.cs
+++ b/WinFrmUI/PBS.WinFrmUI.Hydro/99-map-view/propertyform.cs
@@ -179,6 +179,14 @@
         void RefreshListBox()
         {
             if (selectionSet == null) return;
+            if (comboBox_type.Items.Count<1)
+            {
+                foreach (var item in Enum.GetValues(typeof(MapObjectType)))
+                {
+                    comboBox_type.Items.Add(item);
+                }
+                comboBox_type.SelectedIndex = 0;
+            }
             string txt = comboBox_type.SelectedItem.ToString();
             MapObjectType selectedType = (MapObjectType)Enum.Parse(typeof(MapObjectType), txt);
             // 浣跨敤 LINQ 鏌ヨ绛涢�夐�夋嫨闆�
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Q3d.Core/Map/Drawer.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Q3d.Core/Map/Drawer.Designer.cs
index b0c9cf6..023d6f1 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Q3d.Core/Map/Drawer.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Q3d.Core/Map/Drawer.Designer.cs
@@ -83,9 +83,9 @@
             timer_draw.Interval = 33;
             timer_draw.Tick += timer_draw_Tick;
             // 
-            // MapViewer
+            // Drawer
             // 
-            Name = "MapViewer";
+            Name = "Drawer";
             Size = new Size(1051, 600);
             Load += MapViewer_Load;
             KeyDown += MapViewer_KeyDown;
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Q3d.Core/Map/Drawer.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Q3d.Core/Map/Drawer.resx
index 268e359..815afab 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Q3d.Core/Map/Drawer.resx
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Q3d.Core/Map/Drawer.resx
@@ -1,7 +1,7 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
 <root>
   <!--
-    Microsoft ResX Schema 
+    Microsoft ResX Schema
 
     Version 2.0
 
@@ -18,7 +18,7 @@
     <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
     <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
     <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
     <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
         <value>[base64 mime encoded serialized .NET Framework object]</value>
     </data>
@@ -48,7 +48,7 @@
     value   : The object must be serialized with
             : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
             : and then encoded with base64 encoding.
-    
+
     mimetype: application/x-microsoft.net.object.soap.base64
     value   : The object must be serialized with
             : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
@@ -118,7 +118,7 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
   <metadata name="timer_draw.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>364, 17</value>
+    <value>17, 17</value>
   </metadata>
   <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>51</value>

--
Gitblit v1.9.3