From 3af811d30c93995e2500bdd2f3795be77cc1a519 Mon Sep 17 00:00:00 2001
From: duheng <2784771470@qq.com>
Date: 星期四, 19 十二月 2024 18:06:02 +0800
Subject: [PATCH] 水泵曲线修改

---
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/02-image/ImportAssetsExchangerCurveQLByPictureDlg.Designer.cs |  262 +++++++++++
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/03-point/PumpChartPointImport.cs                              |   23 
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/02-image/ImportAssetsExchangerCurveQLByPictureDlg.cs          |   71 +++
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.resx                                                  |   33 +
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/02-image/ImportAssetsExchangerCurveQLByPictureDlg.resx        |  206 ++++++++
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.cs                                                               |    2 
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs                                                          |   69 +-
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelCtrl.cs                    |    4 
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelCtrl.designer.cs           |   66 +-
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.cs                                                    |  162 ++++++
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelDlg.cs                     |   11 
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/02-Eidt/EditAssetsExchangerCurveQLDlg.Designer.cs                       |  143 ++++++
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/02-Eidt/EditAssetsExchangerCurveQLDlg.resx                              |  120 +++++
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditCtrl.cs                                                           |   29 
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.Designer.cs                                           |   77 +++
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/00-ViewModel/PumpMainViewModel.cs                                                    |   17 
 WinFrmUI/HStation.WinFrmUI.Assets.Core/HStation.WinFrmUI.Assets.Core.csproj                                                         |    7 
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/02-Eidt/EditAssetsExchangerCurveQLDlg.cs                                |   57 ++
 18 files changed, 1,227 insertions(+), 132 deletions(-)

diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/00-ViewModel/PumpMainViewModel.cs b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/00-ViewModel/PumpMainViewModel.cs
index 546a346..5e6f47e 100644
--- a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/00-ViewModel/PumpMainViewModel.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/00-ViewModel/PumpMainViewModel.cs
@@ -21,22 +21,6 @@
             this.Model = rhs;
         }
 
-        /*       public AssetsPumpMainViewModel(Vmo.AssetsPumpMainVmo rhs) : base()
-               {
-                   this.SeriesID = rhs.SeriesID;
-                   this.RatedPower = rhs.RatedPower;
-                   this.RatedEfficiency = rhs.RatedEfficiency;
-                   this.Erosion = rhs.Erosion;
-                   this.D2 = rhs.D2;
-                   this.Name = rhs.Name;
-                   this.TagName = rhs.TagName;
-                   this.SortCode = rhs.SortCode;
-                   this.RatedSpeed = rhs.RatedSpeed;
-                   this.RatedHead = rhs.RatedHead;
-                   this.RatedFlow = rhs.RatedFlow;
-                   this.Description = rhs.Description;
-               }*/
-
         public void Reset(Vmo.AssetsPumpMainVmo rhs)
         {
             this.ID = rhs.ID;
@@ -52,6 +36,7 @@
             this.RatedHead = rhs.RatedHead;
             this.RatedFlow = rhs.RatedFlow;
             this.Description = rhs.Description;
+            this.Model = rhs;
         }
 
         /// <summary>
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelCtrl.cs
index 51e5444..fbe4cb0 100644
--- a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelCtrl.cs
@@ -1,4 +1,6 @@
 锘�//缂栬緫鍘熷鐨勬�ц兘鏇茬嚎
+using Yw.Vmo;
+
 namespace HStation.WinFrmUI
 {
     public partial class ImportPumpPerform2dByExcelCtrl : DevExpress.XtraEditors.XtraUserControl
@@ -30,7 +32,7 @@
         /// 鑾峰彇鏁版嵁
         /// </summary>
         /// <returns></returns>
-        public HStation.Vmo.PhartDiagramRelationExtensionsVmo Get()
+        public PhartDiagramExGraphListVmo Get()
         {
             return this.pumpChartExcelImportCtrl1.Get();
         }
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelCtrl.designer.cs b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelCtrl.designer.cs
index 77a1cad..50a5b39 100644
--- a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelCtrl.designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelCtrl.designer.cs
@@ -52,9 +52,10 @@
             layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup();
             layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
-            emptySpaceItem2 = new DevExpress.XtraLayout.EmptySpaceItem();
             emptySpaceItem3 = new DevExpress.XtraLayout.EmptySpaceItem();
             layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            textEdit2 = new DevExpress.XtraEditors.TextEdit();
+            layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
             ((ISupportInitialize)bindingSource1).BeginInit();
             ((ISupportInitialize)layoutControl2).BeginInit();
             layoutControl2.SuspendLayout();
@@ -63,9 +64,10 @@
             ((ISupportInitialize)layoutControlGroup1).BeginInit();
             ((ISupportInitialize)layoutControlItem1).BeginInit();
             ((ISupportInitialize)layoutControlItem2).BeginInit();
-            ((ISupportInitialize)emptySpaceItem2).BeginInit();
             ((ISupportInitialize)emptySpaceItem3).BeginInit();
             ((ISupportInitialize)layoutControlItem3).BeginInit();
+            ((ISupportInitialize)textEdit2.Properties).BeginInit();
+            ((ISupportInitialize)layoutControlItem4).BeginInit();
             SuspendLayout();
             // 
             // layoutControl2
@@ -73,6 +75,7 @@
             layoutControl2.Controls.Add(pumpChartExcelImportCtrl1);
             layoutControl2.Controls.Add(btnExcelFilePath);
             layoutControl2.Controls.Add(textEdit1);
+            layoutControl2.Controls.Add(textEdit2);
             layoutControl2.Dock = DockStyle.Fill;
             layoutControl2.Location = new Point(0, 0);
             layoutControl2.Name = "layoutControl2";
@@ -84,11 +87,11 @@
             // 
             // pumpChartExcelImportCtrl1
             // 
-            pumpChartExcelImportCtrl1.Location = new Point(2, 52);
+            pumpChartExcelImportCtrl1.Location = new Point(2, 28);
             pumpChartExcelImportCtrl1.Margin = new Padding(2, 2, 2, 2);
             pumpChartExcelImportCtrl1.Name = "pumpChartExcelImportCtrl1";
-            pumpChartExcelImportCtrl1.Size = new Size(996, 606);
-            pumpChartExcelImportCtrl1.TabIndex = 3;
+            pumpChartExcelImportCtrl1.Size = new Size(996, 630);
+            pumpChartExcelImportCtrl1.TabIndex = 4;
             // 
             // btnExcelFilePath
             // 
@@ -99,16 +102,16 @@
             editorButtonImageOptions2.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("editorButtonImageOptions2.SvgImage");
             editorButtonImageOptions2.SvgImageSize = new Size(14, 14);
             btnExcelFilePath.Properties.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, "瀵煎叆鏂囦欢", "Import", superToolTip1, DevExpress.Utils.ToolTipAnchor.Default), new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "", -1, true, true, false, editorButtonImageOptions2, new DevExpress.Utils.KeyShortcut(Keys.None), serializableAppearanceObject5, serializableAppearanceObject6, serializableAppearanceObject7, serializableAppearanceObject8, "妯℃澘涓嬭浇", "Download", superToolTip2, DevExpress.Utils.ToolTipAnchor.Default) });
-            btnExcelFilePath.Size = new Size(323, 22);
+            btnExcelFilePath.Size = new Size(277, 22);
             btnExcelFilePath.StyleController = layoutControl2;
             btnExcelFilePath.TabIndex = 0;
             btnExcelFilePath.ButtonClick += btnExcelFilePath_ButtonClick;
             // 
             // textEdit1
             // 
-            textEdit1.Location = new Point(66, 28);
+            textEdit1.Location = new Point(411, 2);
             textEdit1.Name = "textEdit1";
-            textEdit1.Size = new Size(323, 20);
+            textEdit1.Size = new Size(112, 20);
             textEdit1.StyleController = layoutControl2;
             textEdit1.TabIndex = 2;
             // 
@@ -116,7 +119,7 @@
             // 
             layoutControlGroup1.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
             layoutControlGroup1.GroupBordersVisible = false;
-            layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem2, emptySpaceItem2, emptySpaceItem3, layoutControlItem3 });
+            layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem3, layoutControlItem2, layoutControlItem4, emptySpaceItem3 });
             layoutControlGroup1.Name = "Root";
             layoutControlGroup1.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
             layoutControlGroup1.Size = new Size(1000, 660);
@@ -127,43 +130,52 @@
             layoutControlItem1.Control = btnExcelFilePath;
             layoutControlItem1.Location = new Point(0, 0);
             layoutControlItem1.Name = "layoutControlItem1";
-            layoutControlItem1.Size = new Size(391, 26);
+            layoutControlItem1.Size = new Size(345, 26);
             layoutControlItem1.Text = "鏂囦欢璺緞:";
             layoutControlItem1.TextSize = new Size(52, 14);
             // 
             // layoutControlItem2
             // 
             layoutControlItem2.Control = textEdit1;
-            layoutControlItem2.Location = new Point(0, 26);
+            layoutControlItem2.Location = new Point(345, 0);
             layoutControlItem2.Name = "layoutControlItem2";
-            layoutControlItem2.Size = new Size(391, 24);
+            layoutControlItem2.Size = new Size(180, 26);
             layoutControlItem2.Text = "鍚嶇О:";
             layoutControlItem2.TextSize = new Size(52, 14);
-            // 
-            // emptySpaceItem2
-            // 
-            emptySpaceItem2.AllowHotTrack = false;
-            emptySpaceItem2.Location = new Point(391, 0);
-            emptySpaceItem2.Name = "emptySpaceItem2";
-            emptySpaceItem2.Size = new Size(609, 26);
-            emptySpaceItem2.TextSize = new Size(0, 0);
             // 
             // emptySpaceItem3
             // 
             emptySpaceItem3.AllowHotTrack = false;
-            emptySpaceItem3.Location = new Point(391, 26);
+            emptySpaceItem3.Location = new Point(706, 0);
             emptySpaceItem3.Name = "emptySpaceItem3";
-            emptySpaceItem3.Size = new Size(609, 24);
+            emptySpaceItem3.Size = new Size(294, 26);
             emptySpaceItem3.TextSize = new Size(0, 0);
             // 
             // layoutControlItem3
             // 
             layoutControlItem3.Control = pumpChartExcelImportCtrl1;
-            layoutControlItem3.Location = new Point(0, 50);
+            layoutControlItem3.Location = new Point(0, 26);
             layoutControlItem3.Name = "layoutControlItem3";
-            layoutControlItem3.Size = new Size(1000, 610);
+            layoutControlItem3.Size = new Size(1000, 634);
             layoutControlItem3.TextSize = new Size(0, 0);
             layoutControlItem3.TextVisible = false;
+            // 
+            // textEdit2
+            // 
+            textEdit2.Location = new Point(591, 2);
+            textEdit2.Name = "textEdit2";
+            textEdit2.Size = new Size(113, 20);
+            textEdit2.StyleController = layoutControl2;
+            textEdit2.TabIndex = 3;
+            // 
+            // layoutControlItem4
+            // 
+            layoutControlItem4.Control = textEdit2;
+            layoutControlItem4.Location = new Point(525, 0);
+            layoutControlItem4.Name = "layoutControlItem4";
+            layoutControlItem4.Size = new Size(181, 26);
+            layoutControlItem4.Text = "閲嶈搴�:";
+            layoutControlItem4.TextSize = new Size(52, 14);
             // 
             // ImportPumpPerform2dByExcelCtrl
             // 
@@ -181,9 +193,10 @@
             ((ISupportInitialize)layoutControlGroup1).EndInit();
             ((ISupportInitialize)layoutControlItem1).EndInit();
             ((ISupportInitialize)layoutControlItem2).EndInit();
-            ((ISupportInitialize)emptySpaceItem2).EndInit();
             ((ISupportInitialize)emptySpaceItem3).EndInit();
             ((ISupportInitialize)layoutControlItem3).EndInit();
+            ((ISupportInitialize)textEdit2.Properties).EndInit();
+            ((ISupportInitialize)layoutControlItem4).EndInit();
             ResumeLayout(false);
         }
 
@@ -194,10 +207,11 @@
         private DevExpress.XtraEditors.TextEdit textEdit1;
         private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
-        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem2;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
         private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem3;
         private PumpChartExcelImportCtrl pumpChartExcelImportCtrl1;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+        private DevExpress.XtraEditors.TextEdit textEdit2;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
     }
 }
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelDlg.cs b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelDlg.cs
index 2095e27..1c76a24 100644
--- a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelDlg.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/01-excel/ImportPumpPerform2dByExcelDlg.cs
@@ -8,22 +8,21 @@
         public ImportPumpPerform2dByExcelDlg()
         {
             InitializeComponent();
+            this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
         }
 
         /// <summary>
         /// 鍥炶皟浜嬩欢
         /// </summary>
-        public event Func<PhartDiagramRelationExtensionsVmo, Task<bool>> ReloadDataEvent;
-
-        public void SetBindingData()
-        {
-        }
+        public event Func<Vmo.PhartDiagramRelationExtensionsVmo, Task<bool>> ReloadDataEvent;
 
         //纭畾
         private async void btnOk_Click(object sender, EventArgs e)
         {
             var vmo = this.importCurveByExcelCtrl1.Get();
-            var result = await this.ReloadDataEvent.Invoke(vmo);
+            var ExtensionsVmo = new PhartDiagramRelationExtensionsVmo();
+            ExtensionsVmo.Diagram = vmo;
+            var result = await this.ReloadDataEvent.Invoke(ExtensionsVmo);
             if (!result)
             {
                 XtraMessageBox.Show("瀵煎叆澶辫触锛�");
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/02-image/ImportAssetsExchangerCurveQLByPictureDlg.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/02-image/ImportAssetsExchangerCurveQLByPictureDlg.Designer.cs
new file mode 100644
index 0000000..b642c79
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/02-image/ImportAssetsExchangerCurveQLByPictureDlg.Designer.cs
@@ -0,0 +1,262 @@
+锘縩amespace HStation.WinFrmUI
+{
+    partial class ImportPumpPerform2dByImageDlg
+    {
+        /// <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()
+        {
+            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions1 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
+            ComponentResourceManager resources = new ComponentResourceManager(typeof(ImportPumpPerform2dByImageDlg));
+            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();
+            DevExpress.Utils.SuperToolTip superToolTip1 = new DevExpress.Utils.SuperToolTip();
+            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions2 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject5 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject6 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject7 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject8 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SuperToolTip superToolTip2 = new DevExpress.Utils.SuperToolTip();
+            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            btnEditPicture = new DevExpress.XtraEditors.ButtonEdit();
+            textEdit2 = new DevExpress.XtraEditors.TextEdit();
+            generalOkAndCancelCtrl1 = new GeneralOkAndCancelCtrl();
+            panelControl1 = new DevExpress.XtraEditors.PanelControl();
+            textEditName = new DevExpress.XtraEditors.TextEdit();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
+            emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
+            layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+            pumpChartImageImportCtrl1 = new PumpChartImageImportCtrl();
+            ((ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((ISupportInitialize)btnEditPicture.Properties).BeginInit();
+            ((ISupportInitialize)textEdit2.Properties).BeginInit();
+            ((ISupportInitialize)panelControl1).BeginInit();
+            panelControl1.SuspendLayout();
+            ((ISupportInitialize)textEditName.Properties).BeginInit();
+            ((ISupportInitialize)Root).BeginInit();
+            ((ISupportInitialize)layoutControlItem1).BeginInit();
+            ((ISupportInitialize)layoutControlItem2).BeginInit();
+            ((ISupportInitialize)layoutControlItem5).BeginInit();
+            ((ISupportInitialize)emptySpaceItem1).BeginInit();
+            ((ISupportInitialize)layoutControlItem3).BeginInit();
+            ((ISupportInitialize)layoutControlItem4).BeginInit();
+            SuspendLayout();
+            // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(btnEditPicture);
+            layoutControl1.Controls.Add(textEdit2);
+            layoutControl1.Controls.Add(generalOkAndCancelCtrl1);
+            layoutControl1.Controls.Add(panelControl1);
+            layoutControl1.Controls.Add(textEditName);
+            layoutControl1.Dock = DockStyle.Fill;
+            layoutControl1.Location = new Point(0, 0);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(1228, 230, 650, 400);
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new Size(1062, 545);
+            layoutControl1.TabIndex = 0;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // btnEditPicture
+            // 
+            btnEditPicture.Location = new Point(76, 12);
+            btnEditPicture.Name = "btnEditPicture";
+            editorButtonImageOptions1.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("editorButtonImageOptions1.SvgImage");
+            editorButtonImageOptions1.SvgImageSize = new Size(14, 14);
+            editorButtonImageOptions2.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("editorButtonImageOptions2.SvgImage");
+            editorButtonImageOptions2.SvgImageSize = new Size(14, 14);
+            btnEditPicture.Properties.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, "瀵煎叆鏂囦欢", "Import", superToolTip1, DevExpress.Utils.ToolTipAnchor.Default), new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "", -1, true, true, false, editorButtonImageOptions2, new DevExpress.Utils.KeyShortcut(Keys.None), serializableAppearanceObject5, serializableAppearanceObject6, serializableAppearanceObject7, serializableAppearanceObject8, "妯℃澘涓嬭浇", "Download", superToolTip2, DevExpress.Utils.ToolTipAnchor.Default) });
+            btnEditPicture.Size = new Size(315, 22);
+            btnEditPicture.StyleController = layoutControl1;
+            btnEditPicture.TabIndex = 0;
+            // 
+            // textEdit2
+            // 
+            textEdit2.Location = new Point(630, 13);
+            textEdit2.Name = "textEdit2";
+            textEdit2.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.False;
+            textEdit2.Properties.EditFormat.FormatString = "N0";
+            textEdit2.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
+            textEdit2.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
+            textEdit2.Size = new Size(82, 20);
+            textEdit2.StyleController = layoutControl1;
+            textEdit2.TabIndex = 3;
+            // 
+            // generalOkAndCancelCtrl1
+            // 
+            generalOkAndCancelCtrl1.ButtonCancelMaxSize = new Size(100, 26);
+            generalOkAndCancelCtrl1.ButtonCancelMinSize = new Size(100, 26);
+            generalOkAndCancelCtrl1.ButtonOkMaxSize = new Size(100, 26);
+            generalOkAndCancelCtrl1.ButtonOkMinSize = new Size(100, 26);
+            generalOkAndCancelCtrl1.Location = new Point(12, 507);
+            generalOkAndCancelCtrl1.Name = "generalOkAndCancelCtrl1";
+            generalOkAndCancelCtrl1.Size = new Size(1038, 26);
+            generalOkAndCancelCtrl1.TabIndex = 4;
+            // 
+            // panelControl1
+            // 
+            panelControl1.Controls.Add(pumpChartImageImportCtrl1);
+            panelControl1.Location = new Point(12, 38);
+            panelControl1.Name = "panelControl1";
+            panelControl1.Size = new Size(1038, 465);
+            panelControl1.TabIndex = 1;
+            // 
+            // textEditName
+            // 
+            textEditName.Location = new Point(459, 12);
+            textEditName.Name = "textEditName";
+            textEditName.Size = new Size(103, 20);
+            textEditName.StyleController = layoutControl1;
+            textEditName.TabIndex = 2;
+            // 
+            // Root
+            // 
+            Root.AppearanceItemCaption.Options.UseTextOptions = true;
+            Root.AppearanceItemCaption.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem2, layoutControlItem5, emptySpaceItem1, layoutControlItem3, layoutControlItem4 });
+            Root.Name = "Root";
+            Root.Size = new Size(1062, 545);
+            Root.TextVisible = false;
+            // 
+            // layoutControlItem1
+            // 
+            layoutControlItem1.Control = panelControl1;
+            layoutControlItem1.Location = new Point(0, 26);
+            layoutControlItem1.Name = "layoutControlItem1";
+            layoutControlItem1.Size = new Size(1042, 469);
+            layoutControlItem1.TextSize = new Size(0, 0);
+            layoutControlItem1.TextVisible = false;
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.Control = generalOkAndCancelCtrl1;
+            layoutControlItem2.Location = new Point(0, 495);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.Size = new Size(1042, 30);
+            layoutControlItem2.TextSize = new Size(0, 0);
+            layoutControlItem2.TextVisible = false;
+            // 
+            // layoutControlItem5
+            // 
+            layoutControlItem5.ContentVertAlignment = DevExpress.Utils.VertAlignment.Center;
+            layoutControlItem5.Control = textEdit2;
+            layoutControlItem5.Location = new Point(554, 0);
+            layoutControlItem5.MaxSize = new Size(150, 24);
+            layoutControlItem5.MinSize = new Size(150, 24);
+            layoutControlItem5.Name = "layoutControlItem5";
+            layoutControlItem5.Size = new Size(150, 26);
+            layoutControlItem5.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem5.Text = "閲嶈搴�:";
+            layoutControlItem5.TextSize = new Size(52, 14);
+            // 
+            // emptySpaceItem1
+            // 
+            emptySpaceItem1.AllowHotTrack = false;
+            emptySpaceItem1.Location = new Point(704, 0);
+            emptySpaceItem1.Name = "emptySpaceItem1";
+            emptySpaceItem1.Size = new Size(338, 26);
+            emptySpaceItem1.TextSize = new Size(0, 0);
+            // 
+            // layoutControlItem3
+            // 
+            layoutControlItem3.Control = btnEditPicture;
+            layoutControlItem3.Location = new Point(0, 0);
+            layoutControlItem3.Name = "layoutControlItem3";
+            layoutControlItem3.Size = new Size(383, 26);
+            layoutControlItem3.Text = "鍥剧墖璺緞:";
+            layoutControlItem3.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem4
+            // 
+            layoutControlItem4.Control = textEditName;
+            layoutControlItem4.Location = new Point(383, 0);
+            layoutControlItem4.Name = "layoutControlItem4";
+            layoutControlItem4.Size = new Size(171, 26);
+            layoutControlItem4.Text = "鍚嶇О:";
+            layoutControlItem4.TextSize = new Size(52, 14);
+            // 
+            // pumpChartImageImportCtrl1
+            // 
+            pumpChartImageImportCtrl1.Dock = DockStyle.Fill;
+            pumpChartImageImportCtrl1.Location = new Point(2, 2);
+            pumpChartImageImportCtrl1.Margin = new Padding(2, 2, 2, 2);
+            pumpChartImageImportCtrl1.Name = "pumpChartImageImportCtrl1";
+            pumpChartImageImportCtrl1.Size = new Size(1034, 461);
+            pumpChartImageImportCtrl1.TabIndex = 0;
+            // 
+            // ImportPumpPerform2dByImageDlg
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(1062, 545);
+            Controls.Add(layoutControl1);
+            Name = "ImportPumpPerform2dByImageDlg";
+            StartPosition = FormStartPosition.CenterParent;
+            Text = "閫氳繃鍥剧墖瀵煎叆";
+            ((ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)btnEditPicture.Properties).EndInit();
+            ((ISupportInitialize)textEdit2.Properties).EndInit();
+            ((ISupportInitialize)panelControl1).EndInit();
+            panelControl1.ResumeLayout(false);
+            ((ISupportInitialize)textEditName.Properties).EndInit();
+            ((ISupportInitialize)Root).EndInit();
+            ((ISupportInitialize)layoutControlItem1).EndInit();
+            ((ISupportInitialize)layoutControlItem2).EndInit();
+            ((ISupportInitialize)layoutControlItem5).EndInit();
+            ((ISupportInitialize)emptySpaceItem1).EndInit();
+            ((ISupportInitialize)layoutControlItem3).EndInit();
+            ((ISupportInitialize)layoutControlItem4).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private GeneralOkAndCancelCtrl generalOkAndCancelCtrl1;
+        private DevExpress.XtraEditors.PanelControl panelControl1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraEditors.TextEdit textEdit2;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
+        private DevExpress.XtraEditors.ButtonEdit btnEditPicture;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+        private DevExpress.XtraEditors.TextEdit textEditName;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
+        private PumpChartImageImportCtrl pumpChartImageImportCtrl1;
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/02-image/ImportAssetsExchangerCurveQLByPictureDlg.cs b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/02-image/ImportAssetsExchangerCurveQLByPictureDlg.cs
new file mode 100644
index 0000000..2712e67
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/02-image/ImportAssetsExchangerCurveQLByPictureDlg.cs
@@ -0,0 +1,71 @@
+锘縰sing DevExpress.Mvvm.Native;
+using DevExpress.XtraEditors;
+using HStation.Vmo;
+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 HStation.WinFrmUI
+{
+    public partial class ImportPumpPerform2dByImageDlg : DevExpress.XtraEditors.XtraForm
+    {
+        public ImportPumpPerform2dByImageDlg()
+        {
+            InitializeComponent();
+            this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
+            this.layoutControl1.SetupLayoutControl();
+            this.generalOkAndCancelCtrl1.OkEvent += GeneralOkAndCancelCtrl1_OkEvent;
+        }
+
+        /// <summary>
+        ///
+        /// </summary>
+        public event Func<PhartDiagramRelationExtensionsVmo, Task<bool>> ReloadDataEvent;
+
+        //杩�:FilePath,  PhartRelation.eGraphType,
+        //        鍑�:PhartDiagramExGraphListVmo
+
+        /// <summary>
+        ///
+        /// </summary>
+        public void SetBindingData()
+        {
+        }
+
+        //纭畾
+        private async void GeneralOkAndCancelCtrl1_OkEvent()
+        {
+            var diagram = this.pumpChartImageImportCtrl1.Get();
+            var vmo = new PhartDiagramRelationExtensionsVmo();
+            vmo.Diagram = diagram;
+            var result = await this.ReloadDataEvent?.Invoke(vmo);
+            if (!result)
+            {
+                XtraMessageBox.Show("瀵煎叆澶辫触锛�");
+                return;
+            }
+            XtraMessageBox.Show("瀵煎叆鎴愬姛锛�");
+            this.DialogResult = DialogResult.OK;
+            this.Close();
+        }
+
+        //瀵煎叆鍥剧墖
+        private void btnEditPicture_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
+        {
+            var dlg = new OpenFileDialog();
+            dlg.Title = "閫夋嫨鍥剧墖鏂囦欢";
+            dlg.Filter = "鍥剧墖|*.png;*.jpg";
+            if (dlg.ShowDialog() == DialogResult.OK)
+            {
+                var fileName = dlg.FileName;
+                this.btnEditPicture.EditValue = fileName;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/02-image/ImportAssetsExchangerCurveQLByPictureDlg.resx b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/02-image/ImportAssetsExchangerCurveQLByPictureDlg.resx
new file mode 100644
index 0000000..a953a3b
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/02-image/ImportAssetsExchangerCurveQLByPictureDlg.resx
@@ -0,0 +1,206 @@
+锘�<?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>
+  <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
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAAMDAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iT3BlbjIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMy
+        IDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5HcmVlbntmaWxsOiMwMzlDMjM7fQoJLlll
+        bGxvd3tmaWxsOiNGRkIxMTU7fQoJLnN0MHtvcGFjaXR5OjAuNzU7fQo8L3N0eWxlPg0KICA8ZyBjbGFz
+        cz0ic3QwIj4NCiAgICA8cGF0aCBkPSJNMTkuMiwxMEgxMlY3YzAtMC42LTAuNC0xLTEtMUgzQzIuNCw2
+        LDIsNi41LDIsN3YxOGMwLDAuMiwwLDAuMywwLjEsMC40YzAsMCwwLjEtMC4xLDAuMS0wLjJsNS41LTEw
+        ICAgQzgsMTQuNSw4LjcsMTQsOS41LDE0aDEzLjdMMTkuMiwxMHoiIGNsYXNzPSJZZWxsb3ciIC8+DQog
+        IDwvZz4NCiAgPHBhdGggZD0iTTI5LjMsMTZIOS42TDQsMjZoMTkuOGMwLjUsMCwxLjEtMC4yLDEuMy0w
+        LjZsNC45LTguOUMzMC4xLDE2LjIsMjkuOCwxNiwyOS4zLDE2eiIgY2xhc3M9IlllbGxvdyIgLz4NCiAg
+        PHBhdGggZD0iTTI4LDhjMC0zLjMtMi43LTYtNi02cy02LDIuNy02LDZjMC0yLjIsMS44LTQsNC00czQs
+        MS44LDQsNGgtNGw2LDZsNi02SDI4eiIgY2xhc3M9IkdyZWVuIiAvPg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="editorButtonImageOptions2.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAHYNAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5H
+        cmVlbntmaWxsOiMwMzlDMjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgkuc3Qwe29wYWNpdHk6MC4z
+        O30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTgsNGgxOHY2aDJWM2MwLTAuNS0wLjUtMS0xLTFIN0M2LjUs
+        Miw2LDIuNSw2LDN2N2gyVjR6IiBjbGFzcz0iQmxhY2siIC8+DQogIDxwYXRoIGQ9Ik0yNiwyNkg4di04
+        SDZ2OWMwLDAuNSwwLjUsMSwxLDFoMjBjMC41LDAsMS0wLjUsMS0xdi05aC0yVjI2eiIgY2xhc3M9IkJs
+        YWNrIiAvPg0KICA8cGF0aCBkPSJNMzEsOEgzQzIuNCw4LDIsOC40LDIsOXYxMGMwLDAuNiwwLjQsMSwx
+        LDFoMjhjMC42LDAsMS0wLjQsMS0xVjlDMzIsOC40LDMxLjYsOCwzMSw4eiBNOS4xLDE4bC0xLjMtMi41
+        ICBjLTAuMS0wLjEtMC4xLTAuMy0wLjItMC41aDBjMCwwLjEtMC4xLDAuMy0wLjIsMC41TDYuMSwxOEg0
+        bDIuNS0zLjlsLTIuMi0zLjloMi4xbDEuMSwyLjNjMC4xLDAuMiwwLjIsMC40LDAuMiwwLjdoMCAgYzAt
+        MC4yLDAuMS0wLjQsMC4yLTAuN2wxLjItMi4zaDEuOWwtMi4zLDMuOGwyLjQsMy45SDkuMXogTTE2Ljcs
+        MThoLTQuNnYtNy43aDEuN3Y2LjNoMi45VjE4eiBNMjIuNCwxNi45Yy0wLjIsMC4zLTAuNCwwLjUtMC43
+        LDAuNyAgcy0wLjYsMC4zLTEsMC40Yy0wLjQsMC4xLTAuOCwwLjEtMS4yLDAuMWMtMC40LDAtMC44LDAt
+        MS4yLTAuMWMtMC40LTAuMS0wLjctMC4yLTEtMC4zVjE2YzAuMywwLjMsMC42LDAuNSwxLDAuNnMwLjcs
+        MC4yLDEuMSwwLjIgIGMwLjIsMCwwLjQsMCwwLjYtMC4xczAuMy0wLjEsMC40LTAuMmMwLjEtMC4xLDAu
+        Mi0wLjIsMC4yLTAuMmMwLjEtMC4xLDAuMS0wLjIsMC4xLTAuM2MwLTAuMiwwLTAuMy0wLjEtMC40ICBj
+        LTAuMS0wLjEtMC4yLTAuMi0wLjQtMC4zUzIwLDE1LjEsMTkuOCwxNXMtMC40LTAuMi0wLjctMC4zYy0w
+        LjYtMC4zLTEuMS0wLjYtMS4zLTAuOWMtMC4zLTAuNC0wLjQtMC44LTAuNC0xLjMgIGMwLTAuNCwwLjEt
+        MC43LDAuMi0xYzAuMi0wLjMsMC40LTAuNSwwLjctMC43YzAuMy0wLjIsMC42LTAuMywxLTAuNHMwLjgt
+        MC4xLDEuMi0wLjFjMC40LDAsMC44LDAsMS4xLDAuMWMwLjMsMCwwLjYsMC4xLDAuOSwwLjIgIHYxLjZj
+        LTAuMS0wLjEtMC4zLTAuMi0wLjQtMC4ycy0wLjMtMC4xLTAuNS0wLjJjLTAuMiwwLTAuMy0wLjEtMC41
+        LTAuMXMtMC4zLDAtMC41LDBjLTAuMiwwLTAuNCwwLTAuNSwwLjFjLTAuMiwwLTAuMywwLjEtMC40LDAu
+        MiAgYy0wLjEsMC4xLTAuMiwwLjEtMC4zLDAuMmMtMC4xLDAuMS0wLjEsMC4yLTAuMSwwLjNjMCwwLjEs
+        MCwwLjIsMC4xLDAuM2MwLjEsMC4xLDAuMiwwLjIsMC4zLDAuM2MwLjEsMC4xLDAuMywwLjIsMC41LDAu
+        MyAgczAuNCwwLjIsMC42LDAuM2MwLjMsMC4xLDAuNiwwLjMsMC44LDAuNGMwLjIsMC4xLDAuNSwwLjMs
+        MC42LDAuNWMwLjIsMC4yLDAuMywwLjQsMC40LDAuNnMwLjEsMC41LDAuMSwwLjggIEMyMi42LDE2LjMs
+        MjIuNSwxNi42LDIyLjQsMTYuOXogTTI4LjEsMThsLTEuMy0yLjVjLTAuMS0wLjEtMC4xLTAuMy0wLjIt
+        MC41aDBjMCwwLjEtMC4xLDAuMy0wLjIsMC41TDI1LjEsMThIMjNsMi41LTMuOWwtMi4yLTMuOSAgaDIu
+        MWwxLjEsMi4zYzAuMSwwLjIsMC4yLDAuNCwwLjIsMC43aDBjMC0wLjIsMC4xLTAuNCwwLjItMC43bDEu
+        Mi0yLjNoMS45bC0yLjMsMy44bDIuNCwzLjlIMjguMXoiIGNsYXNzPSJHcmVlbiIgLz4NCiAgPGcgY2xh
+        c3M9InN0MCI+DQogICAgPHBhdGggZD0iTTMxLDhIM0MyLjQsOCwyLDguNCwyLDl2MTBjMCwwLjYsMC40
+        LDEsMSwxaDI4YzAuNiwwLDEtMC40LDEtMVY5QzMyLDguNCwzMS42LDgsMzEsOHogTTkuMSwxOGwtMS4z
+        LTIuNSAgIGMtMC4xLTAuMS0wLjEtMC4zLTAuMi0wLjVoMGMwLDAuMS0wLjEsMC4zLTAuMiwwLjVMNi4x
+        LDE4SDRsMi41LTMuOWwtMi4yLTMuOWgyLjFsMS4xLDIuM2MwLjEsMC4yLDAuMiwwLjQsMC4yLDAuN2gw
+        ICAgYzAtMC4yLDAuMS0wLjQsMC4yLTAuN2wxLjItMi4zaDEuOWwtMi4zLDMuOGwyLjQsMy45SDkuMXog
+        TTE2LjcsMThoLTQuNnYtNy43aDEuN3Y2LjNoMi45VjE4eiBNMjIuNCwxNi45ICAgYy0wLjIsMC4zLTAu
+        NCwwLjUtMC43LDAuN3MtMC42LDAuMy0xLDAuNGMtMC40LDAuMS0wLjgsMC4xLTEuMiwwLjFjLTAuNCww
+        LTAuOCwwLTEuMi0wLjFjLTAuNC0wLjEtMC43LTAuMi0xLTAuM1YxNiAgIGMwLjMsMC4zLDAuNiwwLjUs
+        MSwwLjZzMC43LDAuMiwxLjEsMC4yYzAuMiwwLDAuNCwwLDAuNi0wLjFzMC4zLTAuMSwwLjQtMC4yYzAu
+        MS0wLjEsMC4yLTAuMiwwLjItMC4yYzAuMS0wLjEsMC4xLTAuMiwwLjEtMC4zICAgYzAtMC4yLDAtMC4z
+        LTAuMS0wLjRjLTAuMS0wLjEtMC4yLTAuMi0wLjQtMC4zUzIwLDE1LjEsMTkuOCwxNXMtMC40LTAuMi0w
+        LjctMC4zYy0wLjYtMC4zLTEuMS0wLjYtMS4zLTAuOSAgIGMtMC4zLTAuNC0wLjQtMC44LTAuNC0xLjNj
+        MC0wLjQsMC4xLTAuNywwLjItMWMwLjItMC4zLDAuNC0wLjUsMC43LTAuN2MwLjMtMC4yLDAuNi0wLjMs
+        MS0wLjRzMC44LTAuMSwxLjItMC4xICAgYzAuNCwwLDAuOCwwLDEuMSwwLjFjMC4zLDAsMC42LDAuMSww
+        LjksMC4ydjEuNmMtMC4xLTAuMS0wLjMtMC4yLTAuNC0wLjJzLTAuMy0wLjEtMC41LTAuMmMtMC4yLDAt
+        MC4zLTAuMS0wLjUtMC4xcy0wLjMsMC0wLjUsMCAgIGMtMC4yLDAtMC40LDAtMC41LDAuMWMtMC4yLDAt
+        MC4zLDAuMS0wLjQsMC4yYy0wLjEsMC4xLTAuMiwwLjEtMC4zLDAuMmMtMC4xLDAuMS0wLjEsMC4yLTAu
+        MSwwLjNjMCwwLjEsMCwwLjIsMC4xLDAuMyAgIGMwLjEsMC4xLDAuMiwwLjIsMC4zLDAuM2MwLjEsMC4x
+        LDAuMywwLjIsMC41LDAuM3MwLjQsMC4yLDAuNiwwLjNjMC4zLDAuMSwwLjYsMC4zLDAuOCwwLjRjMC4y
+        LDAuMSwwLjUsMC4zLDAuNiwwLjUgICBjMC4yLDAuMiwwLjMsMC40LDAuNCwwLjZzMC4xLDAuNSwwLjEs
+        MC44QzIyLjYsMTYuMywyMi41LDE2LjYsMjIuNCwxNi45eiBNMjguMSwxOGwtMS4zLTIuNWMtMC4xLTAu
+        MS0wLjEtMC4zLTAuMi0wLjVoMCAgIGMwLDAuMS0wLjEsMC4zLTAuMiwwLjVMMjUuMSwxOEgyM2wyLjUt
+        My45bC0yLjItMy45aDIuMWwxLjEsMi4zYzAuMSwwLjIsMC4yLDAuNCwwLjIsMC43aDBjMC0wLjIsMC4x
+        LTAuNCwwLjItMC43bDEuMi0yLjNoMS45ICAgbC0yLjMsMy44bDIuNCwzLjlIMjguMXoiIGNsYXNzPSJC
+        bHVlIiAvPg0KICA8L2c+DQo8L3N2Zz4L
+</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/03-point/PumpChartPointImport.cs b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/03-point/PumpChartPointImport.cs
index dd29c25..a00531e 100644
--- a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/03-point/PumpChartPointImport.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/01-import/03-point/PumpChartPointImport.cs
@@ -1,4 +1,5 @@
 锘縰sing DevExpress.XtraEditors;
+using HStation.Vmo;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -20,11 +21,29 @@
 
         public void SetBindingData(Vmo.AssetsPumpMainVmo vmo)
         {
-            this.pumpChartPointImportCtrl1.SetBindingData(vmo.RatedFlow, vmo.RatedHead, vmo.RatedSpeed, vmo.RatedEfficiency);
+            this.pumpChartPointImportCtrl1.SetBindingData(vmo.RatedFlow, vmo.RatedHead, vmo.RatedSpeed, vmo.RatedEfficiency.Value);
         }
 
-        private void btnOk_Click(object sender, EventArgs e)
+        /// <summary>
+        /// 鍥炶皟浜嬩欢
+        /// </summary>
+        public event Func<Vmo.PhartDiagramRelationExtensionsVmo, Task<bool>> ReloadDataEvent;
+
+        //纭畾
+        private async void btnOk_Click(object sender, EventArgs e)
         {
+            var vmo = this.pumpChartPointImportCtrl1.Get();
+            var ExtensionsVmo = new PhartDiagramRelationExtensionsVmo();
+            ExtensionsVmo.Diagram = vmo;
+            var result = await this.ReloadDataEvent.Invoke(ExtensionsVmo);
+            if (!result)
+            {
+                XtraMessageBox.Show("瀵煎叆澶辫触锛�");
+                return;
+            }
+            XtraMessageBox.Show("瀵煎叆鎴愬姛锛�");
+            this.DialogResult = DialogResult.OK;
+            this.Close();
         }
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/02-Eidt/EditAssetsExchangerCurveQLDlg.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/02-Eidt/EditAssetsExchangerCurveQLDlg.Designer.cs
new file mode 100644
index 0000000..020a222
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/02-Eidt/EditAssetsExchangerCurveQLDlg.Designer.cs
@@ -0,0 +1,143 @@
+锘縩amespace HStation.WinFrmUI
+{
+    partial class EditAssetsPumpPerform2dDlg
+    {
+        /// <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();
+            generalOkAndCancelCtrl1 = new GeneralOkAndCancelCtrl();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            panelControl1 = new DevExpress.XtraEditors.PanelControl();
+            pumpChartEditCtrl1 = new PumpChartEditCtrl();
+            ((ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((ISupportInitialize)Root).BeginInit();
+            ((ISupportInitialize)layoutControlItem2).BeginInit();
+            ((ISupportInitialize)layoutControlItem1).BeginInit();
+            ((ISupportInitialize)panelControl1).BeginInit();
+            panelControl1.SuspendLayout();
+            SuspendLayout();
+            // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(generalOkAndCancelCtrl1);
+            layoutControl1.Controls.Add(panelControl1);
+            layoutControl1.Dock = DockStyle.Fill;
+            layoutControl1.Location = new Point(0, 0);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new Size(898, 552);
+            layoutControl1.TabIndex = 0;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // generalOkAndCancelCtrl1
+            // 
+            generalOkAndCancelCtrl1.ButtonCancelMaxSize = new Size(100, 26);
+            generalOkAndCancelCtrl1.ButtonCancelMinSize = new Size(100, 26);
+            generalOkAndCancelCtrl1.ButtonOkMaxSize = new Size(100, 26);
+            generalOkAndCancelCtrl1.ButtonOkMinSize = new Size(100, 26);
+            generalOkAndCancelCtrl1.Location = new Point(12, 514);
+            generalOkAndCancelCtrl1.Name = "generalOkAndCancelCtrl1";
+            generalOkAndCancelCtrl1.Size = new Size(874, 26);
+            generalOkAndCancelCtrl1.TabIndex = 5;
+            // 
+            // Root
+            // 
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem2 });
+            Root.Name = "Root";
+            Root.Size = new Size(898, 552);
+            Root.TextVisible = false;
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.Control = generalOkAndCancelCtrl1;
+            layoutControlItem2.Location = new Point(0, 502);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.Size = new Size(878, 30);
+            layoutControlItem2.TextSize = new Size(0, 0);
+            layoutControlItem2.TextVisible = false;
+            // 
+            // layoutControlItem1
+            // 
+            layoutControlItem1.Control = panelControl1;
+            layoutControlItem1.Location = new Point(0, 0);
+            layoutControlItem1.Name = "layoutControlItem1";
+            layoutControlItem1.Size = new Size(878, 502);
+            layoutControlItem1.TextSize = new Size(0, 0);
+            layoutControlItem1.TextVisible = false;
+            // 
+            // panelControl1
+            // 
+            panelControl1.Controls.Add(pumpChartEditCtrl1);
+            panelControl1.Location = new Point(12, 12);
+            panelControl1.Name = "panelControl1";
+            panelControl1.Size = new Size(874, 498);
+            panelControl1.TabIndex = 4;
+            // 
+            // pumpChartEditCtrl1
+            // 
+            pumpChartEditCtrl1.Dock = DockStyle.Fill;
+            pumpChartEditCtrl1.Location = new Point(2, 2);
+            pumpChartEditCtrl1.Margin = new Padding(2, 2, 2, 2);
+            pumpChartEditCtrl1.Name = "pumpChartEditCtrl1";
+            pumpChartEditCtrl1.Size = new Size(870, 494);
+            pumpChartEditCtrl1.TabIndex = 0;
+            // 
+            // EditAssetsPumpPerform2dDlg
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(898, 552);
+            Controls.Add(layoutControl1);
+            Name = "EditAssetsPumpPerform2dDlg";
+            StartPosition = FormStartPosition.CenterParent;
+            Text = "缂栬緫鏇茬嚎";
+            ((ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)Root).EndInit();
+            ((ISupportInitialize)layoutControlItem2).EndInit();
+            ((ISupportInitialize)layoutControlItem1).EndInit();
+            ((ISupportInitialize)panelControl1).EndInit();
+            panelControl1.ResumeLayout(false);
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private GeneralOkAndCancelCtrl generalOkAndCancelCtrl1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraEditors.PanelControl panelControl1;
+        private PumpChartEditCtrl pumpChartEditCtrl1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/02-Eidt/EditAssetsExchangerCurveQLDlg.cs b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/02-Eidt/EditAssetsExchangerCurveQLDlg.cs
new file mode 100644
index 0000000..3264f71
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/02-Eidt/EditAssetsExchangerCurveQLDlg.cs
@@ -0,0 +1,57 @@
+锘縰sing DevExpress.XtraEditors;
+using HStation.Vmo;
+using Yw.Vmo;
+
+namespace HStation.WinFrmUI
+{
+    public partial class EditAssetsPumpPerform2dDlg : DevExpress.XtraEditors.XtraForm
+    {
+        public EditAssetsPumpPerform2dDlg()
+        {
+            InitializeComponent();
+            this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
+            this.layoutControl1.SetupLayoutControl();
+            this.generalOkAndCancelCtrl1.OkEvent += GeneralOkAndCancelCtrl1_OkEvent;
+        }
+
+        /// <summary>
+        ///
+        /// </summary>
+        public event Func<PhartDiagramRelationExtensionsVmo, Task<bool>> ReloadDataEvent;
+
+        private PhartDiagramRelationExtensionsVmo _vmo = null;
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(PhartDiagramRelationExtensionsVmo vmo)
+        {
+            if (vmo == null)
+            {
+                return;
+            }
+            _vmo = vmo;
+            this.pumpChartEditCtrl1.SetBindingData(vmo.Diagram, 0);
+        }
+
+        //纭畾
+        private async void GeneralOkAndCancelCtrl1_OkEvent()
+        {
+            if (_vmo == null)
+            {
+                return;
+            }
+            var diagram = this.pumpChartEditCtrl1.Get();
+            _vmo.Diagram = diagram;
+            var result = await this.ReloadDataEvent?.Invoke(_vmo);
+            if (!result)
+            {
+                XtraMessageBox.Show("瀵煎叆澶辫触锛�");
+                return;
+            }
+            XtraMessageBox.Show("瀵煎叆鎴愬姛锛�");
+            this.DialogResult = DialogResult.OK;
+            this.Close();
+        }
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/02-Eidt/EditAssetsExchangerCurveQLDlg.resx b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/02-Eidt/EditAssetsExchangerCurveQLDlg.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/02-Eidt/EditAssetsExchangerCurveQLDlg.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/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.Designer.cs
index cf9969d..063cea8 100644
--- a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.Designer.cs
@@ -28,6 +28,7 @@
         /// </summary>
         private void InitializeComponent()
         {
+            components = new Container();
             ComponentResourceManager resources = new ComponentResourceManager(typeof(PumpChartMainPage));
             ribbonControl1 = new DevExpress.XtraBars.Ribbon.RibbonControl();
             BtnAdd = new DevExpress.XtraBars.BarButtonItem();
@@ -36,19 +37,28 @@
             barBtnUpdateimportance = new DevExpress.XtraBars.BarButtonItem();
             barBtnOtherName = new DevExpress.XtraBars.BarButtonItem();
             barBtnEditChart = new DevExpress.XtraBars.BarButtonItem();
+            barBtnImportByPicture = new DevExpress.XtraBars.BarButtonItem();
             ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage();
             ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
             ribbonPageGroup2 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+            dockManager1 = new DevExpress.XtraBars.Docking.DockManager(components);
+            dockPanel1 = new DevExpress.XtraBars.Docking.DockPanel();
+            dockPanel1_Container = new DevExpress.XtraBars.Docking.ControlContainer();
+            phartDiagramRelationListCtrl1 = new PhartDiagramRelationListCtrl();
+            pumpChartViewCtrl1 = new PumpChartViewCtrl();
             ((ISupportInitialize)ribbonControl1).BeginInit();
+            ((ISupportInitialize)dockManager1).BeginInit();
+            dockPanel1.SuspendLayout();
+            dockPanel1_Container.SuspendLayout();
             SuspendLayout();
             // 
             // ribbonControl1
             // 
             ribbonControl1.ExpandCollapseItem.Id = 0;
             ribbonControl1.ItemPanelStyle = DevExpress.XtraBars.Ribbon.RibbonItemPanelStyle.Classic;
-            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, BtnAdd, barBtnImportByExcel, barBtnDelete, barBtnUpdateimportance, barBtnOtherName, barBtnEditChart });
+            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, BtnAdd, barBtnImportByExcel, barBtnDelete, barBtnUpdateimportance, barBtnOtherName, barBtnEditChart, barBtnImportByPicture });
             ribbonControl1.Location = new Point(0, 0);
-            ribbonControl1.MaxItemId = 33;
+            ribbonControl1.MaxItemId = 34;
             ribbonControl1.Name = "ribbonControl1";
             ribbonControl1.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { ribbonPage1 });
             ribbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.False;
@@ -105,6 +115,14 @@
             barBtnEditChart.Name = "barBtnEditChart";
             barBtnEditChart.ItemClick += barBtnEditChart_ItemClick;
             // 
+            // barBtnImportByPicture
+            // 
+            barBtnImportByPicture.Caption = "鍥剧墖";
+            barBtnImportByPicture.Id = 33;
+            barBtnImportByPicture.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnImportByPicture.ImageOptions.SvgImage");
+            barBtnImportByPicture.Name = "barBtnImportByPicture";
+            barBtnImportByPicture.ItemClick += barBtnImportByPicture_ItemClick;
+            // 
             // ribbonPage1
             // 
             ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { ribbonPageGroup1, ribbonPageGroup2 });
@@ -114,6 +132,7 @@
             // ribbonPageGroup1
             // 
             ribbonPageGroup1.ItemLinks.Add(barBtnImportByExcel, true);
+            ribbonPageGroup1.ItemLinks.Add(barBtnImportByPicture);
             ribbonPageGroup1.Name = "ribbonPageGroup1";
             ribbonPageGroup1.Text = "瀵煎叆";
             // 
@@ -126,16 +145,64 @@
             ribbonPageGroup2.Name = "ribbonPageGroup2";
             ribbonPageGroup2.Text = "鎿嶄綔";
             // 
+            // dockManager1
+            // 
+            dockManager1.Form = this;
+            dockManager1.RootPanels.AddRange(new DevExpress.XtraBars.Docking.DockPanel[] { dockPanel1 });
+            dockManager1.TopZIndexControls.AddRange(new string[] { "DevExpress.XtraBars.BarDockControl", "DevExpress.XtraBars.StandaloneBarDockControl", "System.Windows.Forms.MenuStrip", "System.Windows.Forms.StatusStrip", "System.Windows.Forms.StatusBar", "DevExpress.XtraBars.Ribbon.RibbonStatusBar", "DevExpress.XtraBars.Ribbon.RibbonControl", "DevExpress.XtraBars.Navigation.OfficeNavigationBar", "DevExpress.XtraBars.Navigation.TileNavPane", "DevExpress.XtraBars.TabFormControl", "DevExpress.XtraBars.FluentDesignSystem.FluentDesignFormControl", "DevExpress.XtraBars.ToolbarForm.ToolbarFormControl" });
+            // 
+            // dockPanel1
+            // 
+            dockPanel1.Controls.Add(dockPanel1_Container);
+            dockPanel1.Dock = DevExpress.XtraBars.Docking.DockingStyle.Left;
+            dockPanel1.ID = new Guid("7665f850-caee-40d7-a6f4-2718b4e99f9d");
+            dockPanel1.Location = new Point(0, 101);
+            dockPanel1.Name = "dockPanel1";
+            dockPanel1.OriginalSize = new Size(200, 200);
+            dockPanel1.Size = new Size(200, 462);
+            dockPanel1.Text = "鏇茬嚎鍒楄〃";
+            // 
+            // dockPanel1_Container
+            // 
+            dockPanel1_Container.Controls.Add(phartDiagramRelationListCtrl1);
+            dockPanel1_Container.Location = new Point(3, 26);
+            dockPanel1_Container.Name = "dockPanel1_Container";
+            dockPanel1_Container.Size = new Size(193, 433);
+            dockPanel1_Container.TabIndex = 0;
+            // 
+            // phartDiagramRelationListCtrl1
+            // 
+            phartDiagramRelationListCtrl1.BorderVisible = true;
+            phartDiagramRelationListCtrl1.Dock = DockStyle.Fill;
+            phartDiagramRelationListCtrl1.Location = new Point(0, 0);
+            phartDiagramRelationListCtrl1.Name = "phartDiagramRelationListCtrl1";
+            phartDiagramRelationListCtrl1.Size = new Size(193, 433);
+            phartDiagramRelationListCtrl1.TabIndex = 0;
+            // 
+            // pumpChartViewCtrl1
+            // 
+            pumpChartViewCtrl1.Dock = DockStyle.Fill;
+            pumpChartViewCtrl1.Location = new Point(200, 101);
+            pumpChartViewCtrl1.Margin = new Padding(2, 2, 2, 2);
+            pumpChartViewCtrl1.Name = "pumpChartViewCtrl1";
+            pumpChartViewCtrl1.Size = new Size(678, 462);
+            pumpChartViewCtrl1.TabIndex = 2;
+            // 
             // PumpChartMainPage
             // 
             Appearance.BackColor = SystemColors.Control;
             Appearance.Options.UseBackColor = true;
             AutoScaleDimensions = new SizeF(7F, 14F);
             AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(pumpChartViewCtrl1);
+            Controls.Add(dockPanel1);
             Controls.Add(ribbonControl1);
             Name = "PumpChartMainPage";
             Size = new Size(878, 563);
             ((ISupportInitialize)ribbonControl1).EndInit();
+            ((ISupportInitialize)dockManager1).EndInit();
+            dockPanel1.ResumeLayout(false);
+            dockPanel1_Container.ResumeLayout(false);
             ResumeLayout(false);
             PerformLayout();
         }
@@ -152,5 +219,11 @@
         private DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage1;
         private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1;
         private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup2;
+        private DevExpress.XtraBars.BarButtonItem barBtnImportByPicture;
+        private DevExpress.XtraBars.Docking.DockManager dockManager1;
+        private PumpChartViewCtrl pumpChartViewCtrl1;
+        private DevExpress.XtraBars.Docking.DockPanel dockPanel1;
+        private DevExpress.XtraBars.Docking.ControlContainer dockPanel1_Container;
+        private PhartDiagramRelationListCtrl phartDiagramRelationListCtrl1;
     }
 }
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.cs b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.cs
index 242087c..333efc5 100644
--- a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.cs
@@ -1,33 +1,129 @@
-锘縩amespace HStation.WinFrmUI
+锘縰sing DevExpress.XtraEditors;
+using HStation.Vmo;
+using Yw;
+
+namespace HStation.WinFrmUI
 {
     public partial class PumpChartMainPage : DocumentPage
     {
         public PumpChartMainPage()
         {
             InitializeComponent();
+            this.phartDiagramRelationListCtrl1.SelectedChangedEvent += PhartDiagramRelationListCtrl1_SelectedChangedEvent;
+        }
+
+        private AssetsPumpMainVmo _vmo;
+
+        private List<PhartDiagramRelationVmo> _allBindingList;
+        private PhartDiagramRelationVmo _relation = null;
+
+        public async void SetBindingData(AssetsPumpMainVmo vmo)
+        {
+            if (vmo == null)
+            {
+                return;
+            }
+            _vmo = vmo;
+            this.PageTitle.Caption = $"{vmo.Name}\r\n鎹熷け鏇茬嚎";
+            _allBindingList = new List<PhartDiagramRelationVmo>();
+            var allList = await BLLFactory<HStation.BLL.PhartDiagramRelation>.Instance
+               .GetByObjectTypeAndObjectID(HStation.Assets.DataType.PumpMain, vmo.ID);
+            allList?.ForEach(x => _allBindingList.Add(x));
+            this.phartDiagramRelationListCtrl1.SetBindingData(_allBindingList);
+        }
+
+        //閫夋嫨鏀瑰彉
+        private void PhartDiagramRelationListCtrl1_SelectedChangedEvent(PhartDiagramRelationVmo obj)
+        {
+            _relation = obj;
+            LoadPhart(_relation);
+        }
+
+        //鍔犺浇鍥捐〃
+        private async void LoadPhart(PhartDiagramRelationVmo relation)
+        {
+            if (relation == null)
+            {
+                this.pumpChartViewCtrl1.SetBindingData(null, default);
+                return;
+            }
+            var vmo = await BLLFactory<Yw.BLL.PhartDiagramExtensions>.Instance.GetByID(relation.DiagramID);
+            this.pumpChartViewCtrl1.SetBindingData(vmo, _vmo.RatedSpeed);
         }
 
         //琛ㄦ牸
         private void barBtnImportByExcel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
             var dlg = new ImportPumpPerform2dByExcelDlg();
-            dlg.SetBindingData();
             dlg.ReloadDataEvent += async (rhs) =>
-            {
-                var bll = new BLL.PhartDiagramRelation();
-                var id = await bll.InsertEx(rhs);
-                if (id > 0)
-                {
-                    return true;
-                }
-                return true;
-            };
+           {
+               var bll = new BLL.PhartDiagramRelation();
+               var id = await bll.InsertEx(rhs);
+               if (id > 0)
+               {
+                   var vmo = new PhartDiagramRelationVmo(rhs);
+                   var relationId = await BLLFactory<HStation.BLL.PhartDiagramRelation>.Instance.Insert(vmo);
+                   if (relationId > 0)
+                   {
+                       _allBindingList.Add(rhs);
+                       this.phartDiagramRelationListCtrl1.SetBindingData(_allBindingList);
+                       return true;
+                   }
+                   return false;
+               }
+               return false;
+           };
+            dlg.ShowDialog();
+        }
+
+        //鍥剧墖
+        private void barBtnImportByPicture_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            var dlg = new ImportPumpPerform2dByExcelDlg();
+            dlg.ReloadDataEvent += async (rhs) =>
+           {
+               var bll = new BLL.PhartDiagramRelation();
+               var id = await bll.InsertEx(rhs);
+               if (id > 0)
+               {
+                   var vmo = new PhartDiagramRelationVmo(rhs);
+                   var relationId = await BLLFactory<HStation.BLL.PhartDiagramRelation>.Instance.Insert(vmo);
+                   if (relationId > 0)
+                   {
+                       _allBindingList.Add(rhs);
+                       this.phartDiagramRelationListCtrl1.SetBindingData(_allBindingList);
+                       return true;
+                   }
+                   return false;
+               }
+               return false;
+           };
             dlg.ShowDialog();
         }
 
         //缂栬緫
-        private void barBtnEditChart_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        private async void barBtnEditChart_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
+            var vm = GetCurrentViewModel();
+            if (vm == null)
+            {
+                return;
+            }
+            var dlg = new EditAssetsPumpPerform2dDlg();
+            var vmo = await BLLFactory<HStation.BLL.PhartDiagramRelation>.Instance.GetExByID(vm.DiagramID);
+            dlg.SetBindingData(vmo);
+            dlg.ReloadDataEvent += async (rhs) =>
+           {
+               var bll = new BLL.PhartDiagramRelation();
+               var bol = await bll.Update(rhs);
+               if (bol)
+               {
+                   vm.Reset(rhs);
+                   return true;
+               }
+               return true;
+           };
+            dlg.ShowDialog();
         }
 
         //鍒悕
@@ -41,8 +137,48 @@
         }
 
         //鍒犻櫎
-        private void barBtnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        private async void barBtnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
+            var vm = GetCurrentViewModel();
+            if (vm == null)
+            {
+                return;
+            }
+            var result = XtraMessageBox.Show("璇烽棶纭鍒犻櫎褰撳墠鏁版嵁鍚楋紵", "璇㈤棶", MessageBoxButtons.YesNo) == DialogResult.Yes;
+            if (!result)
+            {
+                return;
+            }
+            var bol = await BLLFactory<HStation.BLL.PhartDiagramRelation>.Instance.DeleteByID(vm.ID);
+            if (!bol)
+            {
+                TipFormHelper.ShowError("鍒犻櫎澶辫触锛�");
+                return;
+            }
+            _allBindingList.Remove(vm);
+            this.phartDiagramRelationListCtrl1.SetBindingData(_allBindingList);
+            TipFormHelper.ShowSucceed("鍒犻櫎鎴愬姛锛�");
+        }
+
+        //鑾峰彇褰撳墠
+        private PhartDiagramRelationVmo GetCurrentViewModel()
+        {
+            if (_allBindingList == null)
+            {
+                TipFormHelper.ShowError("鏁版嵁鍒濆鍖栭敊璇紒");
+                return null;
+            }
+            if (_allBindingList.Count < 1)
+            {
+                TipFormHelper.ShowInfo("鏃犳暟鎹紒");
+                return null;
+            }
+            if (_relation == null)
+            {
+                TipFormHelper.ShowWarn("璇烽�夋嫨鏁版嵁琛岋紒");
+                return null;
+            }
+            return _relation;
         }
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.resx b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.resx
index fd96e89..62dc299 100644
--- a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.resx
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/07-PumpChart/PumpChartMainPage.resx
@@ -280,4 +280,37 @@
         LDE2eiAgIE0xNiwyMnY0aDRMMTYsMjJ6IiBjbGFzcz0iQmx1ZSIgLz4NCjwvc3ZnPgs=
 </value>
   </data>
+  <data name="barBtnImportByPicture.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAACwFAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzczNzM3NDt9Cgku
+        WWVsbG93e2ZpbGw6I0ZDQjAxQjt9CgkuR3JlZW57ZmlsbDojMTI5QzQ5O30KCS5CbHVle2ZpbGw6IzM4
+        N0NCNzt9CgkuUmVke2ZpbGw6I0QwMjEyNzt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
+        Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQoJLnN0M3tk
+        aXNwbGF5Om5vbmU7ZmlsbDojNzM3Mzc0O30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTQsNlYzYzAtMC41
+        LDAuNS0xLDEtMWgyMmMwLjUsMCwxLDAuNSwxLDF2M2gtMlY0SDZ2Mkg0eiBNMjYsMTh2MTBINlYxOEg0
+        djExYzAsMC41LDAuNSwxLDEsMWgyMiAgYzAuNSwwLDEtMC41LDEtMVYxOEgyNnoiIGNsYXNzPSJCbGFj
+        ayIgLz4NCiAgPHBhdGggZD0iTTkuNiwxMC42YzAsMS0wLjQsMS4yLTEsMS4ySDcuMlY5LjRoMS40Qzku
+        Myw5LjQsOS42LDkuNSw5LjYsMTAuNnogTTMwLDZ2MTJIMlY2SDMweiBNMTEuNCwxMC42ICBjMC0yLjMt
+        MS4xLTIuNi0yLjctMi42SDUuNUg0LjZ2MS4zaDAuOXY1LjRINC42VjE2aDAuOWgyLjZ2LTEuM0g3LjJ2
+        LTEuNmgxLjRDMTAuMywxMy4xLDExLjQsMTIuOSwxMS40LDEwLjZ6IE0yMC4xLDhoLTMuNnYxLjNoMC45
+        ICB2My42aDBMMTQuOCw4aC0yLjh2MS4zSDEzdjUuNGgtMC45VjE2aDMuNnYtMS4zaC0wLjl2LTMuNmgw
+        bDIuNyw0LjloMS44VjkuM2gwLjlWOHogTTI3LjQsMTEuN2gtMy4yVjEzaDEuNnYxLjQgIGMtMC40LDAu
+        Mi0xLDAuMy0xLjUsMC4zYy0wLjMsMC0wLjYtMC4xLTAuOC0wLjFjLTAuOC0wLjItMC45LTEuMS0wLjkt
+        MS42VjExYzAtMS43LDEuMi0xLjcsMi4yLTEuN2MwLjEsMCwwLjMsMCwwLjYsMHYwLjloMS41VjguMSAg
+        Yy0wLjgtMC4yLTEuNi0wLjItMi40LTAuMmMtMC41LDAtMC45LDAtMS40LDAuMWMtMi4yLDAuNS0yLjIs
+        Mi4xLTIuMiwzdjEuOWMwLDAuOSwwLjEsMi41LDIuMiwzYzAuNCwwLjEsMC44LDAuMSwxLjIsMC4yICBj
+        MS4yLDAsMi4yLTAuNCwyLjktMC44bDAuMi0wLjFWMTEuN3oiIGNsYXNzPSJHcmVlbiIgLz4NCjwvc3Zn
+        Pgs=
+</value>
+  </data>
+  <metadata name="dockManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
 </root>
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.cs b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.cs
index 1187669..c6dfeb3 100644
--- a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.cs
@@ -182,7 +182,7 @@
                     return;
                 }
                 var page = new PumpChartMainPage();
-                // page.InitialDataSource(currentVm.ID);
+                page.SetBindingData(currentVm.Model);
                 page.PageTitle.Caption = guid.Function;
                 page.PageGuid = guid;
                 CreatePage(page, guid);
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/HStation.WinFrmUI.Assets.Core.csproj b/WinFrmUI/HStation.WinFrmUI.Assets.Core/HStation.WinFrmUI.Assets.Core.csproj
index befd6bb..19870fc 100644
--- a/WinFrmUI/HStation.WinFrmUI.Assets.Core/HStation.WinFrmUI.Assets.Core.csproj
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/HStation.WinFrmUI.Assets.Core.csproj
@@ -75,6 +75,12 @@
     <Compile Update="01-pump\07-PumpChart\01-import\01-excel\ImportPumpPerform2dByExcelDlg.cs">
       <SubType>Form</SubType>
     </Compile>
+    <Compile Update="01-pump\07-PumpChart\01-import\02-image\ImportAssetsExchangerCurveQLByPictureDlg.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="01-pump\07-PumpChart\02-Eidt\EditAssetsExchangerCurveQLDlg.cs">
+      <SubType>Form</SubType>
+    </Compile>
     <Compile Update="02-adapting\EditAdaptingMainDlg.cs" />
     <Compile Update="02-adapting\AddAdaptingMainDlg.cs" />
     <Compile Update="01-pump\03-AssetsPumpType\EditAssetsPumpTypeDlg.cs">
@@ -426,7 +432,6 @@
   </ItemGroup>
 
   <ItemGroup>
-    <Folder Include="01-pump\07-PumpChart\01-import\02-image\" />
     <Folder Include="12-package\02-main\01-EditPumpPartProp\" />
   </ItemGroup>
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs
index d4c7b94..c8a6437 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs
@@ -19,18 +19,18 @@
         private XYDiagram _diagram;
         private XYDiagramDefaultPane _default_pane;
         private AxisX _axis_x;
-        private AxisY _axis_y; 
+        private AxisY _axis_y;
 
-        private List<Yw.Geometry.Point2d> _point_pt_list; 
+        private List<Yw.Geometry.Point2d> _point_pt_list;
         private List<Yw.Geometry.Point2d> _line_pt_list;
 
         private UniversalCoordinate _coordinate;
-        private bool _initial_data = false; 
+        private bool _initial_data = false;
         private bool _mouse_mode = false;//榧犳爣妯″紡
 
-        #endregion
+        #endregion Private Variable
 
-        #region Public Variable 
+        #region Public Variable
 
         /// <summary>
         /// X杞存爣棰�
@@ -61,7 +61,7 @@
                 _axis_y.Title.Text = value;
             }
         }
-        
+
         /// <summary>
         /// 榧犳爣妯″紡
         /// </summary>
@@ -73,11 +73,11 @@
             }
             set
             {
-                _mouse_mode = value; 
+                _mouse_mode = value;
             }
         }
 
-        #endregion
+        #endregion Public Variable
 
         #region Public Evnet
 
@@ -91,7 +91,9 @@
         /// </summary>
         public event Action<List<Yw.Geometry.Point2d>> DefinePointChangedEvent;
 
-        #endregion 
+        #endregion Public Evnet
+
+
 
         #region Initial
 
@@ -110,21 +112,17 @@
             this.chartControl1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chartControl1_MouseDown);
             this.chartControl1.KeyUp += new System.Windows.Forms.KeyEventHandler(this.chartControl1_KeyUp);
 
-
             _diagram = (XYDiagram)chartControl1.Diagram;
-            _default_pane=_diagram.DefaultPane;
+            _default_pane = _diagram.DefaultPane;
             _axis_x = _diagram.AxisX;
             //_axis_x.SetAxisXQDisplay();
             _axis_y = _diagram.AxisY;
             //_axis_y.SetAxisYQLDisplay();
 
-           
-
             _axis_x.Visibility = DefaultBoolean.False;
             _axis_x.GridLines.Visible = false;
             _axis_y.Visibility = DefaultBoolean.False;
             _axis_y.GridLines.Visible = false;
-             
 
             this.chartControl1.SetChartMonoColorDisplay();
         }
@@ -150,7 +148,7 @@
 
         /// <summary>
         /// 缁戝畾鏁版嵁
-        /// </summary> 
+        /// </summary>
         public void SetBindingData(List<Yw.Geometry.Point2d> point_pt_list, List<Yw.Geometry.Point2d> line_pt_list, string coordinate = null, Color? color = null)
         {
             _initial_data = false;
@@ -168,16 +166,15 @@
                 this.chartControl1.EndInit();
                 return;
             }
-             
+
             AddPointSeries(color.Value, _axis_x, _axis_y, _default_pane, _point_pt_list);
-            AddLineSeries(color.Value, _axis_x, _axis_y, _default_pane, _line_pt_list); 
+            AddLineSeries(color.Value, _axis_x, _axis_y, _default_pane, _line_pt_list);
             if (_coordinate == null)
                 SetCoordinate();
 
             SetChartAxis();
             this.chartControl1.EndInit();
             _initial_data = true;
-              
         }
 
         //鏄惁鏄棤鏁堟暟鎹�
@@ -196,7 +193,7 @@
             return false;
         }
 
-        #region Add Chart Data 
+        #region Add Chart Data
 
         private void AddPointSeries(Color color, AxisXBase axis_x, AxisYBase axis_y, XYDiagramPaneBase pane, List<Yw.Geometry.Point2d> pt_list)
         {
@@ -220,7 +217,7 @@
                 var series_pt = new DevExpress.XtraCharts.SeriesPoint(pt.X, new double[] { pt.Y });
                 series_pt_list.Add(series_pt);
             }
-        
+
             var series = new DevExpress.XtraCharts.Series();
             series.ShowInLegend = false;
             series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical;
@@ -268,11 +265,9 @@
             this.chartControl1.Series.Add(series);
         }
 
-         
-        #endregion
+        #endregion Add Chart Data
 
-        #endregion
-         
+        #endregion SetBindingData
 
         #region Set Axis
 
@@ -302,7 +297,6 @@
             _minY = Math.Min(_line_pt_list.Min(x => x.Y), _minY);
             _maxY = Math.Min(_line_pt_list.Max(x => x.Y), _maxY);
 
-
             _coordinate = UniversalCoordinate.CalcCoordinate(_minX, _maxX, _minY, _maxY);
             if (_coordinate == null)
                 return;
@@ -310,8 +304,7 @@
             {
                 _coordinate.GridNumberX++;
             }
-
-        } 
+        }
 
         /// <summary>
         /// 璁剧疆鍥捐〃杞�
@@ -325,7 +318,7 @@
                 _axis_y.Visibility = DefaultBoolean.False;
                 _axis_y.GridLines.Visible = false;
                 return;
-            } 
+            }
 
             //璁$畻鍒诲害 X
             var axis_x_labels = new List<CustomAxisLabel>();
@@ -340,7 +333,6 @@
             _axis_x.CustomLabels.AddRange(axis_x_labels.ToArray());
             _axis_x.Visibility = DefaultBoolean.True;
             _axis_x.GridLines.Visible = true;
-
 
             //璁$畻鍒诲害 Y
             var axis_y_labels = new List<CustomAxisLabel>();
@@ -360,13 +352,12 @@
             _axis_y.SetAxisRange(_coordinate.DispMinY(), _coordinate.DispMaxY());
         }
 
-      
-
-        #endregion Calc
+        #endregion Set Axis
 
         #region ChartEvent
 
-        private SeriesPoint _pick_point = null;// 閫変腑鐐� 
+        private SeriesPoint _pick_point = null;// 閫変腑鐐�
+
         private void chartControl1_MouseDown(object sender, MouseEventArgs e)
         {
             if (!_initial_data)
@@ -381,7 +372,6 @@
                 }
             }
         }
-
 
         private void chartControl1_MouseMove(object sender, MouseEventArgs e)
         {
@@ -399,7 +389,6 @@
             _pick_point.NumericalArgument = diagram_coordinates.NumericalArgument;
         }
 
-
         private void chartControl1_MouseUp(object sender, MouseEventArgs e)
         {
             if (!_mouse_mode)
@@ -416,7 +405,6 @@
 
             _pick_point = null;
         }
-
 
         private void chartControl1_KeyUp(object sender, KeyEventArgs e)
         {
@@ -448,10 +436,9 @@
             }
             _pick_point.Values[0] = y;
             _pick_point.NumericalArgument = x;
-            var index = _pick_point.Tag.is
-            SetPointPtValue();
+            /*   var index = _pick_point.Tag.is
+               SetPointPtValue();*/
         }
-
 
         /// <summary>
         /// 鏇存柊鏁版嵁
@@ -465,8 +452,6 @@
             this.DefinePointChangedEvent?.Invoke(_point_pt_list);
         }
 
-        #endregion  
-
-   
+        #endregion ChartEvent
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditCtrl.cs
index 05b7a95..2a4785c 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditCtrl.cs
@@ -1,7 +1,6 @@
 锘縰sing DevExpress.XtraEditors;
 using System.Data;
 
- 
 namespace Yw.WinFrmUI.Phart
 {
     public partial class UniversalEditCtrl : DevExpress.XtraEditors.XtraUserControl
@@ -11,14 +10,13 @@
             InitializeComponent();
 
             this.gridView1.SetNormalEditView();
-            this.gridView1.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; 
+            this.gridView1.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
             this.curveExpressEditChart.DefinePointChangedEvent += FeatCurvesDispCtrl1_OnDefinePointChanged;
         }
-         
 
         private List<Yw.Geometry.Point2d> _pt_ql_list = null;
         private List<Yw.Geometry.Point2d> _fitCurvePoints = null;
-          
+
         /// <summary>
         /// 鍒濆鍖栨暟鎹�
         /// </summary>
@@ -30,10 +28,9 @@
             this.bindingSource1.DataSource = _fitCurvePoints;
         }
 
-
         /// <summary>
         /// 鍒濆鍖栨暟鎹�(鐩墠娌℃湁瀹氫箟鐐�)
-        /// </summary> 
+        /// </summary>
         public void SetBindingData(Yw.Geometry.CubicSpline2d cubic_spline_ql)
         {
             if (cubic_spline_ql == null)
@@ -45,14 +42,12 @@
             SetBindingData(pt_ql_list, pt_ql_list);
         }
 
-
         /// <summary>
         /// 鍒濆鍖栨暟鎹�
-        /// </summary> 
+        /// </summary>
         public void SetBindingData(List<Yw.Geometry.Point2d> pt_ql_list,
                     List<Yw.Geometry.Point2d> def_pt_ql_list)
         {
-
             _fitCurvePoints = new List<Yw.Geometry.Point2d>();
             this.bindingSource1.DataSource = _fitCurvePoints;
 
@@ -60,12 +55,10 @@
 
             if (pt_ql_list == null || pt_ql_list.Count < 4)
             {
-              
                 return;
             }
 
             _pt_ql_list = pt_ql_list;
-
 
             this.cmbCurveType.Properties.Items.Clear();
             this.cmbCurveType.Properties.Items.Add("娴侀噺姘存崯鏇茬嚎");
@@ -90,8 +83,6 @@
             this.bindingSource1.ResetBindings(false);
         }
 
-
-
         //鍗曞厓鏍间慨鏀瑰悗瑙﹀彂
         private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
         {
@@ -113,7 +104,6 @@
             }
         }
 
-
         /// <summary>
         /// 鍒锋柊鏁版嵁
         /// </summary>
@@ -124,7 +114,7 @@
                 _fitCurvePoints.Add(new Yw.Geometry.Point2d(pt.X, pt.Y));
 
             var list = _fitCurvePoints?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
-            this.curveExpressEditChart.UpdateCurve(list);
+            //this.curveExpressEditChart.UpdateCurve(list);
             this.bindingSource1.ResetBindings(false);
         }
 
@@ -147,9 +137,8 @@
                 points.Add(new Yw.Geometry.Point2d(x, y));
             }
             _pt_ql_list = points;
-            this.curveExpressEditChart.UpdateCurve(points);
+            //  this.curveExpressEditChart.UpdateCurve(points);
         }
-
 
         //鎻掑叆鐐�
         private void InsertPoint()
@@ -176,7 +165,6 @@
             ReloadCurvePoints();
         }
 
-
         /// <summary>
         /// 璁剧疆鏇茬嚎鍧愭爣
         /// </summary>
@@ -184,7 +172,6 @@
         {
             this.curveExpressEditChart.SetChartAxis();
         }
-
 
         /// <summary>
         /// 鑾峰彇鐐逛俊鎭�
@@ -202,7 +189,5 @@
 
             return true;
         }
-
-
     }
-}
+}
\ No newline at end of file

--
Gitblit v1.9.3