From 1bf6b7a300e21e9b8996f9ebeeb55a1eccda7a02 Mon Sep 17 00:00:00 2001
From: Shuxia Ning <NingShuxia0927@outlook.com>
Date: 星期五, 20 十二月 2024 10:50:36 +0800
Subject: [PATCH] 排除bug

---
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalChartExcelEditCtrl.en-US.resx                    |    0 
 WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/02-edit/UniversalChartEditCtrl.cs                   |   21 
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinateDlg.cs                           |  128 +++++
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalAxisValueDlg.cs                            |   50 ++
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinate_Disp.cs                         |    0 
 WinFrmUI/Yw.WinFrmUI.Phart.Core/Yw.WinFrmUI.Phart.Core.csproj                                                  |   11 
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalChartExcelEditCtrl.cs                            |    9 
 /dev/null                                                                                                      |  204 --------
 WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/01-view/UniversalChartViewCtrl.cs                   |    2 
 WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/00-core/02-extensions/PhartVmoExtensions.cs                      |   29 
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalAxisValueDlg.designer.cs                   |  131 +++++
 WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/00-/PumpChart.cs                                                       |    2 
 WinFrmUI/Yw.WinFrmUI.Phart.Core/00-core/Point2dListExtensions.cs                                               |    2 
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/01-view/UniversalViewChart.cs                                     |    2 
 WinFrmUI/Yw.WinFrmUI.Phart.Core/Yw.WinFrmUI.Phart.Core.csproj.user                                             |    6 
 Service/HStation.Service.PhartRelation.Core/02-model/99-models/00-geometry/FeatCurveGeometryParasModel.cs      |   15 
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinateDlg.resx                         |  120 +++++
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalAxisValueDlg.resx                          |  141 ++++++
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinateDlg.Designer.cs                  |  425 ++++++++++++++++++
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalChartExcelEditCtrl.resx                          |    0 
 WinFrmUI/HStation.WinFrmUI.Assets.Core/HStation.WinFrmUI.Assets.Core.csproj                                    |   28 
 WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/03-import/01-excel/UniversalChartExcelImportCtrl.cs |    8 
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalChartExcelEditCtrl.designer.cs                   |    0 
 WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinate.cs                              |    0 
 24 files changed, 1,088 insertions(+), 246 deletions(-)

diff --git a/Service/HStation.Service.PhartRelation.Core/02-model/99-models/00-geometry/FeatCurveGeometryParasModel.cs b/Service/HStation.Service.PhartRelation.Core/02-model/99-models/00-geometry/FeatCurveGeometryParasModel.cs
new file mode 100644
index 0000000..fbcc69a
--- /dev/null
+++ b/Service/HStation.Service.PhartRelation.Core/02-model/99-models/00-geometry/FeatCurveGeometryParasModel.cs
@@ -0,0 +1,15 @@
+锘縩amespace HStation.Model
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class FeatCurveGeometryParasModel : JsonModel<FeatCurveGeometryParasModel>
+    {
+        /// <summary>
+        /// 瀹氫箟鐐�
+        /// </summary>
+        public List<Yw.Geometry.Point2d> DefinePoints { get; set; }
+
+    }
+
+}
diff --git a/Service/HStation.Service.PhartRelation.Core/02-model/99-models/02-geometry/FeatCurveGeometryParasModel.cs b/Service/HStation.Service.PhartRelation.Core/02-model/99-models/02-geometry/FeatCurveGeometryParasModel.cs
deleted file mode 100644
index cf2f6c0..0000000
--- a/Service/HStation.Service.PhartRelation.Core/02-model/99-models/02-geometry/FeatCurveGeometryParasModel.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-锘縩amespace HStation.Model
-{
-    /// <summary>
-    /// 
-    /// </summary>
-    public class FeatCurveGeometryParasModel : JsonModel<FeatCurveGeometryParasModel>
-    {
-
-    }
-
-}
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 61e6296..3d0902a 100644
--- a/WinFrmUI/HStation.WinFrmUI.Assets.Core/HStation.WinFrmUI.Assets.Core.csproj
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/HStation.WinFrmUI.Assets.Core.csproj
@@ -11,19 +11,35 @@
     <Compile Remove="02-UICore\**" />
     <Compile Remove="03-valve\01-series-----bak\**" />
     <Compile Remove="03-valve\02-main---bak\**" />
+    <Compile Remove="03-valve\04-chart-edit\**" />
+    <Compile Remove="03-valve\05-import\**" />
     <Compile Remove="10-equipment\**" />
+    <Compile Remove="11-compressor\04-chart-edit\**" />
+    <Compile Remove="11-compressor\05-import\**" />
     <EmbeddedResource Remove="02-UICore\**" />
     <EmbeddedResource Remove="03-valve\01-series-----bak\**" />
     <EmbeddedResource Remove="03-valve\02-main---bak\**" />
+    <EmbeddedResource Remove="03-valve\04-chart-edit\**" />
+    <EmbeddedResource Remove="03-valve\05-import\**" />
     <EmbeddedResource Remove="10-equipment\**" />
+    <EmbeddedResource Remove="11-compressor\04-chart-edit\**" />
+    <EmbeddedResource Remove="11-compressor\05-import\**" />
     <None Remove="02-UICore\**" />
     <None Remove="03-valve\01-series-----bak\**" />
     <None Remove="03-valve\02-main---bak\**" />
+    <None Remove="03-valve\04-chart-edit\**" />
+    <None Remove="03-valve\05-import\**" />
     <None Remove="10-equipment\**" />
+    <None Remove="11-compressor\04-chart-edit\**" />
+    <None Remove="11-compressor\05-import\**" />
     <Page Remove="02-UICore\**" />
     <Page Remove="03-valve\01-series-----bak\**" />
     <Page Remove="03-valve\02-main---bak\**" />
+    <Page Remove="03-valve\04-chart-edit\**" />
+    <Page Remove="03-valve\05-import\**" />
     <Page Remove="10-equipment\**" />
+    <Page Remove="11-compressor\04-chart-edit\**" />
+    <Page Remove="11-compressor\05-import\**" />
   </ItemGroup>
 
   <ItemGroup>
@@ -91,13 +107,7 @@
     <Compile Update="01-pump\06-PumpGroup\AddPumpProductGroupDlg.cs" />
     <Compile Update="01-pump\04-PumpMain\AddPumpProductMainDlg.cs" />
     <Compile Update="01-pump\05-PumpSeries\EditPumpProductSeriesDlg.cs" />
-    <Compile Update="03-valve\04-chart-edit\ValvePerform2dEditChart.cs" />
-    <Compile Update="03-valve\04-chart-edit\ValvePerform2dEditCtrl.cs" />
-    <Compile Update="03-valve\04-chart-edit\ValvePerform2dEditDlg.cs" />
-    <Compile Update="03-valve\05-import\01-excel\ImportValvePerform2dByExcelCtrl.cs" />
-    <Compile Update="03-valve\05-import\01-excel\ImportValvePerform2dByExcelDlg.cs" />
     <Compile Update="02-adapting\AdaptingManageMainPage.cs" />
-    <Compile Update="03-valve\04-chart-edit\XhsValveMainPhartMinorLossPanel.cs" />
     <Compile Update="04-pipe\03-coefficient\SetPipeLineCoefficientDlg.cs" />
     <Compile Update="05-elbow\02-main\AddAssetsElbowMainDlg.cs">
       <SubType>Form</SubType>
@@ -141,12 +151,6 @@
     <Compile Update="10-exchanger\06-prop\EditPackagePartPropDlg.cs">
       <SubType>Form</SubType>
     </Compile>
-    <Compile Update="11-compressor\04-chart-edit\CompressorMainPhartMinorLossPanel.cs" />
-    <Compile Update="11-compressor\04-chart-edit\CompressorPerform2dEditChart.cs" />
-    <Compile Update="11-compressor\04-chart-edit\CompressorPerform2dEditCtrl.cs" />
-    <Compile Update="11-compressor\04-chart-edit\CompressorPerform2dEditDlg.cs" />
-    <Compile Update="11-compressor\05-import\01-excel\ImportCompressorPerform2dByExcelCtrl.cs" />
-    <Compile Update="11-compressor\05-import\01-excel\ImportTankPerform2dByExcelDlg.cs" />
     <Compile Update="11-compressor\06-prop\EditPackagePartPropDlg.cs">
       <SubType>Form</SubType>
     </Compile>
diff --git a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/00-core/02-extensions/PhartVmoExtensions.cs b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/00-core/02-extensions/PhartVmoExtensions.cs
index 2544cfb..3535f4e 100644
--- a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/00-core/02-extensions/PhartVmoExtensions.cs
+++ b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/00-core/02-extensions/PhartVmoExtensions.cs
@@ -267,25 +267,38 @@
             return pts?.ToList();
         }
 
-        #endregion
-
-
-
         /// <summary>
         /// 鑾峰彇鐗规�ф洸绾�
         /// </summary>
-        public static (Yw.Ahart.eCurveType, Yw.Ahart.eFeatType, List<Yw.Geometry.Point2d>) GetCurveInfo(this Yw.Vmo.PhartGraphVmo vmo)
+        public static (Yw.Ahart.eCurveType curve_type, Yw.Ahart.eFeatType feat_type, List<Yw.Geometry.Point2d> define_pt_list, List<Yw.Geometry.Point2d> line_pt_list) GetCurveInfo(this Yw.Vmo.PhartGraphVmo vmo)
         {
             if (vmo == null)
                 return default;
+            var paras = vmo.GeometryParasModel();
+            var define_pt_list = paras.DefinePoints;
 
             var performCurve = HStation.Service.PhartRelation.PhartGraphHelper.GetPerformCurve((HStation.PhartRelation.eGeometryStyle)vmo.GeometryStyle, vmo.GeometryInfo);
             var curve_type = (Yw.Ahart.eCurveType)vmo.GraphType;
             var feat_type = performCurve.FeatType;
-            var pt_list = performCurve.FeatCurve.GetPointList(30);   
-            return new(curve_type, feat_type, pt_list);
-
+            var line_pt_list = performCurve.FeatCurve.GetPointList(30);
+            return new(curve_type, feat_type, define_pt_list, line_pt_list);
         }
+        #endregion
+
+        /// <summary>
+        /// 鑾峰彇鐗规�ф洸绾�
+        /// </summary>
+        public static HStation.Model.FeatCurveGeometryParasModel GeometryParasModel(this Yw.Vmo.PhartGraphVmo vmo)
+        {
+            if (vmo == null)
+                return default;
+            if (string.IsNullOrEmpty(vmo.GeometryParas))
+                return default;
+            if (vmo.GeometryStyle != (int)HStation.PhartRelation.eGeometryStyle.FeatCurve)
+                return default;
+            return HStation.Model.FeatCurveGeometryParasModel.ToModel(vmo.GeometryInfo);
+        }
+
     }
 
 }
diff --git a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/01-view/UniversalChartViewCtrl.cs b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/01-view/UniversalChartViewCtrl.cs
index fd82ff9..fe1439a 100644
--- a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/01-view/UniversalChartViewCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/01-view/UniversalChartViewCtrl.cs
@@ -21,7 +21,7 @@
             var (axis_x_title, axis_y_title) = AxisTitleHelper.Get(curveInfo.Item1);
             this.universalViewChart1.AxisXTitle = axis_x_title;
             this.universalViewChart1.AxisYTitle = axis_y_title;
-            this.universalViewChart1.SetBindingData(curveInfo.Item3);
+            this.universalViewChart1.SetBindingData(curveInfo.line_pt_list);
         }
 
 
diff --git a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/02-edit/UniversalChartEditCtrl.cs b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/02-edit/UniversalChartEditCtrl.cs
index c2bdab6..5317c1c 100644
--- a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/02-edit/UniversalChartEditCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/02-edit/UniversalChartEditCtrl.cs
@@ -17,16 +17,14 @@
         /// </summary>  
         public void SetBindingData(Yw.Vmo.PhartDiagramExGraphListVmo vmo)
         {
-            _vmo=vmo;
+            _vmo = vmo;
             if (vmo == null)
             {
                 return;
-            } 
-            var curveInfo = vmo.GraphList[0].GetCurveInfo();
-            this.universalChartExcelEditCtrl1.SetBindingData(curveInfo.Item1, curveInfo.Item3);
+            }
+            var (curve_type, feat_type, define_pt_list, line_pt_list) = vmo.GraphList[0].GetCurveInfo();
+            this.universalChartExcelEditCtrl1.SetBindingData(curve_type, define_pt_list, feat_type);
         }
-
-
 
         /// <summary>
         /// 鑾峰彇
@@ -37,11 +35,16 @@
                 return default;
             if (!this.universalChartExcelEditCtrl1.Get(out Yw.Ahart.eFeatType feat_type, out List<Yw.Geometry.Point2d> pt_list))
                 return default;
+            var geometry_paras = new HStation.Model.FeatCurveGeometryParasModel();
+            geometry_paras.DefinePoints = pt_list;
+
             var curve_type = (Yw.Ahart.eCurveType)_vmo.GraphList[0].GraphType;
-            var ds_stirng = pt_list.ToDbString(curve_type, feat_type);
-            if (string.IsNullOrEmpty(ds_stirng))
+            var geometry_info = pt_list.ToDbString(curve_type, feat_type);
+            if (string.IsNullOrEmpty(geometry_info))
                 return default;
-            _vmo.GraphList[0].GeometryInfo = ds_stirng; 
+            _vmo.GraphList[0].GeometryParas = geometry_paras.ToJson();
+            _vmo.GraphList[0].GeometryInfo = geometry_info;
+
             return _vmo;
         }
 
diff --git a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/03-import/01-excel/UniversalChartExcelImportCtrl.cs b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/03-import/01-excel/UniversalChartExcelImportCtrl.cs
index 352b34c..d88a952 100644
--- a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/03-import/01-excel/UniversalChartExcelImportCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/02-universal/03-import/01-excel/UniversalChartExcelImportCtrl.cs
@@ -37,13 +37,17 @@
             var ds_stirng = pt_list.ToDbString(_curve_type, feat_type);
             if (string.IsNullOrEmpty(ds_stirng))
                 return default;
+            var geometry_paras = new HStation.Model.FeatCurveGeometryParasModel();
+            geometry_paras.DefinePoints = pt_list;
+
             var vmo = new Yw.Vmo.PhartDiagramExGraphListVmo();
             vmo.DiagramType = (int)HStation.PhartRelation.eDiagramType.Feat;
             vmo.GraphList = new List<Yw.Vmo.PhartGraphVmo>()
             {
-                new Yw.Vmo.PhartGraphVmo()
+                new ()
                 {
-                      GraphType =(int) _curve_type, 
+                      GraphType =(int) _curve_type,
+                      GeometryParas= geometry_paras.ToJson(),
                       GeometryStyle = (int) HStation.PhartRelation.eGeometryStyle.FeatCurve,
                       GeometryInfo = ds_stirng
                 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/00-core/Point2dListExtensions.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/00-core/Point2dListExtensions.cs
index c1c6373..c30fbe9 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/00-core/Point2dListExtensions.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/00-core/Point2dListExtensions.cs
@@ -210,6 +210,8 @@
             }
         }
 
+       
+
         /// <summary>
         /// 
         /// </summary> 
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/00-/PumpChart.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/00-/PumpChart.cs
index 769c2a4..2db15ec 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/00-/PumpChart.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/00-/PumpChart.cs
@@ -1,4 +1,4 @@
-锘� using DevExpress.Utils;
+锘縰sing DevExpress.Utils;
 using DevExpress.XtraCharts;
 
 namespace Yw.WinFrmUI.Phart
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/01-view/UniversalViewChart.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/01-view/UniversalViewChart.cs
index 356933c..d9abaa3 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/01-view/UniversalViewChart.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/01-view/UniversalViewChart.cs
@@ -15,7 +15,7 @@
             InitialChart();
         }
 
-        #region Private Variable 
+        #region Private Variable
 
         private XYDiagram _diagram;
         private XYDiagramDefaultPane _default_pane; 
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/03-import/01-excel/UniversalChartExcelEditCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalChartExcelEditCtrl.cs
similarity index 94%
rename from WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/03-import/01-excel/UniversalChartExcelEditCtrl.cs
rename to WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalChartExcelEditCtrl.cs
index d9d519a..7c4528d 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/03-import/01-excel/UniversalChartExcelEditCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalChartExcelEditCtrl.cs
@@ -21,21 +21,22 @@
 
 
 
-        private Yw.Ahart.eFeatType _feat_type = Ahart.eFeatType.Cubic;
+        private Yw.Ahart.eFeatType _feat_type;
         private List<Yw.Geometry.Point2d> _def_pt_list = null;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary> 
-        public void SetBindingData(Yw.Ahart.eCurveType curve_type, List<Yw.Geometry.Point2d> def_pt_list)
-        { 
+        public void SetBindingData(Yw.Ahart.eCurveType curve_type, List<Yw.Geometry.Point2d> def_pt_list, Yw.Ahart.eFeatType feat_type = Yw.Ahart.eFeatType.Cubic)
+        {
             _def_pt_list = def_pt_list?.Select(t =>
             {
                 var x = Math.Round(t.X, 2);
                 var y = Math.Round(t.Y, 2);
-                return new  Yw.Geometry.Point2d(x, y);
+                return new Yw.Geometry.Point2d(x, y);
             }).ToList();
 
+            _feat_type = feat_type;
             _def_pt_list ??= new List<Geometry.Point2d>();
             SetChart(_feat_type, _def_pt_list);
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/03-import/01-excel/UniversalChartExcelEditCtrl.designer.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalChartExcelEditCtrl.designer.cs
similarity index 100%
rename from WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/03-import/01-excel/UniversalChartExcelEditCtrl.designer.cs
rename to WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalChartExcelEditCtrl.designer.cs
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/03-import/01-excel/UniversalChartExcelEditCtrl.en-US.resx b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalChartExcelEditCtrl.en-US.resx
similarity index 100%
rename from WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/03-import/01-excel/UniversalChartExcelEditCtrl.en-US.resx
rename to WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalChartExcelEditCtrl.en-US.resx
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/03-import/01-excel/UniversalChartExcelEditCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalChartExcelEditCtrl.resx
similarity index 100%
rename from WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/03-import/01-excel/UniversalChartExcelEditCtrl.resx
rename to WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalChartExcelEditCtrl.resx
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditCtrl.Designer.cs
deleted file mode 100644
index 6f27ddb..0000000
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditCtrl.Designer.cs
+++ /dev/null
@@ -1,307 +0,0 @@
-锘縩amespace Yw.WinFrmUI.Phart
-{
-    partial class UniversalEditCtrl
-    {
-        /// <summary> 
-        /// Requipuired designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary> 
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region Component Designer generated code
-
-        /// <summary> 
-        /// Requipuired method for Designer support - do not modify 
-        /// the contents of this method with the code editor.
-        /// </summary>
-        private void InitializeComponent()
-        {
-            this.components = new System.ComponentModel.Container();
-            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions1 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UniversalEditCtrl));
-            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.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.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions3 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject9 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject10 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject11 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject12 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions4 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject13 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject14 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject15 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject16 = new DevExpress.Utils.SerializableAppearanceObject();
-            this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
-            this.gridControl1 = new DevExpress.XtraGrid.GridControl();
-            this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
-            this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
-            this.colX = new DevExpress.XtraGrid.Columns.GridColumn();
-            this.colY = new DevExpress.XtraGrid.Columns.GridColumn();
-            this.cmbCurveType = new DevExpress.XtraEditors.ComboBoxEdit();
-            this.buttonEdit = new DevExpress.XtraEditors.ButtonEdit();
-            this.Root = new DevExpress.XtraLayout.LayoutControlGroup();
-            this.layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup();
-            this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
-            this.layoutControlGroup2 = new DevExpress.XtraLayout.LayoutControlGroup();
-            this.layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
-            this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
-            this.curveExpressEditChart = new  UniversalEditChart();
-            this.sidePanel1 = new DevExpress.XtraEditors.SidePanel();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
-            this.layoutControl1.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.gridControl1)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.cmbCurveType.Properties)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.buttonEdit.Properties)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.Root)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup2)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
-            this.sidePanel1.SuspendLayout();
-            this.SuspendLayout();
-            // 
-            // layoutControl1
-            // 
-            this.layoutControl1.Controls.Add(this.gridControl1);
-            this.layoutControl1.Controls.Add(this.cmbCurveType);
-            this.layoutControl1.Controls.Add(this.buttonEdit);
-            this.layoutControl1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.layoutControl1.Location = new System.Drawing.Point(0, 0);
-            this.layoutControl1.Name = "layoutControl1";
-            this.layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(1002, 504, 975, 600);
-            this.layoutControl1.Root = this.Root;
-            this.layoutControl1.Size = new System.Drawing.Size(285, 657);
-            this.layoutControl1.TabIndex = 0;
-            this.layoutControl1.Text = "layoutControl1";
-            // 
-            // gridControl1
-            // 
-            this.gridControl1.DataSource = this.bindingSource1;
-            this.gridControl1.Location = new System.Drawing.Point(0, 157);
-            this.gridControl1.MainView = this.gridView1;
-            this.gridControl1.Name = "gridControl1";
-            this.gridControl1.Size = new System.Drawing.Size(285, 500);
-            this.gridControl1.TabIndex = 6;
-            this.gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
-            this.gridView1});
-            // 
-            // gridView1
-            // 
-            this.gridView1.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
-            this.gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
-            this.colX,
-            this.colY});
-            this.gridView1.GridControl = this.gridControl1;
-            this.gridView1.Name = "gridView1";
-            this.gridView1.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(this.gridView1_CellValueChanged);
-            // 
-            // colX
-            // 
-            this.colX.Caption = "X";
-            this.colX.FieldName = "X";
-            this.colX.Name = "colX";
-            this.colX.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False;
-            this.colX.OptionsFilter.AllowAutoFilter = false;
-            this.colX.OptionsFilter.AllowFilter = false;
-            this.colX.Visible = true;
-            this.colX.VisibleIndex = 0;
-            // 
-            // colY
-            // 
-            this.colY.Caption = "Y";
-            this.colY.FieldName = "Y";
-            this.colY.Name = "colY";
-            this.colY.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False;
-            this.colY.OptionsFilter.AllowAutoFilter = false;
-            this.colY.OptionsFilter.AllowFilter = false;
-            this.colY.Visible = true;
-            this.colY.VisibleIndex = 1;
-            // 
-            // cmbCurveType
-            // 
-            this.cmbCurveType.Location = new System.Drawing.Point(12, 45);
-            this.cmbCurveType.Name = "cmbCurveType";
-            this.cmbCurveType.Properties.Appearance.Options.UseTextOptions = true;
-            this.cmbCurveType.Properties.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
-            this.cmbCurveType.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
-            this.cmbCurveType.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
-            this.cmbCurveType.Size = new System.Drawing.Size(261, 28);
-            this.cmbCurveType.StyleController = this.layoutControl1;
-            this.cmbCurveType.TabIndex = 4; 
-            // 
-            // buttonEdit
-            // 
-            this.buttonEdit.Location = new System.Drawing.Point(0, 119);
-            this.buttonEdit.Name = "buttonEdit";
-            editorButtonImageOptions1.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("editorButtonImageOptions1.SvgImage")));
-            editorButtonImageOptions1.SvgImageSize = new System.Drawing.Size(18, 18);
-            editorButtonImageOptions2.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("editorButtonImageOptions2.SvgImage")));
-            editorButtonImageOptions2.SvgImageSize = new System.Drawing.Size(18, 18);
-            editorButtonImageOptions3.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("editorButtonImageOptions3.SvgImage")));
-            editorButtonImageOptions3.SvgImageSize = new System.Drawing.Size(18, 18);
-            editorButtonImageOptions4.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("editorButtonImageOptions4.SvgImage")));
-            editorButtonImageOptions4.SvgImageSize = new System.Drawing.Size(18, 18);
-            this.buttonEdit.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(System.Windows.Forms.Keys.None), serializableAppearanceObject1, serializableAppearanceObject2, serializableAppearanceObject3, serializableAppearanceObject4, "閲嶆柊璁$畻 ", "ReloadCalcu", null, DevExpress.Utils.ToolTipAnchor.Default),
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "鏂板鐐�", -1, true, true, false, editorButtonImageOptions2, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject5, serializableAppearanceObject6, serializableAppearanceObject7, serializableAppearanceObject8, "鏂板鐐�", "InsertPoint", null, DevExpress.Utils.ToolTipAnchor.Default),
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "鍒犻櫎鐐�", -1, true, true, false, editorButtonImageOptions3, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject9, serializableAppearanceObject10, serializableAppearanceObject11, serializableAppearanceObject12, "鍒犻櫎鐐�", "Delete", null, DevExpress.Utils.ToolTipAnchor.Default),
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "寤堕暱鏇茬嚎", -1, true, false, false, editorButtonImageOptions4, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject13, serializableAppearanceObject14, serializableAppearanceObject15, serializableAppearanceObject16, "寤堕暱鏇茬嚎", "Extend", null, DevExpress.Utils.ToolTipAnchor.Default)});
-            this.buttonEdit.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.HideTextEditor;
-            this.buttonEdit.Size = new System.Drawing.Size(285, 37);
-            this.buttonEdit.StyleController = this.layoutControl1;
-            this.buttonEdit.TabIndex = 5;
-            this.buttonEdit.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(this.buttonEdit_ButtonClick);
-            // 
-            // Root
-            // 
-            this.Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
-            this.Root.GroupBordersVisible = false;
-            this.Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
-            this.layoutControlGroup1,
-            this.layoutControlGroup2});
-            this.Root.Name = "Root";
-            this.Root.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
-            this.Root.Size = new System.Drawing.Size(285, 657);
-            this.Root.TextVisible = false;
-            // 
-            // layoutControlGroup1
-            // 
-            this.layoutControlGroup1.GroupStyle = DevExpress.Utils.GroupStyle.Title;
-            this.layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
-            this.layoutControlItem2});
-            this.layoutControlGroup1.Location = new System.Drawing.Point(0, 0);
-            this.layoutControlGroup1.Name = "layoutControlGroup1";
-            this.layoutControlGroup1.Size = new System.Drawing.Size(285, 85);
-            this.layoutControlGroup1.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
-            this.layoutControlGroup1.Text = "鏇茬嚎淇℃伅";
-            // 
-            // layoutControlItem2
-            // 
-            this.layoutControlItem2.Control = this.cmbCurveType;
-            this.layoutControlItem2.Location = new System.Drawing.Point(0, 0);
-            this.layoutControlItem2.Name = "layoutControlItem2";
-            this.layoutControlItem2.Size = new System.Drawing.Size(265, 32);
-            this.layoutControlItem2.TextSize = new System.Drawing.Size(0, 0);
-            this.layoutControlItem2.TextVisible = false;
-            // 
-            // layoutControlGroup2
-            // 
-            this.layoutControlGroup2.GroupStyle = DevExpress.Utils.GroupStyle.Title;
-            this.layoutControlGroup2.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
-            this.layoutControlItem3,
-            this.layoutControlItem1});
-            this.layoutControlGroup2.Location = new System.Drawing.Point(0, 85);
-            this.layoutControlGroup2.Name = "layoutControlGroup2";
-            this.layoutControlGroup2.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
-            this.layoutControlGroup2.Size = new System.Drawing.Size(285, 572);
-            this.layoutControlGroup2.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
-            this.layoutControlGroup2.Text = "鏇茬嚎瀹氫箟鐐�";
-            // 
-            // layoutControlItem3
-            // 
-            this.layoutControlItem3.Control = this.gridControl1;
-            this.layoutControlItem3.Location = new System.Drawing.Point(0, 39);
-            this.layoutControlItem3.Name = "layoutControlItem3";
-            this.layoutControlItem3.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
-            this.layoutControlItem3.Size = new System.Drawing.Size(285, 500);
-            this.layoutControlItem3.TextSize = new System.Drawing.Size(0, 0);
-            this.layoutControlItem3.TextVisible = false;
-            // 
-            // layoutControlItem1
-            // 
-            this.layoutControlItem1.Control = this.buttonEdit;
-            this.layoutControlItem1.Location = new System.Drawing.Point(0, 0);
-            this.layoutControlItem1.Name = "layoutControlItem1";
-            this.layoutControlItem1.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 1, 1);
-            this.layoutControlItem1.Size = new System.Drawing.Size(285, 39);
-            this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
-            this.layoutControlItem1.TextVisible = false;
-            // 
-            // curveExpressEditChart
-            // 
-            this.curveExpressEditChart.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.curveExpressEditChart.Location = new System.Drawing.Point(286, 0);
-            this.curveExpressEditChart.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
-            this.curveExpressEditChart.Name = "curveExpressEditChart";
-            this.curveExpressEditChart.Size = new System.Drawing.Size(754, 657);
-            this.curveExpressEditChart.TabIndex = 0;
-            // 
-            // sidePanel1
-            // 
-            this.sidePanel1.Controls.Add(this.layoutControl1);
-            this.sidePanel1.Dock = System.Windows.Forms.DockStyle.Left;
-            this.sidePanel1.Location = new System.Drawing.Point(0, 0);
-            this.sidePanel1.Name = "sidePanel1";
-            this.sidePanel1.Size = new System.Drawing.Size(286, 657);
-            this.sidePanel1.TabIndex = 2;
-            this.sidePanel1.Text = "sidePanel1";
-            // 
-            // CurveExpressEditCtrl
-            // 
-            this.Appearance.BackColor = System.Drawing.SystemColors.Control;
-            this.Appearance.Options.UseBackColor = true;
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
-            this.Controls.Add(this.curveExpressEditChart);
-            this.Controls.Add(this.sidePanel1);
-            this.Name = "CurveExpressEditCtrl";
-            this.Size = new System.Drawing.Size(1040, 657);
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
-            this.layoutControl1.ResumeLayout(false);
-            ((System.ComponentModel.ISupportInitialize)(this.gridControl1)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.cmbCurveType.Properties)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.buttonEdit.Properties)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.Root)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup2)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
-            this.sidePanel1.ResumeLayout(false);
-            this.ResumeLayout(false);
-
-        }
-
-        #endregion
-        private UniversalEditChart curveExpressEditChart;
-        private DevExpress.XtraLayout.LayoutControl layoutControl1;
-        private DevExpress.XtraLayout.LayoutControlGroup Root;
-        private DevExpress.XtraEditors.ComboBoxEdit cmbCurveType;
-        private DevExpress.XtraEditors.ButtonEdit buttonEdit;
-        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
-        private DevExpress.XtraGrid.GridControl gridControl1;
-        private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
-        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
-        private DevExpress.XtraGrid.Columns.GridColumn colX;
-        private DevExpress.XtraGrid.Columns.GridColumn colY;
-        private System.Windows.Forms.BindingSource bindingSource1;
-        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1;
-        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
-        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup2;
-        private DevExpress.XtraEditors.SidePanel sidePanel1;
-    }
-}
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
deleted file mode 100644
index 2a4785c..0000000
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditCtrl.cs
+++ /dev/null
@@ -1,193 +0,0 @@
-锘縰sing DevExpress.XtraEditors;
-using System.Data;
-
-namespace Yw.WinFrmUI.Phart
-{
-    public partial class UniversalEditCtrl : DevExpress.XtraEditors.XtraUserControl
-    {
-        public UniversalEditCtrl()
-        {
-            InitializeComponent();
-
-            this.gridView1.SetNormalEditView();
-            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>
-        public void SetBindingData()
-        {
-            _pt_ql_list = null;
-
-            _fitCurvePoints = new List<Yw.Geometry.Point2d>();
-            this.bindingSource1.DataSource = _fitCurvePoints;
-        }
-
-        /// <summary>
-        /// 鍒濆鍖栨暟鎹�(鐩墠娌℃湁瀹氫箟鐐�)
-        /// </summary>
-        public void SetBindingData(Yw.Geometry.CubicSpline2d cubic_spline_ql)
-        {
-            if (cubic_spline_ql == null)
-                return;
-            List<Yw.Geometry.Point2d> pt_ql_list;
-
-            pt_ql_list = cubic_spline_ql.GetPointList(100);
-
-            SetBindingData(pt_ql_list, pt_ql_list);
-        }
-
-        /// <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;
-
-            _pt_ql_list = null;
-
-            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("娴侀噺姘存崯鏇茬嚎");
-            this.cmbCurveType.SelectedIndex = 0;
-
-            this.curveExpressEditChart.SetBindingData(_pt_ql_list, def_pt_ql_list);
-
-            ReloadCurvePoints();
-        }
-
-        //鎬ц兘鏇茬嚎鐐逛慨鏀逛簨浠�
-        private void FeatCurvesDispCtrl1_OnDefinePointChanged(List<Yw.Geometry.Point2d> points)
-        {
-            _fitCurvePoints.Clear();
-            _pt_ql_list = points;
-            foreach (Yw.Geometry.Point2d pt in _pt_ql_list)
-            {
-                var x = Math.Round(pt.X, 2);
-                var y = Math.Round(pt.Y, 2);
-                _fitCurvePoints.Add(new Yw.Geometry.Point2d(x, y));
-            }
-            this.bindingSource1.ResetBindings(false);
-        }
-
-        //鍗曞厓鏍间慨鏀瑰悗瑙﹀彂
-        private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
-        {
-            _pt_ql_list = _fitCurvePoints.Select(x => new Yw.Geometry.Point2d(x)).ToList();
-            ReloadCurvePoints();
-        }
-
-        //鎸夐挳鐐瑰嚮浜嬩欢
-        private void buttonEdit_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
-        {
-            if (e.Button.Tag == null)
-                return;
-            var tag = e.Button.Tag.ToString();
-            switch (tag)
-            {
-                case "Delete": DeletePoint(); break;
-                case "InsertPoint": InsertPoint(); break;
-                case "ReloadCalcu": ReloadCalcu(); break;
-            }
-        }
-
-        /// <summary>
-        /// 鍒锋柊鏁版嵁
-        /// </summary>
-        private void ReloadCurvePoints()
-        {
-            _fitCurvePoints.Clear();
-            foreach (Yw.Geometry.Point2d pt in _pt_ql_list)
-                _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.bindingSource1.ResetBindings(false);
-        }
-
-        //鍒犻櫎鐐�
-        private void DeletePoint()
-        {
-            var row = this.gridView1.GetFocusedRow() as Yw.Geometry.Point2d;
-            if (row == null)
-                return;
-            if (XtraMessageBox.Show("鏄惁鍒犻櫎姝ょ偣锛�", "鎻愮ず淇℃伅", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes)
-                return;
-            _fitCurvePoints.Remove(row);
-            this.bindingSource1.ResetBindings(false);
-
-            var points = new List<Yw.Geometry.Point2d>();
-            foreach (var curvePoint in _fitCurvePoints)
-            {
-                var x = curvePoint.X;
-                var y = curvePoint.Y;
-                points.Add(new Yw.Geometry.Point2d(x, y));
-            }
-            _pt_ql_list = points;
-            //  this.curveExpressEditChart.UpdateCurve(points);
-        }
-
-        //鎻掑叆鐐�
-        private void InsertPoint()
-        {
-            var dlg = new InputXYDlg();
-            List<Yw.Geometry.Point2d> points = null;
-
-            dlg.SetLabelX("Q");
-            dlg.SetLabelY("L");
-            points = _pt_ql_list;
-
-            if (dlg.ShowDialog() != DialogResult.OK)
-                return;
-
-            points.Add(new Yw.Geometry.Point2d(dlg.X, dlg.Y));
-            ReloadCurvePoints();
-        }
-
-        //閲嶆柊璁$畻
-        private void ReloadCalcu()
-        {
-            if (_fitCurvePoints == null)
-                return;
-            ReloadCurvePoints();
-        }
-
-        /// <summary>
-        /// 璁剧疆鏇茬嚎鍧愭爣
-        /// </summary>
-        public void SetCoordinateByDialog()
-        {
-            this.curveExpressEditChart.SetChartAxis();
-        }
-
-        /// <summary>
-        /// 鑾峰彇鐐逛俊鎭�
-        /// </summary>
-        /// <param name="pt_ql_list"></param>
-        /// <returns></returns>
-        public bool GetPoints(out List<Yw.Geometry.Point2d> pt_ql_list)
-        {
-            pt_ql_list = _pt_ql_list?.ToList();
-            if (pt_ql_list == null || pt_ql_list.Count < 4)
-            {
-                XtraMessageBox.Show("鐐规暟杩囧皯!");
-                return false;
-            }
-
-            return true;
-        }
-    }
-}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditCtrl.resx
deleted file mode 100644
index 808dd1a..0000000
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditCtrl.resx
+++ /dev/null
@@ -1,204 +0,0 @@
-锘�<?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:sequipuence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequipuence>
-              <xsd:attribute name="name" use="requipuired" 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:sequipuence>
-                <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:sequipuence>
-              <xsd:attribute name="name" type="xsd:string" use="requipuired" 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:sequipuence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequipuence>
-              <xsd:attribute name="name" type="xsd:string" use="requipuired" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="bindingSource1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <assembly alias="DevExpress.Data.v22.2" name="DevExpress.Data.v22.2, Version=22.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
-  <data name="editorButtonImageOptions1.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v22.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALMDAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
-        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5H
-        cmVlbntmaWxsOiMwMzlDMjM7fQoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJLkJsYWNre2ZpbGw6Izcy
-        NzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5SZWR7ZmlsbDojRDExQzFDO30KCS5zdDB7b3Bh
-        Y2l0eTowLjc1O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkNhbGN1bGF0b3IiPg0KICAgIDxwYXRoIGQ9Ik0y
-        OSwwSDE2djE0aDE0VjFDMzAsMC41LDI5LjUsMCwyOSwweiBNMjgsOEgxOFY2aDEwVjh6IiBjbGFzcz0i
-        QmxhY2siIC8+DQogICAgPHBhdGggZD0iTTAsMjljMCwwLjUsMC41LDEsMSwxaDEzVjE2SDBWMjl6IE0y
-        LjgsMjAuMmwxLjQtMS40TDcsMjEuNmwyLjgtMi44bDEuNCwxLjRMOC40LDIzbDIuOCwyLjhsLTEuNCwx
-        LjQgICBMNywyNC40bC0yLjgsMi44bC0xLjQtMS40TDUuNiwyM0wyLjgsMjAuMnoiIGNsYXNzPSJCbGFj
-        ayIgLz4NCiAgICA8cGF0aCBkPSJNMCwxdjEzaDE0VjBIMUMwLjUsMCwwLDAuNSwwLDF6IE0yLDZoNFYy
-        aDJ2NGg0djJIOHY0SDZWOEgyVjZ6IiBjbGFzcz0iQmxhY2siIC8+DQogICAgPHBhdGggZD0iTTE2LDE2
-        djE0aDEzYzAuNSwwLDEtMC41LDEtMVYxNkgxNnogTTI4LDI2SDE4di0yaDEwVjI2eiBNMjgsMjJIMTh2
-        LTJoMTBWMjJ6IiBjbGFzcz0iWWVsbG93IiAvPg0KICA8L2c+DQo8L3N2Zz4L
-</value>
-  </data>
-  <data name="editorButtonImageOptions2.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v22.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKcCAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
-        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
-        ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz
-        OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp
-        dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkFkZCI+DQogICAgPHBhdGggZD0iTTI3LDE0aC05VjVj
-        MC0wLjUtMC41LTEtMS0xaC0yYy0wLjUsMC0xLDAuNS0xLDF2OUg1Yy0wLjUsMC0xLDAuNS0xLDF2MmMw
-        LDAuNSwwLjUsMSwxLDFoOXY5ICAgYzAsMC41LDAuNSwxLDEsMWgyYzAuNSwwLDEtMC41LDEtMXYtOWg5
-        YzAuNSwwLDEtMC41LDEtMXYtMkMyOCwxNC41LDI3LjUsMTQsMjcsMTR6IiBjbGFzcz0iR3JlZW4iIC8+
-        DQogIDwvZz4NCjwvc3ZnPgs=
-</value>
-  </data>
-  <data name="editorButtonImageOptions3.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v22.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAD0DAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
-        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJs
-        YWNre2ZpbGw6IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLkdyZWVue2ZpbGw6IzAzOUMy
-        Mzt9CgkuWWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
-        Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQo8L3N0eWxlPg0KICA8ZyBpZD0iRGVsZXRlIj4N
-        CiAgICA8Zz4NCiAgICAgIDxwYXRoIGQ9Ik0xOC44LDE2bDYuOS02LjljMC40LTAuNCwwLjQtMSwwLTEu
-        NGwtMS40LTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxNiwxMy4yTDkuMSw2LjNjLTAuNC0wLjQtMS0w
-        LjQtMS40LDAgICAgTDYuMyw3LjdjLTAuNCwwLjQtMC40LDEsMCwxLjRsNi45LDYuOWwtNi45LDYuOWMt
-        MC40LDAuNC0wLjQsMSwwLDEuNGwxLjQsMS40YzAuNCwwLjQsMSwwLjQsMS40LDBsNi45LTYuOWw2Ljks
-        Ni45ICAgIGMwLjQsMC40LDEsMC40LDEuNCwwbDEuNC0xLjRjMC40LTAuNCwwLjQtMSwwLTEuNEwxOC44
-        LDE2eiIgY2xhc3M9IlJlZCIgLz4NCiAgICA8L2c+DQogIDwvZz4NCjwvc3ZnPgs=
-</value>
-  </data>
-  <data name="editorButtonImageOptions4.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v22.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAACgCAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iRGF0YV9MYWJlbHNfTGluZV9DZW50ZXIiIHN0eWxlPSJlbmFibGUtYmFj
-        a2dyb3VuZDpuZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5HcmVlbntm
-        aWxsOiMwMzlDMjM7fQoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQo8L3N0eWxlPg0KICA8cmVjdCB4PSI4
-        LjkiIHk9IjE1IiB3aWR0aD0iMTQuMSIgaGVpZ2h0PSIyIiBjbGFzcz0iWWVsbG93IiB0cmFuc2Zvcm09
-        Im1hdHJpeCgwLjcwNzEsIC0wLjcwNzEsIDAuNzA3MSwgMC43MDcxLCAtNi42Mjc0LCAxNikiIC8+DQog
-        IDxwYXRoIGQ9Ik0xMCwyNkg0di00aDZWMjZ6IE0yOCw2aC02djRoNlY2eiIgY2xhc3M9IkdyZWVuIiAv
-        Pg0KPC9zdmc+Cw==
-</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalAxisValueDlg.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalAxisValueDlg.cs
new file mode 100644
index 0000000..55eefda
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalAxisValueDlg.cs
@@ -0,0 +1,50 @@
+锘縰sing DevExpress.XtraEditors;
+
+namespace Yw.WinFrmUI.Phart
+{
+    public partial class UniversalAxisValueDlg : DevExpress.XtraEditors.XtraForm
+    {
+        public UniversalAxisValueDlg()
+        {
+            InitializeComponent();
+        }
+
+        public event Func<double, bool> VerifyValueChanged;
+
+        public void SetBindingData(double? value = null)
+        {
+            this.btnEditValue.EditValue = value;
+        }
+
+        private bool Verify()
+        {
+            this.dxErrorProvider1.ClearErrors();
+            if (this.btnEditValue.EditValue == null)
+            {
+                this.dxErrorProvider1.SetError(this.btnEditValue, "蹇呭~椤�");
+                return false;
+            }
+
+            return true;
+        }
+
+        private void btnEditValue_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
+        {
+            if (!Verify())
+                return;
+            if (VerifyValueChanged == null)
+                return;
+            var value = Convert.ToDouble(this.btnEditValue.Text);
+            var bol = this.VerifyValueChanged(value);
+            if (!bol)
+            {
+                XtraMessageBox.Show("鏁板�间笉鍚堢悊!");
+                return;
+            }
+            this.DialogResult = DialogResult.OK;
+            this.Close();
+        }
+
+
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalAxisValueDlg.designer.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalAxisValueDlg.designer.cs
new file mode 100644
index 0000000..54c710a
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalAxisValueDlg.designer.cs
@@ -0,0 +1,131 @@
+锘縩amespace Yw.WinFrmUI.Phart
+{
+    partial class UniversalAxisValueDlg
+    {
+        /// <summary>
+        /// Requipuired designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param nameLogin="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>
+        /// Requipuired method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions2 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UniversalAxisValueDlg));
+            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();
+            this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            this.Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            this.btnEditValue = new DevExpress.XtraEditors.ButtonEdit();
+            this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.dxErrorProvider1 = new DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider(this.components);
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
+            this.layoutControl1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.btnEditValue.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.dxErrorProvider1)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // layoutControl1
+            // 
+            this.layoutControl1.Controls.Add(this.btnEditValue);
+            this.layoutControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.layoutControl1.Location = new System.Drawing.Point(0, 0);
+            this.layoutControl1.Name = "layoutControl1";
+            this.layoutControl1.Root = this.Root;
+            this.layoutControl1.Size = new System.Drawing.Size(374, 82);
+            this.layoutControl1.TabIndex = 2;
+            this.layoutControl1.Text = "layoutControl1";
+            // 
+            // Root
+            // 
+            this.Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            this.Root.GroupBordersVisible = false;
+            this.Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
+            this.layoutControlItem2});
+            this.Root.Name = "Root";
+            this.Root.Size = new System.Drawing.Size(374, 82);
+            this.Root.TextVisible = false;
+            // 
+            // btnEditValue
+            // 
+            this.btnEditValue.Location = new System.Drawing.Point(22, 22);
+            this.btnEditValue.Name = "btnEditValue";
+            editorButtonImageOptions2.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("editorButtonImageOptions2.SvgImage")));
+            editorButtonImageOptions2.SvgImageSize = new System.Drawing.Size(18, 18);
+            this.btnEditValue.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "", -1, true, true, false, editorButtonImageOptions2, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject5, serializableAppearanceObject6, serializableAppearanceObject7, serializableAppearanceObject8, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
+            this.btnEditValue.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
+            this.btnEditValue.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
+            this.btnEditValue.Size = new System.Drawing.Size(330, 37);
+            this.btnEditValue.StyleController = this.layoutControl1;
+            this.btnEditValue.TabIndex = 5;
+            this.btnEditValue.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(this.btnEditValue_ButtonClick);
+            // 
+            // layoutControlItem2
+            // 
+            this.layoutControlItem2.Control = this.btnEditValue;
+            this.layoutControlItem2.Location = new System.Drawing.Point(0, 0);
+            this.layoutControlItem2.Name = "layoutControlItem2";
+            this.layoutControlItem2.Size = new System.Drawing.Size(354, 62);
+            this.layoutControlItem2.Spacing = new DevExpress.XtraLayout.Utils.Padding(10, 10, 10, 10);
+            this.layoutControlItem2.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem2.TextVisible = false;
+            // 
+            // dxErrorProvider1
+            // 
+            this.dxErrorProvider1.ContainerControl = this;
+            // 
+            // AxisValueDlg
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 22F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(374, 82);
+            this.Controls.Add(this.layoutControl1);
+            this.IconOptions.ShowIcon = false;
+            this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+            this.MaximizeBox = false;
+            this.MinimizeBox = false;
+            this.Name = "AxisValueDlg";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+            this.Text = "鍊�";
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
+            this.layoutControl1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.btnEditValue.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.dxErrorProvider1)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraEditors.ButtonEdit btnEditValue;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider dxErrorProvider1;
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalAxisValueDlg.resx b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalAxisValueDlg.resx
new file mode 100644
index 0000000..651a0bd
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalAxisValueDlg.resx
@@ -0,0 +1,141 @@
+锘�<?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:sequipuence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequipuence>
+              <xsd:attribute name="name" use="requipuired" 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:sequipuence>
+                <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:sequipuence>
+              <xsd:attribute name="name" type="xsd:string" use="requipuired" 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:sequipuence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequipuence>
+              <xsd:attribute name="name" type="xsd:string" use="requipuired" />
+            </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.v22.2" name="DevExpress.Data.v22.2, Version=22.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
+  <data name="editorButtonImageOptions2.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v22.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAACQCAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
+        ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz
+        OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp
+        dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkNoZWNrIj4NCiAgICA8cG9seWdvbiBwb2ludHM9IjI3
+        LDUgMTEsMjEgNSwxNSAyLDE4IDExLDI3IDMwLDggICIgY2xhc3M9IkdyZWVuIiAvPg0KICA8L2c+DQo8
+        L3N2Zz4L
+</value>
+  </data>
+  <metadata name="dxErrorProvider1.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/Yw.WinFrmUI.Phart.Core/02-universal/00-core/UniversalCoordinate.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinate.cs
similarity index 100%
rename from WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/00-core/UniversalCoordinate.cs
rename to WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinate.cs
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinateDlg.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinateDlg.Designer.cs
new file mode 100644
index 0000000..d20c083
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinateDlg.Designer.cs
@@ -0,0 +1,425 @@
+锘縩amespace Yw.WinFrmUI.Phart
+{
+    partial class ValveChartCoordinateDlg
+    {
+        /// <summary>
+        /// Requipuired designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param nameLogin="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>
+        /// Requipuired method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            btnSet = new DevExpress.XtraEditors.SimpleButton();
+            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            textCoordSpaceQ = new DevExpress.XtraEditors.SpinEdit();
+            textEndLineNoH = new DevExpress.XtraEditors.SpinEdit();
+            textCoordSpaceH = new DevExpress.XtraEditors.SpinEdit();
+            textStartLineNoH = new DevExpress.XtraEditors.SpinEdit();
+            textGridNumberY = new DevExpress.XtraEditors.SpinEdit();
+            textMaxDispH = new DevExpress.XtraEditors.SpinEdit();
+            textMinDispQ = new DevExpress.XtraEditors.SpinEdit();
+            textGridNumberX = new DevExpress.XtraEditors.SpinEdit();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            groupBoxH = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem7 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem8 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem9 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlGroup5 = new DevExpress.XtraLayout.LayoutControlGroup();
+            emptySpaceItem7 = new DevExpress.XtraLayout.EmptySpaceItem();
+            layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+            groupBoxX = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem14 = new DevExpress.XtraLayout.LayoutControlItem();
+            btnClose = new DevExpress.XtraEditors.SimpleButton();
+            ((System.ComponentModel.ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)textCoordSpaceQ.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)textEndLineNoH.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)textCoordSpaceH.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)textStartLineNoH.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)textGridNumberY.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)textMaxDispH.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)textMinDispQ.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)textGridNumberX.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)Root).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)groupBoxH).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem6).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem7).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem8).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem9).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlGroup5).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)emptySpaceItem7).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem4).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)groupBoxX).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem2).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem3).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem14).BeginInit();
+            SuspendLayout();
+            // 
+            // btnSet
+            // 
+            btnSet.Location = new Point(296, 257);
+            btnSet.Margin = new Padding(4, 5, 4, 5);
+            btnSet.Name = "btnSet";
+            btnSet.Size = new Size(181, 32);
+            btnSet.StyleController = layoutControl1;
+            btnSet.TabIndex = 9;
+            btnSet.Text = "璁惧畾";
+            btnSet.Click += btnSet_Click;
+            // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(textCoordSpaceQ);
+            layoutControl1.Controls.Add(textEndLineNoH);
+            layoutControl1.Controls.Add(textCoordSpaceH);
+            layoutControl1.Controls.Add(btnSet);
+            layoutControl1.Controls.Add(textStartLineNoH);
+            layoutControl1.Controls.Add(textGridNumberY);
+            layoutControl1.Controls.Add(textMaxDispH);
+            layoutControl1.Controls.Add(textMinDispQ);
+            layoutControl1.Controls.Add(textGridNumberX);
+            layoutControl1.Dock = DockStyle.Fill;
+            layoutControl1.Location = new Point(0, 0);
+            layoutControl1.Margin = new Padding(4, 5, 4, 5);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(1270, 513, 650, 400);
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new Size(773, 305);
+            layoutControl1.TabIndex = 9;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // textCoordSpaceQ
+            // 
+            textCoordSpaceQ.EditValue = new decimal(new int[] { 0, 0, 0, 0 });
+            textCoordSpaceQ.Location = new Point(130, 119);
+            textCoordSpaceQ.Margin = new Padding(4, 5, 4, 5);
+            textCoordSpaceQ.Name = "textCoordSpaceQ";
+            textCoordSpaceQ.Size = new Size(239, 28);
+            textCoordSpaceQ.StyleController = layoutControl1;
+            textCoordSpaceQ.TabIndex = 3;
+            // 
+            // textEndLineNoH
+            // 
+            textEndLineNoH.EditValue = new decimal(new int[] { 2, 0, 0, 0 });
+            textEndLineNoH.Location = new Point(501, 151);
+            textEndLineNoH.Margin = new Padding(4, 5, 4, 5);
+            textEndLineNoH.Name = "textEndLineNoH";
+            textEndLineNoH.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton() });
+            textEndLineNoH.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
+            textEndLineNoH.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
+            textEndLineNoH.Properties.IsFloatValue = false;
+            textEndLineNoH.Properties.Mask.EditMask = "N00";
+            textEndLineNoH.Properties.MaxValue = new decimal(new int[] { 100, 0, 0, 0 });
+            textEndLineNoH.Properties.MinValue = new decimal(new int[] { 2, 0, 0, 0 });
+            textEndLineNoH.Size = new Size(250, 28);
+            textEndLineNoH.StyleController = layoutControl1;
+            textEndLineNoH.TabIndex = 7;
+            // 
+            // textCoordSpaceH
+            // 
+            textCoordSpaceH.EditValue = new decimal(new int[] { 0, 0, 0, 0 });
+            textCoordSpaceH.Location = new Point(501, 87);
+            textCoordSpaceH.Margin = new Padding(4, 5, 4, 5);
+            textCoordSpaceH.Name = "textCoordSpaceH";
+            textCoordSpaceH.Size = new Size(250, 28);
+            textCoordSpaceH.StyleController = layoutControl1;
+            textCoordSpaceH.TabIndex = 5;
+            // 
+            // textStartLineNoH
+            // 
+            textStartLineNoH.EditValue = new decimal(new int[] { 2, 0, 0, 0 });
+            textStartLineNoH.Location = new Point(501, 119);
+            textStartLineNoH.Margin = new Padding(4, 5, 4, 5);
+            textStartLineNoH.Name = "textStartLineNoH";
+            textStartLineNoH.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton() });
+            textStartLineNoH.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
+            textStartLineNoH.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
+            textStartLineNoH.Properties.IsFloatValue = false;
+            textStartLineNoH.Properties.Mask.EditMask = "N00";
+            textStartLineNoH.Properties.MaxValue = new decimal(new int[] { 100, 0, 0, 0 });
+            textStartLineNoH.Size = new Size(250, 28);
+            textStartLineNoH.StyleController = layoutControl1;
+            textStartLineNoH.TabIndex = 6;
+            // 
+            // textGridNumberY
+            // 
+            textGridNumberY.EditValue = new decimal(new int[] { 2, 0, 0, 0 });
+            textGridNumberY.Location = new Point(130, 204);
+            textGridNumberY.Margin = new Padding(4, 5, 4, 5);
+            textGridNumberY.Name = "textGridNumberY";
+            textGridNumberY.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton() });
+            textGridNumberY.Properties.IsFloatValue = false;
+            textGridNumberY.Properties.Mask.EditMask = "N00";
+            textGridNumberY.Properties.MaxValue = new decimal(new int[] { 100, 0, 0, 0 });
+            textGridNumberY.Properties.MinValue = new decimal(new int[] { 2, 0, 0, 0 });
+            textGridNumberY.Size = new Size(239, 28);
+            textGridNumberY.StyleController = layoutControl1;
+            textGridNumberY.TabIndex = 8;
+            // 
+            // textMaxDispH
+            // 
+            textMaxDispH.EditValue = new decimal(new int[] { 0, 0, 0, 0 });
+            textMaxDispH.Location = new Point(501, 55);
+            textMaxDispH.Margin = new Padding(4, 5, 4, 5);
+            textMaxDispH.Name = "textMaxDispH";
+            textMaxDispH.Size = new Size(250, 28);
+            textMaxDispH.StyleController = layoutControl1;
+            textMaxDispH.TabIndex = 4;
+            // 
+            // textMinDispQ
+            // 
+            textMinDispQ.EditValue = new decimal(new int[] { 0, 0, 0, 0 });
+            textMinDispQ.Location = new Point(130, 87);
+            textMinDispQ.Margin = new Padding(4, 5, 4, 5);
+            textMinDispQ.Name = "textMinDispQ";
+            textMinDispQ.Size = new Size(239, 28);
+            textMinDispQ.StyleController = layoutControl1;
+            textMinDispQ.TabIndex = 2;
+            // 
+            // textGridNumberX
+            // 
+            textGridNumberX.EditValue = new decimal(new int[] { 2, 0, 0, 0 });
+            textGridNumberX.Location = new Point(130, 55);
+            textGridNumberX.Margin = new Padding(4, 5, 4, 5);
+            textGridNumberX.Name = "textGridNumberX";
+            textGridNumberX.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton() });
+            textGridNumberX.Properties.IsFloatValue = false;
+            textGridNumberX.Properties.Mask.EditMask = "N00";
+            textGridNumberX.Properties.MaxValue = new decimal(new int[] { 100, 0, 0, 0 });
+            textGridNumberX.Properties.MinValue = new decimal(new int[] { 2, 0, 0, 0 });
+            textGridNumberX.Size = new Size(239, 28);
+            textGridNumberX.StyleController = layoutControl1;
+            textGridNumberX.TabIndex = 0;
+            // 
+            // Root
+            // 
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { groupBoxX, layoutControlItem14, groupBoxH, layoutControlGroup5 });
+            Root.Name = "Root";
+            Root.Size = new Size(773, 305);
+            Root.TextVisible = false;
+            // 
+            // groupBoxH
+            // 
+            groupBoxH.GroupStyle = DevExpress.Utils.GroupStyle.Title;
+            groupBoxH.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem6, layoutControlItem7, layoutControlItem8, layoutControlItem9 });
+            groupBoxH.Location = new Point(371, 0);
+            groupBoxH.Name = "groupBoxH";
+            groupBoxH.Size = new Size(382, 244);
+            groupBoxH.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            groupBoxH.Text = "Y";
+            // 
+            // layoutControlItem6
+            // 
+            layoutControlItem6.Control = textMaxDispH;
+            layoutControlItem6.Location = new Point(0, 0);
+            layoutControlItem6.Name = "layoutControlItem6";
+            layoutControlItem6.Size = new Size(362, 32);
+            layoutControlItem6.Text = "鏈�澶у埢搴:";
+            layoutControlItem6.TextSize = new Size(96, 22);
+            // 
+            // layoutControlItem7
+            // 
+            layoutControlItem7.Control = textCoordSpaceH;
+            layoutControlItem7.Location = new Point(0, 32);
+            layoutControlItem7.Name = "layoutControlItem7";
+            layoutControlItem7.Size = new Size(362, 32);
+            layoutControlItem7.Text = "Y/鍒诲害:";
+            layoutControlItem7.TextSize = new Size(96, 22);
+            // 
+            // layoutControlItem8
+            // 
+            layoutControlItem8.Control = textStartLineNoH;
+            layoutControlItem8.Location = new Point(0, 64);
+            layoutControlItem8.Name = "layoutControlItem8";
+            layoutControlItem8.Size = new Size(362, 32);
+            layoutControlItem8.Text = "寮�濮嬪埢搴︽暟:";
+            layoutControlItem8.TextSize = new Size(96, 22);
+            // 
+            // layoutControlItem9
+            // 
+            layoutControlItem9.Control = textEndLineNoH;
+            layoutControlItem9.Location = new Point(0, 96);
+            layoutControlItem9.Name = "layoutControlItem9";
+            layoutControlItem9.Size = new Size(362, 95);
+            layoutControlItem9.Text = "缁撴潫鍒诲害鏁�:";
+            layoutControlItem9.TextSize = new Size(96, 22);
+            // 
+            // layoutControlGroup5
+            // 
+            layoutControlGroup5.GroupStyle = DevExpress.Utils.GroupStyle.Title;
+            layoutControlGroup5.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { emptySpaceItem7, layoutControlItem4 });
+            layoutControlGroup5.Location = new Point(0, 149);
+            layoutControlGroup5.Name = "layoutControlGroup5";
+            layoutControlGroup5.Size = new Size(371, 95);
+            layoutControlGroup5.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlGroup5.Text = "绾靛潗鏍�";
+            // 
+            // emptySpaceItem7
+            // 
+            emptySpaceItem7.AllowHotTrack = false;
+            emptySpaceItem7.Location = new Point(0, 32);
+            emptySpaceItem7.Name = "emptySpaceItem7";
+            emptySpaceItem7.Size = new Size(351, 10);
+            emptySpaceItem7.TextSize = new Size(0, 0);
+            // 
+            // layoutControlItem4
+            // 
+            layoutControlItem4.Control = textGridNumberY;
+            layoutControlItem4.Location = new Point(0, 0);
+            layoutControlItem4.Name = "layoutControlItem4";
+            layoutControlItem4.Size = new Size(351, 32);
+            layoutControlItem4.Text = "鍒诲害鏁�:";
+            layoutControlItem4.TextSize = new Size(96, 22);
+            // 
+            // groupBoxX
+            // 
+            groupBoxX.GroupStyle = DevExpress.Utils.GroupStyle.Title;
+            groupBoxX.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem2, layoutControlItem3 });
+            groupBoxX.Location = new Point(0, 0);
+            groupBoxX.Name = "groupBoxX";
+            groupBoxX.Size = new Size(371, 149);
+            groupBoxX.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            groupBoxX.Text = "X";
+            // 
+            // layoutControlItem1
+            // 
+            layoutControlItem1.Control = textGridNumberX;
+            layoutControlItem1.Location = new Point(0, 0);
+            layoutControlItem1.Name = "layoutControlItem1";
+            layoutControlItem1.Size = new Size(351, 32);
+            layoutControlItem1.Text = "鍒诲害鏁�:";
+            layoutControlItem1.TextSize = new Size(96, 22);
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.Control = textMinDispQ;
+            layoutControlItem2.Location = new Point(0, 32);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.Size = new Size(351, 32);
+            layoutControlItem2.Text = "鏈�灏忓埢搴:";
+            layoutControlItem2.TextSize = new Size(96, 22);
+            // 
+            // layoutControlItem3
+            // 
+            layoutControlItem3.Control = textCoordSpaceQ;
+            layoutControlItem3.Location = new Point(0, 64);
+            layoutControlItem3.Name = "layoutControlItem3";
+            layoutControlItem3.Size = new Size(351, 32);
+            layoutControlItem3.Text = "X/鍒诲害:";
+            layoutControlItem3.TextSize = new Size(96, 22);
+            // 
+            // layoutControlItem14
+            // 
+            layoutControlItem14.Control = btnSet;
+            layoutControlItem14.Location = new Point(0, 244);
+            layoutControlItem14.Name = "layoutControlItem14";
+            layoutControlItem14.Padding = new DevExpress.XtraLayout.Utils.Padding(286, 286, 3, 3);
+            layoutControlItem14.Size = new Size(753, 41);
+            layoutControlItem14.TextSize = new Size(0, 0);
+            layoutControlItem14.TextVisible = false;
+            // 
+            // btnClose
+            // 
+            btnClose.Location = new Point(313, 630);
+            btnClose.Margin = new Padding(4, 5, 4, 5);
+            btnClose.Name = "btnClose";
+            btnClose.Size = new Size(154, 36);
+            btnClose.TabIndex = 0;
+            btnClose.Text = "鍏抽棴";
+            // 
+            // ValveChartCoordinateDlg
+            // 
+            AutoScaleDimensions = new SizeF(10F, 22F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(773, 305);
+            Controls.Add(layoutControl1);
+            Controls.Add(btnClose);
+            FormBorderStyle = FormBorderStyle.FixedDialog;
+            IconOptions.ShowIcon = false;
+            Margin = new Padding(4, 5, 4, 5);
+            MaximizeBox = false;
+            MinimizeBox = false;
+            Name = "ValveChartCoordinateDlg";
+            StartPosition = FormStartPosition.CenterScreen;
+            Text = "璁剧疆鍧愭爣";
+            ((System.ComponentModel.ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)textCoordSpaceQ.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)textEndLineNoH.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)textCoordSpaceH.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)textStartLineNoH.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)textGridNumberY.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)textMaxDispH.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)textMinDispQ.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)textGridNumberX.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)Root).EndInit();
+            ((System.ComponentModel.ISupportInitialize)groupBoxH).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem6).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem7).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem8).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem9).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlGroup5).EndInit();
+            ((System.ComponentModel.ISupportInitialize)emptySpaceItem7).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem4).EndInit();
+            ((System.ComponentModel.ISupportInitialize)groupBoxX).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem2).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem3).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem14).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraEditors.SimpleButton btnSet;
+        private DevExpress.XtraEditors.SpinEdit textCoordSpaceQ;
+        private DevExpress.XtraEditors.SpinEdit textGridNumberX;
+        private DevExpress.XtraEditors.SpinEdit textMaxDispH;
+        private DevExpress.XtraEditors.SpinEdit textCoordSpaceH;
+        private DevExpress.XtraEditors.SpinEdit textStartLineNoH;
+        private DevExpress.XtraEditors.SimpleButton btnClose;
+        private DevExpress.XtraEditors.SpinEdit textEndLineNoH;
+        private DevExpress.XtraEditors.SpinEdit textMinDispQ;
+        private DevExpress.XtraEditors.SpinEdit textGridNumberY;
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlGroup groupBoxX;
+        private DevExpress.XtraLayout.LayoutControlGroup groupBoxH;
+        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup5;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem7;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem6;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem8;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem9;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem14;
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinateDlg.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinateDlg.cs
new file mode 100644
index 0000000..21e14c4
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinateDlg.cs
@@ -0,0 +1,128 @@
+锘縰sing DevExpress.XtraEditors;
+
+namespace Yw.WinFrmUI.Phart
+{
+    public partial class ValveChartCoordinateDlg : DevExpress.XtraEditors.XtraForm
+    {
+        public ValveChartCoordinateDlg()
+        {
+            InitializeComponent();
+        }
+
+        public event Action<UniversalCoordinate> OnChangedCoord = null;
+
+        /// <summary>
+        /// 鍧愭爣鍙傛暟
+        /// </summary>
+        public UniversalCoordinate CoordinateParas
+        {
+            get => _coordinate;
+            set => _coordinate = value;
+        }
+        private UniversalCoordinate _coordinate = null;
+
+
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        /// <param name="coordinate">鍧愭爣鍙傛暟</param>
+        public void SetBindingData(UniversalCoordinate coordinate)
+        {
+            if (coordinate == null)
+                return;
+
+            _coordinate = new UniversalCoordinate(coordinate);
+            this.textMinDispQ.EditValue = _coordinate.CoordMinX;
+            this.textGridNumberX.EditValue = _coordinate.GridNumberX;
+            this.textGridNumberY.EditValue = _coordinate.GridNumberY;
+            this.textCoordSpaceQ.EditValue = _coordinate.CoordSpaceX;
+            this.textStartLineNoH.EditValue = _coordinate.StartLineNoY;
+            this.textEndLineNoH.EditValue = _coordinate.EndLineNoY;
+            this.textMaxDispH.EditValue = (_coordinate.CoordMinY + _coordinate.EndLineNoY * _coordinate.CoordSpaceY);
+            this.textCoordSpaceH.EditValue = _coordinate.CoordSpaceY;
+        }
+
+
+
+        private void btnSet_Click(object sender, EventArgs e)
+        {
+            if (_coordinate == null)
+                return;
+
+            if (!double.TryParse(this.textCoordSpaceQ.Text, out double space))
+            {
+                XtraMessageBox.Show("璇疯緭鍏ュ悎鐞嗗��");
+                return;
+            }
+            if (space < 0.1)
+            {
+                XtraMessageBox.Show("鍒诲害鍊艰繃灏忥紝璇烽噸鏂拌皟鏁�");
+                return;
+            }
+
+            if (!int.TryParse(this.textGridNumberX.Text, out int num))
+            {
+                XtraMessageBox.Show("姘存崯鍒诲害鏁拌杈撳叆鍚堢悊鍊�");
+                return;
+            }
+            _coordinate.GridNumberX = num;
+
+            if (!int.TryParse(this.textGridNumberY.Text, out num))
+            {
+                XtraMessageBox.Show("姘存崯鍒诲害鏁拌杈撳叆鍚堢悊鍊�");
+                return;
+            }
+            _coordinate.GridNumberY = num;
+
+            double.TryParse(this.textMinDispQ.Text, out double CoordMinQ);
+
+            _coordinate.CoordMinX = CoordMinQ;
+            _coordinate.CoordSpaceX = space;
+
+            if (!int.TryParse(this.textStartLineNoH.Text, out int start))
+            {
+                XtraMessageBox.Show("姘存崯鍒诲害鏁拌杈撳叆鍚堢悊鍊�");
+                return;
+            }
+            if (!int.TryParse(this.textEndLineNoH.Text, out int end))
+            {
+                XtraMessageBox.Show("姘存崯鍒诲害鏁拌杈撳叆鍚堢悊鍊�");
+                return;
+            }
+            if (start >= end - 1)
+            {
+                XtraMessageBox.Show("姘存崯鍒诲害璁剧疆涓嶅悎鐞�");
+                return;
+            }
+            if (!double.TryParse(this.textCoordSpaceH.Text, out space))
+            {
+                XtraMessageBox.Show("璇疯緭鍏ュ悎鐞嗗��");
+                return;
+            }
+            if (space < 0.1)
+            {
+                XtraMessageBox.Show("鍒诲害鍊艰繃灏忥紝璇烽噸鏂拌皟鏁�");
+                return;
+            }
+            if (!double.TryParse(this.textMaxDispH.Text, out double maxValue))
+            {
+                XtraMessageBox.Show("璇疯緭鍏ュ悎鐞嗗��");
+                return;
+            }
+
+            _coordinate.StartLineNoY = start;
+            _coordinate.EndLineNoY = end;
+            _coordinate.CoordSpaceY = space;
+            _coordinate.CoordMinY = maxValue - _coordinate.EndLineNoY * space;
+
+            this.OnChangedCoord?.Invoke(_coordinate);
+            this.DialogResult = System.Windows.Forms.DialogResult.OK;
+            this.Close();
+
+        }
+
+
+
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinateDlg.resx b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinateDlg.resx
new file mode 100644
index 0000000..8b2ff64
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinateDlg.resx
@@ -0,0 +1,120 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/00-core/UniversalCoordinate_Disp.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinate_Disp.cs
similarity index 100%
rename from WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/00-core/UniversalCoordinate_Disp.cs
rename to WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/99-coordinate/UniversalCoordinate_Disp.cs
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/Yw.WinFrmUI.Phart.Core.csproj b/WinFrmUI/Yw.WinFrmUI.Phart.Core/Yw.WinFrmUI.Phart.Core.csproj
index 1bebde8..10d9a5e 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/Yw.WinFrmUI.Phart.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/Yw.WinFrmUI.Phart.Core.csproj
@@ -13,6 +13,7 @@
     <Compile Remove="00-calc-helper\绛夋晥绾縗**" />
     <Compile Remove="01-pump\00- - 澶嶅埗\**" />
     <Compile Remove="01-pump\02-multi\02-work\**" />
+    <Compile Remove="02-valve\**" />
     <Compile Remove="bak2\**" />
     <Compile Remove="bak3\**" />
     <Compile Remove="v1 - 澶嶅埗\**" />
@@ -23,6 +24,7 @@
     <EmbeddedResource Remove="00-calc-helper\绛夋晥绾縗**" />
     <EmbeddedResource Remove="01-pump\00- - 澶嶅埗\**" />
     <EmbeddedResource Remove="01-pump\02-multi\02-work\**" />
+    <EmbeddedResource Remove="02-valve\**" />
     <EmbeddedResource Remove="bak2\**" />
     <EmbeddedResource Remove="bak3\**" />
     <EmbeddedResource Remove="v1 - 澶嶅埗\**" />
@@ -33,6 +35,7 @@
     <None Remove="00-calc-helper\绛夋晥绾縗**" />
     <None Remove="01-pump\00- - 澶嶅埗\**" />
     <None Remove="01-pump\02-multi\02-work\**" />
+    <None Remove="02-valve\**" />
     <None Remove="bak2\**" />
     <None Remove="bak3\**" />
     <None Remove="v1 - 澶嶅埗\**" />
@@ -43,6 +46,7 @@
     <Page Remove="00-calc-helper\绛夋晥绾縗**" />
     <Page Remove="01-pump\00- - 澶嶅埗\**" />
     <Page Remove="01-pump\02-multi\02-work\**" />
+    <Page Remove="02-valve\**" />
     <Page Remove="bak2\**" />
     <Page Remove="bak3\**" />
     <Page Remove="v1 - 澶嶅埗\**" />
@@ -118,10 +122,7 @@
     <Compile Update="02-universal\01-view\UniversalViewChart.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Update="02-universal\03-import\01-excel\UniversalChartExcelEditCtrl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Update="02-valve\01-view\ValveViewChart.cs">
+    <Compile Update="02-universal\02-edit\UniversalChartExcelEditCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
     <Compile Update="Properties\Resources.Designer.cs">
@@ -139,6 +140,8 @@
   </ItemGroup>
 
   <ItemGroup>
+    <Folder Include="02-universal\00-core\" />
+    <Folder Include="02-universal\03-import\01-excel\" />
     <Folder Include="02-universal\03-import\02-image\" />
   </ItemGroup>
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/Yw.WinFrmUI.Phart.Core.csproj.user b/WinFrmUI/Yw.WinFrmUI.Phart.Core/Yw.WinFrmUI.Phart.Core.csproj.user
index 7f8fd37..2d3855a 100644
--- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/Yw.WinFrmUI.Phart.Core.csproj.user
+++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/Yw.WinFrmUI.Phart.Core.csproj.user
@@ -26,6 +26,12 @@
     <Compile Update="02-universal\02-edit\UniversalEditChart.cs">
       <SubType>UserControl</SubType>
     </Compile>
+    <Compile Update="02-universal\99-coordinate\UniversalAxisValueDlg.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="02-universal\99-coordinate\UniversalCoordinateDlg.cs">
+      <SubType>Form</SubType>
+    </Compile>
     <Compile Update="02-valve\02-edit\ValveEditChart.cs">
       <SubType>UserControl</SubType>
     </Compile>

--
Gitblit v1.9.3