From 5610ef481946ff15d856f65e08b3f25aeaf3e269 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期二, 24 九月 2024 10:54:15 +0800
Subject: [PATCH] 新增曲线设置界面

---
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveCtrl.cs          |  120 +++++
 Desktop/HStation.Desktop.Xhs.Core/Properties/Resources.resx                        |    3 
 Desktop/HStation.Desktop.Xhs.Core/Resources/app.ico                                |    0 
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj                  |    4 
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/ComponentsBlink.js                    |   24 +
 WinFrmUI/Yw.WinFrmUI.Core/11-global/GlobalParas.cs                                 |    5 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveDlg.cs           |   55 ++
 Desktop/HStation.Desktop.Xhs.Core/Program.cs                                       |    1 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveCtrl.Designer.cs |  401 +++++++++++++++++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user                 |    6 
 WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/01-network/00-core/Network_Method.cs           |   27 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/HydroCurveViewDlg.cs          |    1 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveDlg.resx         |  120 +++++
 WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/02-panel/NetworkPanelDebug.cs                  |   68 ++
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/ComponentsColor.js                    |    7 
 Desktop/HStation.Desktop.Xhs.Core/Properties/Resources.Designer.cs                 |   10 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveCtrl.resx        |  145 ++++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/HydroParterPropertyCtrl.cs             |   62 ++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveDlg.Designer.cs  |  175 ++++++++
 19 files changed, 1,202 insertions(+), 32 deletions(-)

diff --git a/Desktop/HStation.Desktop.Xhs.Core/Program.cs b/Desktop/HStation.Desktop.Xhs.Core/Program.cs
index 1075ad2..c8821c8 100644
--- a/Desktop/HStation.Desktop.Xhs.Core/Program.cs
+++ b/Desktop/HStation.Desktop.Xhs.Core/Program.cs
@@ -81,6 +81,7 @@
                         Assembly.Load("HStation.BLL.Xhs.Core")
                     );
                 DbFirstHelper.Initial();
+                Yw.WinFrmUI.GlobalParas.AppIcon = HStation.Desktop.Xhs.Core.Properties.Resources.app;
                 Application.Run(new MainForm());
             }
         }
diff --git a/Desktop/HStation.Desktop.Xhs.Core/Properties/Resources.Designer.cs b/Desktop/HStation.Desktop.Xhs.Core/Properties/Resources.Designer.cs
index 85ddcb0..79b3359 100644
--- a/Desktop/HStation.Desktop.Xhs.Core/Properties/Resources.Designer.cs
+++ b/Desktop/HStation.Desktop.Xhs.Core/Properties/Resources.Designer.cs
@@ -61,6 +61,16 @@
         }
         
         /// <summary>
+        ///   鏌ユ壘绫讳技浜� (鍥炬爣) 鐨� System.Drawing.Icon 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
+        /// </summary>
+        internal static System.Drawing.Icon app {
+            get {
+                object obj = ResourceManager.GetObject("app", resourceCulture);
+                return ((System.Drawing.Icon)(obj));
+            }
+        }
+        
+        /// <summary>
         ///   鏌ユ壘 System.Drawing.Bitmap 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
         /// </summary>
         internal static System.Drawing.Bitmap loginbg {
diff --git a/Desktop/HStation.Desktop.Xhs.Core/Properties/Resources.resx b/Desktop/HStation.Desktop.Xhs.Core/Properties/Resources.resx
index ac77954..f971b8f 100644
--- a/Desktop/HStation.Desktop.Xhs.Core/Properties/Resources.resx
+++ b/Desktop/HStation.Desktop.Xhs.Core/Properties/Resources.resx
@@ -118,6 +118,9 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
   <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="app" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\app.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
   <data name="loginbg" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\loginbg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
diff --git a/Desktop/HStation.Desktop.Xhs.Core/Resources/app.ico b/Desktop/HStation.Desktop.Xhs.Core/Resources/app.ico
new file mode 100644
index 0000000..fd64892
--- /dev/null
+++ b/Desktop/HStation.Desktop.Xhs.Core/Resources/app.ico
Binary files differ
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
index a4a7d58..ec1e492 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
@@ -29,6 +29,7 @@
     <None Remove="bimface\html\Interop3d.html" />
     <None Remove="bimface\js\Background.js" />
     <None Remove="bimface\js\CameraStatus.js" />
+    <None Remove="bimface\js\ComponentsBlink.js" />
     <None Remove="bimface\js\ComponentsColor.js" />
     <None Remove="bimface\js\ComponentsSelected.js" />
     <None Remove="bimface\js\ComponentsTranslucent.js" />
@@ -58,6 +59,9 @@
     <Content Include="bimface\js\ComponentsColor.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="bimface\js\ComponentsBlink.js">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="bimface\js\ComponentsSelected.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/ComponentsBlink.js b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/ComponentsBlink.js
new file mode 100644
index 0000000..feb9044
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/ComponentsBlink.js
@@ -0,0 +1,24 @@
+锘�// *************** 鏋勪欢銆佸閮ㄦ瀯浠躲�佹埧闂村己璋冩晥鏋� ***************
+var _isBlinkComponentsActivated = false;
+
+//璁剧疆寮鸿皟鏋勪欢
+//#32D3A6 0.8
+function setBlinkComponents(ids, color, transparency) {
+    if (_isBlinkComponentsActivated) {
+        clearBlinkComponents();
+    }
+    // 鏋勪欢闂儊                
+    _viewer.addBlinkComponentsById(ids);
+    _viewer.setBlinkColor(new Glodon.Web.Graphics.Color(color, transparency));
+    _viewer.enableBlinkComponents(true);
+    _viewer.setBlinkIntervalTime(500);
+    _viewer.render();
+    _isBlinkComponentsActivated = true;
+}
+
+//娓呴櫎寮鸿皟鏋勪欢
+function clearBlinkComponents() {
+    _viewer.clearAllBlinkComponents();
+    _viewer.render();
+    _isBlinkComponentsActivated = false;
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/ComponentsColor.js b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/ComponentsColor.js
index 6c23088..a6d43ca 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/ComponentsColor.js
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/ComponentsColor.js
@@ -1,4 +1,6 @@
-锘�//鏀瑰彉閮ㄤ欢棰滆壊
+锘�// *************** 鏋勪欢鐫�鑹� ***************
+
+//鏀瑰彉閮ㄤ欢棰滆壊
 function overrideComponentsColor(colorSettings) {
     for (var i = 0; i < colorSettings.length; i++) {
         var item = colorSettings[i];
@@ -13,4 +15,5 @@
 function restoreComponentsColor(ids) {
     _viewer.restoreComponentsColorById(ids);
     _viewer.render();
-}
\ No newline at end of file
+}
+
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/11-global/GlobalParas.cs b/WinFrmUI/Yw.WinFrmUI.Core/11-global/GlobalParas.cs
index c780a53..bee34a0 100644
--- a/WinFrmUI/Yw.WinFrmUI.Core/11-global/GlobalParas.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Core/11-global/GlobalParas.cs
@@ -5,6 +5,9 @@
     /// </summary>
     public class GlobalParas
     {
-
+        /// <summary>
+        /// 
+        /// </summary>
+        public static Icon AppIcon { get; set; }
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/HydroCurveViewDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/HydroCurveViewDlg.cs
index 0723c49..7b91904 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/HydroCurveViewDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/HydroCurveViewDlg.cs
@@ -5,6 +5,7 @@
         public HydroCurveViewDlg()
         {
             InitializeComponent();
+            this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
         }
 
         /// <summary>
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveCtrl.Designer.cs
new file mode 100644
index 0000000..68c0905
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveCtrl.Designer.cs
@@ -0,0 +1,401 @@
+锘縩amespace Yw.WinFrmUI
+{
+    partial class SetHydroCurveCtrl
+    {
+        /// <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()
+        {
+            components = new Container();
+            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions1 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
+            ComponentResourceManager resources = new ComponentResourceManager(typeof(SetHydroCurveCtrl));
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject1 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject2 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject3 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject4 = new DevExpress.Utils.SerializableAppearanceObject();
+            splitContainerControl1 = new DevExpress.XtraEditors.SplitContainerControl();
+            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            btnImportByExcel = new DevExpress.XtraEditors.SimpleButton();
+            txtCurveType = new DevExpress.XtraEditors.TextEdit();
+            btnSave = new DevExpress.XtraEditors.SimpleButton();
+            txtDescription = new DevExpress.XtraEditors.MemoEdit();
+            txtName = new DevExpress.XtraEditors.TextEdit();
+            gridControl1 = new DevExpress.XtraGrid.GridControl();
+            hydroCurvePointViewModelBindingSource = new BindingSource(components);
+            gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
+            colX = new DevExpress.XtraGrid.Columns.GridColumn();
+            colY = new DevExpress.XtraGrid.Columns.GridColumn();
+            colDelete = new DevExpress.XtraGrid.Columns.GridColumn();
+            repositoryItemButtonEdit1 = new DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit();
+            txtCode = new DevExpress.XtraEditors.TextEdit();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem8 = new DevExpress.XtraLayout.LayoutControlItem();
+            emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
+            hydroCurveViewCtrl1 = new HydroCurveViewCtrl();
+            ((ISupportInitialize)splitContainerControl1).BeginInit();
+            ((ISupportInitialize)splitContainerControl1.Panel1).BeginInit();
+            splitContainerControl1.Panel1.SuspendLayout();
+            ((ISupportInitialize)splitContainerControl1.Panel2).BeginInit();
+            splitContainerControl1.Panel2.SuspendLayout();
+            splitContainerControl1.SuspendLayout();
+            ((ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((ISupportInitialize)txtCurveType.Properties).BeginInit();
+            ((ISupportInitialize)txtDescription.Properties).BeginInit();
+            ((ISupportInitialize)txtName.Properties).BeginInit();
+            ((ISupportInitialize)gridControl1).BeginInit();
+            ((ISupportInitialize)hydroCurvePointViewModelBindingSource).BeginInit();
+            ((ISupportInitialize)gridView1).BeginInit();
+            ((ISupportInitialize)repositoryItemButtonEdit1).BeginInit();
+            ((ISupportInitialize)txtCode.Properties).BeginInit();
+            ((ISupportInitialize)Root).BeginInit();
+            ((ISupportInitialize)layoutControlItem2).BeginInit();
+            ((ISupportInitialize)layoutControlItem3).BeginInit();
+            ((ISupportInitialize)layoutControlItem4).BeginInit();
+            ((ISupportInitialize)layoutControlItem5).BeginInit();
+            ((ISupportInitialize)layoutControlItem8).BeginInit();
+            ((ISupportInitialize)emptySpaceItem1).BeginInit();
+            ((ISupportInitialize)layoutControlItem1).BeginInit();
+            ((ISupportInitialize)layoutControlItem6).BeginInit();
+            SuspendLayout();
+            // 
+            // splitContainerControl1
+            // 
+            splitContainerControl1.Dock = DockStyle.Fill;
+            splitContainerControl1.Location = new Point(0, 0);
+            splitContainerControl1.Name = "splitContainerControl1";
+            // 
+            // splitContainerControl1.Panel1
+            // 
+            splitContainerControl1.Panel1.Controls.Add(layoutControl1);
+            splitContainerControl1.Panel1.Text = "Panel1";
+            // 
+            // splitContainerControl1.Panel2
+            // 
+            splitContainerControl1.Panel2.Controls.Add(hydroCurveViewCtrl1);
+            splitContainerControl1.Panel2.Text = "Panel2";
+            splitContainerControl1.Size = new Size(913, 563);
+            splitContainerControl1.SplitterPosition = 295;
+            splitContainerControl1.TabIndex = 0;
+            // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(btnImportByExcel);
+            layoutControl1.Controls.Add(txtCurveType);
+            layoutControl1.Controls.Add(btnSave);
+            layoutControl1.Controls.Add(txtDescription);
+            layoutControl1.Controls.Add(txtName);
+            layoutControl1.Controls.Add(gridControl1);
+            layoutControl1.Controls.Add(txtCode);
+            layoutControl1.Dock = DockStyle.Fill;
+            layoutControl1.Location = new Point(0, 0);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(683, 274, 650, 400);
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new Size(295, 563);
+            layoutControl1.TabIndex = 0;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // btnImportByExcel
+            // 
+            btnImportByExcel.Location = new Point(97, 539);
+            btnImportByExcel.Name = "btnImportByExcel";
+            btnImportByExcel.Size = new Size(96, 22);
+            btnImportByExcel.StyleController = layoutControl1;
+            btnImportByExcel.TabIndex = 13;
+            btnImportByExcel.Text = "Excel瀵煎叆";
+            // 
+            // txtCurveType
+            // 
+            txtCurveType.Location = new Point(42, 50);
+            txtCurveType.Name = "txtCurveType";
+            txtCurveType.Properties.ReadOnly = true;
+            txtCurveType.Size = new Size(251, 20);
+            txtCurveType.StyleController = layoutControl1;
+            txtCurveType.TabIndex = 12;
+            // 
+            // btnSave
+            // 
+            btnSave.Location = new Point(197, 539);
+            btnSave.Name = "btnSave";
+            btnSave.Size = new Size(96, 22);
+            btnSave.StyleController = layoutControl1;
+            btnSave.TabIndex = 11;
+            btnSave.Text = "淇濆瓨";
+            btnSave.Click += btnSave_Click;
+            // 
+            // txtDescription
+            // 
+            txtDescription.Location = new Point(42, 74);
+            txtDescription.Name = "txtDescription";
+            txtDescription.Size = new Size(251, 49);
+            txtDescription.StyleController = layoutControl1;
+            txtDescription.TabIndex = 8;
+            // 
+            // txtName
+            // 
+            txtName.Location = new Point(42, 26);
+            txtName.Name = "txtName";
+            txtName.Size = new Size(251, 20);
+            txtName.StyleController = layoutControl1;
+            txtName.TabIndex = 7;
+            // 
+            // gridControl1
+            // 
+            gridControl1.DataSource = hydroCurvePointViewModelBindingSource;
+            gridControl1.Location = new Point(2, 127);
+            gridControl1.MainView = gridView1;
+            gridControl1.Name = "gridControl1";
+            gridControl1.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { repositoryItemButtonEdit1 });
+            gridControl1.Size = new Size(291, 408);
+            gridControl1.TabIndex = 6;
+            gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { gridView1 });
+            // 
+            // hydroCurvePointViewModelBindingSource
+            // 
+            hydroCurvePointViewModelBindingSource.DataSource = typeof(HydroCurvePointViewModel);
+            // 
+            // gridView1
+            // 
+            gridView1.Appearance.ViewCaption.Options.UseTextOptions = true;
+            gridView1.Appearance.ViewCaption.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near;
+            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colX, colY, colDelete });
+            gridView1.GridControl = gridControl1;
+            gridView1.Name = "gridView1";
+            gridView1.OptionsView.ShowViewCaption = true;
+            gridView1.ViewCaption = "鏇茬嚎鐐�";
+            gridView1.RowCellClick += gridView1_RowCellClick;
+            // 
+            // colX
+            // 
+            colX.FieldName = "X";
+            colX.Name = "colX";
+            colX.Visible = true;
+            colX.VisibleIndex = 0;
+            // 
+            // colY
+            // 
+            colY.FieldName = "Y";
+            colY.Name = "colY";
+            colY.Visible = true;
+            colY.VisibleIndex = 1;
+            // 
+            // colDelete
+            // 
+            colDelete.Caption = "鍒犻櫎";
+            colDelete.ColumnEdit = repositoryItemButtonEdit1;
+            colDelete.MaxWidth = 50;
+            colDelete.MinWidth = 50;
+            colDelete.Name = "colDelete";
+            colDelete.OptionsColumn.AllowEdit = false;
+            colDelete.Visible = true;
+            colDelete.VisibleIndex = 2;
+            colDelete.Width = 50;
+            // 
+            // repositoryItemButtonEdit1
+            // 
+            repositoryItemButtonEdit1.AutoHeight = false;
+            editorButtonImageOptions1.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("editorButtonImageOptions1.SvgImage");
+            editorButtonImageOptions1.SvgImageSize = new Size(20, 20);
+            repositoryItemButtonEdit1.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "", -1, true, true, false, editorButtonImageOptions1, new DevExpress.Utils.KeyShortcut(Keys.None), serializableAppearanceObject1, serializableAppearanceObject2, serializableAppearanceObject3, serializableAppearanceObject4, "", null, null, DevExpress.Utils.ToolTipAnchor.Default) });
+            repositoryItemButtonEdit1.Name = "repositoryItemButtonEdit1";
+            repositoryItemButtonEdit1.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.HideTextEditor;
+            // 
+            // txtCode
+            // 
+            txtCode.Location = new Point(42, 2);
+            txtCode.Name = "txtCode";
+            txtCode.Properties.ReadOnly = true;
+            txtCode.Size = new Size(251, 20);
+            txtCode.StyleController = layoutControl1;
+            txtCode.TabIndex = 5;
+            // 
+            // Root
+            // 
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem2, layoutControlItem3, layoutControlItem4, layoutControlItem5, layoutControlItem8, emptySpaceItem1, layoutControlItem1, layoutControlItem6 });
+            Root.Name = "Root";
+            Root.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            Root.Size = new Size(295, 563);
+            Root.TextVisible = false;
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.Control = txtCode;
+            layoutControlItem2.Location = new Point(0, 0);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.Size = new Size(295, 24);
+            layoutControlItem2.Text = "缂栫爜:";
+            layoutControlItem2.TextSize = new Size(28, 14);
+            // 
+            // layoutControlItem3
+            // 
+            layoutControlItem3.Control = gridControl1;
+            layoutControlItem3.Location = new Point(0, 125);
+            layoutControlItem3.Name = "layoutControlItem3";
+            layoutControlItem3.Size = new Size(295, 412);
+            layoutControlItem3.TextSize = new Size(0, 0);
+            layoutControlItem3.TextVisible = false;
+            // 
+            // layoutControlItem4
+            // 
+            layoutControlItem4.Control = txtName;
+            layoutControlItem4.Location = new Point(0, 24);
+            layoutControlItem4.Name = "layoutControlItem4";
+            layoutControlItem4.Size = new Size(295, 24);
+            layoutControlItem4.Text = "鍚嶇О:";
+            layoutControlItem4.TextSize = new Size(28, 14);
+            // 
+            // layoutControlItem5
+            // 
+            layoutControlItem5.Control = txtDescription;
+            layoutControlItem5.Location = new Point(0, 72);
+            layoutControlItem5.Name = "layoutControlItem5";
+            layoutControlItem5.Size = new Size(295, 53);
+            layoutControlItem5.Text = "璇存槑:";
+            layoutControlItem5.TextSize = new Size(28, 14);
+            // 
+            // layoutControlItem8
+            // 
+            layoutControlItem8.Control = btnSave;
+            layoutControlItem8.Location = new Point(195, 537);
+            layoutControlItem8.MaxSize = new Size(100, 0);
+            layoutControlItem8.MinSize = new Size(100, 26);
+            layoutControlItem8.Name = "layoutControlItem8";
+            layoutControlItem8.Size = new Size(100, 26);
+            layoutControlItem8.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem8.TextSize = new Size(0, 0);
+            layoutControlItem8.TextVisible = false;
+            // 
+            // emptySpaceItem1
+            // 
+            emptySpaceItem1.AllowHotTrack = false;
+            emptySpaceItem1.Location = new Point(0, 537);
+            emptySpaceItem1.Name = "emptySpaceItem1";
+            emptySpaceItem1.Size = new Size(95, 26);
+            emptySpaceItem1.TextSize = new Size(0, 0);
+            // 
+            // layoutControlItem1
+            // 
+            layoutControlItem1.Control = txtCurveType;
+            layoutControlItem1.Location = new Point(0, 48);
+            layoutControlItem1.Name = "layoutControlItem1";
+            layoutControlItem1.Size = new Size(295, 24);
+            layoutControlItem1.Text = "绫诲瀷:";
+            layoutControlItem1.TextSize = new Size(28, 14);
+            // 
+            // layoutControlItem6
+            // 
+            layoutControlItem6.Control = btnImportByExcel;
+            layoutControlItem6.Location = new Point(95, 537);
+            layoutControlItem6.MaxSize = new Size(100, 26);
+            layoutControlItem6.MinSize = new Size(100, 26);
+            layoutControlItem6.Name = "layoutControlItem6";
+            layoutControlItem6.Size = new Size(100, 26);
+            layoutControlItem6.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem6.TextSize = new Size(0, 0);
+            layoutControlItem6.TextVisible = false;
+            // 
+            // hydroCurveViewCtrl1
+            // 
+            hydroCurveViewCtrl1.Dock = DockStyle.Fill;
+            hydroCurveViewCtrl1.Location = new Point(0, 0);
+            hydroCurveViewCtrl1.Name = "hydroCurveViewCtrl1";
+            hydroCurveViewCtrl1.Size = new Size(608, 563);
+            hydroCurveViewCtrl1.TabIndex = 0;
+            hydroCurveViewCtrl1.TitleTextX = "Axis of arguments";
+            hydroCurveViewCtrl1.TitleTextY = "Axis of values";
+            // 
+            // SetHydroCurveCtrl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(splitContainerControl1);
+            Name = "SetHydroCurveCtrl";
+            Size = new Size(913, 563);
+            ((ISupportInitialize)splitContainerControl1.Panel1).EndInit();
+            splitContainerControl1.Panel1.ResumeLayout(false);
+            ((ISupportInitialize)splitContainerControl1.Panel2).EndInit();
+            splitContainerControl1.Panel2.ResumeLayout(false);
+            ((ISupportInitialize)splitContainerControl1).EndInit();
+            splitContainerControl1.ResumeLayout(false);
+            ((ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)txtCurveType.Properties).EndInit();
+            ((ISupportInitialize)txtDescription.Properties).EndInit();
+            ((ISupportInitialize)txtName.Properties).EndInit();
+            ((ISupportInitialize)gridControl1).EndInit();
+            ((ISupportInitialize)hydroCurvePointViewModelBindingSource).EndInit();
+            ((ISupportInitialize)gridView1).EndInit();
+            ((ISupportInitialize)repositoryItemButtonEdit1).EndInit();
+            ((ISupportInitialize)txtCode.Properties).EndInit();
+            ((ISupportInitialize)Root).EndInit();
+            ((ISupportInitialize)layoutControlItem2).EndInit();
+            ((ISupportInitialize)layoutControlItem3).EndInit();
+            ((ISupportInitialize)layoutControlItem4).EndInit();
+            ((ISupportInitialize)layoutControlItem5).EndInit();
+            ((ISupportInitialize)layoutControlItem8).EndInit();
+            ((ISupportInitialize)emptySpaceItem1).EndInit();
+            ((ISupportInitialize)layoutControlItem1).EndInit();
+            ((ISupportInitialize)layoutControlItem6).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraEditors.SplitContainerControl splitContainerControl1;
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private HydroCurveViewCtrl hydroCurveViewCtrl1;
+        private DevExpress.XtraGrid.GridControl gridControl1;
+        private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
+        private DevExpress.XtraEditors.TextEdit txtCode;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+        private BindingSource hydroCurvePointViewModelBindingSource;
+        private DevExpress.XtraGrid.Columns.GridColumn colX;
+        private DevExpress.XtraGrid.Columns.GridColumn colY;
+        private DevExpress.XtraEditors.SimpleButton btnSave;
+        private DevExpress.XtraEditors.MemoEdit txtDescription;
+        private DevExpress.XtraEditors.TextEdit txtName;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem8;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
+        private DevExpress.XtraEditors.SimpleButton btnImportByExcel;
+        private DevExpress.XtraEditors.TextEdit txtCurveType;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem6;
+        private DevExpress.XtraGrid.Columns.GridColumn colDelete;
+        private DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit repositoryItemButtonEdit1;
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveCtrl.cs
new file mode 100644
index 0000000..54a86b2
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveCtrl.cs
@@ -0,0 +1,120 @@
+锘縰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 System.Windows.Forms.VisualStyles;
+
+namespace Yw.WinFrmUI
+{
+    public partial class SetHydroCurveCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public SetHydroCurveCtrl()
+        {
+            InitializeComponent();
+            this.gridView1.SetBindingLimitEditView(25);
+            this.gridView1.ShowViewCaption(25);
+        }
+
+        /// <summary>
+        /// 淇濆瓨鏇茬嚎淇℃伅浜嬩欢
+        /// </summary>
+        public event Action<Yw.Model.HydroCurveInfo> SaveCurveInfoEvent;
+
+        private Yw.Model.HydroModelInfo _hydroInfo = null;//姘村姏淇℃伅
+        private Yw.Model.HydroCurveInfo _curveInfo = null;//鏇茬嚎淇℃伅
+        private BindingList<HydroCurvePointViewModel> _allBindingList = null;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Yw.Model.HydroCurveInfo curveInfo, string curveType)
+        {
+            if (hydroInfo == null)
+            {
+                return;
+            }
+            _hydroInfo = hydroInfo;
+            _curveInfo = curveInfo;
+            if (_curveInfo == null)
+            {
+                _curveInfo = new Model.HydroCurveInfo();
+                _curveInfo.Catalog = Yw.Hydro.ParterCatalog.Curve;
+                _curveInfo.Code = Yw.Untity.UniqueHelper.CreateFromFirst("curve", _hydroInfo.GetAllParters().Select(x => x.Code).ToList());
+                _curveInfo.CurveType = curveType;
+            }
+            this.txtCode.EditValue = _curveInfo.Code;
+            this.txtName.EditValue = _curveInfo.Name;
+            this.txtDescription.EditValue = _curveInfo.Description;
+            switch (curveType)
+            {
+                case HydroCurve.PumpQH:
+                    {
+                        this.txtCurveType.EditValue = "姘存车娴侀噺鎵▼鏇茬嚎";
+                        this.colX.Caption = "Q(m鲁/h)";
+                        this.colY.Caption = "H(m)";
+                        this.hydroCurveViewCtrl1.TitleTextX = "娴侀噺锛坢鲁/h锛�";
+                        this.hydroCurveViewCtrl1.TitleTextY = "鎵▼锛坢锛�";
+                    }
+                    break;
+                case HydroCurve.PumpQP:
+                    {
+                        this.txtCurveType.EditValue = "姘存车娴侀噺鍔熺巼鏇茬嚎";
+                        this.colX.Caption = "Q(m鲁/h)";
+                        this.colY.Caption = "P(kW)";
+                        this.hydroCurveViewCtrl1.TitleTextX = "娴侀噺锛坢鲁/h锛�";
+                        this.hydroCurveViewCtrl1.TitleTextY = "鍔熺巼锛坘W锛�";
+                    }
+                    break;
+                case HydroCurve.PumpQE:
+                    {
+                        this.txtCurveType.EditValue = "姘存车娴侀噺鏁堢巼鏇茬嚎";
+                        this.colX.Caption = "Q(m鲁/h)";
+                        this.colY.Caption = "E(%)";
+                        this.hydroCurveViewCtrl1.TitleTextX = "娴侀噺锛坢鲁/h锛�";
+                        this.hydroCurveViewCtrl1.TitleTextY = "鏁堢巼锛�%锛�";
+                    }
+                    break;
+                default: break;
+            }
+            _allBindingList = new BindingList<HydroCurvePointViewModel>();
+            _curveInfo.CurveData?.ForEach(x =>
+            {
+                var pt = new HydroCurvePointViewModel(x.X, x.Y);
+                _allBindingList.Add(pt);
+            });
+            this.hydroCurvePointViewModelBindingSource.DataSource = _allBindingList;
+            this.hydroCurvePointViewModelBindingSource.ResetBindings(false);
+        }
+
+        //淇濆瓨
+        private void btnSave_Click(object sender, EventArgs e)
+        {
+            _curveInfo.Name = this.txtName.Text.Trim();
+            _curveInfo.Description = this.txtDescription.Text.Trim();
+            _curveInfo.CurveData = _allBindingList?.Select(x => new Model.Hydro.CurvePoint(x.X, x.Y)).ToList();
+            this.hydroCurveViewCtrl1.SetBindingData(_allBindingList.ToList());
+            this.SaveCurveInfoEvent?.Invoke(_curveInfo);
+        }
+
+        //鍒犻櫎
+        private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e)
+        {
+            if (e.RowHandle < 0)
+            {
+                return;
+            }
+            if (e.Column == this.colDelete)
+            {
+                _allBindingList.RemoveAt(e.RowHandle);
+            }
+        }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveCtrl.resx
new file mode 100644
index 0000000..8c68786
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveCtrl.resx
@@ -0,0 +1,145 @@
+锘�<?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>
+  <metadata name="hydroCurvePointViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <assembly alias="DevExpress.Data.v23.2" name="DevExpress.Data.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
+  <data name="editorButtonImageOptions1.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAD0DAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJs
+        YWNre2ZpbGw6IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLkdyZWVue2ZpbGw6IzAzOUMy
+        Mzt9CgkuWWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
+        Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQo8L3N0eWxlPg0KICA8ZyBpZD0iRGVsZXRlIj4N
+        CiAgICA8Zz4NCiAgICAgIDxwYXRoIGQ9Ik0xOC44LDE2bDYuOS02LjljMC40LTAuNCwwLjQtMSwwLTEu
+        NGwtMS40LTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxNiwxMy4yTDkuMSw2LjNjLTAuNC0wLjQtMS0w
+        LjQtMS40LDAgICAgTDYuMyw3LjdjLTAuNCwwLjQtMC40LDEsMCwxLjRsNi45LDYuOWwtNi45LDYuOWMt
+        MC40LDAuNC0wLjQsMSwwLDEuNGwxLjQsMS40YzAuNCwwLjQsMSwwLjQsMS40LDBsNi45LTYuOWw2Ljks
+        Ni45ICAgIGMwLjQsMC40LDEsMC40LDEuNCwwbDEuNC0xLjRjMC40LTAuNCwwLjQtMSwwLTEuNEwxOC44
+        LDE2eiIgY2xhc3M9IlJlZCIgLz4NCiAgICA8L2c+DQogIDwvZz4NCjwvc3ZnPgs=
+</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveDlg.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveDlg.Designer.cs
new file mode 100644
index 0000000..db3c153
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveDlg.Designer.cs
@@ -0,0 +1,175 @@
+锘縩amespace Yw.WinFrmUI
+{
+    partial class SetHydroCurveDlg
+    {
+        /// <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()
+        {
+            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            setHydroCurveCtrl1 = new SetHydroCurveCtrl();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            btnOk = new DevExpress.XtraEditors.SimpleButton();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            btnCancel = new DevExpress.XtraEditors.SimpleButton();
+            layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
+            ((ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((ISupportInitialize)Root).BeginInit();
+            ((ISupportInitialize)layoutControlItem1).BeginInit();
+            ((ISupportInitialize)layoutControlItem2).BeginInit();
+            ((ISupportInitialize)layoutControlItem3).BeginInit();
+            ((ISupportInitialize)emptySpaceItem1).BeginInit();
+            SuspendLayout();
+            // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(btnCancel);
+            layoutControl1.Controls.Add(btnOk);
+            layoutControl1.Controls.Add(setHydroCurveCtrl1);
+            layoutControl1.Dock = DockStyle.Fill;
+            layoutControl1.Location = new Point(0, 0);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(1270, 380, 650, 400);
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new Size(987, 638);
+            layoutControl1.TabIndex = 0;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // Root
+            // 
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem2, layoutControlItem3, emptySpaceItem1 });
+            Root.Name = "Root";
+            Root.Size = new Size(987, 638);
+            Root.TextVisible = false;
+            // 
+            // setHydroCurveCtrl1
+            // 
+            setHydroCurveCtrl1.Location = new Point(12, 12);
+            setHydroCurveCtrl1.Name = "setHydroCurveCtrl1";
+            setHydroCurveCtrl1.Size = new Size(963, 588);
+            setHydroCurveCtrl1.TabIndex = 4;
+            // 
+            // layoutControlItem1
+            // 
+            layoutControlItem1.Control = setHydroCurveCtrl1;
+            layoutControlItem1.Location = new Point(0, 0);
+            layoutControlItem1.Name = "layoutControlItem1";
+            layoutControlItem1.Size = new Size(967, 592);
+            layoutControlItem1.TextSize = new Size(0, 0);
+            layoutControlItem1.TextVisible = false;
+            // 
+            // btnOk
+            // 
+            btnOk.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Primary;
+            btnOk.Appearance.Options.UseBackColor = true;
+            btnOk.Location = new Point(739, 604);
+            btnOk.Name = "btnOk";
+            btnOk.Size = new Size(116, 22);
+            btnOk.StyleController = layoutControl1;
+            btnOk.TabIndex = 5;
+            btnOk.Text = "纭畾";
+            btnOk.Click += btnOk_Click;
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.Control = btnOk;
+            layoutControlItem2.Location = new Point(727, 592);
+            layoutControlItem2.MaxSize = new Size(120, 26);
+            layoutControlItem2.MinSize = new Size(120, 26);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.Size = new Size(120, 26);
+            layoutControlItem2.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem2.TextSize = new Size(0, 0);
+            layoutControlItem2.TextVisible = false;
+            // 
+            // btnCancel
+            // 
+            btnCancel.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Warning;
+            btnCancel.Appearance.Options.UseBackColor = true;
+            btnCancel.DialogResult = DialogResult.Cancel;
+            btnCancel.Location = new Point(859, 604);
+            btnCancel.Name = "btnCancel";
+            btnCancel.Size = new Size(116, 22);
+            btnCancel.StyleController = layoutControl1;
+            btnCancel.TabIndex = 6;
+            btnCancel.Text = "鍙栨秷";
+            // 
+            // layoutControlItem3
+            // 
+            layoutControlItem3.Control = btnCancel;
+            layoutControlItem3.Location = new Point(847, 592);
+            layoutControlItem3.MaxSize = new Size(120, 26);
+            layoutControlItem3.MinSize = new Size(120, 26);
+            layoutControlItem3.Name = "layoutControlItem3";
+            layoutControlItem3.Size = new Size(120, 26);
+            layoutControlItem3.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem3.TextSize = new Size(0, 0);
+            layoutControlItem3.TextVisible = false;
+            // 
+            // emptySpaceItem1
+            // 
+            emptySpaceItem1.AllowHotTrack = false;
+            emptySpaceItem1.Location = new Point(0, 592);
+            emptySpaceItem1.Name = "emptySpaceItem1";
+            emptySpaceItem1.Size = new Size(727, 26);
+            emptySpaceItem1.TextSize = new Size(0, 0);
+            // 
+            // SetHydroCurveDlg
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(987, 638);
+            Controls.Add(layoutControl1);
+            Name = "SetHydroCurveDlg";
+            StartPosition = FormStartPosition.CenterParent;
+            Text = "璁剧疆鏇茬嚎";
+            ((ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)Root).EndInit();
+            ((ISupportInitialize)layoutControlItem1).EndInit();
+            ((ISupportInitialize)layoutControlItem2).EndInit();
+            ((ISupportInitialize)layoutControlItem3).EndInit();
+            ((ISupportInitialize)emptySpaceItem1).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraEditors.SimpleButton btnCancel;
+        private DevExpress.XtraEditors.SimpleButton btnOk;
+        private SetHydroCurveCtrl setHydroCurveCtrl1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveDlg.cs
new file mode 100644
index 0000000..0744a01
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveDlg.cs
@@ -0,0 +1,55 @@
+锘縰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;
+
+namespace Yw.WinFrmUI
+{
+    public partial class SetHydroCurveDlg : DevExpress.XtraEditors.XtraForm
+    {
+        public SetHydroCurveDlg()
+        {
+            InitializeComponent();
+            this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
+            this.setHydroCurveCtrl1.SaveCurveInfoEvent += SetHydroCurveCtrl1_SaveCurveInfoEvent;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public event Action<Yw.Model.HydroCurveInfo> ReloadDataEvent;
+
+        private Yw.Model.HydroCurveInfo _curveInfo;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Yw.Model.HydroCurveInfo curveInfo, string curveType)
+        {
+            this.setHydroCurveCtrl1.SetBindingData(hydroInfo, curveInfo, curveType);
+        }
+
+        private void SetHydroCurveCtrl1_SaveCurveInfoEvent(Model.HydroCurveInfo obj)
+        {
+            _curveInfo = obj;
+        }
+
+        //
+        private void btnOk_Click(object sender, EventArgs e)
+        {
+            if (_curveInfo == null)
+            {
+                return;
+            }
+            this.ReloadDataEvent?.Invoke(_curveInfo);
+            this.DialogResult = DialogResult.OK;
+            this.Close();
+        }
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveDlg.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveDlg.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/06-curve/SetHydroCurveDlg.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/03-property/HydroParterPropertyCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/HydroParterPropertyCtrl.cs
index 4266e39..581705a 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/HydroParterPropertyCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/HydroParterPropertyCtrl.cs
@@ -276,23 +276,69 @@
                                 {
                                     var vmPump = vm as HydroPumpPropertyViewModel;
                                     var curveQh = hydroInfo.Curves?.Find(x => x.Code == vmPump.CurveQH);
-                                    var curvePts = curveQh?.CurveData?.Select(x => new HydroCurvePointViewModel(x.X, x.Y)).ToList();
-                                    var dlg = new HydroCurveViewDlg();
-                                    dlg.Text = $"{vm.Name}-娴侀噺鎵▼鏇茬嚎";
-                                    dlg.TitleTextX = "娴侀噺锛坢鲁/h锛�";
-                                    dlg.TitleTextY = "鎵▼锛坢锛�";
-                                    dlg.SetBindingData(curvePts);
+                                    var dlg = new SetHydroCurveDlg();
+                                    dlg.ReloadDataEvent += (curveInfo) =>
+                                    {
+                                        if (hydroInfo.Curves == null)
+                                        {
+                                            hydroInfo.Curves = new List<Model.HydroCurveInfo>();
+                                        }
+                                        if (curveQh != null)
+                                        {
+                                            hydroInfo.Curves.Remove(curveQh);
+                                        }
+                                        hydroInfo.Curves.Add(curveInfo);
+                                        vmPump.CurveQH = curveInfo.Code;
+                                        UpdateRows();
+                                    };
+                                    dlg.SetBindingData(hydroInfo, curveQh, curvePro.CurveType);
                                     dlg.ShowDialog();
                                 }
                                 break;
                             case HydroCurve.PumpQP:
                                 {
-
+                                    var vmPump = vm as HydroPumpPropertyViewModel;
+                                    var curveQp = hydroInfo.Curves?.Find(x => x.Code == vmPump.CurveQP);
+                                    var dlg = new SetHydroCurveDlg();
+                                    dlg.ReloadDataEvent += (curveInfo) =>
+                                    {
+                                        if (hydroInfo.Curves == null)
+                                        {
+                                            hydroInfo.Curves = new List<Model.HydroCurveInfo>();
+                                        }
+                                        if (curveQp != null)
+                                        {
+                                            hydroInfo.Curves.Remove(curveQp);
+                                        }
+                                        hydroInfo.Curves.Add(curveInfo);
+                                        vmPump.CurveQP = curveInfo.Code;
+                                        UpdateRows();
+                                    };
+                                    dlg.SetBindingData(hydroInfo, curveQp, curvePro.CurveType);
+                                    dlg.ShowDialog();
                                 }
                                 break;
                             case HydroCurve.PumpQE:
                                 {
-
+                                    var vmPump = vm as HydroPumpPropertyViewModel;
+                                    var curveQe = hydroInfo.Curves?.Find(x => x.Code == vmPump.CurveQE);
+                                    var dlg = new SetHydroCurveDlg();
+                                    dlg.ReloadDataEvent += (curveInfo) =>
+                                    {
+                                        if (hydroInfo.Curves == null)
+                                        {
+                                            hydroInfo.Curves = new List<Model.HydroCurveInfo>();
+                                        }
+                                        if (curveQe != null)
+                                        {
+                                            hydroInfo.Curves.Remove(curveQe);
+                                        }
+                                        hydroInfo.Curves.Add(curveInfo);
+                                        vmPump.CurveQE = curveInfo.Code;
+                                        UpdateRows();
+                                    };
+                                    dlg.SetBindingData(hydroInfo, curveQe, curvePro.CurveType);
+                                    dlg.ShowDialog();
                                 }
                                 break;
                             case HydroCurve.Valve:
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 71b6a28..b9923a4 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
@@ -10,6 +10,12 @@
     <Compile Update="03-property\06-curve\HydroCurveViewDlg.cs">
       <SubType>Form</SubType>
     </Compile>
+    <Compile Update="03-property\06-curve\SetHydroCurveCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="03-property\06-curve\SetHydroCurveDlg.cs">
+      <SubType>Form</SubType>
+    </Compile>
     <Compile Update="04-parter\00-core\HydroParterListCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/01-network/00-core/Network_Method.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/01-network/00-core/Network_Method.cs
index 527a3ae..325afdc 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/01-network/00-core/Network_Method.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/01-network/00-core/Network_Method.cs
@@ -22,21 +22,28 @@
         /// </summary>
         public BoundingBox3d GetBoundingBox()
         {
-            var bd = new BoundingBox3d();
-            bd.Min = new Point3d();
-            bd.Max = new Point3d();
+            var minX = float.MaxValue;
+            var minY = float.MaxValue;
+            var minZ = float.MaxValue;
+            var maxX = float.MinValue;
+            var maxY = float.MinValue;
+            var maxZ = float.MinValue;
 
             foreach (var node in this.Nodes)
             {
-                bd.Min.X = Math.Min(bd.Min.X, node.Position.X);
-                bd.Max.X = Math.Max(bd.Max.X, node.Position.X);
-                bd.Min.Y = Math.Min(bd.Min.Y, node.Position.Y);
-                bd.Max.Y = Math.Max(bd.Max.Y, node.Position.Y);
-                bd.Min.Z = Math.Min(bd.Min.Z, node.Position.Z);
-                bd.Max.Z = Math.Max(bd.Max.Z, node.Position.Z);
+                minX = Math.Min(minX, node.Position.X);
+                minY = Math.Min(minY, node.Position.Y);
+                minZ = Math.Min(minZ, node.Position.Z);
+                maxX = Math.Max(maxX, node.Position.X);
+                maxY = Math.Max(maxY, node.Position.Y);
+                maxZ = Math.Max(maxZ, node.Position.Z);
             }
 
-            return bd;
+            return new BoundingBox3d()
+            {
+                Min = new Point3d(minX, minY, minZ),
+                Max = new Point3d(maxX, maxY, maxZ)
+            };
         }
 
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/02-panel/NetworkPanelDebug.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/02-panel/NetworkPanelDebug.cs
index 395a117..d5c22cc 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/02-panel/NetworkPanelDebug.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/02-panel/NetworkPanelDebug.cs
@@ -1,4 +1,5 @@
 锘縰sing DevExpress.Mvvm.Native;
+using DevExpress.XtraCharts.GLGraphics;
 using SharpGL;
 
 namespace Yw.WinFrmUI.HydroL3d
@@ -53,36 +54,81 @@
             {
                 return;
             }
-            SharpGL.OpenGL gl = this.openGLControl1.OpenGL;
+            OpenGL gl = openGLControl1.OpenGL;
+            gl.Enable(OpenGL.GL_DEPTH_TEST);
+
             //娓呴櫎娣卞害缂撳瓨 
             gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
+
+            // 璁剧疆褰撳墠鐭╅樀妯″紡,瀵规姇褰辩煩闃靛簲鐢ㄩ殢鍚庣殑鐭╅樀鎿嶄綔
+            gl.MatrixMode(OpenGL.GL_PROJECTION);
+
+            // 閲嶇疆褰撳墠鎸囧畾鐨勭煩闃典负鍗曚綅鐭╅樀,灏嗗綋鍓嶇殑鐢ㄦ埛鍧愭爣绯荤殑鍘熺偣绉诲埌浜嗗睆骞曚腑蹇�
+            gl.LoadIdentity();
+
+            // 鍒涘缓閫忚鎶曞奖鍙樻崲
+            gl.Perspective(45f, openGLControl1.Width / openGLControl1.Height, 15696f, 38395f);
+
+
+            // 璁剧疆褰撳墠鐭╅樀涓烘ā鍨嬭鍥剧煩闃�
+            gl.MatrixMode(OpenGL.GL_MODELVIEW);
 
             //閲嶇疆褰撳墠鎸囧畾鐨勭煩闃典负鍗曚綅鐭╅樀,灏嗗綋鍓嶇殑鐢ㄦ埛鍧愭爣绯荤殑鍘熺偣绉诲埌浜嗗睆骞曚腑蹇�
             gl.LoadIdentity();
 
-            gl.Translate(_paras.Translation.X, _paras.Translation.Y, _paras.Translation.Z);
+           // gl.Translate(-_paras.Ceneter.X, -_paras.Ceneter.Y, -_paras.Ceneter.Z);
+            //gl.Translate(0, 0, -5f);
 
-            gl.Rotate(_paras.Rotation.X, 1, 0, 0);
-            gl.Rotate(_paras.Rotation.Y, 0, 1, 0);
-            gl.Rotate(_paras.Rotation.Z, 0, 0, 1);
+            //gl.Rotate(_paras.Rotation.X, 1, 0, 0);
+            // gl.Rotate(_paras.Rotation.Y, 0, 1, 0);
+            //gl.Rotate(_paras.Rotation.Z, 0, 0, 1);
 
+            gl.Color(1.0f, 1.0f, 1.0f);
             foreach (var pipe in _network.Pipes)
             {
                 var startPosition = pipe.StartPosition;
                 var endPosition = pipe.EndPosition;
                 gl.Begin(OpenGL.GL_LINES);
-                gl.Color(1.0f, 1.0f, 1.0f);
+
                 gl.Vertex(startPosition.X, startPosition.Y, startPosition.Z);//宸﹂《鐐�
                 gl.Vertex(endPosition.X, endPosition.Y, endPosition.Z);//鍙抽《鐐�
                 gl.End();
             }
 
-            gl.Begin(OpenGL.GL_LINES);
             gl.Color(1.0f, 1.0f, 1.0f);
+            gl.Begin(OpenGL.GL_LINES);
+
             gl.Vertex(_paras.BoundingBox.Min.X, _paras.BoundingBox.Min.Y, _paras.BoundingBox.Min.Z);//宸﹂《鐐�
             gl.Vertex(_paras.BoundingBox.Max.X, _paras.BoundingBox.Max.Y, _paras.BoundingBox.Max.Z);//鍙抽《鐐�
             gl.End();
 
+            #region 鐐瑰埌绾�
+            gl.Begin(OpenGL.GL_LINES);
+            gl.Color(1.0f, 1.0f, 1.0f);
+            gl.Vertex(-2.0f, 0.0f, 0.0f);//宸﹂《鐐�
+            gl.Vertex(2.0f, 2.0f, 0.0f);//鍙抽《鐐�
+            gl.End();
+            #endregion
+
+            var minX = _paras.BoundingBox.Min.X;
+            var maxX = _paras.BoundingBox.Max.X;
+            var minY = _paras.BoundingBox.Min.Y;
+            var maxY = _paras.BoundingBox.Max.Y;
+            var minZ = _paras.BoundingBox.Min.Z;
+            var maxZ = _paras.BoundingBox.Max.Z;
+
+            float distance = Math.Max(maxX - minX, Math.Max(maxY - minY, maxZ - minZ)) * 1.5f;
+
+            var centerX = (minX + maxX) / 2f;
+            var centerY = (minY + maxY) / 2f;
+            var centerZ = (minZ + maxZ) / 2f;
+
+            var cameraX = centerX + distance;
+            var cameraY = centerY + distance;
+            var cameraZ = centerZ + distance;
+
+            //gl.LookAt(cameraX, cameraY, cameraZ, centerX, centerY, centerZ, 0, 1, 0);
+            gl.LookAt(-27484f, -12576f, 8833f, 23675f, 23079f, -7200f, 0f, 0f, 1f);
             gl.Flush();   //寮哄埗鍒锋柊
 
         }
@@ -100,8 +146,8 @@
             {
                 return;
             }
-            _paras.Perspective.Aspect = this.openGLControl1.Width / (float)this.openGLControl1.Height;
-            Reset();
+            // _paras.Perspective.Aspect = this.openGLControl1.Width / (float)this.openGLControl1.Height;
+            //Reset();
         }
 
         //閲嶇疆
@@ -123,7 +169,7 @@
             gl.Perspective(_paras.Perspective.Fovy, _paras.Perspective.Aspect, _paras.Perspective.Near, _paras.Perspective.Far);
 
             // 瑙嗙偣鍙樻崲
-            gl.LookAt(_paras.LookAt.Eye.X, _paras.LookAt.Eye.Y, _paras.LookAt.Eye.Z, _paras.LookAt.Center.X, _paras.LookAt.Center.Y, _paras.LookAt.Center.Z, _paras.LookAt.Up.X, _paras.LookAt.Up.Y, _paras.LookAt.Up.Z);
+            // gl.LookAt(_paras.LookAt.Eye.X, _paras.LookAt.Eye.Y, _paras.LookAt.Eye.Z, _paras.LookAt.Center.X, _paras.LookAt.Center.Y, _paras.LookAt.Center.Z, _paras.LookAt.Up.X, _paras.LookAt.Up.Y, _paras.LookAt.Up.Z);
 
             // 璁剧疆褰撳墠鐭╅樀涓烘ā鍨嬭鍥剧煩闃�
             gl.MatrixMode(OpenGL.GL_MODELVIEW);
@@ -135,7 +181,7 @@
             {
                 return;
             }
-            Reset();
+            //Reset();
         }
     }
 }

--
Gitblit v1.9.3