From 02cde90c53b4a80252be2944f6d53a368b7252ba Mon Sep 17 00:00:00 2001
From: Shuxia Ning <NingShuxia0927@outlook.com>
Date: 星期一, 14 十月 2024 13:25:04 +0800
Subject: [PATCH] 冲突(变速曲线)

---
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs          |   27 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkPureCtrl.Designer.cs                                 |   99 ++++
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.resx        |   18 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/eWaterboxMarkType.cs                                     |   54 ++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkCtrl.resx                                            |  120 +++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkDlg.cs                                               |   41 +
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj                                        |    4 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/HydroMarkResultViewModel.cs                                      |   18 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/eNozzleMarkType.cs                                       |   34 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkCtrl.Designer.cs                                     |  174 +++++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkPureCtrl.resx                                        |  123 +++++
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dContainer.cs                  |   14 
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/00-core/LeadLabel.cs                                                   |   22 
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dContainer.cs                   |   28 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkDlg.resx                                             |  120 +++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/ePipeMarkType.cs                                         |   46 +
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LeadLabel.js                                                |   65 ++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkDlg.Designer.cs                                      |   59 ++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/ePumpMarkType.cs                                         |   71 ++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroMarkSetViewModel.datasource      |   10 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/HydroMarkSetViewModel.cs                                         |   28 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs |   15 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user                                       |    9 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkCtrl.cs                                              |   49 ++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkPureCtrl.cs                                          |  102 ++++
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/html/Interop3d.html                                            |    1 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/eValveMarkType.cs                                        |   43 +
 27 files changed, 1,391 insertions(+), 3 deletions(-)

diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs
index cb283d1..7967ca7 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/02-bimface/XhsProjectSimulationBimfaceCtrl.cs
@@ -416,6 +416,26 @@
 
         #endregion
 
+        #region 寮曠嚎鏍囩
+
+        /// <summary>
+        /// 璁剧疆寮曠嚎鏍囩
+        /// </summary>
+        public async Task SetLeadLabels(List<LeadLabel> obj)
+        {
+            await _bimfaceInteropContainer?.SetLeadLabels(obj);
+        }
+
+        /// <summary>
+        /// 娓呴櫎寮曠嚎鏍囩
+        /// </summary>
+        public async Task ClearLeadLabels()
+        {
+            await _bimfaceInteropContainer?.ClearLeadLabels();
+        }
+
+        #endregion
+
         #region 涓氬姟
 
 
@@ -488,7 +508,6 @@
         }
 
         #endregion
-
 
         #region 璁剧疆Open鏋勪欢棰滆壊
 
@@ -591,6 +610,12 @@
 
         #endregion
 
+        #region 鏍囨敞
+
+
+
+        #endregion
+
         #endregion
 
 
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs
index 8410f9f..5fa3cbb 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs
@@ -71,6 +71,7 @@
             controlContainerBottom = new DevExpress.XtraBars.Docking.ControlContainer();
             svgImg32 = new DevExpress.Utils.SvgImageCollection(components);
             rmSet = new DevExpress.XtraBars.Ribbon.RadialMenu(components);
+            barBtnMark = new DevExpress.XtraBars.BarButtonItem();
             ((ISupportInitialize)ribbonControl1).BeginInit();
             ((ISupportInitialize)tabPane1).BeginInit();
             tabPane1.SuspendLayout();
@@ -87,9 +88,9 @@
             // 
             ribbonControl1.ExpandCollapseItem.Id = 0;
             ribbonControl1.ItemPanelStyle = DevExpress.XtraBars.Ribbon.RibbonItemPanelStyle.Classic;
-            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, barBtnHydroCheck, barBtnHydroCalcu, barBtnHydroExportInp, barBtnSave, barBtnHydroParterList, barBtnShowHide, barBtnMatchingList, barBtnUnMatchingList, barBtnSetList, barBtnSetPumpList, barBtnSetValveList, barBtnSetPipeList, barBtnSetElbowsList, barBtnSetThreelinkList, barBtnFourlinkList, barBtnSetTranslationList, barBtnSetExchangerList, barBtnSetJunctionList, barBtnFeatCurve, barBtnSearch });
+            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, barBtnHydroCheck, barBtnHydroCalcu, barBtnHydroExportInp, barBtnSave, barBtnHydroParterList, barBtnShowHide, barBtnMatchingList, barBtnUnMatchingList, barBtnSetList, barBtnSetPumpList, barBtnSetValveList, barBtnSetPipeList, barBtnSetElbowsList, barBtnSetThreelinkList, barBtnFourlinkList, barBtnSetTranslationList, barBtnSetExchangerList, barBtnSetJunctionList, barBtnFeatCurve, barBtnSearch, barBtnMark });
             ribbonControl1.Location = new Point(0, 0);
-            ribbonControl1.MaxItemId = 33;
+            ribbonControl1.MaxItemId = 34;
             ribbonControl1.Name = "ribbonControl1";
             ribbonControl1.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { ribbonPage1 });
             ribbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.False;
@@ -271,6 +272,7 @@
             pageGroupModel.ItemLinks.Add(barBtnHydroParterList);
             pageGroupModel.ItemLinks.Add(barBtnSetList);
             pageGroupModel.ItemLinks.Add(barBtnHydroExportInp);
+            pageGroupModel.ItemLinks.Add(barBtnMark);
             pageGroupModel.Name = "pageGroupModel";
             pageGroupModel.Text = "妯″瀷";
             // 
@@ -401,6 +403,14 @@
             rmSet.Name = "rmSet";
             rmSet.Ribbon = ribbonControl1;
             // 
+            // barBtnMark
+            // 
+            barBtnMark.Caption = "鏍囨敞";
+            barBtnMark.Id = 33;
+            barBtnMark.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnMark.ImageOptions.SvgImage");
+            barBtnMark.Name = "barBtnMark";
+            barBtnMark.ItemClick += barBtnMark_ItemClick;
+            // 
             // XhsProjectSimulationCorePage
             // 
             Appearance.BackColor = SystemColors.Control;
@@ -469,5 +479,6 @@
         private DevExpress.XtraBars.Ribbon.RibbonPageGroup pageGroupModel;
         private DevExpress.XtraBars.Docking.DockPanel docPnlBottom;
         private DevExpress.XtraBars.Docking.ControlContainer controlContainerBottom;
+        private DevExpress.XtraBars.BarButtonItem barBtnMark;
     }
 }
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.resx
index 3ced769..178a1d9 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.resx
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.resx
@@ -383,6 +383,24 @@
         QmxhY2siIC8+DQogIDwvZz4NCjwvc3ZnPgs=
 </value>
   </data>
+  <data name="barBtnMark.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAHwCAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
+        ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz
+        OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp
+        dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkZsYWciPg0KICAgIDxwYXRoIGQ9Ik04LDRINUM0LjQs
+        NCw0LDQuNCw0LDV2MjJjMCwwLjUsMC40LDEsMSwxaDJjMC42LDAsMS0wLjUsMS0xVjR6IiBjbGFzcz0i
+        QmxhY2siIC8+DQogICAgPHBvbHlnb24gcG9pbnRzPSIyOCwyMCAxMCwyMCAxMCw0IDI4LDQgMjAsMTIg
+        ICIgY2xhc3M9IlJlZCIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
+</value>
+  </data>
   <metadata name="dockManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>179, 21</value>
   </metadata>
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/00-core/LeadLabel.cs b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/00-core/LeadLabel.cs
new file mode 100644
index 0000000..4605ad6
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/00-core/LeadLabel.cs
@@ -0,0 +1,22 @@
+锘縩amespace Yw.WinFrmUI.Bimface
+{
+    /// <summary>
+    /// 寮曠嚎鏍囩
+    /// </summary>
+    public class LeadLabel
+    {
+        /// <summary>
+        /// id
+        /// </summary>
+        [JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)]
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 鏂囨湰
+        /// </summary>
+        [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)]
+        public string Text { get; set; }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dContainer.cs b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dContainer.cs
index 686afa9..d32ac0b 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dContainer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/BimfaceInterop3dContainer.cs
@@ -446,5 +446,33 @@
 
         #endregion
 
+        #region 寮曠嚎鏍囩
+
+        /// <summary>
+        /// 璁剧疆寮曠嚎鏍囩
+        /// </summary>
+        public async Task SetLeadLabels(List<LeadLabel> obj)
+        {
+            if (!_isViewInitialized)
+            {
+                return;
+            }
+            await this.webViewControl1.EvaluateScriptAsync("setLeadLabels", obj);
+        }
+
+        /// <summary>
+        /// 娓呴櫎寮曠嚎鏍囩
+        /// </summary>
+        public async Task ClearLeadLabels()
+        {
+            if (!_isViewInitialized)
+            {
+                return;
+            }
+            await this.webViewControl1.EvaluateScriptAsync("clearLeadLabels()");
+        }
+
+        #endregion
+
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dContainer.cs b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dContainer.cs
index 1d58c2b..0777b21 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dContainer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/01-interop/01-interop3d/IBimfaceInterop3dContainer.cs
@@ -164,5 +164,19 @@
 
         #endregion
 
+        #region 寮曠嚎鏍囩
+
+        /// <summary>
+        /// 璁剧疆寮曠嚎鏍囩
+        /// </summary>
+        Task SetLeadLabels(List<LeadLabel> obj);
+
+        /// <summary>
+        /// 娓呴櫎寮曠嚎鏍囩
+        /// </summary>
+        Task ClearLeadLabels();
+
+        #endregion
+
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
index 20f0322..2a37d93 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
@@ -39,6 +39,7 @@
     <None Remove="bimface\js\CustomLabels.js" />
     <None Remove="bimface\js\GetComponents.js" />
     <None Remove="bimface\js\Layer.js" />
+    <None Remove="bimface\js\LeadLabel.js" />
     <None Remove="bimface\js\Panel.js" />
     <None Remove="bimface\js\PipeFlow.js" />
     <None Remove="bimface\js\SelectedComponents.js" />
@@ -89,6 +90,9 @@
     <Content Include="bimface\js\Layer.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="bimface\js\LeadLabel.js">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="bimface\js\Panel.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/html/Interop3d.html b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/html/Interop3d.html
index d8ab3e0..49d94de 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/html/Interop3d.html
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/html/Interop3d.html
@@ -123,6 +123,7 @@
 <script src="../js/ComponentsBlink.js"></script>
 <script src="../js/ComponentsColor.js"></script>
 <script src="../js/CustomLabels.js"></script>
+<script src="../js/LeadLabel.js"></script>
 
 
 <script src="js/Background.js"></script>
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LeadLabel.js b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LeadLabel.js
new file mode 100644
index 0000000..440399b
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/bimface/js/LeadLabel.js
@@ -0,0 +1,65 @@
+锘�//寮曠嚎鏍囩
+
+let _leadLabelDrawableContainer = null;
+
+//璁剧疆寮曠嚎鏍囩
+function setLeadLabels(obj) {
+    // 鍒濆鍖朌rawableContainer
+    if (_leadLabelDrawableContainer == null) {
+        let leadLabeldrawableConfig = new Glodon.Bimface.Plugins.Drawable.DrawableContainerConfig();
+        leadLabeldrawableConfig.viewer = _viewer;
+        _leadLabelDrawableContainer = new Glodon.Bimface.Plugins.Drawable.DrawableContainer(leadLabeldrawableConfig);
+    }
+    else {
+        _leadLabelDrawableContainer.clear();
+    }
+    if (obj == null || obj.length < 1) {
+        return;
+    }
+    obj.forEach(item => {
+        addLeadLabel(item);
+    });
+}
+
+//娣诲姞寮曠嚎鏍囩
+function addLeadLabel(item) {
+    if (_leadLabelDrawableContainer == null) {
+        return;
+    }
+    //寮曠嚎鏍囩鐨勯厤缃被
+    let leadLabelConfig = new Glodon.Bimface.Plugins.Drawable.LeadLabelConfig();
+    //寮曠嚎鎶樼偣鐨勭浉瀵逛綅缃�
+    leadLabelConfig.offset = { x: 27, y: -47 };
+    //寮曠嚎鏍囩鐨勫唴瀹�
+    leadLabelConfig.text = item.text;
+    //寮曠嚎鏍囩鍏宠仈鐨勬瀯浠�
+    leadLabelConfig.objectId = item.id;
+
+    let boundingBox = _modeler.getBoundingBoxById(item.id);
+    let boundingBoxMin = boundingBox.min;
+    let boundingBoxMax = boundingBox.max;
+    //寮曠嚎鏍囩鐨勪笘鐣屽潗鏍�
+    leadLabelConfig.worldPosition = {
+        x: (boundingBoxMin.x + boundingBoxMax.x) / 2,
+        y: (boundingBoxMin.y + boundingBoxMax.y) / 2,
+        z: (boundingBoxMin.z + boundingBoxMax.z) / 2
+    };
+    //寮曠嚎鏍囩鏄惁鍙嫋鎷�
+    leadLabelConfig.draggable = false;
+    //寮曠嚎鏍囩鐨勮鍥�
+    leadLabelConfig.viewer = _viewer;
+
+    let leadLabel = new Glodon.Bimface.Plugins.Drawable.LeadLabel(leadLabelConfig);
+    _leadLabelDrawableContainer.addItem(leadLabel);
+}
+
+//娓呴櫎寮曠嚎鏍囩
+function clearLeadLabels() {
+    if (_leadLabelDrawableContainer == null) {
+        return;
+    }
+    _leadLabelDrawableContainer.clear();
+}
+
+
+
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/eNozzleMarkType.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/eNozzleMarkType.cs
new file mode 100644
index 0000000..4abf73f
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/eNozzleMarkType.cs
@@ -0,0 +1,34 @@
+锘縩amespace Yw.WinFrmUI.Hydro
+{
+    /// <summary>
+    /// 鍠峰槾鏍囨敞绫诲瀷
+    /// </summary>
+    public enum eNozzleMarkType
+    {
+        /// <summary>
+        /// 鏃�
+        /// </summary>
+        [Display(Name = "鏃�")]
+        None = 0,
+
+        /// <summary>
+        /// 鏍囬珮
+        /// </summary>
+        [Display(Name = "鏍囬珮")]
+        Elev = 1,
+
+        /// <summary>
+        /// 闇�姘撮噺
+        /// </summary>
+        [Display(Name = "闇�姘撮噺")]
+        Demand = 2,
+
+        /// <summary>
+        /// 鍠峰皠绯绘暟
+        /// </summary>
+        [Display(Name = "鍠峰皠绯绘暟")]
+        Coefficient = 4,
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/ePipeMarkType.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/ePipeMarkType.cs
new file mode 100644
index 0000000..82d1b9d
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/ePipeMarkType.cs
@@ -0,0 +1,46 @@
+锘縩amespace Yw.WinFrmUI.Hydro
+{
+    /// <summary>
+    /// 绠¢亾鏍囨敞绫诲瀷
+    /// </summary>
+    public enum ePipeMarkType
+    {
+        /// <summary>
+        /// 鏃�
+        /// </summary>
+        [Display(Name = "鏃�")]
+        None = 0,
+
+        /// <summary>
+        /// 绠¢亾鐘舵��
+        /// </summary>
+        [Display(Name = "绠¢亾鐘舵��")]
+        PipeStatus = 1,
+
+        /// <summary>
+        /// 鐩村緞锛坢m锛�
+        /// </summary>
+        [Display(Name = "鐩村緞")]
+        Diameter = 2,
+
+        /// <summary>
+        /// 鐩村緞锛坢锛�
+        /// </summary>
+        [Display(Name = "鐩村緞")]
+        Length = 3,
+
+        /// <summary>
+        /// 绮楃硻绯绘暟
+        /// </summary>
+        [Display(Name = "绮楃硻绯绘暟")]
+        Roughness = 4,
+
+        /// <summary>
+        /// 灞�闃荤郴鏁�
+        /// </summary>
+        [Display(Name = "灞�闃荤郴鏁�")]
+        MinorLoss = 5,
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/ePumpMarkType.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/ePumpMarkType.cs
new file mode 100644
index 0000000..c3facd3
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/ePumpMarkType.cs
@@ -0,0 +1,71 @@
+锘縩amespace Yw.WinFrmUI.Hydro
+{
+    /// <summary>
+    /// 姘存车鏍囨敞绫诲瀷
+    /// </summary>
+    public enum ePumpMarkType
+    {
+        /// <summary>
+        /// 鏃�
+        /// </summary>
+        [Display(Name = "鏃�")]
+        None = 0,
+
+        /// <summary>
+        /// 姘存车鐘舵��
+        /// </summary>
+        [Display(Name = "杩愯鐘舵��")]
+        PumpStatus = 1,
+
+        /// <summary>
+        /// 棰濆畾鍔熺巼锛坘W锛�
+        /// </summary>
+        [Display(Name = "棰濆畾鍔熺巼")]
+        RatedP = 2,
+
+        /// <summary>
+        /// 棰濆畾娴侀噺 (m鲁/h)
+        /// </summary>
+        [Display(Name = "棰濆畾娴侀噺")]
+        RatedQ = 3,
+
+        /// <summary>
+        /// 棰濆畾鎵▼ (m)
+        /// </summary>
+        [Display(Name = "棰濆畾鎵▼")]
+        RatedH = 4,
+
+        /// <summary>
+        /// 棰濆畾杞�� (r/min)
+        /// </summary>
+        [Display(Name = "棰濆畾杞��")]
+        RatedN = 5,
+
+        /// <summary>
+        /// 棰濆畾棰戠巼
+        /// </summary>
+        [Display(Name = "棰濆畾棰戠巼")]
+        RatedHz = 6,
+
+        /// <summary>
+        /// 杞�� (r/min)
+        /// </summary>
+        [Display(Name = "杞��")]
+        CurrentN = 7,
+
+        /// <summary>
+        /// 棰戠巼
+        /// </summary>
+        [Display(Name = "棰戠巼")]
+        CurrentHz = 8,
+
+
+
+
+
+
+
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/eValveMarkType.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/eValveMarkType.cs
new file mode 100644
index 0000000..4ec641e
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/eValveMarkType.cs
@@ -0,0 +1,43 @@
+锘縩amespace Yw.WinFrmUI.Hydro
+{
+    /// <summary>
+    /// 闃�闂ㄦ爣娉ㄧ被鍨�
+    /// </summary>
+    public enum eValveMarkType
+    {
+        /// <summary>
+        /// 鏃�
+        /// </summary>
+        [Display(Name = "鏃�")]
+        None = 0,
+
+        /// <summary>
+        /// 闃�闂ㄧ姸鎬�
+        /// </summary>
+        [Display(Name = "闃�闂ㄧ姸鎬�")]
+        ValveStatus = 1,
+
+        /// <summary>
+        /// 闃�闂ㄧ被鍨�
+        /// </summary>
+        [Display(Name = "闃�闂ㄧ被鍨�")]
+        ValveType = 2,
+
+        /// <summary>
+        /// 鐩村緞 (mm)
+        /// </summary>
+        [Display(Name = "鐩村緞")]
+        Diameter = 3,
+
+        /// <summary>
+        /// 灞�闃荤郴鏁�
+        /// </summary>
+        [Display(Name = "灞�闃荤郴鏁�")]
+        MinorLoss = 4,
+
+
+
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/eWaterboxMarkType.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/eWaterboxMarkType.cs
new file mode 100644
index 0000000..a4f7623
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-mark/eWaterboxMarkType.cs
@@ -0,0 +1,54 @@
+锘縩amespace Yw.WinFrmUI.Hydro
+{
+    /// <summary>
+    /// 姘寸鏍囨敞绫诲瀷
+    /// </summary>
+    public enum eWaterboxMarkType
+    {
+        /// <summary>
+        /// 鏃�
+        /// </summary>
+        [Display(Name = "鏃�")]
+        None = 0,
+
+        /// <summary>
+        /// 姹犲簳鏍囬珮锛坢锛�
+        /// </summary>
+        [Display(Name = "姹犲簳鏍囬珮")]
+        PoolElev = 1,
+
+        /// <summary>
+        /// 鍒濆姘翠綅锛坢锛�
+        /// </summary>
+        [Display(Name = "鍒濆姘翠綅")]
+        InitLevel = 2,
+
+        /// <summary>
+        /// 鏈�灏忔按浣嶏紙m锛�
+        /// </summary>
+        [Display(Name = "鏈�灏忔按浣�")]
+        MinLevel = 3,
+
+        /// <summary>
+        /// 鏈�澶ф按浣嶏紙m锛�
+        /// </summary>
+        [Display(Name = "鏈�澶ф按浣�")]
+        MaxLevel = 4,
+
+        /// <summary>
+        /// 鐩村緞锛坢锛�
+        /// </summary>
+        [Display(Name = "鐩村緞")]
+        Diameter = 5,
+
+        /// <summary>
+        /// 鏈�灏忓绉紙m鲁锛�
+        /// </summary>
+        [Display(Name = "鏈�灏忓绉�")]
+        MinVol = 6
+
+
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/HydroMarkResultViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/HydroMarkResultViewModel.cs
new file mode 100644
index 0000000..2b7bff9
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/HydroMarkResultViewModel.cs
@@ -0,0 +1,18 @@
+锘縩amespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class HydroMarkResultViewModel
+    {
+        /// <summary>
+        /// 缂栫爜
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 鏂囨湰
+        /// </summary>
+        public string Text { get; set; }
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/HydroMarkSetViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/HydroMarkSetViewModel.cs
new file mode 100644
index 0000000..9020495
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/HydroMarkSetViewModel.cs
@@ -0,0 +1,28 @@
+锘縩amespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class HydroMarkSetViewModel
+    {
+        /// <summary>
+        /// 鍒嗙被
+        /// </summary>
+        [DisplayName("鍒嗙被")]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 绫诲瀷
+        /// </summary>
+        [DisplayName("绫诲瀷")]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 鏍囨敞
+        /// </summary>
+        [DisplayName("鏍囨敞")]
+        public int MarkType { get; set; }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkCtrl.Designer.cs
new file mode 100644
index 0000000..cf2e5e2
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkCtrl.Designer.cs
@@ -0,0 +1,174 @@
+锘縩amespace Yw.WinFrmUI
+{
+    partial class SetHydroMarkCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            btnOk = new DevExpress.XtraEditors.SimpleButton();
+            btnCancel = new DevExpress.XtraEditors.SimpleButton();
+            setHydroMarkPureCtrl1 = new SetHydroMarkPureCtrl();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
+            ((ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((ISupportInitialize)Root).BeginInit();
+            ((ISupportInitialize)layoutControlItem1).BeginInit();
+            ((ISupportInitialize)layoutControlItem2).BeginInit();
+            ((ISupportInitialize)layoutControlItem3).BeginInit();
+            ((ISupportInitialize)emptySpaceItem1).BeginInit();
+            SuspendLayout();
+            // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(btnOk);
+            layoutControl1.Controls.Add(btnCancel);
+            layoutControl1.Controls.Add(setHydroMarkPureCtrl1);
+            layoutControl1.Dock = DockStyle.Fill;
+            layoutControl1.Location = new Point(0, 0);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(670, 266, 650, 400);
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new Size(398, 555);
+            layoutControl1.TabIndex = 0;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // btnOk
+            // 
+            btnOk.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Primary;
+            btnOk.Appearance.Options.UseBackColor = true;
+            btnOk.Location = new Point(222, 531);
+            btnOk.Name = "btnOk";
+            btnOk.Size = new Size(85, 22);
+            btnOk.StyleController = layoutControl1;
+            btnOk.TabIndex = 6;
+            btnOk.Text = "纭畾";
+            btnOk.Click += btnOk_Click;
+            // 
+            // btnCancel
+            // 
+            btnCancel.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Warning;
+            btnCancel.Appearance.Options.UseBackColor = true;
+            btnCancel.Location = new Point(311, 531);
+            btnCancel.Name = "btnCancel";
+            btnCancel.Size = new Size(85, 22);
+            btnCancel.StyleController = layoutControl1;
+            btnCancel.TabIndex = 5;
+            btnCancel.Text = "鍙栨秷";
+            btnCancel.Click += btnCancel_Click;
+            // 
+            // setHydroMarkPureCtrl1
+            // 
+            setHydroMarkPureCtrl1.Location = new Point(2, 2);
+            setHydroMarkPureCtrl1.Name = "setHydroMarkPureCtrl1";
+            setHydroMarkPureCtrl1.Size = new Size(394, 525);
+            setHydroMarkPureCtrl1.TabIndex = 4;
+            // 
+            // Root
+            // 
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem2, layoutControlItem3, emptySpaceItem1 });
+            Root.Name = "Root";
+            Root.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            Root.Size = new Size(398, 555);
+            Root.TextVisible = false;
+            // 
+            // layoutControlItem1
+            // 
+            layoutControlItem1.Control = setHydroMarkPureCtrl1;
+            layoutControlItem1.Location = new Point(0, 0);
+            layoutControlItem1.Name = "layoutControlItem1";
+            layoutControlItem1.Size = new Size(398, 529);
+            layoutControlItem1.TextSize = new Size(0, 0);
+            layoutControlItem1.TextVisible = false;
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.Control = btnCancel;
+            layoutControlItem2.Location = new Point(309, 529);
+            layoutControlItem2.MaxSize = new Size(89, 26);
+            layoutControlItem2.MinSize = new Size(89, 26);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.Size = new Size(89, 26);
+            layoutControlItem2.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem2.TextSize = new Size(0, 0);
+            layoutControlItem2.TextVisible = false;
+            // 
+            // layoutControlItem3
+            // 
+            layoutControlItem3.Control = btnOk;
+            layoutControlItem3.Location = new Point(220, 529);
+            layoutControlItem3.MaxSize = new Size(89, 26);
+            layoutControlItem3.MinSize = new Size(89, 26);
+            layoutControlItem3.Name = "layoutControlItem3";
+            layoutControlItem3.Size = new Size(89, 26);
+            layoutControlItem3.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem3.TextSize = new Size(0, 0);
+            layoutControlItem3.TextVisible = false;
+            // 
+            // emptySpaceItem1
+            // 
+            emptySpaceItem1.AllowHotTrack = false;
+            emptySpaceItem1.Location = new Point(0, 529);
+            emptySpaceItem1.Name = "emptySpaceItem1";
+            emptySpaceItem1.Size = new Size(220, 26);
+            emptySpaceItem1.TextSize = new Size(0, 0);
+            // 
+            // SetHydroMarkCtrl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(layoutControl1);
+            Name = "SetHydroMarkCtrl";
+            Size = new Size(398, 555);
+            ((ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)Root).EndInit();
+            ((ISupportInitialize)layoutControlItem1).EndInit();
+            ((ISupportInitialize)layoutControlItem2).EndInit();
+            ((ISupportInitialize)layoutControlItem3).EndInit();
+            ((ISupportInitialize)emptySpaceItem1).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraEditors.SimpleButton btnOk;
+        private DevExpress.XtraEditors.SimpleButton btnCancel;
+        private SetHydroMarkPureCtrl setHydroMarkPureCtrl1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkCtrl.cs
new file mode 100644
index 0000000..fee072b
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkCtrl.cs
@@ -0,0 +1,49 @@
+锘縩amespace Yw.WinFrmUI
+{
+    public partial class SetHydroMarkCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public SetHydroMarkCtrl()
+        {
+            InitializeComponent();
+            this.layoutControl1.SetupLayoutControl();
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public event Action<List<HydroMarkResultViewModel>> ReloadDataEvent;
+        /// <summary>
+        /// 
+        /// </summary>
+        public event Action OkEvent;
+        /// <summary>
+        /// 
+        /// </summary>
+        public event Action CancelEvent;
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void SetBindingData(Func<Yw.Model.HydroModelInfo> hydroInfoFunc, List<HydroMarkSetViewModel> list)
+        {
+            this.setHydroMarkPureCtrl1.SetBindingData(hydroInfoFunc, list);
+        }
+
+
+        private void btnCancel_Click(object sender, EventArgs e)
+        {
+            var list = this.setHydroMarkPureCtrl1.GetResultList();
+            this.ReloadDataEvent?.Invoke(list);
+            this.OkEvent?.Invoke();
+
+        }
+
+        private void btnOk_Click(object sender, EventArgs e)
+        {
+            this.CancelEvent?.Invoke();
+        }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkCtrl.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkCtrl.resx
@@ -0,0 +1,120 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkDlg.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkDlg.Designer.cs
new file mode 100644
index 0000000..472e1b6
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkDlg.Designer.cs
@@ -0,0 +1,59 @@
+锘縩amespace Yw.WinFrmUI
+{
+    partial class SetHydroMarkDlg
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            setHydroMarkCtrl1 = new SetHydroMarkCtrl();
+            SuspendLayout();
+            // 
+            // setHydroMarkCtrl1
+            // 
+            setHydroMarkCtrl1.Dock = DockStyle.Fill;
+            setHydroMarkCtrl1.Location = new Point(10, 5);
+            setHydroMarkCtrl1.Name = "setHydroMarkCtrl1";
+            setHydroMarkCtrl1.Size = new Size(397, 510);
+            setHydroMarkCtrl1.TabIndex = 0;
+            // 
+            // SetHydroMarkDlg
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(417, 525);
+            Controls.Add(setHydroMarkCtrl1);
+            Name = "SetHydroMarkDlg";
+            Padding = new Padding(10, 5, 10, 10);
+            StartPosition = FormStartPosition.CenterParent;
+            Text = "鏍囨敞";
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private SetHydroMarkCtrl setHydroMarkCtrl1;
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkDlg.cs
new file mode 100644
index 0000000..ff2ac13
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkDlg.cs
@@ -0,0 +1,41 @@
+锘縩amespace Yw.WinFrmUI
+{
+    public partial class SetHydroMarkDlg : DevExpress.XtraEditors.XtraForm
+    {
+        public SetHydroMarkDlg()
+        {
+            InitializeComponent();
+            this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
+            this.setHydroMarkCtrl1.CancelEvent += () =>
+            {
+                this.DialogResult = DialogResult.Cancel;
+                this.Close();
+            };
+            this.setHydroMarkCtrl1.OkEvent += () =>
+            {
+                this.DialogResult = DialogResult.OK;
+                this.Close();
+            };
+            this.setHydroMarkCtrl1.ReloadDataEvent += (obj) =>
+            {
+                this.ReloadDataEvent?.Invoke(obj);
+            };
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public event Action<List<HydroMarkResultViewModel>> ReloadDataEvent;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void SetBindingData(Func<Yw.Model.HydroModelInfo> hydroInfoFunc, List<HydroMarkSetViewModel> list)
+        {
+            this.setHydroMarkCtrl1.SetBindingData(hydroInfoFunc, list);
+        }
+
+
+
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkDlg.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkDlg.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkDlg.resx
@@ -0,0 +1,120 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkPureCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkPureCtrl.Designer.cs
new file mode 100644
index 0000000..f083523
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkPureCtrl.Designer.cs
@@ -0,0 +1,99 @@
+锘縩amespace Yw.WinFrmUI
+{
+    partial class SetHydroMarkPureCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new Container();
+            gridControl1 = new DevExpress.XtraGrid.GridControl();
+            hydroMarkSetViewModelBindingSource = new BindingSource(components);
+            gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
+            colName = new DevExpress.XtraGrid.Columns.GridColumn();
+            colMarkType = new DevExpress.XtraGrid.Columns.GridColumn();
+            ((ISupportInitialize)gridControl1).BeginInit();
+            ((ISupportInitialize)hydroMarkSetViewModelBindingSource).BeginInit();
+            ((ISupportInitialize)gridView1).BeginInit();
+            SuspendLayout();
+            // 
+            // gridControl1
+            // 
+            gridControl1.DataSource = hydroMarkSetViewModelBindingSource;
+            gridControl1.Dock = DockStyle.Fill;
+            gridControl1.Location = new Point(0, 0);
+            gridControl1.MainView = gridView1;
+            gridControl1.Name = "gridControl1";
+            gridControl1.Size = new Size(355, 443);
+            gridControl1.TabIndex = 0;
+            gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { gridView1 });
+            // 
+            // hydroMarkSetViewModelBindingSource
+            // 
+            hydroMarkSetViewModelBindingSource.DataSource = typeof(HydroMarkSetViewModel);
+            // 
+            // gridView1
+            // 
+            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colName, colMarkType });
+            gridView1.GridControl = gridControl1;
+            gridView1.Name = "gridView1";
+            // 
+            // colName
+            // 
+            colName.FieldName = "Name";
+            colName.Name = "colName";
+            colName.OptionsColumn.AllowEdit = false;
+            colName.Visible = true;
+            colName.VisibleIndex = 0;
+            // 
+            // colMarkType
+            // 
+            colMarkType.FieldName = "MarkType";
+            colMarkType.Name = "colMarkType";
+            colMarkType.Visible = true;
+            colMarkType.VisibleIndex = 1;
+            // 
+            // SetHydroMarkPureCtrl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(gridControl1);
+            Name = "SetHydroMarkPureCtrl";
+            Size = new Size(355, 443);
+            ((ISupportInitialize)gridControl1).EndInit();
+            ((ISupportInitialize)hydroMarkSetViewModelBindingSource).EndInit();
+            ((ISupportInitialize)gridView1).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraGrid.GridControl gridControl1;
+        private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
+        private BindingSource hydroMarkSetViewModelBindingSource;
+        private DevExpress.XtraGrid.Columns.GridColumn colName;
+        private DevExpress.XtraGrid.Columns.GridColumn colMarkType;
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkPureCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkPureCtrl.cs
new file mode 100644
index 0000000..26bf46f
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkPureCtrl.cs
@@ -0,0 +1,102 @@
+锘縰sing DevExpress.XtraEditors.Repository;
+using DevExpress.XtraRichEdit.Design;
+using Yw.WinFrmUI.Hydro;
+
+namespace Yw.WinFrmUI
+{
+    public partial class SetHydroMarkPureCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public SetHydroMarkPureCtrl()
+        {
+            InitializeComponent();
+            this.gridView1.SetNormalEditView();
+            this.colName.OptionsColumn.AllowEdit = false;
+            this.gridView1.CustomRowCellEdit += GridView1_CustomRowCellEdit;
+        }
+
+        private Func<Yw.Model.HydroModelInfo> _hydroInfoFunc;
+        private BindingList<HydroMarkSetViewModel> _allBindingList = null;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void SetBindingData(Func<Yw.Model.HydroModelInfo> hydroInfoFunc, List<HydroMarkSetViewModel> list)
+        {
+            _hydroInfoFunc = hydroInfoFunc;
+            _allBindingList = new BindingList<HydroMarkSetViewModel>();
+            list?.ForEach(x =>
+            {
+                _allBindingList.Add(x);
+            });
+            this.hydroMarkSetViewModelBindingSource.DataSource = _allBindingList;
+            this.hydroMarkSetViewModelBindingSource.ResetBindings(false);
+        }
+
+        /// <summary>
+        /// 鑾峰彇缁撴灉鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public List<HydroMarkResultViewModel> GetResultList()
+        {
+            var hydroInfo = _hydroInfoFunc?.Invoke();
+            if (hydroInfo == null)
+            {
+                return default;
+            }
+            if (_allBindingList == null || _allBindingList.Count < 1)
+            {
+                return default;
+            }
+            var resultList = new List<HydroMarkResultViewModel>();
+
+
+            return resultList;
+        }
+
+        //鑷畾涔�
+        private void GridView1_CustomRowCellEdit(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e)
+        {
+            var row = this.gridView1.GetRow(e.RowHandle) as HydroMarkSetViewModel;
+            if (row == null)
+            {
+                return;
+            }
+            if (e.Column == this.colMarkType)
+            {
+                var repositoryItem = new RepositoryItemImageComboBox();
+                switch (row.Code)
+                {
+                    case Yw.Hydro.ParterCatalog.Waterbox:
+                        {
+                            repositoryItem.AddEnum(typeof(eWaterboxMarkType), true);
+                        }
+                        break;
+                    case Yw.Hydro.ParterCatalog.Pump:
+                        {
+                            repositoryItem.AddEnum(typeof(ePumpMarkType), true);
+                        }
+                        break;
+                    case Yw.Hydro.ParterCatalog.Valve:
+                        {
+                            repositoryItem.AddEnum(typeof(eValveMarkType), true);
+                        }
+                        break;
+                    case Yw.Hydro.ParterCatalog.Pipe:
+                        {
+                            repositoryItem.AddEnum(typeof(ePipeMarkType), true);
+                        }
+                        break;
+                    case Yw.Hydro.ParterCatalog.Nozzle:
+                        {
+                            repositoryItem.AddEnum(typeof(eNozzleMarkType), true);
+                        }
+                        break;
+                    default: break;
+                }
+                e.RepositoryItem = repositoryItem;
+            }
+        }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkPureCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkPureCtrl.resx
new file mode 100644
index 0000000..cf7d79a
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/09-mark/SetHydroMarkPureCtrl.resx
@@ -0,0 +1,123 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="hydroMarkSetViewModelBindingSource.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.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroMarkSetViewModel.datasource b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroMarkSetViewModel.datasource
new file mode 100644
index 0000000..08ba3f1
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroMarkSetViewModel.datasource
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="HydroMarkSetViewModel" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+  <TypeInfo>Yw.WinFrmUI.HydroMarkSetViewModel, Yw.WinFrmUI.Hydro.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user
index 245a492..a97c654 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user
@@ -34,5 +34,14 @@
     <Compile Update="06-q3d\HydroQ3dViewPage.cs">
       <SubType>UserControl</SubType>
     </Compile>
+    <Compile Update="09-mark\SetHydroMarkCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="09-mark\SetHydroMarkDlg.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="09-mark\SetHydroMarkPureCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
   </ItemGroup>
 </Project>
\ No newline at end of file

--
Gitblit v1.9.3