From baa80d650adebcce70f1113cc1020c6039c159a0 Mon Sep 17 00:00:00 2001
From: yangyin <1850366751@qq.com>
Date: 星期五, 28 二月 2025 16:06:51 +0800
Subject: [PATCH] 添加直线圆弧连接界面参数等,更新3d、2d暂未打通

---
 WinFrmUI/DPumpHydr.WinFrmUI.Volute/出水设计/ViewModel/OutflowParas.cs              |  103 ++++++++
 WinFrmUI/DPumpHydr.WinFrmUI.Volute/MainViewPage_InitialRibbon.cs               |    8 
 测试参数.xls                                                                       |    0 
 WinFrmUI/DPumpHydr.WinFrmUI.Volute/出水设计/参数控件/SetOutflowParaArcCtrl.cs          |  255 ++++++++++++++++++++
 WinFrmUI/DPumpHydr.WinFrmUI.Volute/出水设计/ctrlSetOutflowParas.Designer.cs        |   23 +
 WinFrmUI/DPumpHydr.WinFrmUI.Volute/出水设计/ctrlSetOutflowParas.cs                 |  195 +++++++++++++--
 WinFrmUI/DPumpHydr.WinFrmUI.Volute/MainViewPage_出口_水体.cs                       |    3 
 WinFrmUI/DPumpHydr.WinFrmUI.Volute/GlobalResource.cs                           |    1 
 WinFrmUI/DPumpHydr.WinFrmUI.Volute/出水设计/ctrlSetOutflowParas.resx               |    4 
 WinFrmUI/DPumpHydr.WinFrmUI.Volute/出水设计/参数控件/SetOutflowParasCtrl1.Designer.cs  |    2 
 WinFrmUI/DPumpHydr.WinFrmUI.Volute/出水设计/参数控件/SetOutflowParaArcCtrl.Designer.cs |   91 ++++---
 11 files changed, 592 insertions(+), 93 deletions(-)

diff --git a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/GlobalResource.cs b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/GlobalResource.cs
index b75ab4c..2e8f3ea 100644
--- a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/GlobalResource.cs
+++ b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/GlobalResource.cs
@@ -51,6 +51,7 @@
             if (tipLeadingIcon != null)
             {
                 image = Properties.Resources.Need16;// GlobalResource.BuildImage(tipLeadingIcon);
+                //image = Properties.Resources.minNeed16;// GlobalResource.BuildImage(tipLeadingIcon);
             }
             return image;
         }
diff --git a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/MainViewPage_InitialRibbon.cs b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/MainViewPage_InitialRibbon.cs
index e525d20..3650187 100644
--- a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/MainViewPage_InitialRibbon.cs
+++ b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/MainViewPage_InitialRibbon.cs
@@ -1,5 +1,6 @@
 锘縰sing System;
 using System.Collections.Generic;
+using System.Drawing;
 using System.Windows.Forms;
 
 namespace DPumpHydr.WinFrmUI.Volute
@@ -679,7 +680,7 @@
             ribbonPanel鎿嶄綔姝ラ.ButtonMoreVisible = isButtonMoreVisible;
             ribbonPanel鎿嶄綔姝ラ.FlowsTo = RibbonPanelFlowDirection.Left;
 
- 
+
             Rbtn瀹屾垚 = new System.Windows.Forms.RibbonButton(); 
             Rbtn瀹屾垚.Image = GlobalResource.BuildImage("circle-check.png", 40, 40);
             Rbtn瀹屾垚.Name = "Rbtn瀹屾垚";
@@ -953,7 +954,6 @@
             ribbonTab瑙嗗浘.Panels.Add(ribbonPanel鍥惧眰);
             ribbonTab瑙嗗浘.Panels.Add(ribbonPanel缃戞牸);
 
-
             ribbonTab缂栬緫.Panels.Add(ribbonPanel鎿嶄綔姝ラ);
             ribbonTab缂栬緫.Panels.Add(ribbonPanel闈㈡澘鏄剧ず); 
             ribbonTab缂栬緫.Panels.Add(ribbonPanel鏁版嵁瀵煎嚭);
@@ -1030,10 +1030,10 @@
             this.ribbonForm.Tabs.Add(ribbonTab瑙嗗浘);
             #endregion
         }
+        
 
- 
 
- 
+
 
     }
 }
diff --git "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/MainViewPage_\345\207\272\345\217\243_\346\260\264\344\275\223.cs" "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/MainViewPage_\345\207\272\345\217\243_\346\260\264\344\275\223.cs"
index 3f8b7ae..d9ab4db 100644
--- "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/MainViewPage_\345\207\272\345\217\243_\346\260\264\344\275\223.cs"
+++ "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/MainViewPage_\345\207\272\345\217\243_\346\260\264\344\275\223.cs"
@@ -158,6 +158,9 @@
             if (m_theWaterBodyOuterParam == null)
                 m_theWaterBodyOuterParam = HydrDisplayEngineBridge.CreateWaterBodyOuter(WaterBodyOuterType.EWaterBodyOuterSp);
 
+           // HydrEngineCSharp.WaterBodyOuterArcParam pHydrGeomCurve = m_theWaterBodyOuterParam as HydrEngineCSharp.WaterBodyOuterArcParam;
+
+
             HydrEngineCSharp.WaterBodyOuterSpParam pHydrGeomCurve = m_theWaterBodyOuterParam as HydrEngineCSharp.WaterBodyOuterSpParam;
             pHydrGeomCurve.SetOuterOffset(dOuterOffset);
             pHydrGeomCurve.SetOuterHigh(dOuterHigh);
diff --git "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ViewModel/OutflowParas.cs" "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ViewModel/OutflowParas.cs"
index 7110756..88dae6e 100644
--- "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ViewModel/OutflowParas.cs"
+++ "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ViewModel/OutflowParas.cs"
@@ -1,5 +1,6 @@
 锘縰sing System;
 using System.Collections.Generic;
+using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -25,6 +26,8 @@
             this.Tangent_Btm_Left = rhs.Tangent_Btm_Left;
             this.H1 = rhs.H1;
             this.H2 = rhs.H2;
+            this.R1 = rhs.R1;
+            this.R2 = rhs.R2;
             this.Septalradius = rhs.Septalradius;
         }
         public ViewModel.eOutflowShapeStyle ShapeStyle { get; set; } = ViewModel.eOutflowShapeStyle.鏈煡;
@@ -37,16 +40,110 @@
         public double Tangent_Btm_Right { get; set; } = 1.0; //鍒囩嚎缂╂斁閲� = m_dBtmValue;
         public double Tangent_Top_Left { get; set; } = 1.0; //鍒囩嚎缂╂斁閲� = m_dTopValue;
         public double Tangent_Btm_Left { get; set; } = 1.0; //鍒囩嚎缂╂斁閲� = m_dBtmValue;
+        public double R1 { get; set; }//鍦嗗姬杩炴帴鏃剁殑R1
+        public double R2 { get; set; }//鍦嗗姬杩炴帴鏃剁殑R2
         public double H1 { get; set; } //鍥剧墖涓殑H1  = 10;
         public double H2 { get; set; } //鍥剧墖涓殑H2 = 10;
         public double Septalradius { get; set; } //闅旇垖鍗婂緞r
-    }
 
+        public double CalR2(
+             ViewModel.HdrBaseInfo hdrBaseInfo,
+             ViewModel.GeomBaseInfo geomBaseInfo,
+             ViewModel.SectionBundleInfo sectionBundleInfo)
+        {
+            double r2 = 0;
+            double scale2 = ((this.Heigh / 100) >= (sectionBundleInfo.H[6] / 75)) ? (this.Heigh / 100) : (sectionBundleInfo.H[6] / 75);
+            PointD pt02 = new PointD(300, 100);
+            if (scale2 <= 0.05) scale2 = 0.05;
+            if ((scale2 > 0.05) && (scale2 <= 0.1)) scale2 = 0.1;
+            if ((scale2 > 0.1) && (scale2 <= 0.2)) scale2 = 0.2;
+            if ((scale2 > 0.2) && (scale2 <= 0.25)) scale2 = 0.25;
+            if ((scale2 > 0.25) && (scale2 <= 0.4)) scale2 = 0.4;
+            if ((scale2 > 0.4) && (scale2 <= 0.5)) scale2 = 0.5;
+            if ((scale2 > 0.5) && (scale2 <= 1.0)) scale2 = 1;
+            if ((scale2 > 1.0) && (scale2 <= 1.5)) scale2 = 1.5;
+            if ((scale2 > 1.5) && (scale2 <= 2.0)) scale2 = 2.0;
+            if ((scale2 > 2.0) && (scale2 <= 2.5)) scale2 = 2.5;
+            if ((scale2 > 2.5) && (scale2 <= 3)) scale2 = 3;
+            if ((scale2 > 3) && (scale2 <= 4)) scale2 = 4;
+            if ((scale2 > 4) && (scale2 <= 5)) scale2 = 5;
+            if ((scale2 > 5) && (scale2 <= 6)) scale2 = 6;
+            if ((scale2 > 6) && (scale2 <= 7)) scale2 = 7;
+            if ((scale2 > 7) && (scale2 <= 8)) scale2 = 8;
+            if ((scale2 > 8) && (scale2 <= 9)) scale2 = 9;
+            if ((scale2 > 9) && (scale2 <= 10)) scale2 = 10;
+            if ((scale2 > 10) && (scale2 <= 15)) scale2 = 15;
+            if ((scale2 > 15) && (scale2 <= 20)) scale2 = 20;
+            if ((scale2 > 20) && (scale2 <= 25)) scale2 = 25;
+            if ((scale2 > 25) && (scale2 <= 30)) scale2 = 30;
+            if ((scale2 > 35) && (scale2 <= 40)) scale2 = 40;
+            PointD pth12 = GeometryHelper.AdsPolar(pt02, GeometryHelper.DegreesToRadians(90), this.Heigh / scale2);
+            pth12 = GeometryHelper.AdsPolar(pth12, GeometryHelper.DegreesToRadians(0), this.Offset / scale2);
+            PointD pth6 = GeometryHelper.AdsPolar(pt02, GeometryHelper.DegreesToRadians(-90), (geomBaseInfo.D3 / 2 + sectionBundleInfo.H[6]) / scale2);
+            PointD pth7 = GeometryHelper.AdsPolar(pt02, GeometryHelper.DegreesToRadians(-45), (geomBaseInfo.D3 / 2 + sectionBundleInfo.H[7]) / scale2);
+            PointD pth8 = GeometryHelper.AdsPolar(pt02, GeometryHelper.DegreesToRadians(0), (geomBaseInfo.D3 / 2 + sectionBundleInfo.H[8]) / scale2);
+            PointD pt1 = GeometryHelper.AdsPolar(pth6, GeometryHelper.DegreesToRadians(0), 0);
+            PointD pt2 = GeometryHelper.AdsPolar(pth7, GeometryHelper.DegreesToRadians(0), 0);
+            PointD pt3 = GeometryHelper.AdsPolar(pth8, GeometryHelper.DegreesToRadians(0), 0);
+            double a1 = 2 * (pt1.X - pt2.X);
+            double b1 = 2 * (pt1.Y - pt2.Y);
+            double c1 = pt1.X * pt1.X - pt2.X * pt2.X + pt1.Y * pt1.Y - pt2.Y * pt2.Y;
+            double A1 = 2 * (pt3.X - pt2.X);
+            double B1 = 2 * (pt3.Y - pt2.Y);
+            double C1 = pt3.X * pt3.X - pt2.X * pt2.X + pt3.Y * pt3.Y - pt2.Y * pt2.Y;
+
+            double ptc4_Y = (A1 * c1 - a1 * C1) / (A1 * b1 - a1 * B1);
+            double ptc4_X = (c1 - b1 * ptc4_Y) / a1;
+
+            double rr4 = Math.Sqrt((pt2.X - ptc4_X) * (pt2.X - ptc4_X) + (pt2.Y - ptc4_Y) * (pt2.Y - ptc4_Y));
+
+            // 璁$畻 R2
+            pt1 = GeometryHelper.AdsPolar(pth12, GeometryHelper.DegreesToRadians(0), this.Dia / 2 / scale2);
+            a1 = 2 * (rr4 + ptc4_X - pt1.X);
+            b1 = (ptc4_Y - pt1.Y) * (ptc4_Y - pt1.Y) - rr4 * rr4 + (ptc4_X - pt1.X) * (ptc4_X - pt1.X);
+            r2 = (b1 / a1) * scale2;
+            r2 = Math.Round(r2, 2);
+            return r2;
+        }
+    }
+    public static class GeometryHelper
+    {
+        // 灏嗚搴︿粠搴﹁浆鎹负寮у害
+        public static double DegreesToRadians(double degrees)
+        {
+            return degrees * Math.PI / 180.0;
+        }
+
+        // 璁$畻鏋佸潗鏍囩偣
+        public static PointD AdsPolar(PointD startPoint, double angleInRadians, double distance)
+        {
+            double newX = startPoint.X + distance * Math.Cos(angleInRadians);
+            double newY = startPoint.Y + distance * Math.Sin(angleInRadians);
+            return new PointD(newX, newY);
+        }
+    }
+    public struct PointD
+    {
+        public double X { get; set; }
+        public double Y { get; set; }
+
+        public PointD(double x, double y)
+        {
+            X = x;
+            Y = y;
+        }
+
+        public override string ToString()
+        {
+            return $"({X}, {Y})";
+        }
+    }
     public class OutflowParasCalcReponse
     {
-        public bool IsSuccess { get; set; }  
+        public bool IsSuccess { get; set; }
         public double SectArea9 { get; set; } //9 鎴潰闈㈢Н
         public double SectArea10 { get; set; } //10 鎴潰闈㈢Н
     }
-   
 }
+    
+   
diff --git "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ctrlSetOutflowParas.Designer.cs" "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ctrlSetOutflowParas.Designer.cs"
index e798664..0d3e61a 100644
--- "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ctrlSetOutflowParas.Designer.cs"
+++ "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ctrlSetOutflowParas.Designer.cs"
@@ -33,6 +33,7 @@
             comboBoxType = new System.Windows.Forms.ComboBox();
             metroToolTip绗叚姝ユ彁绀� = new RLT.Controls.MetroToolTip();
             ribbonGroupBox1 = new RLT.Controls.RibbonGroupBox();
+            checkBox鍦嗗姬杩炴帴 = new System.Windows.Forms.CheckBox();
             btnNextStep = new RLT.Controls.ForeverButtonSticky();
             dungeonTabPage1 = new RLT.Controls.DungeonTabPage();
             tabPage1 = new System.Windows.Forms.TabPage();
@@ -63,7 +64,7 @@
             metroTile鍑哄彛鍥剧墖.PressBorderColor = System.Drawing.Color.FromArgb(65, 177, 225);
             metroTile鍑哄彛鍥剧墖.PressColor = System.Drawing.Color.FromArgb(65, 177, 225);
             metroTile鍑哄彛鍥剧墖.PressTextColor = System.Drawing.Color.White;
-            metroTile鍑哄彛鍥剧墖.Size = new System.Drawing.Size(294, 237);
+            metroTile鍑哄彛鍥剧墖.Size = new System.Drawing.Size(282, 209);
             metroTile鍑哄彛鍥剧墖.Style = RLT.Enum.Metro.Style.Light;
             metroTile鍑哄彛鍥剧墖.StyleManager = null;
             metroTile鍑哄彛鍥剧墖.TabIndex = 25;
@@ -82,9 +83,9 @@
             thunderGroupBox1.Controls.Add(metroTile鍑哄彛鍥剧墖);
             thunderGroupBox1.Font = new System.Drawing.Font("Tw Cen MT Condensed Extra Bold", 10F, System.Drawing.FontStyle.Bold);
             thunderGroupBox1.ForeColor = System.Drawing.Color.Black;
-            thunderGroupBox1.Location = new System.Drawing.Point(15, 41);
+            thunderGroupBox1.Location = new System.Drawing.Point(27, 63);
             thunderGroupBox1.Name = "thunderGroupBox1";
-            thunderGroupBox1.Size = new System.Drawing.Size(300, 262);
+            thunderGroupBox1.Size = new System.Drawing.Size(288, 231);
             thunderGroupBox1.TabIndex = 27;
             thunderGroupBox1.Text = " ";
             // 
@@ -92,7 +93,7 @@
             // 
             comboBoxType.FormattingEnabled = true;
             comboBoxType.Items.AddRange(new object[] { "涓績鍑哄彛", "渚ч潰鍑哄彛锛堟洸绾块摼鎺ワ級", "渚ч潰鍑哄彛锛堢洿绾块摼鎺ワ級" });
-            comboBoxType.Location = new System.Drawing.Point(37, 0);
+            comboBoxType.Location = new System.Drawing.Point(29, 0);
             comboBoxType.Name = "comboBoxType";
             comboBoxType.Size = new System.Drawing.Size(236, 23);
             comboBoxType.TabIndex = 26;
@@ -119,6 +120,7 @@
             ribbonGroupBox1.BorderColorB = System.Drawing.Color.FromArgb(174, 178, 172);
             ribbonGroupBox1.BorderColorC = System.Drawing.Color.FromArgb(194, 192, 200);
             ribbonGroupBox1.CompositingQualityType = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
+            ribbonGroupBox1.Controls.Add(checkBox鍦嗗姬杩炴帴);
             ribbonGroupBox1.Controls.Add(btnNextStep);
             ribbonGroupBox1.Controls.Add(dungeonTabPage1);
             ribbonGroupBox1.Controls.Add(mBtn鏇存柊妯″瀷);
@@ -135,6 +137,17 @@
             ribbonGroupBox1.TabIndex = 31;
             ribbonGroupBox1.Text = "鎵╂暎绠″弬鏁�";
             ribbonGroupBox1.TitleHeight = 30;
+            // 
+            // checkBox鍦嗗姬杩炴帴
+            // 
+            checkBox鍦嗗姬杩炴帴.AutoSize = true;
+            checkBox鍦嗗姬杩炴帴.Location = new System.Drawing.Point(220, 37);
+            checkBox鍦嗗姬杩炴帴.Name = "checkBox鍦嗗姬杩炴帴";
+            checkBox鍦嗗姬杩炴帴.Size = new System.Drawing.Size(87, 21);
+            checkBox鍦嗗姬杩炴帴.TabIndex = 75;
+            checkBox鍦嗗姬杩炴帴.Text = "鍦嗗姬杩炴帴";
+            checkBox鍦嗗姬杩炴帴.UseVisualStyleBackColor = true;
+            checkBox鍦嗗姬杩炴帴.CheckedChanged += checkBox鍦嗗姬杩炴帴_CheckedChanged;
             // 
             // btnNextStep
             // 
@@ -228,6 +241,7 @@
             Size = new System.Drawing.Size(335, 815);
             thunderGroupBox1.ResumeLayout(false);
             ribbonGroupBox1.ResumeLayout(false);
+            ribbonGroupBox1.PerformLayout();
             dungeonTabPage1.ResumeLayout(false);
             tabPage2.ResumeLayout(false);
             ResumeLayout(false);
@@ -246,5 +260,6 @@
         private ctrlSection910Posi ctrlSection910Posi1;
         private System.Windows.Forms.ComboBox comboBoxType;
         private RLT.Controls.ForeverButtonSticky btnNextStep;
+        private System.Windows.Forms.CheckBox checkBox鍦嗗姬杩炴帴;
     }
 }
diff --git "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ctrlSetOutflowParas.cs" "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ctrlSetOutflowParas.cs"
index 20d01f5..19e5177 100644
--- "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ctrlSetOutflowParas.cs"
+++ "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ctrlSetOutflowParas.cs"
@@ -18,7 +18,7 @@
             InitializeComponent();
 
             _sharp_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.鏈煡;
-      
+
 
             _parasControlCenter = new SetOutflowParasCtrl1() { Name = "SetOutflowParasCtrlCenter" };
             _parasControlCenter.OnRefreshShape += (para) =>
@@ -50,6 +50,25 @@
             };
             _parasControlCurve.Dock = DockStyle.Top;
 
+            _parasControlArcCenter = new SetOutflowParaArcCtrl() { Name = "SetOutflowParaArcCtrlCenter" };
+            _parasControlArcCenter.OnRefreshShape += (para) =>
+            {
+                if (OnRefreshShape2D != null)
+                    return OnRefreshShape2D(para);
+                else
+                    return false;
+            };
+            _parasControlArcCenter.Dock = DockStyle.Top;
+
+            _parasControlArcSide = new SetOutflowParaArcCtrl() { Name = "SetOutflowParaArcCtrlSide" };
+            _parasControlArcCenter.OnRefreshShape += (para) =>
+            {
+                if (OnRefreshShape2D != null)
+                    return OnRefreshShape2D(para);
+                else
+                    return false;
+            };
+            _parasControlArcSide.Dock = DockStyle.Top;
 
 
             this.ctrlSection910Posi1.OnMoveSectPosi += (sect_index, posi) =>
@@ -70,11 +89,16 @@
 
 
         //鎺т欢
+        //鏇茬嚎閾炬帴鎺т欢
         SetOutflowParasCtrl1 _parasControlCenter = null;
         SetOutflowParasCtrl2 _parasControlLine = null;
         SetOutflowParasCtrl1 _parasControlCurve = null;
+        //鍦嗗姬杩炴帴鎺т欢
+        SetOutflowParaArcCtrl _parasControlArcCenter = null;
+        SetOutflowParaArcCtrl _parasControlArcSide = null;
 
         DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle _sharp_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.鏈煡;
+        DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowLinkStyle _link_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowLinkStyle.鏇茬嚎;
         public DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle CurrentOutflowShapeStyle
         {
             get
@@ -88,6 +112,24 @@
                 return;
 
             tabPage1.Controls.Clear();
+
+            if (_link_type == eOutflowLinkStyle.鐩寸嚎鍦嗗姬 && _sharp_type != eOutflowShapeStyle.渚ч潰鍑哄彛_鐩寸嚎杩炴帴)
+            {
+                if (_sharp_type == eOutflowShapeStyle.涓績鍑哄彛)
+                {
+                    metroTile鍑哄彛鍥剧墖.BackgroundImage = GlobalResource.BuildImage("Central-exit.png", 878, 238);
+                    _parasControlArcCenter.SetA_state(false);
+                    tabPage1.Controls.Add(_parasControlArcCenter);
+                    return;
+                }
+                if (_sharp_type == eOutflowShapeStyle.渚ч潰鍑哄彛_鏇茬嚎杩炴帴)
+                {
+                    metroTile鍑哄彛鍥剧墖.BackgroundImage = GlobalResource.BuildImage("Central-exit.png", 878, 238);
+                    _parasControlArcSide.SetA_state(true);
+                    tabPage1.Controls.Add(_parasControlArcSide);
+                    return;
+                }
+            }
             switch (_sharp_type)
             {
                 case DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.涓績鍑哄彛:
@@ -108,16 +150,16 @@
                     throw new ArgumentException("Invalid control type");
             }
         }
- 
+
         ViewModel.HdrBaseInfo _hdrBaseInfo = null;
         ViewModel.GeomBaseInfo _geomBaseInfo = null;
         ViewModel.SectionBundleInfo _sectionBundleInfo = null;
-        public int  InitialParas(
+        public int InitialParas(
             ViewModel.HdrBaseInfo hdrBaseInfo,
             ViewModel.GeomBaseInfo geomBaseInfo,
             ViewModel.SectionBundleInfo sectionBundleInfo)
         {
-            if (IsSameBaseParas( hdrBaseInfo, geomBaseInfo, sectionBundleInfo) )
+            if (IsSameBaseParas(hdrBaseInfo, geomBaseInfo, sectionBundleInfo))
             {//鍒ゆ柇鏄惁淇敼浜�
                 return 0;//0琛ㄧず娌℃湁鍙樺寲
             }
@@ -127,20 +169,20 @@
 
             //鍑哄彛鐩村緞鏍囧噯鍖�
             double outer_dia = 4.5 * Math.Pow(hdrBaseInfo.Q / 3600 / hdrBaseInfo.n, 1 / 3.0) * 1000;
-
+            //渚ч潰鏇茬嚎
             var outflowParas3 = new OutflowParas();
             outflowParas3.Offset = ((int)((geomBaseInfo.D3 / 2 + sectionBundleInfo.H[8]) * 1.6 / 3 / 5) + 1) * 5;
             outflowParas3.H1 = 5;
             outflowParas3.H2 = 5;
             outflowParas3.Dia = GetStdDia(outer_dia);
-            double height3 =5 * (int)(((geomBaseInfo.D3 / 2 + sectionBundleInfo.H[8] / 2) * 1.5 + outflowParas3.Dia / 2) / 5 + 1);
+            double height3 = 5 * (int)(((geomBaseInfo.D3 / 2 + sectionBundleInfo.H[8] / 2) * 1.5 + outflowParas3.Dia / 2) / 5 + 1);
             outflowParas3.Heigh = height3;
             outflowParas3.Septalradius = 2;
             _parasControlCurve.InitialParas(hdrBaseInfo, geomBaseInfo, sectionBundleInfo);
             _parasControlCurve.IsInvokeRefreshShapeAble = false;
             _parasControlCurve.SetBindingData(outflowParas3);
             _parasControlCurve.IsInvokeRefreshShapeAble = true;
-
+            //涓績鍑哄彛
             var outflowParas1 = new OutflowParas();
             outflowParas1.Offset = 0;
             outflowParas1.H1 = 5;
@@ -153,9 +195,8 @@
             _parasControlCenter.IsInvokeRefreshShapeAble = false;
             _parasControlCenter.SetBindingData(outflowParas1);
             _parasControlCenter.IsInvokeRefreshShapeAble = true;
-            
-            
 
+            //渚ч潰鐩寸嚎
             var outflowParas2 = new OutflowParas();
             outflowParas2.Offset = (int)((geomBaseInfo.D3 + sectionBundleInfo.H[8]) / 2 + 0.5);
             outflowParas2.H1 = 5;
@@ -169,7 +210,39 @@
             _parasControlLine.SetBindingData(outflowParas2);
             _parasControlLine.IsInvokeRefreshShapeAble = true;
 
-            if(_sharp_type == eOutflowShapeStyle.鏈煡)
+            //鍦嗗姬涓績
+            var outflowParas4 = new OutflowParas();
+            outflowParas4.Offset = 0;
+            outflowParas4.H1 = 5;
+            outflowParas4.H2 = 5;
+            outflowParas4.Dia = GetStdDia(outer_dia);
+            double height4 = 5 * (int)((((geomBaseInfo.D3 / 2 + sectionBundleInfo.H[8] / 2) * 1.4141 + outflowParas4.Dia / 2) / 5) + 1);
+            outflowParas4.Heigh = height4;
+            outflowParas4.Septalradius = 3;
+            outflowParas4.R1 = (int)((outflowParas4.Dia * 11 / 10 / 10) + 1) * 10;
+            outflowParas4.R2 = (int)(outflowParas4.Dia * 3 / 4 / 10) * 10;
+            _parasControlArcCenter.InitialParas(hdrBaseInfo, geomBaseInfo, sectionBundleInfo);
+            _parasControlArcCenter.IsInvokeRefreshShapeAble = false;
+            _parasControlArcCenter.SetBindingData(outflowParas4);
+            _parasControlArcCenter.IsInvokeRefreshShapeAble = true;
+
+            //鍦嗗姬渚ч潰
+            var outflowParas5 = new OutflowParas();
+            outflowParas5.Offset = ((int)((geomBaseInfo.D3 / 2 + sectionBundleInfo.H[8]) * 1.6 / 3 / 5) + 1) * 5;
+            outflowParas5.H1 = 5;
+            outflowParas5.H2 = 5;
+            outflowParas5.Dia = GetStdDia(outer_dia);
+            double height5 = 5 * (int)(((geomBaseInfo.D3 / 2 + sectionBundleInfo.H[8] / 2) * 1.5 + outflowParas3.Dia / 2) / 5 + 1);
+            outflowParas5.Heigh = height5;
+            outflowParas5.Septalradius = 3;
+            outflowParas5.R1 = (int)(((geomBaseInfo.D3 / 2 + sectionBundleInfo.H[8]) * 2.0 / 10) + 1) * 10; ;
+            outflowParas5.R2 = outflowParas5.CalR2(hdrBaseInfo, geomBaseInfo, sectionBundleInfo);
+            _parasControlArcSide.InitialParas(hdrBaseInfo, geomBaseInfo, sectionBundleInfo);
+            _parasControlArcSide.IsInvokeRefreshShapeAble = false;
+            _parasControlArcSide.SetBindingData(outflowParas5);
+            _parasControlArcSide.IsInvokeRefreshShapeAble = true;
+
+            if (_sharp_type == eOutflowShapeStyle.鏈煡)
             {
                 _sharp_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.涓績鍑哄彛;
                 comboBoxType.SelectedIndex = 0;
@@ -190,7 +263,7 @@
             ViewModel.SectionBundleInfo sectionBundleInfo)
         {
             if (this._hdrBaseInfo == null)
-                return false ;
+                return false;
             if (this._geomBaseInfo == null)
                 return false;
             if (this._sectionBundleInfo == null)
@@ -221,7 +294,7 @@
             //                                    1100,1200,1300,1400,1500,1600,1800,2000,2200,2400,2600,2800,3000,
             //                                    3200,3400,3600,3800,4000,5000,100000};
             var stdDia = mm;
-            if (mm > 0 && mm < 7) stdDia = 6;                               
+            if (mm > 0 && mm < 7) stdDia = 6;
             if (mm >= 7 && mm < 9) stdDia = 8;
             if (mm >= 9 && mm < 11) stdDia = 10;
             if (mm >= 11 && mm < 17.5) stdDia = 15;
@@ -286,22 +359,41 @@
         {
             error = "";
             ViewModel.OutflowParas _outflowParas = null;
-            switch (_sharp_type)
+            if (_link_type == eOutflowLinkStyle.鐩寸嚎鍦嗗姬 && _sharp_type != eOutflowShapeStyle.渚ч潰鍑哄彛_鐩寸嚎杩炴帴)
             {
-                case DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.涓績鍑哄彛:
-                    if (_parasControlCenter == null)
+                if (_sharp_type == eOutflowShapeStyle.涓績鍑哄彛)
+                {
+                    if (_parasControlArcCenter == null)
                         return null;
-                    _outflowParas = _parasControlCenter.GetBindingData(out error);
-                    break;
-                case DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.渚ч潰鍑哄彛_鏇茬嚎杩炴帴:
-                    _outflowParas = _parasControlCurve.GetBindingData(out error);
-                    break;
-                case DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.渚ч潰鍑哄彛_鐩寸嚎杩炴帴:
-                    _outflowParas = _parasControlLine.GetBindingData(out error);
-                    break;
-                default:
-                    return null;
+                    _outflowParas = _parasControlArcCenter.GetBindingData(out error);
+                }
+                if (_sharp_type == eOutflowShapeStyle.渚ч潰鍑哄彛_鏇茬嚎杩炴帴)
+                {
+                    if (_parasControlArcSide == null)
+                        return null;
+                    _outflowParas = _parasControlArcSide.GetBindingData(out error);
+                }
             }
+            else
+            {
+                switch (_sharp_type)
+                {
+                    case DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.涓績鍑哄彛:
+                        if (_parasControlCenter == null)
+                            return null;
+                        _outflowParas = _parasControlCenter.GetBindingData(out error);
+                        break;
+                    case DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.渚ч潰鍑哄彛_鏇茬嚎杩炴帴:
+                        _outflowParas = _parasControlCurve.GetBindingData(out error);
+                        break;
+                    case DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.渚ч潰鍑哄彛_鐩寸嚎杩炴帴:
+                        _outflowParas = _parasControlLine.GetBindingData(out error);
+                        break;
+                    default:
+                        return null;
+                }
+            }
+
             if (_outflowParas == null)
             {
                 return null;
@@ -316,7 +408,7 @@
         {
             if (paras == null)
                 return;
-            if(_sectionBundleInfo == null)
+            if (_sectionBundleInfo == null)
             {
                 throw new Exception("鏈垵濮嬪寲ctrlSetOutflowParas鎺т欢");
             }
@@ -324,18 +416,22 @@
             var paras1 = new ViewModel.OutflowParas(paras);
             var paras2 = new ViewModel.OutflowParas(paras);
             var paras3 = new ViewModel.OutflowParas(paras);
+            var paras4 = new ViewModel.OutflowParas(paras);
+            var paras5 = new ViewModel.OutflowParas(paras);
             _parasControlCenter.SetBindingData(paras1);
             if (paras2.ShapeStyle == DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.涓績鍑哄彛)
             {
                 paras2.Offset = (int)((_geomBaseInfo.D3 + _sectionBundleInfo.H[8]) / 2 + 0.5);
             }
-            else if(paras3.ShapeStyle == eOutflowShapeStyle.渚ч潰鍑哄彛_鏇茬嚎杩炴帴)
+            else if (paras3.ShapeStyle == eOutflowShapeStyle.渚ч潰鍑哄彛_鏇茬嚎杩炴帴)
             {
                 paras3.Offset = (int)(((_geomBaseInfo.D3 / 2 + _sectionBundleInfo.H[8]) * 1.6 / 3 / 5) + 1) * 5;
             }
 
             _parasControlLine.SetBindingData(paras2);
             _parasControlCurve.SetBindingData(paras3);
+            _parasControlArcCenter.SetBindingData(paras4);
+            _parasControlArcSide.SetBindingData(paras5);
 
             if (_sharp_type == DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.涓績鍑哄彛)
             {
@@ -397,17 +493,32 @@
             var resp = OnRefreshShape3D(GetBindingData(out error));
             if (resp != null)
             {
-                if (_sharp_type == eOutflowShapeStyle.渚ч潰鍑哄彛_鐩寸嚎杩炴帴)
+                if (_link_type != eOutflowLinkStyle.鐩寸嚎鍦嗗姬 && _sharp_type != eOutflowShapeStyle.渚ч潰鍑哄彛_鐩寸嚎杩炴帴)
                 {
-                    _parasControlLine.SetBindingData(resp);
-                }
-                else if (_sharp_type == eOutflowShapeStyle.渚ч潰鍑哄彛_鏇茬嚎杩炴帴)
-                {
-                    _parasControlCurve.SetBindingData(resp);
+                    if (_sharp_type == eOutflowShapeStyle.涓績鍑哄彛)
+                    {
+                        _parasControlArcCenter.SetBindingData(resp);
+                    }
+                    else if (_sharp_type == eOutflowShapeStyle.渚ч潰鍑哄彛_鏇茬嚎杩炴帴)
+                    {
+                        _parasControlArcSide.SetBindingData(resp);
+                    }
+                    
                 }
                 else
                 {
-                    _parasControlCenter.SetBindingData(resp);
+                    if (_sharp_type == eOutflowShapeStyle.渚ч潰鍑哄彛_鐩寸嚎杩炴帴)
+                    {
+                        _parasControlLine.SetBindingData(resp);
+                    }
+                    else if (_sharp_type == eOutflowShapeStyle.渚ч潰鍑哄彛_鏇茬嚎杩炴帴)
+                    {
+                        _parasControlCurve.SetBindingData(resp);
+                    }
+                    else
+                    {
+                        _parasControlCenter.SetBindingData(resp);
+                    }
                 }
             }
         }
@@ -445,5 +556,21 @@
         {
             NextStep();
         }
+
+        private void checkBox鍦嗗姬杩炴帴_CheckedChanged(object sender, EventArgs e)
+        {
+            if (!checkBox鍦嗗姬杩炴帴.Checked)
+            {
+                _link_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowLinkStyle.鏇茬嚎;
+            }
+            else
+            {
+                _link_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowLinkStyle.鐩寸嚎鍦嗗姬;
+            }
+
+            InitialOutflowStyle();
+
+            RefreshModel();
+        }
     }
 }
diff --git "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ctrlSetOutflowParas.resx" "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ctrlSetOutflowParas.resx"
index 8665518..5d7ea85 100644
--- "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ctrlSetOutflowParas.resx"
+++ "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/ctrlSetOutflowParas.resx"
@@ -1,7 +1,7 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
 <root>
   <!--
-    Microsoft ResX Schema
+    Microsoft ResX Schema 
 
     Version 2.0
 
@@ -48,7 +48,7 @@
     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
diff --git "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/\345\217\202\346\225\260\346\216\247\344\273\266/SetOutflowParaArcCtrl.Designer.cs" "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/\345\217\202\346\225\260\346\216\247\344\273\266/SetOutflowParaArcCtrl.Designer.cs"
index b4a3564..45a5418 100644
--- "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/\345\217\202\346\225\260\346\216\247\344\273\266/SetOutflowParaArcCtrl.Designer.cs"
+++ "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/\345\217\202\346\225\260\346\216\247\344\273\266/SetOutflowParaArcCtrl.Designer.cs"
@@ -1,4 +1,4 @@
-锘縩amespace DPumpHydr.WinFrmUI.Volute.鍑烘按璁捐.鍙傛暟鎺т欢
+锘縩amespace DPumpHydr.WinFrmUI.Volute
 {
     partial class SetOutflowParaArcCtrl
     {
@@ -32,7 +32,7 @@
             skyLabelH = new RLT.Controls.SkyLabel();
             mlTextBoxEditH = new RLT.Controls.MaterialTextBoxEdit();
             skyLabel鍦嗗姬r2 = new RLT.Controls.SkyLabel();
-            mlTextBoxEdit鍦嗗姬r2 = new RLT.Controls.MaterialTextBoxEdit();
+            mlTextBoxEdit鍦嗗姬2 = new RLT.Controls.MaterialTextBoxEdit();
             skyLabel鍦嗗姬r1 = new RLT.Controls.SkyLabel();
             mlTextBoxEdit鍦嗗姬1 = new RLT.Controls.MaterialTextBoxEdit();
             skyLabel鎵╂暎绠″嚭鍙g洿寰� = new RLT.Controls.SkyLabel();
@@ -58,7 +58,7 @@
             thunderGroupBox2.Controls.Add(skyLabelH);
             thunderGroupBox2.Controls.Add(mlTextBoxEditH);
             thunderGroupBox2.Controls.Add(skyLabel鍦嗗姬r2);
-            thunderGroupBox2.Controls.Add(mlTextBoxEdit鍦嗗姬r2);
+            thunderGroupBox2.Controls.Add(mlTextBoxEdit鍦嗗姬2);
             thunderGroupBox2.Controls.Add(skyLabel鍦嗗姬r1);
             thunderGroupBox2.Controls.Add(mlTextBoxEdit鍦嗗姬1);
             thunderGroupBox2.Controls.Add(skyLabel鎵╂暎绠″嚭鍙g洿寰�);
@@ -123,6 +123,8 @@
             mlTextBoxEditH.TrailingIcon = null;
             mlTextBoxEditH.UseAccent = false;
             mlTextBoxEditH.UseSystemPasswordChar = false;
+            mlTextBoxEditH.Enter += mlTextBoxEditH_Enter;
+            mlTextBoxEditH.Leave += mlTextBoxEditH_Leave;
             // 
             // skyLabel鍦嗗姬r2
             // 
@@ -136,42 +138,44 @@
             skyLabel鍦嗗姬r2.Text = "璇疯緭鍏ュ渾寮2!";
             skyLabel鍦嗗姬r2.Visible = false;
             // 
-            // mlTextBoxEdit鍦嗗姬r2
+            // mlTextBoxEdit鍦嗗姬2
             // 
-            mlTextBoxEdit鍦嗗姬r2.AnimateReadOnly = false;
-            mlTextBoxEdit鍦嗗姬r2.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.None;
-            mlTextBoxEdit鍦嗗姬r2.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.None;
-            mlTextBoxEdit鍦嗗姬r2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
-            mlTextBoxEdit鍦嗗姬r2.CharacterCasing = System.Windows.Forms.CharacterCasing.Normal;
-            mlTextBoxEdit鍦嗗姬r2.Depth = 0;
-            mlTextBoxEdit鍦嗗姬r2.Enabled = false;
-            mlTextBoxEdit鍦嗗姬r2.Font = new System.Drawing.Font("Microsoft Sans Serif", 13F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
-            mlTextBoxEdit鍦嗗姬r2.HelperText = "璇疯緭鍏ユ纭渾寮2锛�";
-            mlTextBoxEdit鍦嗗姬r2.HideSelection = true;
-            mlTextBoxEdit鍦嗗姬r2.Hint = "鍦嗗姬r2(mm)";
-            mlTextBoxEdit鍦嗗姬r2.LeadingIcon = null;
-            mlTextBoxEdit鍦嗗姬r2.Location = new System.Drawing.Point(167, 49);
-            mlTextBoxEdit鍦嗗姬r2.MaxLength = 32767;
-            mlTextBoxEdit鍦嗗姬r2.MouseState = RLT.Helper.MaterialDrawHelper.MaterialMouseState.OUT;
-            mlTextBoxEdit鍦嗗姬r2.Name = "mlTextBoxEdit鍦嗗姬r2";
-            mlTextBoxEdit鍦嗗姬r2.NullValuePromptText = null;
-            mlTextBoxEdit鍦嗗姬r2.PasswordChar = '\0';
-            mlTextBoxEdit鍦嗗姬r2.PrefixSuffix = RLT.Controls.MaterialTextBoxEdit.PrefixSuffixTypes.Suffix;
-            mlTextBoxEdit鍦嗗姬r2.PrefixSuffixText = null;
-            mlTextBoxEdit鍦嗗姬r2.ReadOnly = false;
-            mlTextBoxEdit鍦嗗姬r2.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
-            mlTextBoxEdit鍦嗗姬r2.SelectedText = "";
-            mlTextBoxEdit鍦嗗姬r2.SelectionLength = 0;
-            mlTextBoxEdit鍦嗗姬r2.SelectionStart = 0;
-            mlTextBoxEdit鍦嗗姬r2.ShortcutsEnabled = true;
-            mlTextBoxEdit鍦嗗姬r2.Size = new System.Drawing.Size(134, 48);
-            mlTextBoxEdit鍦嗗姬r2.TabIndex = 71;
-            mlTextBoxEdit鍦嗗姬r2.TabStop = false;
-            mlTextBoxEdit鍦嗗姬r2.Text = "璇疯緭鍏ュ渾寮2";
-            mlTextBoxEdit鍦嗗姬r2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
-            mlTextBoxEdit鍦嗗姬r2.TrailingIcon = null;
-            mlTextBoxEdit鍦嗗姬r2.UseAccent = false;
-            mlTextBoxEdit鍦嗗姬r2.UseSystemPasswordChar = false;
+            mlTextBoxEdit鍦嗗姬2.AnimateReadOnly = false;
+            mlTextBoxEdit鍦嗗姬2.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.None;
+            mlTextBoxEdit鍦嗗姬2.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.None;
+            mlTextBoxEdit鍦嗗姬2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
+            mlTextBoxEdit鍦嗗姬2.CharacterCasing = System.Windows.Forms.CharacterCasing.Normal;
+            mlTextBoxEdit鍦嗗姬2.Depth = 0;
+            mlTextBoxEdit鍦嗗姬2.Enabled = false;
+            mlTextBoxEdit鍦嗗姬2.Font = new System.Drawing.Font("Microsoft Sans Serif", 13F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
+            mlTextBoxEdit鍦嗗姬2.HelperText = "璇疯緭鍏ユ纭渾寮2锛�";
+            mlTextBoxEdit鍦嗗姬2.HideSelection = true;
+            mlTextBoxEdit鍦嗗姬2.Hint = "鍦嗗姬r2(mm)";
+            mlTextBoxEdit鍦嗗姬2.LeadingIcon = null;
+            mlTextBoxEdit鍦嗗姬2.Location = new System.Drawing.Point(167, 49);
+            mlTextBoxEdit鍦嗗姬2.MaxLength = 32767;
+            mlTextBoxEdit鍦嗗姬2.MouseState = RLT.Helper.MaterialDrawHelper.MaterialMouseState.OUT;
+            mlTextBoxEdit鍦嗗姬2.Name = "mlTextBoxEdit鍦嗗姬2";
+            mlTextBoxEdit鍦嗗姬2.NullValuePromptText = null;
+            mlTextBoxEdit鍦嗗姬2.PasswordChar = '\0';
+            mlTextBoxEdit鍦嗗姬2.PrefixSuffix = RLT.Controls.MaterialTextBoxEdit.PrefixSuffixTypes.Suffix;
+            mlTextBoxEdit鍦嗗姬2.PrefixSuffixText = null;
+            mlTextBoxEdit鍦嗗姬2.ReadOnly = false;
+            mlTextBoxEdit鍦嗗姬2.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
+            mlTextBoxEdit鍦嗗姬2.SelectedText = "";
+            mlTextBoxEdit鍦嗗姬2.SelectionLength = 0;
+            mlTextBoxEdit鍦嗗姬2.SelectionStart = 0;
+            mlTextBoxEdit鍦嗗姬2.ShortcutsEnabled = true;
+            mlTextBoxEdit鍦嗗姬2.Size = new System.Drawing.Size(134, 48);
+            mlTextBoxEdit鍦嗗姬2.TabIndex = 71;
+            mlTextBoxEdit鍦嗗姬2.TabStop = false;
+            mlTextBoxEdit鍦嗗姬2.Text = "璇疯緭鍏ュ渾寮2";
+            mlTextBoxEdit鍦嗗姬2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+            mlTextBoxEdit鍦嗗姬2.TrailingIcon = null;
+            mlTextBoxEdit鍦嗗姬2.UseAccent = false;
+            mlTextBoxEdit鍦嗗姬2.UseSystemPasswordChar = false;
+            mlTextBoxEdit鍦嗗姬2.Enter += mlTextBoxEdit鍦嗗姬2_Enter;
+            mlTextBoxEdit鍦嗗姬2.Leave += mlTextBoxEdit鍦嗗姬2_Leave;
             // 
             // skyLabel鍦嗗姬r1
             // 
@@ -221,6 +225,7 @@
             mlTextBoxEdit鍦嗗姬1.UseAccent = false;
             mlTextBoxEdit鍦嗗姬1.UseSystemPasswordChar = false;
             mlTextBoxEdit鍦嗗姬1.Enter += mlTextBoxEdit鍦嗗姬1_Enter;
+            mlTextBoxEdit鍦嗗姬1.Leave += mlTextBoxEdit鍦嗗姬1_Leave;
             // 
             // skyLabel鎵╂暎绠″嚭鍙g洿寰�
             // 
@@ -269,6 +274,8 @@
             mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.TrailingIcon = null;
             mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.UseAccent = false;
             mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.UseSystemPasswordChar = false;
+            mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.Enter += mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰刜Enter;
+            mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.Leave += mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰刜Leave;
             // 
             // skyLabel涓績璺濈
             // 
@@ -329,6 +336,8 @@
             mlTextBoxEdit涓績璺濈.TrailingIcon = null;
             mlTextBoxEdit涓績璺濈.UseAccent = false;
             mlTextBoxEdit涓績璺濈.UseSystemPasswordChar = false;
+            mlTextBoxEdit涓績璺濈.Enter += mlTextBoxEdit涓績璺濈_Enter;
+            mlTextBoxEdit涓績璺濈.Leave += mlTextBoxEdit涓績璺濈_Leave;
             // 
             // mlTextBoxEdit鎵╂暎绠¢暱搴�
             // 
@@ -365,6 +374,8 @@
             mlTextBoxEdit鎵╂暎绠¢暱搴�.TrailingIcon = null;
             mlTextBoxEdit鎵╂暎绠¢暱搴�.UseAccent = false;
             mlTextBoxEdit鎵╂暎绠¢暱搴�.UseSystemPasswordChar = false;
+            mlTextBoxEdit鎵╂暎绠¢暱搴�.Enter += mlTextBoxEdit鎵╂暎绠¢暱搴Enter;
+            mlTextBoxEdit鎵╂暎绠¢暱搴�.Leave += mlTextBoxEdit鎵╂暎绠¢暱搴Leave;
             // 
             // thunderGroupBox1
             // 
@@ -420,6 +431,8 @@
             mlTextBoxEditr.TrailingIcon = null;
             mlTextBoxEditr.UseAccent = false;
             mlTextBoxEditr.UseSystemPasswordChar = false;
+            mlTextBoxEditr.Enter += mlTextBoxEditr_Enter;
+            mlTextBoxEditr.Leave += mlTextBoxEditr_Leave;
             // 
             // skyLabelr
             // 
@@ -462,7 +475,7 @@
         private RLT.Controls.SkyLabel skyLabelH;
         private RLT.Controls.MaterialTextBoxEdit mlTextBoxEditH;
         private RLT.Controls.SkyLabel skyLabel鍦嗗姬r2;
-        private RLT.Controls.MaterialTextBoxEdit mlTextBoxEdit鍦嗗姬r2;
+        private RLT.Controls.MaterialTextBoxEdit mlTextBoxEdit鍦嗗姬2;
         private RLT.Controls.ThunderGroupBox thunderGroupBox1;
         private RLT.Controls.MaterialTextBoxEdit mlTextBoxEditr;
         private RLT.Controls.SkyLabel skyLabelr;
diff --git "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/\345\217\202\346\225\260\346\216\247\344\273\266/SetOutflowParaArcCtrl.cs" "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/\345\217\202\346\225\260\346\216\247\344\273\266/SetOutflowParaArcCtrl.cs"
index bd11cab..a65cac6 100644
--- "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/\345\217\202\346\225\260\346\216\247\344\273\266/SetOutflowParaArcCtrl.cs"
+++ "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/\345\217\202\346\225\260\346\216\247\344\273\266/SetOutflowParaArcCtrl.cs"
@@ -1,4 +1,5 @@
 锘縰sing DPumpHydr.WinFrmUI.RLT.Controls;
+using DPumpHydr.WinFrmUI.Volute.ViewModel;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -9,7 +10,7 @@
 using System.Threading.Tasks;
 using System.Windows.Forms;
 
-namespace DPumpHydr.WinFrmUI.Volute.鍑烘按璁捐.鍙傛暟鎺т欢
+namespace DPumpHydr.WinFrmUI.Volute
 {
     public partial class SetOutflowParaArcCtrl : UserControl
     {
@@ -17,15 +18,257 @@
         {
             InitializeComponent();
         }
+        public ViewModel.OutflowParas GetBindingData(out string error)
+        {
+            error = "";
+            if (!Verify(out error))
+            {
+                return null;
+            }
+            if (_otuflowParas == null)
+                _otuflowParas = new OutflowParas();
+            if (string.IsNullOrEmpty(mlTextBoxEditH.Text))
+            {
+                _otuflowParas.H1 = 0;
+                _otuflowParas.H2 = 0;
+            }
+            else
+            {
+                _otuflowParas.H1 = Convert.ToDouble(mlTextBoxEditH.Text);
+                _otuflowParas.H2 = Convert.ToDouble(mlTextBoxEditH.Text);
+            }
+            _otuflowParas.Heigh = Convert.ToDouble(mlTextBoxEdit鎵╂暎绠¢暱搴�.Text);
+            _otuflowParas.Septalradius = Convert.ToDouble(mlTextBoxEditr.Text);
+            _otuflowParas.Dia = Convert.ToDouble(mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.Text);
+            _otuflowParas.Offset = Convert.ToDouble(mlTextBoxEdit涓績璺濈.Text);
+            _otuflowParas.R1 = Convert.ToDouble(mlTextBoxEdit鍦嗗姬1.Text);
+            _otuflowParas.R2 = Convert.ToDouble(mlTextBoxEdit鍦嗗姬2.Text);
+            return _otuflowParas;
+        }
+        public bool Verify(out string error)
+        {
+            error = "";
+            bool isOk = true;
+            if (string.IsNullOrEmpty(mlTextBoxEdit鎵╂暎绠¢暱搴�.Text) || mlTextBoxEdit鎵╂暎绠¢暱搴�.Text == "璇疯緭鍏ユ墿鏁g闀垮害" || double.Parse(mlTextBoxEdit鎵╂暎绠¢暱搴�.Text) == 0)
+            {
+                error = "璇疯緭鍏ユ墿鏁g闀垮害锛�";
+                isOk = false;
+                mlTextBoxEdit鎵╂暎绠¢暱搴�.TrailingIcon = GlobalResource.GetTipTrailingIcon();
+                skyLabel鎵╂暎绠¢暱搴�.Visible = true;
+            }
+            if (string.IsNullOrEmpty(mlTextBoxEdit涓績璺濈.Text) || mlTextBoxEdit涓績璺濈.Text == "璇疯緭鍏ヤ腑蹇冭窛绂�")
+            {
+                error = "璇疯緭鍏ヤ腑蹇冭窛绂伙紒";
+                isOk = false;
+                mlTextBoxEdit涓績璺濈.TrailingIcon = GlobalResource.GetTipTrailingIcon();
+                skyLabel涓績璺濈.Visible = true;
+            }
+            if (string.IsNullOrEmpty(mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.Text) || mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.Text == "璇疯緭鍏ユ墿鏁g鍑哄彛鐩村緞" || double.Parse(mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.Text) == 0)
+            {
+                error = "璇疯緭鍏ユ墿鏁g鍑哄彛鐩村緞锛�";
+                isOk = false;
+                mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.TrailingIcon = GlobalResource.GetTipTrailingIcon();
+                skyLabel鎵╂暎绠″嚭鍙g洿寰�.Visible = true;
+            }
+            if (string.IsNullOrEmpty(mlTextBoxEditr.Text) || mlTextBoxEditr.Text == "璇疯緭鍏ラ殧鑸�" || double.Parse(mlTextBoxEditr.Text) == 0)
+            {
+                error = "璇疯緭鍏ラ殧鑸屽渾瑙掑崐寰勶紒";
+                isOk = false;
+                mlTextBoxEditr.TrailingIcon = GlobalResource.GetTipTrailingIcon();
+                mlTextBoxEditr.Visible = true;
+            }
+            if (string.IsNullOrEmpty(mlTextBoxEdit鍦嗗姬1.Text) || mlTextBoxEdit鍦嗗姬1.Text == "璇疯緭鍏ュ渾寮1" || double.Parse(mlTextBoxEdit鍦嗗姬1.Text) == 0)
+            {
+                error = "璇疯緭鍏ュ渾寮1锛�";
+                isOk = false;
+                mlTextBoxEdit鍦嗗姬1.TrailingIcon = GlobalResource.GetTipTrailingIcon();
+                mlTextBoxEdit鍦嗗姬1.Visible = true;
+            }
+            if (string.IsNullOrEmpty(mlTextBoxEdit鍦嗗姬2.Text) || mlTextBoxEdit鍦嗗姬2.Text == "璇疯緭鍏ュ渾寮2" || double.Parse(mlTextBoxEdit鍦嗗姬2.Text) == 0)
+            {
+                error = "璇疯緭鍏ュ渾寮2锛�";
+                isOk = false;
+                mlTextBoxEdit鍦嗗姬2.TrailingIcon = GlobalResource.GetTipTrailingIcon();
+                mlTextBoxEdit鍦嗗姬2.Visible = true;
+            }
+            if (mlTextBoxEditH.Text == "璇疯緭鍏ュ渾寮1")
+            {
+                error = "璇疯緭鍏ラ殧鑸屽渾瑙掑崐寰勶紒";
+                isOk = false;
+                mlTextBoxEditH.TrailingIcon = GlobalResource.GetTipTrailingIcon();
+                mlTextBoxEditH.Visible = true;
+            }
+            return isOk;
+        }
+        public Func<ViewModel.OutflowParas, bool> OnRefreshShape = null;
 
+        public void SetA_state(bool isEnabled)
+        {
+            if (!isEnabled)
+            {
+                mlTextBoxEdit涓績璺濈.Text = 0.ToString();
+                mlTextBoxEdit涓績璺濈.Enabled = false;
+            }
+            else
+            {
+                mlTextBoxEdit涓績璺濈.Enabled = true;
+            }
+        }
+        ViewModel.OutflowParas _otuflowParas = null;
+        ViewModel.HdrBaseInfo _hdrBaseInfo = null;
+        ViewModel.GeomBaseInfo _geomBaseInfo = null;
+        ViewModel.SectionBundleInfo _sectionBundleInfo = null;
+        public bool IsInvokeRefreshShapeAble { get; set; } = true;
+        public void InitialParas(
+              ViewModel.HdrBaseInfo hdrBaseInfo,
+              ViewModel.GeomBaseInfo geomBaseInfo,
+              ViewModel.SectionBundleInfo sectionBundleInfo)
+        {
+            _hdrBaseInfo = hdrBaseInfo;
+            _geomBaseInfo = geomBaseInfo;
+            _sectionBundleInfo = sectionBundleInfo;
+        }
+        public void SetBindingData(ViewModel.OutflowParasCalcReponse reponse)
+        {
+
+        }
+        public void SetBindingData(ViewModel.OutflowParas outflowParas)
+        {
+            if (outflowParas == null)
+            {
+                return;
+            }
+            _otuflowParas = outflowParas;
+            mlTextBoxEdit鍦嗗姬1.Text = outflowParas.R1.ToString();
+            mlTextBoxEdit鍦嗗姬2.Text = outflowParas.R2.ToString();
+            mlTextBoxEdit鎵╂暎绠¢暱搴�.Text = outflowParas.Heigh.ToString();
+            mlTextBoxEditH.Text = outflowParas.H1.ToString();
+            mlTextBoxEditr.Text = outflowParas.Septalradius.ToString();
+            mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.Text = outflowParas.Dia.ToString();
+            mlTextBoxEdit涓績璺濈.Text = outflowParas.Offset.ToString();
+        }
         private void mlTextBoxEdit鍦嗗姬1_Enter(object sender, EventArgs e)
         {
-            if (sender is MaterialTextBoxEdit materialTextBoxEdit)
+            skyLabel鍦嗗姬r1.Visible = false;
+            mlTextBoxEdit鍦嗗姬1.TrailingIcon = null;
+            if (mlTextBoxEdit鍦嗗姬1.Text == "璇疯緭鍏ュ渾寮1")
             {
-                if (materialTextBoxEdit.Text.Contains("璇疯緭鍏�"))
-                {
-                    materialTextBoxEdit.Text = "";
-                }
+                mlTextBoxEdit鍦嗗姬1.Text = "";
+            }
+        }
+        private void mlTextBoxEdit鍦嗗姬2_Enter(object sender, EventArgs e)
+        {
+            skyLabel鍦嗗姬r2.Visible = false;
+            mlTextBoxEdit鍦嗗姬2.TrailingIcon = null;
+            if (mlTextBoxEdit鍦嗗姬2.Text == "璇疯緭鍏ュ渾寮2")
+            {
+                mlTextBoxEdit鍦嗗姬2.Text = "";
+            }
+        }
+
+        private void mlTextBoxEditH_Enter(object sender, EventArgs e)
+        {
+            skyLabelH.Visible = false;
+            mlTextBoxEditH.TrailingIcon = null;
+            if (mlTextBoxEditH.Text == "璇疯緭鍏")
+            {
+                mlTextBoxEditH.Text = "";
+            }
+        }
+
+        private void mlTextBoxEdit涓績璺濈_Enter(object sender, EventArgs e)
+        {
+            skyLabel涓績璺濈.Visible = false;
+            mlTextBoxEdit涓績璺濈.TrailingIcon = null;
+            if (mlTextBoxEdit涓績璺濈.Text == "璇疯緭鍏")
+            {
+                mlTextBoxEdit涓績璺濈.Text = "";
+            }
+        }
+
+        private void mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰刜Enter(object sender, EventArgs e)
+        {
+            skyLabel鎵╂暎绠″嚭鍙g洿寰�.Visible = false;
+            mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.TrailingIcon = null;
+            if (mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.Text == "璇疯緭鍏ユ墿鏁g鍑哄彛鐩村緞")
+            {
+                mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.Text = "";
+            }
+        }
+
+        private void mlTextBoxEdit鎵╂暎绠¢暱搴Enter(object sender, EventArgs e)
+        {
+            skyLabel鎵╂暎绠¢暱搴�.Visible = false;
+            mlTextBoxEdit鎵╂暎绠¢暱搴�.TrailingIcon = null;
+            if (mlTextBoxEdit鎵╂暎绠¢暱搴�.Text == "璇疯緭鍏ユ墿鏁g闀垮害")
+            {
+                mlTextBoxEdit鎵╂暎绠¢暱搴�.Text = "";
+            }
+        }
+
+        private void mlTextBoxEditr_Enter(object sender, EventArgs e)
+        {
+            skyLabelr.Visible = false;
+            mlTextBoxEditr.TrailingIcon = null;
+            if (mlTextBoxEditr.Text == "璇疯緭鍏ラ殧鑸�")
+            {
+                mlTextBoxEditr.Text = "";
+            }
+        }
+
+        private void mlTextBoxEdit鍦嗗姬1_Leave(object sender, EventArgs e)
+        {
+            if (string.IsNullOrEmpty(mlTextBoxEdit鍦嗗姬1.Text) || double.Parse(mlTextBoxEdit鍦嗗姬1.Text) < 0)
+            {
+                mlTextBoxEdit鍦嗗姬1.Text = "璇疯緭鍏ュ渾寮1";
+            }
+        }
+
+        private void mlTextBoxEdit鍦嗗姬2_Leave(object sender, EventArgs e)
+        {
+            if (string.IsNullOrEmpty(mlTextBoxEdit鍦嗗姬2.Text) || double.Parse(mlTextBoxEdit鍦嗗姬2.Text) < 0)
+            {
+                mlTextBoxEdit鍦嗗姬2.Text = "璇疯緭鍏ュ渾寮2";
+            }
+        }
+
+        private void mlTextBoxEditH_Leave(object sender, EventArgs e)
+        {
+            if (string.IsNullOrEmpty(mlTextBoxEditH.Text) || double.Parse(mlTextBoxEditH.Text) < 0)
+            {
+                mlTextBoxEditH.Text = "璇疯緭鍏";
+            }
+        }
+
+        private void mlTextBoxEdit涓績璺濈_Leave(object sender, EventArgs e)
+        {
+            if (string.IsNullOrEmpty(mlTextBoxEdit涓績璺濈.Text) || double.Parse(mlTextBoxEdit涓績璺濈.Text) < 0)
+            {
+                mlTextBoxEdit涓績璺濈.Text = "璇疯緭鍏";
+            }
+        }
+
+        private void mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰刜Leave(object sender, EventArgs e)
+        {
+            if (string.IsNullOrEmpty(mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.Text) || double.Parse(mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.Text) < 0)
+            {
+                mlTextBoxEdit鎵╂暎绠″嚭鍙g洿寰�.Text = "璇疯緭鍏ユ墿鏁g鍑哄彛鐩村緞";
+            }
+        }
+
+        private void mlTextBoxEdit鎵╂暎绠¢暱搴Leave(object sender, EventArgs e)
+        {
+            if (string.IsNullOrEmpty(mlTextBoxEdit鎵╂暎绠¢暱搴�.Text) || double.Parse(mlTextBoxEdit鎵╂暎绠¢暱搴�.Text) < 0)
+            {
+                mlTextBoxEdit鎵╂暎绠¢暱搴�.Text = "璇疯緭鍏ユ墿鏁g闀垮害";
+            }
+        }
+
+        private void mlTextBoxEditr_Leave(object sender, EventArgs e)
+        {
+            if (string.IsNullOrEmpty(mlTextBoxEditr.Text) || double.Parse(mlTextBoxEditr.Text) < 0)
+            {
+                mlTextBoxEditr.Text = "璇疯緭鍏ラ殧鑸�";
             }
         }
     }
diff --git "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/\345\217\202\346\225\260\346\216\247\344\273\266/SetOutflowParasCtrl1.Designer.cs" "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/\345\217\202\346\225\260\346\216\247\344\273\266/SetOutflowParasCtrl1.Designer.cs"
index dc2b8e2..a748b77 100644
--- "a/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/\345\217\202\346\225\260\346\216\247\344\273\266/SetOutflowParasCtrl1.Designer.cs"
+++ "b/WinFrmUI/DPumpHydr.WinFrmUI.Volute/\345\207\272\346\260\264\350\256\276\350\256\241/\345\217\202\346\225\260\346\216\247\344\273\266/SetOutflowParasCtrl1.Designer.cs"
@@ -575,7 +575,7 @@
             mlTextBoxEdith1.Size = new System.Drawing.Size(90, 48);
             mlTextBoxEdith1.TabIndex = 28;
             mlTextBoxEdith1.TabStop = false;
-            mlTextBoxEdith1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+            mlTextBoxEdith1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
             mlTextBoxEdith1.TrailingIcon = null;
             mlTextBoxEdith1.UseAccent = false;
             mlTextBoxEdith1.UseSystemPasswordChar = false;
diff --git "a/\346\265\213\350\257\225\345\217\202\346\225\260.xls" "b/\346\265\213\350\257\225\345\217\202\346\225\260.xls"
index fc849eb..619dfec 100644
--- "a/\346\265\213\350\257\225\345\217\202\346\225\260.xls"
+++ "b/\346\265\213\350\257\225\345\217\202\346\225\260.xls"
Binary files differ

--
Gitblit v1.9.3