tangxu
2025-02-26 0f0af979b3108483a7f5206e6967a74a5f10918f
WinFrmUI/DPumpHydr.WinFrmUI.Volute/MainViewPage_StepInfo.cs
@@ -3,7 +3,7 @@
using System.Windows.Forms;
using System.IO;
using System.Text;
using System.Linq;
using System.Linq;
namespace DPumpHydr.WinFrmUI.Volute
{
@@ -12,19 +12,280 @@
        //步骤控件
        StepTreeDockPanel _stepTreeDockPanel = null;
        //参数控件
        ctrlHdrBaseInfo _ctrlHdrBaseInfo = null;
        ctrlGeomBaseInfo _ctrlGeomBaseInfo = null;
        ctrlSectionBundleInfo _ctrlSectionBundleInfo = null;
        ctrlSectionShapeInfo18 _ctrlSectionShapeInfo18 = null;
        ctrlSetOutflowStyle _ctrlSetOutflowStyle = null;
        ctrlSetOutflowType _ctrlSetOutflowType = null;
        //参数
        ViewModel.HdrBaseInfo _hdrBaseInfo = null;
        ViewModel.GeomBaseInfo _geomBaseInfo = null;
        ViewModel.SectionBundleInfo _sectionBundleInfo = null;
        /// <summary>
        /// 下一步核心
        /// </summary>
        /// <returns></returns>
        private bool GoNextStepCore()
        {
            var current_step_id = this._stepTreeDockPanel.CurrentStepID;
            //
            var next_step_id = this._stepTreeDockPanel.NextStepID;
            if (current_step_id == this._stepTreeDockPanel.Step_ID_Section18_Full)
            {
                next_step_id = this._stepTreeDockPanel.Step_ID_Outflow_Paras;
            }
            ChangeStep(current_step_id, next_step_id);
            return true;
        }
        /// <summary>
        /// 上一步核心
        /// </summary>
        /// <returns></returns>
        private bool GoPrevStepCore()
        {
            var current_step_id = this._stepTreeDockPanel.CurrentStepID;
            var prev_step_id = this._stepTreeDockPanel.PrevStepID;
            if (current_step_id == this._stepTreeDockPanel.Step_ID_Outflow_Paras)
            {
                prev_step_id = this._stepTreeDockPanel.Step_ID_Section18_Full;
            }
            if (prev_step_id == 0)
                return false;
            this.ChangeStep(current_step_id, prev_step_id);
            return true;
        }
        /// <summary>
        /// 切换步骤
        /// </summary>
        /// <param name="current_step_id"></param>
        /// <param name="next_step_id"></param>
        private bool ChangeStep(long current_step_id, long next_step_id)
        {
            RbtnChk截面18.Visible = false;
            if (current_step_id == this._stepTreeDockPanel.Step_ID_Hdr_Base_Info)
            {
                if (!SaveParaStep1())
                    return false;
                //ParasInfoBaseCtrl paras_ctrl = GetParasCtrl(current_step_id);
                //if (paras_ctrl != null && paras_ctrl.IsChangesParas())
                //{
                //    DialogResult result = MessageBox.Show("已经修改过的数据需要保存吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                //    if (result == DialogResult.OK)
                //    {
                //        if (SaveStepParas(current_step_id) == false)
                //        {
                //            return false;
                //        }
                //    }
                //}
            }
            else if (current_step_id == this._stepTreeDockPanel.Step_ID_Section18_Full)
            {
                if (!SaveParaStep2())
                    return false;
            }
            else if (current_step_id == this._stepTreeDockPanel.Step_ID_Outflow_Paras)
            {
                if (!SaveParaStep3())
                    return false;
            }
            else if (current_step_id == this._stepTreeDockPanel.Step_ID_Thickness)
            {
                if (!SaveParaStep4())
                    return false;
                if (next_step_id < current_step_id)
                {//删除加厚体
                    this._occDesign3dCtrl.RemoveThicknessBody( );
                }
            }
            this.BuildParasCtrl(current_step_id, next_step_id);
            //
            this._stepTreeDockPanel.SetFocusedNode(next_step_id);
            Rbtn数据导出STP.Visible = false;
            Rbtn数据导出IGS.Visible = false;
            if (next_step_id == this._stepTreeDockPanel.Step_ID_Hdr_Base_Info)
            {
                this._sectAreaDockPanel.Visible = false;
                this.RBtn后退.Enabled = false;
                this.Rbtn前进.Enabled = true;
                this.Rbtn上一步.Enabled = false;
                this.Rbtn下一步.Enabled = true;
                this.Rbtn完成.Enabled = false;
                this._occDesign2dCtrl.HideAll();
                this._occDesign3dCtrl.HideAll();
            }
            else if (next_step_id == this._stepTreeDockPanel.Step_ID_Outflow_Paras)
            {
                RbtnChk截面18.Visible = true;
                this.RBtn后退.Enabled = true;
                this.Rbtn前进.Enabled = true;
                this.Rbtn上一步.Enabled = true;
                this.Rbtn下一步.Enabled = true;
                this.Rbtn完成.Enabled = false;
            }
            else if (next_step_id == this._stepTreeDockPanel.Step_ID_Thickness)
            {
                this.RBtn后退.Enabled = true;
                this.Rbtn前进.Enabled = false;
                this.Rbtn上一步.Enabled = true;
                this.Rbtn下一步.Enabled = false;
                this.Rbtn完成.Enabled = true;
                this.Rbtn数据导出STP.Visible = true;
                this.Rbtn数据导出IGS.Visible = true;
            }
            else
            {
                this.RBtn后退.Enabled = true;
                this.Rbtn前进.Enabled = true;
                this.Rbtn上一步.Enabled = true;
                this.Rbtn下一步.Enabled = true;
                this.Rbtn完成.Enabled = false;
            }
            return true;
        }
        /// <summary>
        /// 设置参数控件
        /// </summary>
        /// <param name="next_step_id"></param>
        private void BuildParasCtrl(long current_step_id, long next_step_id)
        {
            #region 第1步
            if (next_step_id == this._stepTreeDockPanel.Step_ID_Hdr_Base_Info)
            {
                EnterStep1(current_step_id);
                return;
            }
            #endregion
            #region  第2步
            if (next_step_id == this._stepTreeDockPanel.Step_ID_Section18_Full)
            {
                EnterStep2(current_step_id);
                return;
            }
            #endregion
            #region  第3步 1-8断面
            if (next_step_id > this._stepTreeDockPanel.Step_ID_Section18_Grp &&
                next_step_id <= this._stepTreeDockPanel.Step_ID_Section18_Grp + 8)
            {
                if (_sectionBundleInfo == null)
                    return;
                if (_ctrlSectionShapeInfo18 == null)
                {
                    _ctrlSectionShapeInfo18 = new ctrlSectionShapeInfo18();
                    _ctrlSectionShapeInfo18.Name = "ctrlSectionShapeInfo18";
                    _ctrlSectionShapeInfo18.OnRefreshShape += RefreshSectShapeSingle18;
                }
                DockStepParaCtrl(_ctrlSectionShapeInfo18);
                var sect_index = 9 + this._stepTreeDockPanel.Step_ID_Section18_Grp - next_step_id;
                var shape_info = _sectionBundleInfo.ToSectionShapePara((int)sect_index);
                RefreshSectShapeSingle18(shape_info);
                _ctrlSectionShapeInfo18.SetBindingData(shape_info);
                this._sectAreaDockPanel.RefreshControl();
                this._sectAreaDockPanel.Visible = true;
                this._occDesign2dCtrl.SetAllSectionCurveVisible(true);
                this._occDesign3dCtrl.SetAllSectionCurveVisible(true);
                return;
            }
            #endregion
            #region  出水面参数
            if (next_step_id == this._stepTreeDockPanel.Step_ID_Outflow_Paras)
            {
                EnterStep3(current_step_id);
                return;
            }
            #endregion
            #region 加厚
            if (next_step_id == this._stepTreeDockPanel.Step_ID_Thickness)
            {
                if (_sectionBundleInfo == null)
                    return;
                EnterStep4(current_step_id);
                return;
            }
            #endregion
        }
        /// <summary>
        /// 获取当前步骤的参数控制控件
        /// </summary>
        /// <param name="step_id"></param>
        private DPumpHydr.WinFrmUI.Volute.ParasInfoBaseCtrl GetParasCtrl(long step_id)
        {
            if (step_id == this._stepTreeDockPanel.Step_ID_Hdr_Base_Info)
            {
                return _ctrlHdrBaseInfo;
            }
            //第二步
            if (step_id == this._stepTreeDockPanel.Step_ID_Section18_Full)
            {
                return _ctrlSectionBundleInfo;
            }
            //1-8断面进行下一步点击
            if (step_id >= this._stepTreeDockPanel.Step_ID_Section18_Grp &&
                step_id >= this._stepTreeDockPanel.Step_ID_Section18_Grp + 8)
            {
                return _ctrlSectionShapeInfo18;
            }
            return null;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="ctrl"></param>
        private void DockStepParaCtrl(ParasInfoBaseCtrl ctrl)
        {
            this._parasDockPanel.Controls.Clear();
            ctrl.Dock = DockStyle.Fill;
            this._parasDockPanel.Controls.Add(ctrl);
        }
        /// <summary>
        /// 下一步
@@ -43,361 +304,5 @@
        {
            return GoPrevStepCore();
        }
        /// <summary>
        /// 下一步核心
        /// </summary>
        /// <returns></returns>
        private bool GoNextStepCore()
        {
            var currentStepID = this._stepTreeDockPanel.CurrentStepID;
            if (SaveStepParas(currentStepID) == false)
            {
                return false;
            }
            //
            var next_step_id = this._stepTreeDockPanel.NextStepID;
            if (next_step_id > 0)
            {
                this.SetParasCtrl(next_step_id);
                //
                this._stepTreeDockPanel.SetFocusedNode(next_step_id);
            }
            return true;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="stepID"></param>
        /// <returns></returns>
        protected bool SaveStepParas(long stepID)
        {
            #region 获取当前页面参数
            //第一步
            if (stepID == this._stepTreeDockPanel.Step_ID_Hdr_Base_Info)
            {
                string error_info;
                var hdrBaseInfo = _ctrlHdrBaseInfo.GetBindingData(out error_info);
                if (hdrBaseInfo == null)
                {
                    MessageBox.Show(error_info);
                    return false;
                }
                hdrBaseInfo.CalcNs();
                _hdrBaseInfo = hdrBaseInfo;
                if (_geomBaseInfo == null)
                {
                    _geomBaseInfo = new ViewModel.GeomBaseInfo();
                }
                _geomBaseInfo.Calc(_hdrBaseInfo);
                return true;
            }
            //第二步
            if (stepID == this._stepTreeDockPanel.Step_ID_Geom_Base_Info)
            {
                if (_ctrlGeomBaseInfo == null)
                    return false;
                string error_info;
                var geomBaseInfo = _ctrlGeomBaseInfo.GetBindingData(out error_info);
                if (geomBaseInfo == null)
                {
                    MessageBox.Show(error_info);
                    return false;
                }
                _geomBaseInfo = geomBaseInfo;
                if (_sectionBundleInfo == null)
                {
                    _sectionBundleInfo = new ViewModel.SectionBundleInfo();
                }
                var v3 = ViewModel.SectionBundleInfo.CalcV3(_hdrBaseInfo, _geomBaseInfo);
                _sectionBundleInfo.ResetAllParas(_hdrBaseInfo, _geomBaseInfo, v3);
                return true;
            }
            //第三步
            if (stepID == this._stepTreeDockPanel.Step_ID_Section18_Full)
            {
                string error_info;
                var sectionBaseInfo = _ctrlSectionBundleInfo.GetBindingData(out error_info);
                if (sectionBaseInfo == null)
                {
                    MessageBox.Show(error_info);
                    return false;
                }
                _sectionBundleInfo = sectionBaseInfo;
                //_sectionBundleInfo.ResetAllParas(_hdrBaseInfo, _geomBaseInfo);
                //ViewModel.SectionShapePara _sectionShapePara = null;
                //if (_sectionShapePara == null)
                //{
                //    _sectionShapePara = new ViewModel.SectionShapePara();
                //}
                //_sectionShapePara.Initialparameters(_currentSectIndex, _sectionBaseInfo);
                return true;
            }
            //1-8断面进行下一步点击
            if (stepID == this._stepTreeDockPanel.Step_ID_Section18_Grp)
            {
                //string error_info;
                //var sectionShapeInfo18 = _ctrlSectionShapeInfo18.GetBindingData(out error_info);
                //if (sectionShapeInfo18 == null)
                //{
                //    MessageBox.Show(error_info);
                //    return false;
                //}
                //if (!sectionShapeInfo18.Verify(out error_info))
                //{
                //    MessageBox.Show(error_info);
                //    return false;
                //}
                //_sectionShapePara = sectionShapeInfo18;
                //_sectionShapePara.CalcHeightByArea(_sectionBaseInfo.ShapeType);
                //_sectionBaseInfo.EditSingleShape(_sectionShapePara, _currentSectIndex);
                //if (_currentSectIndex != 9)
                //{
                //    _currentSectIndex--;
                //}
                //_sectionShapePara.Initialparameters(_currentSectIndex, _sectionBaseInfo);
                return true;
            }
            #endregion
            return true;
        }
        /// <summary>
        /// 上一步核心
        /// </summary>
        /// <returns></returns>
        private bool GoPrevStepCore()
        {
            var currentStepID = this._stepTreeDockPanel.CurrentStepID;
            ParasInfoBaseCtrl paras_ctrl = GetParasCtrl(currentStepID);
            if(paras_ctrl != null && paras_ctrl.IsChangesParas())
            {
                DialogResult result = MessageBox.Show("已经修改过的数据需要保存吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                if (result == DialogResult.OK)
                {
                    if (SaveStepParas(currentStepID) == false )
                    {
                        return false;
                    }
                }
            }
            var prev_step_id = this._stepTreeDockPanel.PrevStepID;
            if (prev_step_id == 0)
                return false;
            this.SetParasCtrl(prev_step_id);
            //
            this._stepTreeDockPanel.SetFocusedNode(prev_step_id);
            return true;
        }
        /// <summary>
        /// 生成控件的参数控件
        /// </summary>
        /// <param name="step_id"></param>
        private void SetParasCtrl(long step_id)
        {
            //第一步
            if (step_id == this._stepTreeDockPanel.Step_ID_Hdr_Base_Info)
            {
                if (_ctrlHdrBaseInfo == null)
                {
                    _ctrlHdrBaseInfo = new ctrlHdrBaseInfo();
                    _ctrlHdrBaseInfo.Name = "ctrlHdrBaseInfo";
                }
                _ctrlHdrBaseInfo.SetBindingData(_hdrBaseInfo);
                AddStepParaCtrl(_ctrlHdrBaseInfo);
            }
            //第二步
            if (step_id == this._stepTreeDockPanel.Step_ID_Geom_Base_Info)
            {
                if (_ctrlGeomBaseInfo == null)
                {
                    _ctrlGeomBaseInfo = new ctrlGeomBaseInfo();
                    _ctrlGeomBaseInfo.Name = "ctrlGeomBaseInfo";
                }
                _ctrlGeomBaseInfo.SetBindingData(_geomBaseInfo);
                AddStepParaCtrl(_ctrlGeomBaseInfo);
            }
            //第三步
            if (step_id == this._stepTreeDockPanel.Step_ID_Section18_Full)
            {
                if (_ctrlSectionBundleInfo == null)
                {
                    _ctrlSectionBundleInfo = new ctrlSectionBundleInfo();
                    _ctrlSectionBundleInfo.Name = "ctrlSectionBaseInfo";
                    _ctrlSectionBundleInfo.OnRefreshShape += RefreshSectShapeWhole18;
                }
                AddStepParaCtrl(_ctrlSectionBundleInfo);
                _ctrlSectionBundleInfo.InitialParas(_hdrBaseInfo, _geomBaseInfo);
                _ctrlSectionBundleInfo.SetBindingData(_sectionBundleInfo);
                RefreshSectShapeWhole18(_sectionBundleInfo);
            }
            //第四步
            if (step_id > this._stepTreeDockPanel.Step_ID_Section18_Grp &&
                step_id <= this._stepTreeDockPanel.Step_ID_Section18_Grp + 8)
            {
                if (_sectionBundleInfo == null)
                    return;
                if (_ctrlSectionShapeInfo18 == null)
                {
                    _ctrlSectionShapeInfo18 = new ctrlSectionShapeInfo18();
                    _ctrlSectionShapeInfo18.Name = "ctrlSectionShapeInfo18";
                    _ctrlSectionShapeInfo18.OnRefreshShape += RefreshSectShapeSingle18;
                }
                AddStepParaCtrl(_ctrlSectionShapeInfo18);
                var sect_index = 9 + this._stepTreeDockPanel.Step_ID_Section18_Grp - step_id;
                var shape_info = _sectionBundleInfo.ToSectionShapePara((int)sect_index);
                _ctrlSectionShapeInfo18.SetBindingData(shape_info);
            }
            if (step_id == this._stepTreeDockPanel.Step_ID_Outflow_Type)
            {
                if (_ctrlSetOutflowType == null)
                {
                    _ctrlSetOutflowType = new ctrlSetOutflowType();
                    _ctrlSetOutflowType.Name = "ctrlSetOutflowDim";
                }
                AddStepParaCtrl(_ctrlSetOutflowType);
            }
            if (step_id == this._stepTreeDockPanel.Step_ID_Outflow_Style)
            {
                if (_ctrlSetOutflowStyle == null)
                {
                    _ctrlSetOutflowStyle = new ctrlSetOutflowStyle();
                    _ctrlSetOutflowStyle.Name = "ctrlSetOutflowStyle";
                    var pt = _occDesign2dCtrl.CreateOutflowBody();
                    if(pt != null)
                    {
                        _occDesign3dCtrl.CreateOutflowBody(pt);
                    }
                }
                AddStepParaCtrl(_ctrlSetOutflowStyle);
            }
        }
        /// <summary>
        /// 获取当前步骤的参数控制控件
        /// </summary>
        /// <param name="step_id"></param>
        private DPumpHydr.WinFrmUI.Volute.ParasInfoBaseCtrl GetParasCtrl(long step_id)
        {
            if (step_id == this._stepTreeDockPanel.Step_ID_Hdr_Base_Info)
            {
                return _ctrlHdrBaseInfo;
            }
            //第二步
            if (step_id == this._stepTreeDockPanel.Step_ID_Geom_Base_Info)
            {
                return _ctrlGeomBaseInfo;
            }
            //第三步
            if (step_id == this._stepTreeDockPanel.Step_ID_Section18_Full)
            {
                return _ctrlSectionBundleInfo;
            }
            //1-8断面进行下一步点击
            if (step_id >= this._stepTreeDockPanel.Step_ID_Section18_Grp && 
                step_id>= this._stepTreeDockPanel.Step_ID_Section18_Grp+8)
            {
                return _ctrlSectionShapeInfo18;
            }
            return null;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="ctrl"></param>
        private void AddStepParaCtrl(ParasInfoBaseCtrl ctrl)
        {
            this._parasDockPanel.Controls.Clear();
            ctrl.Dock = DockStyle.Fill;
            this._parasDockPanel.Controls.Add(ctrl);
        }
        /// <summary>
        /// 蜗壳参数导出
        /// </summary>
        public void VoluteDeriveArgument()
        {
            //if (_sectionBaseInfo == null)
            //{
            //    MessageBox.Show("您还没有完成定义参数!请定义完成后在进行导出!(至少完成第三步)");
            //    return;
            //}
            //if (_currentStepID <= 21)
            //{
            //    DialogResult result = MessageBox.Show("确定不进行后续断面参数的调整,使用初始计算后的参数吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            //    if (result == DialogResult.Cancel)
            //    {
            //        return;
            //    }
            //}
            //ViewModel.SectionShapePara VoluteArgument = new ViewModel.SectionShapePara();
            //string json = VoluteArgument.DeriveArgument(_sectionBaseInfo);
            //string filePath = Path.Combine(@"C:\Users\THL\Desktop", $"蜗壳参数.json");
            //File.WriteAllText(filePath, json);
        }
        #region 初始化步骤列表
        /// <summary>
        ///
        /// </summary>
        private void InitialStepNodes()
        {
            ViewModel.HdrBaseInfo hdrBaseInfo = new ViewModel.HdrBaseInfo();
            hdrBaseInfo.Q = 200;
            hdrBaseInfo.H = 50;
            hdrBaseInfo.n = 2900;
            hdrBaseInfo.D2 = 220;
            hdrBaseInfo.B2 = 20;
            if (_ctrlHdrBaseInfo == null)
            {
                _ctrlHdrBaseInfo = new ctrlHdrBaseInfo();
                _ctrlHdrBaseInfo.Name = "ctrlHdrBaseInfo";
                _ctrlHdrBaseInfo.Dock = DockStyle.Right;
                _ctrlHdrBaseInfo.SetBindingData(hdrBaseInfo);
            }
            this.AddStepParaCtrl(_ctrlHdrBaseInfo);
            //
            this._stepTreeDockPanel.InitialStepNodes();
        }
        #endregion
    }
}