chenn
2025-03-28 9dba1b6adc0bbb4aa8cc531f4e6d822bf1a56be3
WinFrmUI/DPumpHydr.WinFrmUI.Volute/¶ÏÃæÉè¼Æ/ctrlSectionBundleInfo.cs
@@ -7,9 +7,10 @@
using System.Linq;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using DPumpHydr.WinFrmUI.RLT.Controls;
using DPumpHydr.WinFrmUI.RLT.Controls;
using DPumpHydr.WinFrmUI.Volute.ViewModel; 
namespace DPumpHydr.WinFrmUI.Volute
@@ -168,25 +169,40 @@
        ViewModel.SectionBundleInfo _sectionBundleInfo = null;
        ViewModel.HdrBaseInfo _hdrBaseInfo = null;
        ViewModel.GeomBaseInfo _geomBaseInfo = null;
        public void SetBindingData(ViewModel.SectionBundleInfo sectionBundle_info)
        {
            _sectionBundleInfo = sectionBundle_info;
        }
        /// <summary>
        /// æ˜¾ç¤ºç•Œé¢
        /// </summary>
        /// <param name="base_info">基本参数</param>
        /// <param name="geom_info">基圆参数</param>
        /// <param name="step_direction">前进/后退</param>
        /// <param name="isRefreshModel">是否需要覆盖断面参数</param>
        public void ShowPage(
            ViewModel.HdrBaseInfo base_info,
            ViewModel.GeomBaseInfo geom_info,
            DPumpHydr.ViewModel.eWizardStepDiretion step_direction,bool isxml)
            DPumpHydr.ViewModel.eWizardStepDiretion step_direction, bool isRefreshModel = false)
        {
            if (step_direction == DPumpHydr.ViewModel.eWizardStepDiretion.后退)
            {
                return;
            }
            this._hdrBaseInfo = base_info;
            this._geomBaseInfo = geom_info;
            if (isxml)
            if (_hdrBaseInfo == null && _geomBaseInfo == null)
            {
                _hdrBaseInfo = base_info;
                _geomBaseInfo = geom_info;
            }
            if (!isRefreshModel)
            {
                return;
            }
            if (_sectionBundleInfo == null)
            {
                this._hdrBaseInfo = base_info;
                this._geomBaseInfo = geom_info;
                _sectionBundleInfo = new ViewModel.SectionBundleInfo();
                _sectionBundleInfo.BaseWidth = _geomBaseInfo.B3;
@@ -199,13 +215,40 @@
                if (Math.Abs(_sectionBundleInfo.BaseWidth - _geomBaseInfo.B3) < 1 &&
                    Math.Abs(_sectionBundleInfo.BaseCircleRadius - _geomBaseInfo.D3 / 2) < 1)
                {
                    _sectionBundleInfo.BaseWidth = _geomBaseInfo.B3;
                    _sectionBundleInfo.BaseCircleRadius = _geomBaseInfo.D3 / 2;
                    RefreshShape(_sectionBundleInfo);
                    if (_hdrBaseInfo.n != base_info.n || _hdrBaseInfo.Q != base_info.Q || _hdrBaseInfo.H != base_info.H || _hdrBaseInfo.IsSXB != base_info.IsSXB)
                    {
                        this._hdrBaseInfo = base_info;
                        this._geomBaseInfo = geom_info;
                        _sectionBundleInfo.InitialK3(this._hdrBaseInfo, this._geomBaseInfo);
                        RefreshAllSectPara(_sectionBundleInfo);
                        _sectionBundleInfo.RecalculateArea(this._hdrBaseInfo, this._geomBaseInfo);
                        RefrehSectBundlePara();
                        if (OnRefreshShape != null)
                        {
                            ViewModel.SectionBundleInfo paras = GetBindingData(out string error);
                            if (paras == null)
                                return;
                            //textBox割舌角度
                            OnRefreshShape.Invoke(paras);
                        }
                        //RefreshShape(_sectionBundleInfo);
                    }
                    else
                    {
                        this._hdrBaseInfo = base_info;
                        this._geomBaseInfo = geom_info;
                        RefreshShape(_sectionBundleInfo);
                    }
                    return;
                }
            }
            RefreshAllSectPara(_sectionBundleInfo);
@@ -225,6 +268,8 @@
            this.textBoxK3.Text = _sectionBundleInfo.K3.ToString();
            this.textBoxV3.Text = _sectionBundleInfo.V3.ToString();
            RefrehSectBundlePara();
            if (_sectionBundleInfo.ShapeType == eSectionShapeType.对称)
            {
                RBtn断面对称梯形.Checked = true;
@@ -243,8 +288,6 @@
                RBtn不对称梯形.Checked = false;
                RBtn矩形.Checked = true;
            }
            RefrehSectBundlePara();
        }
        //改面积
        public void RefreshSingleSectArea(int sectIndex, double area)
@@ -290,13 +333,15 @@
            _sectionBundleInfo.V3 = Convert.ToDouble(this.textBoxV3.Text);
            for (var argument = 1; argument <= 8; argument++)
            {
            {//skyTextBox断面H18
                var controlname_y1 = $"skyTextBox断面y1{argument}";
                var controlname_r1 = $"skyTextBox断面r1{argument}";
                var controlname断面面积 = $"skyTextBox断面面积{argument}";
                var controlnameh = $"skyTextBox断面H1{argument}";
                SkyTextBox controlY1 = this.Controls.Find(controlname_y1, true).FirstOrDefault() as SkyTextBox;
                SkyTextBox controlR1 = this.Controls.Find(controlname_r1, true).FirstOrDefault() as SkyTextBox;
                SkyTextBox control断面面积 = this.Controls.Find(controlname断面面积, true).FirstOrDefault() as SkyTextBox;
                SkyTextBox controlH = this.Controls.Find(controlnameh, true).FirstOrDefault() as SkyTextBox;
                if (controlY1 != null)
                {
                    _sectionBundleInfo.GaMa_Left[argument] = Convert.ToDouble(controlY1.Text);
@@ -311,6 +356,9 @@
                if (control断面面积 != null)
                    _sectionBundleInfo.Area[argument] = Convert.ToDouble(control断面面积.Text);
                if (controlH != null)
                    _sectionBundleInfo.H[argument] = Convert.ToDouble(controlH.Text);
            }
@@ -326,13 +374,13 @@
                error = "请输入必填项!";
                isOk = false;
            }
            if (string.IsNullOrEmpty(skyTextBox断面y18.Text) || double.Parse(skyTextBox断面y18.Text) <= 0)
            if (string.IsNullOrEmpty(skyTextBox断面y18.Text) || (!RBtn矩形.Checked && double.Parse(skyTextBox断面y18.Text) == 0) || double.Parse(skyTextBox断面y18.Text) < 0)
            {
                error = "请输入必填项!";
                isOk = false;
            }
            if (string.IsNullOrEmpty(skyTextBox断面r18.Text) || double.Parse(skyTextBox断面r18.Text) <= 0)
            if (string.IsNullOrEmpty(skyTextBox断面r18.Text) || (!RBtn矩形.Checked && double.Parse(skyTextBox断面r18.Text) == 0) || double.Parse(skyTextBox断面y18.Text) < 0)
            {
                error = "请输入必填项!";
                isOk = false;
@@ -419,7 +467,22 @@
                int index = Convert.ToInt32(lastChar);
                if (!double.TryParse(skytextBox.Text, out double result) && !string.IsNullOrEmpty(skytextBox.Text))
                {
                    result = _sectionBundleInfo.GaMa_Left[index];
                    skytextBox.Text = _sectionBundleInfo.GaMa_Left[index].ToString();
                }else if(result>45)
                {
                    MessageBox.Show("请输入小于45度的角度");
                    skytextBox.Text = _sectionBundleInfo.GaMa_Left[index].ToString();
                }
                else
                {
                    //var initialR = _sectionBundleInfo.CalInitialR(_hdrBaseInfo, _geomBaseInfo);
                    var height = _sectionBundleInfo.CalcHeight(_geomBaseInfo, index, result, _sectionBundleInfo.R_Left[index]);
                    var R = _sectionBundleInfo.CheckChamferR(height, index, result, _sectionBundleInfo.R_Left[index]);
                    SkyTextBox controlh1 = this.Controls.Find($"skyTextBox断面H1{index}", true).FirstOrDefault() as SkyTextBox;
                    SkyTextBox controlr1 = this.Controls.Find($"skyTextBox断面r1{index}", true).FirstOrDefault() as SkyTextBox;
                    controlh1.Text = height.ToString();
                    controlr1.Text = R.ToString();
                }
            }
        }
@@ -434,11 +497,16 @@
                {
                    skytextBox.Text = _sectionBundleInfo.GaMa_Right[index].ToString();
                }
                if (string.IsNullOrEmpty(skytextBox.Text))
                if (string.IsNullOrEmpty(skytextBox.Text) || Convert.ToDouble(skytextBox.Text) == 0)
                {
                    MessageBox.Show("r不合理!请重新输入");
                }
                double v = 0;
                if (!double.TryParse(skytextBox.Text, out v))
                {
                    MessageBox.Show("请输入数字格式!");
                    return;
                }
                if (Convert.ToDouble(skytextBox.Text) != _sectionBundleInfo.R_Left[index])
                {
                    Judgment_R(index);
@@ -451,23 +519,51 @@
        }
        public bool Judgment_R(int index)
        private bool Judgment_R(int index)
        {
            bool isreasonable = true;
            SkyTextBox controlr1 = this.Controls.Find($"skyTextBox断面r1{index}", true).FirstOrDefault() as SkyTextBox;
            SkyTextBox controlGaMa1 = this.Controls.Find($"skyTextBox断面y1{index}", true).FirstOrDefault() as SkyTextBox;
            SkyTextBox controlh1 = this.Controls.Find($"skyTextBox断面H1{index}", true).FirstOrDefault() as SkyTextBox;
            //目前这个只检测对称的 b3-2(r1-(tan(Gama1)*(h-r1))) //若不对称  b3-(r1-(tan(Gama1)*(h-r1)))-(r2-(tan(Gama2)*(h-r2)))
            var a = _sectionBundleInfo.BaseWidth - 2 * (Convert.ToDouble(controlr1.Text) - (Math.Tan(Convert.ToDouble(controlGaMa1.Text) * Math.PI / 180) * (Convert.ToDouble(controlh1.Text) - Convert.ToDouble(controlr1.Text))));//_sectionBundleInfo.R_out/200
            if ((!RBtn矩形.Checked && _sectionBundleInfo.BaseWidth-2*(Convert.ToDouble(controlr1.Text) - ( Math.Tan(Convert.ToDouble(controlGaMa1.Text) * Math.PI / 180)* (Convert.ToDouble(controlh1.Text)- Convert.ToDouble(controlr1.Text)))) < 10) || Convert.ToDouble(controlr1.Text) == 0)
            if (string.IsNullOrEmpty(controlr1.Text))
                return true;
            if (string.IsNullOrEmpty(controlGaMa1.Text))
                return true;
            if (string.IsNullOrEmpty(controlh1.Text))
                return true;
            if (RBtn矩形.Checked)
            {
                controlr1.BackColor = Color.OrangeRed;
                MessageBox.Show("r不合理!请重新输入");
                if (Convert.ToDouble(controlh1.Text) - Convert.ToDouble(controlr1.Text) < 1 || _sectionBundleInfo.BaseWidth - (Convert.ToDouble(controlr1.Text) * 2) < 1)
                {
                    controlr1.BackColor = Color.OrangeRed;
                    MessageBox.Show("r不合理!请重新输入");
                }
                else
                {
                    controlr1.BackColor = Color.White;
                }
            }
            else
            {
                controlr1.BackColor = Color.White;
                //目前这个只检测对称的 //若不对称更换半径角度等参数重新计算另一边x
                var x = Math.Tan(Convert.ToDouble(controlGaMa1.Text) * Math.PI / 180) * Convert.ToDouble(controlh1.Text)
                             - (Math.Tan(Convert.ToDouble(controlGaMa1.Text) * Math.PI / 180) * Math.Tan(Convert.ToDouble(controlGaMa1.Text) / 2 * Math.PI / 180) * Convert.ToDouble(controlr1.Text))
                             - (Math.Tan(Convert.ToDouble(controlGaMa1.Text) * Math.PI / 180) * Convert.ToDouble(controlr1.Text)) - Convert.ToDouble(controlr1.Text);
                var c = _sectionBundleInfo.R_out / 1000;
                var TopWidth = _sectionBundleInfo.BaseWidth + (2 * x);
                var Slash = (Convert.ToDouble(controlh1.Text) - Convert.ToDouble(controlr1.Text) - (Math.Sin(Convert.ToDouble(controlGaMa1.Text) * Math.PI / 180) * Convert.ToDouble(controlr1.Text))) / Math.Cos(Convert.ToDouble(controlGaMa1.Text) * Math.PI / 180);
                if ((!RBtn矩形.Checked && (TopWidth < c || Slash < c - 0.1))) //
                {
                    controlr1.BackColor = Color.OrangeRed;
                    MessageBox.Show("r不合理!请重新输入");
                }
                else
                {
                    controlr1.BackColor = Color.White;
                }
            }
            return isreasonable;
        }
@@ -525,7 +621,9 @@
        {
            if (RBtn断面对称梯形.Checked)
            {
                skyTextBox断面y18.Enabled = true;
                RefrehSectBundlePara();
                RefreshShape(_sectionBundleInfo);
                //skyTextBox断面y18.Enabled = true;
                //skyTextBox断面r18.Enabled = false;
            }
        }
@@ -534,7 +632,9 @@
        {
            if (RBtn不对称梯形.Checked)
            {
                skyTextBox断面y18.Enabled = true;
                RefrehSectBundlePara();
                RefreshShape(_sectionBundleInfo);
                //skyTextBox断面y18.Enabled = true;
                //skyTextBox断面r18.Enabled = true;
            }
        }
@@ -551,7 +651,7 @@
                return;
            var g = 9.81;
            this.textBoxV3.Text = Math.Round(K3 * Math.Sqrt(2 * g * _hdrBaseInfo.Q), 2).ToString();
            this.textBoxV3.Text = Math.Round(K3 * Math.Sqrt(2 * g * _hdrBaseInfo.H), 2).ToString();
        }
        public Func<ViewModel.SectionBundleInfo, List<int>> OnRefreshShape = null;
@@ -621,14 +721,15 @@
                SkyTextBox control断面面积 = this.Controls.Find(controlname断面面积, true).FirstOrDefault() as SkyTextBox;
                SkyTextBox controH1 = this.Controls.Find(controlnameHeight, true).FirstOrDefault() as SkyTextBox;
                if (controly1 != null)
                    controly1.Text = _sectionBundleInfo.GaMa_Left[sect_index].ToString();
                if (controly2 != null)
                    controly2.Text = _sectionBundleInfo.R_Left[sect_index].ToString();
                controly1.Enabled = true;
                if (control断面面积 != null)
                    control断面面积.Text = _sectionBundleInfo.Area[sect_index].ToString();
                    control断面面积.Text = Math.Round(_sectionBundleInfo.Area[sect_index], 1).ToString();
                if (controH1 != null)
                    controH1.Text = _sectionBundleInfo.H[sect_index].ToString();
                    controH1.Text = Math.Round(_sectionBundleInfo.H[sect_index], 1).ToString();
                if (controly2 != null)
                    controly2.Text = Math.Round(_sectionBundleInfo.R_Left[sect_index], 1).ToString();
                if (controly1 != null)
                    controly1.Text = Math.Round(_sectionBundleInfo.GaMa_Left[sect_index], 1).ToString();
            }
        }
@@ -662,5 +763,81 @@
        {
            NextStep();
        }
        private void RBtn矩形_CheckedChanged(object sender)
        {
            if (RBtn矩形.Checked)
            {
                if(_sectionBundleInfo.GaMa_Left.All(x => x == 0))
                {
                    for (var sect_index = 1; sect_index <= 8; sect_index++)
                    {
                        var controlnameGama1 = $"skyTextBox断面y1{sect_index}";
                        SkyTextBox controly1 = this.Controls.Find(controlnameGama1, true).FirstOrDefault() as SkyTextBox;
                        controly1.Enabled = false;
                    }
                    return;
                }
                //for (var sect_index = 1; sect_index <= 8; sect_index++)
                //{
                //    var controlnameGama1 = $"skyTextBox断面y1{sect_index}";
                //    SkyTextBox controly1 = this.Controls.Find(controlnameGama1, true).FirstOrDefault() as SkyTextBox;
                //    controly1.Text = "0";
                //    controly1.Enabled = false;
                //}
                ViewModel.SectionBundleInfo Rec_sectionBundleInfo = _sectionBundleInfo.Copy();
                Rec_sectionBundleInfo.ShapeType = eSectionShapeType.矩形;
                Rec_sectionBundleInfo.ResetAllParas(_hdrBaseInfo, _geomBaseInfo);
                for (var sect_index = 1; sect_index <= 8; sect_index++)
                {
                    var controlnameGama1 = $"skyTextBox断面y1{sect_index}";
                    var controlnameRia1 = $"skyTextBox断面r1{sect_index}";
                    var controlname断面面积 = $"skyTextBox断面面积{sect_index}";
                    var controlnameHeight = $"skyTextBox断面H1{sect_index}";
                    SkyTextBox controly1 = this.Controls.Find(controlnameGama1, true).FirstOrDefault() as SkyTextBox;
                    SkyTextBox controly2 = this.Controls.Find(controlnameRia1, true).FirstOrDefault() as SkyTextBox;
                    SkyTextBox control断面面积 = this.Controls.Find(controlname断面面积, true).FirstOrDefault() as SkyTextBox;
                    SkyTextBox controH1 = this.Controls.Find(controlnameHeight, true).FirstOrDefault() as SkyTextBox;
                    controly1.Enabled = false;
                    if (controly1 != null)
                        controly1.Text = Rec_sectionBundleInfo.GaMa_Left[sect_index].ToString();
                    if (controly2 != null)
                        controly2.Text = Rec_sectionBundleInfo.R_Left[sect_index].ToString();
                    if (control断面面积 != null)
                        control断面面积.Text = Rec_sectionBundleInfo.Area[sect_index].ToString();
                    if (controH1 != null)
                        controH1.Text = Rec_sectionBundleInfo.H[sect_index].ToString();
                }
                RefreshShape(Rec_sectionBundleInfo);
            }
        }
        private void skyTextBox断面H11_TextChanged(object sender, EventArgs e)
        {
            if (sender is SkyTextBox skytextBox)
            {
                string lastChar = skytextBox.Name[skytextBox.Name.Length - 1].ToString();
                int index = Convert.ToInt32(lastChar);
                if (!double.TryParse(skytextBox.Text, out double resultH) && !string.IsNullOrEmpty(skytextBox.Text))
                {
                    resultH = _sectionBundleInfo.H[index];
                    skytextBox.Text = _sectionBundleInfo.H[index].ToString();
                }
                else
                {
                    SkyTextBox controlGaMa1 = this.Controls.Find($"skyTextBox断面y1{index}", true).FirstOrDefault() as SkyTextBox;
                    SkyTextBox controlr1 = this.Controls.Find($"skyTextBox断面r1{index}", true).FirstOrDefault() as SkyTextBox;
                    if (!double.TryParse(controlGaMa1.Text, out double resultGame) && !string.IsNullOrEmpty(controlGaMa1.Text))
                    {
                        resultH = _sectionBundleInfo.GaMa_Left[index];
                    }
                    var R = _sectionBundleInfo.HCalR(_geomBaseInfo, index, resultGame, resultH);
                    R = _sectionBundleInfo.CheckChamferR(resultH, index, resultH, R);
                    skytextBox.Text = resultH.ToString();
                    controlr1.Text = R.ToString();
                }
            }
        }
    }
}