From 46f64905a3c309a50c0f245b3350cdeb8dd699c6 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期三, 22 一月 2025 17:29:02 +0800
Subject: [PATCH] 计算优化

---
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewCtrl.cs                  |   66 ++++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewCtrl.Designer.cs         |   58 +++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/04-valve/HydroValveViewModel.cs |   34 ++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewDlg.cs                   |   29 ++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj                        |    3 
 Hydro/Yw.Hydro.Core/ParseHelper.cs                                                   |   75 ++++--
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewDlg.Designer.cs          |   94 ++++++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user                   |    3 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewCtrl.resx                |  120 ++++++++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewDlg.resx                 |  120 ++++++++++
 Hydro/Yw.EPAnet.Calcu.Core/04-Inp/InpInteropHelper.cs                                |    4 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs               |    7 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroCurveViewCtrl.cs                       |    1 
 13 files changed, 584 insertions(+), 30 deletions(-)

diff --git a/Hydro/Yw.EPAnet.Calcu.Core/04-Inp/InpInteropHelper.cs b/Hydro/Yw.EPAnet.Calcu.Core/04-Inp/InpInteropHelper.cs
index 38aa14e..5491245 100644
--- a/Hydro/Yw.EPAnet.Calcu.Core/04-Inp/InpInteropHelper.cs
+++ b/Hydro/Yw.EPAnet.Calcu.Core/04-Inp/InpInteropHelper.cs
@@ -155,6 +155,10 @@
             valveSb.AppendLine(";ID              	Node1           	Node2           	Diameter    	Type	Setting     	MinorLoss  ");
             network.Valves?.ForEach(x =>
             {
+                if (x.Id == "694311")
+                {
+
+                }
                 string settings;
                 if (x.LinkStatus == ValveStatus.None)
                 {
diff --git a/Hydro/Yw.Hydro.Core/ParseHelper.cs b/Hydro/Yw.Hydro.Core/ParseHelper.cs
index 98b1e20..3de3a0d 100644
--- a/Hydro/Yw.Hydro.Core/ParseHelper.cs
+++ b/Hydro/Yw.Hydro.Core/ParseHelper.cs
@@ -339,6 +339,10 @@
                     translationModel.EndNode = allNodes.Find(x => x.Id == translation.EndCode);
                     translationModel.LinkStatus = Yw.Hydro.LinkStatus.Open;
                     translationModel.Length = translation.Length;
+                    if (translation.Length <= 0)
+                    {
+                        translation.Length = 0.1;
+                    }
                     translationModel.Diameter = (translation.StartDiameter + translation.EndDiameter) / 2f;
                     translationModel.Roughness = translation.Roughness;
                     translationModel.MinorLossCoeff = translation.MinorLoss;
@@ -378,16 +382,29 @@
                     //姝㈠洖闃�琚綋鎴愮閬撳鐞�
                     if (valve.ValveType == Yw.Hydro.ValveType.CV)
                     {
+                        double length = 0.01;
+                        if (double.TryParse(valve.ValveSetting, out double valveLength))
+                        {
+                            length = valveLength;
+                            if (length <= 0)
+                            {
+                                length = 0.01;
+                            }
+                        }
                         var pipeModel = new Pipe();
                         pipeModel.Id = valve.Code;
                         pipeModel.Catalog = Yw.EPAnet.Catalog.Pipe;
                         pipeModel.Name = valve.Name;
                         pipeModel.StartNode = allNodes.Find(x => x.Id == valve.StartCode);
                         pipeModel.EndNode = allNodes.Find(x => x.Id == valve.EndCode);
-                        pipeModel.LinkStatus = valve.LinkStatus;
-                        pipeModel.Length = 0.01;
+                        pipeModel.LinkStatus = Yw.Hydro.PipeStatus.Open;
+                        pipeModel.Length = length;
                         pipeModel.Diameter = valve.Diameter;
-                        pipeModel.Roughness = 110;
+                        pipeModel.Roughness = valve.Roughness;
+                        if (pipeModel.Roughness < 90)
+                        {
+                            pipeModel.Roughness = 110;
+                        }
                         pipeModel.MinorLossCoeff = valve.MinorLoss;
                         netWork.Pipes.Add(pipeModel);
                     }
@@ -403,52 +420,64 @@
                         valveModel.Diameter = valve.Diameter;
                         valveModel.MinorLoss = valve.MinorLoss;
                         valveModel.ValveType = valve.ValveType;
-                        //valveModel.ValveSetting = valve.ValveSetting;
                         switch (valve.ValveType)
                         {
                             case Yw.Hydro.ValveType.PRV://鍑忓帇闃�
                                 {
-
+                                    valveModel.ValveSetting = valve.ValveSetting;
                                 }
                                 break;
                             case Yw.Hydro.ValveType.PSV://绋冲帇闃�
                                 {
-
+                                    valveModel.ValveSetting = valve.ValveSetting;
                                 }
                                 break;
                             case Yw.Hydro.ValveType.PBV://鍘嬪姏鍒跺姩闃�
                                 {
-
+                                    valveModel.ValveSetting = valve.ValveSetting;
                                 }
                                 break;
                             case Yw.Hydro.ValveType.FCV://娴侀噺鎺у埗闃�
                                 {
-
+                                    valveModel.ValveSetting = valve.ValveSetting;
                                 }
                                 break;
                             case Yw.Hydro.ValveType.TCV://鑺傛祦鎺у埗闃�
                                 {
                                     valveModel.ValveSetting = "0";
-                                    // var curveol = model.Curves?.Find(x => x.Code == valve.ValveSetting);
-                                    //if (curveol != null)
-                                    //{
-                                    //    var point2dList = curveol.CurveData.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
-                                    //    var ptCurveOL = new Yw.Geometry.CubicSpline2d(point2dList);
-                                    //    valveModel.ValveSetting = ptCurveOL.GetPointY(valve.OpeningDegree).ToString();
-                                    //    if (valve.LinkStatus == Yw.Hydro.LinkStatus.Open)
-                                    //    {
-                                    //        if (valve.OpeningDegree > 0)
-                                    //        {
-                                    //            valveModel.LinkStatus = Yw.EPAnet.ValveStatus.None;
-                                    //        }
-                                    //    }
-                                    //}
-
+                                    var curveol = model.Curves?.Find(x => x.Code == valve.CurveOL);
+                                    if (curveol != null)
+                                    {
+                                        var point2dList = curveol.CurveData.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
+                                        var ptCurveOL = new Yw.Geometry.CubicSpline2d(point2dList);
+                                        valveModel.ValveSetting = ptCurveOL.GetPointY(valve.OpeningDegree).ToString();
+                                        if (valve.LinkStatus == Yw.Hydro.LinkStatus.Open)
+                                        {
+                                            if (valve.OpeningDegree > 0)
+                                            {
+                                                valveModel.LinkStatus = Yw.EPAnet.ValveStatus.None;
+                                            }
+                                        }
+                                    }
                                 }
                                 break;
                             case Yw.Hydro.ValveType.GPV://甯歌闃�闂�
                                 {
+                                    if (valve.Code == "694311")
+                                    {
 
+                                    }
+                                    var curve_ql_code_list = valve.CurvesQL;
+                                    if (curve_ql_code_list == null)
+                                    {
+                                        curve_ql_code_list = new List<string>();
+                                    }
+                                    var curvesql = model.Curves?.Where(x => curve_ql_code_list.Contains(x.Code)).ToList();
+                                    var nearCurveql = curvesql?.OrderBy(x => Math.Abs(valve.OpeningDegree - x.CurveFactor ?? 0)).FirstOrDefault();
+                                    if (nearCurveql != null)
+                                    {
+                                        valveModel.ValveSetting = nearCurveql.Code;
+                                    }
                                 }
                                 break;
                             default: break;
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/04-valve/HydroValveViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/04-valve/HydroValveViewModel.cs
index 0d0044a..ec4bee7 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/04-valve/HydroValveViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/04-valve/HydroValveViewModel.cs
@@ -22,7 +22,7 @@
             this.MinorLoss = rhs.MinorLoss;
             this.OpeningDegree = rhs.OpeningDegree;
             this.CurveOL = rhs.CurveOL;
-            this.CurvesQL = rhs.CurvesQL?.ToList();
+            this.CurvesQL = rhs.CurvesQL?.ToArray();
             UpdateValveSetting();
         }
 
@@ -212,13 +212,33 @@
         public double? ValveLength { get; set; }
 
         /// <summary>
+        /// 鐗规�ф洸绾�
+        /// </summary>
+        [Category("鏁版嵁")]
+        [DisplayName("鐗规�ф洸绾�")]
+        [HydroCurvePro(HydroCurve.Valve)]
+        [PropertyOrder(2020)]
+        [Browsable(true)]
+        public string Curve
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(this.CurveOL))
+                {
+                    return "鏈厤缃�";
+                }
+                return "宸查厤缃�";
+            }
+        }
+
+        /// <summary>
         /// 寮�搴︽崯澶辨洸绾�
         /// </summary>
         [Category("鏁版嵁")]
         [DisplayName("寮�搴︽崯澶辨洸绾�")]
         [HydroCurvePro(HydroCurve.Valve, HydroCurveType.CurveOL)]
-        [PropertyOrder(2009)]
-        [Browsable(true)]
+        [PropertyOrder(2021)]
+        [Browsable(false)]
         public string CurveOL { get; set; }
 
         /// <summary>
@@ -227,9 +247,9 @@
         [Category("鏁版嵁")]
         [DisplayName("姘村ご鎹熷け鏇茬嚎")]
         [HydroCurvePro(HydroCurve.Valve, HydroCurveType.CurvesQL)]
-        [PropertyOrder(2009)]
-        [Browsable(true)]
-        public List<string> CurvesQL { get; set; }
+        [PropertyOrder(2022)]
+        [Browsable(false)]
+        public string[] CurvesQL { get; set; }
 
         /// <summary>
         /// 娴侀噺
@@ -307,7 +327,7 @@
             this.MinorLoss = this.Vmo.MinorLoss;
             this.OpeningDegree = this.Vmo.OpeningDegree;
             this.CurveOL = this.Vmo.CurveOL;
-            this.CurvesQL = this.Vmo.CurvesQL?.ToList();
+            this.CurvesQL = this.Vmo.CurvesQL?.ToArray();
             UpdateValveSetting();
         }
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs
index 41d8e6e..da2f1f2 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs
@@ -226,8 +226,15 @@
             {
                 e.CellText = ((DateTime)e.Properties.Value).ToString("yyyy-MM-dd HH:mm:ss");
             }
+            else if (fullTypeName == typeof(string[]).FullName)
+            {
+                var stringValue = (string[])e.Properties.Value;
+                e.CellText = stringValue?.Length.ToString();
+            }
             else
             {
+
+
                 var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row);
                 if (descriptor != null)
                 {
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroCurveViewCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroCurveViewCtrl.cs
index 6839c25..f318d2c 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroCurveViewCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroCurveViewCtrl.cs
@@ -24,6 +24,7 @@
             {
                 return;
             }
+            _curve = curve;
             var pts = curve.CurveData.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
             this.universalViewChart1.SetBindingData(pts);
             switch (curve.CurveType)
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewCtrl.Designer.cs
new file mode 100644
index 0000000..d350240
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewCtrl.Designer.cs
@@ -0,0 +1,58 @@
+锘縩amespace Yw.WinFrmUI
+{
+    partial class HydroValveCurveViewCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            valveViewChart1 = new Phart.ValveViewChart();
+            SuspendLayout();
+            // 
+            // valveViewChart1
+            // 
+            valveViewChart1.Dock = DockStyle.Fill;
+            valveViewChart1.LineVisible = false;
+            valveViewChart1.Location = new Point(0, 0);
+            valveViewChart1.Margin = new Padding(2, 2, 2, 2);
+            valveViewChart1.Name = "valveViewChart1";
+            valveViewChart1.Size = new Size(953, 552);
+            valveViewChart1.TabIndex = 0;
+            // 
+            // HydroValveCurveViewCtrl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(valveViewChart1);
+            Name = "HydroValveCurveViewCtrl";
+            Size = new Size(953, 552);
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private Phart.ValveViewChart valveViewChart1;
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewCtrl.cs
new file mode 100644
index 0000000..c3666d2
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewCtrl.cs
@@ -0,0 +1,66 @@
+锘縰sing DevExpress.XtraEditors;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Yw.WinFrmUI.Phart;
+
+namespace Yw.WinFrmUI
+{
+    public partial class HydroValveCurveViewCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public HydroValveCurveViewCtrl()
+        {
+            InitializeComponent();
+        }
+
+        private Yw.Model.HydroCurveInfo _curveol = null;//闃�闂ㄥ紑搴︽洸绾�
+        private List<Yw.Model.HydroCurveInfo> _curvesql = null;//姘村ご鎹熷け鏇茬嚎鍒楄〃
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroCurveInfo curveOL, List<Yw.Model.HydroCurveInfo> curvesQL)
+        {
+            _curveol = curveOL;
+            _curvesql = curvesQL;
+            var allVmList = new List<ValveViewChartViewModel>();
+            if (curveOL != null)
+            {
+                var vmol = new ValveViewChartViewModel();
+                vmol.Id = curveOL.Code;
+                vmol.Name = curveOL.Name;
+                vmol.Color = Color.Blue;
+                vmol.CurveType = Ahart.eCurveType.OL;
+                vmol.FeatType = Ahart.eFeatType.Quadratic;
+                vmol.DefPointList = curveOL.CurveData?.Select(x => new Geometry.Point2d(x.X, x.Y)).ToList();
+                vmol.IsSelect = false;
+                allVmList.Add(vmol);
+            }
+            if (curvesQL != null && curvesQL.Count > 0)
+            {
+                foreach (var curveql in curvesQL)
+                {
+                    var vmql = new ValveViewChartViewModel();
+                    vmql.Id = curveql.Code;
+                    vmql.Name = curveql.Name;
+                    vmql.Color = Color.Green;
+                    vmql.CurveType = Ahart.eCurveType.QL;
+                    vmql.FeatType = Ahart.eFeatType.Quadratic;
+                    vmql.DefPointList = curveql.CurveData?.Select(x => new Geometry.Point2d(x.X, x.Y)).ToList();
+                    vmql.IsSelect = false;
+                    allVmList.Add(vmql);
+                }
+            }
+            this.valveViewChart1.SetBindingData(allVmList);
+        }
+
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewCtrl.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewCtrl.resx
@@ -0,0 +1,120 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <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="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    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
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewDlg.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewDlg.Designer.cs
new file mode 100644
index 0000000..647cddb
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewDlg.Designer.cs
@@ -0,0 +1,94 @@
+锘縩amespace Yw.WinFrmUI
+{
+    partial class HydroValveCurveViewDlg
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            ribbon = new DevExpress.XtraBars.Ribbon.RibbonControl();
+            ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage();
+            ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+            hydroValveCurveViewCtrl1 = new HydroValveCurveViewCtrl();
+            ((ISupportInitialize)ribbon).BeginInit();
+            SuspendLayout();
+            // 
+            // ribbon
+            // 
+            ribbon.ExpandCollapseItem.Id = 0;
+            ribbon.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbon.ExpandCollapseItem });
+            ribbon.Location = new Point(0, 0);
+            ribbon.MaxItemId = 1;
+            ribbon.Name = "ribbon";
+            ribbon.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { ribbonPage1 });
+            ribbon.RibbonCaptionAlignment = DevExpress.XtraBars.Ribbon.RibbonCaptionAlignment.Left;
+            ribbon.ShowDisplayOptionsMenuButton = DevExpress.Utils.DefaultBoolean.False;
+            ribbon.Size = new Size(953, 32);
+            // 
+            // ribbonPage1
+            // 
+            ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { ribbonPageGroup1 });
+            ribbonPage1.Name = "ribbonPage1";
+            ribbonPage1.Text = "ribbonPage1";
+            // 
+            // ribbonPageGroup1
+            // 
+            ribbonPageGroup1.Name = "ribbonPageGroup1";
+            ribbonPageGroup1.Text = "ribbonPageGroup1";
+            // 
+            // hydroValveCurveViewCtrl1
+            // 
+            hydroValveCurveViewCtrl1.Dock = DockStyle.Fill;
+            hydroValveCurveViewCtrl1.Location = new Point(0, 32);
+            hydroValveCurveViewCtrl1.Name = "hydroValveCurveViewCtrl1";
+            hydroValveCurveViewCtrl1.Size = new Size(953, 583);
+            hydroValveCurveViewCtrl1.TabIndex = 3;
+            // 
+            // HydroValveCurveViewDlg
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(953, 615);
+            Controls.Add(hydroValveCurveViewCtrl1);
+            Controls.Add(ribbon);
+            FormBorderStyle = FormBorderStyle.SizableToolWindow;
+            Name = "HydroValveCurveViewDlg";
+            Ribbon = ribbon;
+            RibbonVisibility = DevExpress.XtraBars.Ribbon.RibbonVisibility.Hidden;
+            StartPosition = FormStartPosition.CenterParent;
+            Text = "鏌ョ湅鏇茬嚎";
+            ((ISupportInitialize)ribbon).EndInit();
+            ResumeLayout(false);
+            PerformLayout();
+        }
+
+        #endregion
+
+        private DevExpress.XtraBars.Ribbon.RibbonControl ribbon;
+        private DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage1;
+        private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1;
+        private HydroValveCurveViewCtrl hydroValveCurveViewCtrl1;
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewDlg.cs
new file mode 100644
index 0000000..cfc4ce4
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewDlg.cs
@@ -0,0 +1,29 @@
+锘縩amespace Yw.WinFrmUI
+{
+    public partial class HydroValveCurveViewDlg : DevExpress.XtraBars.Ribbon.RibbonForm
+    {
+        public HydroValveCurveViewDlg()
+        {
+            InitializeComponent();
+            this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
+        }
+
+        private Yw.Model.HydroCurveInfo _curveol = null;//闃�闂ㄥ紑搴︽崯澶辨洸绾�
+        private List<Yw.Model.HydroCurveInfo> _curvesql = null;//姘村ご鎹熷け鏇茬嚎鍒楄〃
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroCurveInfo curveol, List<Yw.Model.HydroCurveInfo> curvesql)
+        {
+            _curveol = curveol;
+            _curvesql = curvesql;
+            this.hydroValveCurveViewCtrl1.SetBindingData(curveol, curvesql);
+        }
+
+
+
+
+
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewDlg.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewDlg.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/21-curve/HydroValveCurveViewDlg.resx
@@ -0,0 +1,120 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <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="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    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
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
index babd8e8..35d8aa7 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
@@ -270,6 +270,9 @@
 		<Compile Update="21-curve\HydroCurveEditDlg.cs">
 			<SubType>Form</SubType>
 		</Compile>
+		<Compile Update="21-curve\HydroValveCurveViewDlg.cs">
+		  <SubType>Form</SubType>
+		</Compile>
 		<Compile Update="21-curve\HydroCurveViewDlg.cs">
 			<SubType>Form</SubType>
 		</Compile>
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user
index 161736c..ac217df 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user
@@ -94,6 +94,9 @@
     <Compile Update="21-curve\HydroCurveViewCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
+    <Compile Update="21-curve\HydroValveCurveViewCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Update="99-view\01-q3d\HydroQ3dViewPage.cs">
       <SubType>UserControl</SubType>
     </Compile>

--
Gitblit v1.9.3