using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; using DPumpHydr.WinFrmUI.Volute.ViewModel; namespace DPumpHydr.WinFrmUI.Volute { public partial class ctrlSetOutflowParas : ParasInfoBaseCtrl { public ctrlSetOutflowParas() { InitializeComponent(); _sharp_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.未知; _link_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowLinkStyle.曲线; _parasControlCenter = new SetOutflowParasCtrl1() { Name = "SetOutflowParasCtrlCenter" }; _parasControlCenter.OnRefreshShape += (para) => { if (OnRefreshShape2D != null) return OnRefreshShape2D(para); else return false; }; _parasControlCenter.Dock = DockStyle.Top; _parasControlLine = new SetOutflowParasCtrl2() { Name = "SetOutflowParasCtrlLine" }; _parasControlLine.OnRefreshShape += (para) => { if (OnRefreshShape2D != null) return OnRefreshShape2D(para); else return false; }; _parasControlLine.Dock = DockStyle.Top; _parasControlCurve = new SetOutflowParasCtrl1() { Name = "SetOutflowParasCtrlCurve" }; _parasControlCurve.OnRefreshShape += (para) => { if (OnRefreshShape2D != null) return OnRefreshShape2D(para); else return false; }; _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) => { if (this.OnMoveSectPosi != null) { OnMoveSectPosi.Invoke(sect_index, posi); } }; BuildAllTips(); } public Func OnRefreshShape3D = null; public Func OnRefreshShape2D = null; //控件 //曲线链接控件 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 { return _sharp_type; } } private void InitialOutflowStyle() { if (_parasControlCenter == null) 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.中心出口: metroTile出口图片.BackgroundImage = GlobalResource.BuildImage("Central-exit.png", 878, 238); _parasControlCenter.SetA_state(false); tabPage1.Controls.Add(_parasControlCenter); return; case DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.侧面出口_曲线连接: metroTile出口图片.BackgroundImage = GlobalResource.BuildImage("Side-exit-curve.png", 878, 238); _parasControlCurve.SetA_state(true); tabPage1.Controls.Add(_parasControlCurve); return; case DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.侧面出口_直线连接: metroTile出口图片.BackgroundImage = GlobalResource.BuildImage("Side-exit-straight-line.png", 878, 238); tabPage1.Controls.Add(_parasControlLine); return; default: throw new ArgumentException("Invalid control type"); } } ViewModel.HdrBaseInfo _hdrBaseInfo = null; ViewModel.GeomBaseInfo _geomBaseInfo = null; ViewModel.SectionBundleInfo _sectionBundleInfo = null; public int InitialParas( ViewModel.HdrBaseInfo hdrBaseInfo, ViewModel.GeomBaseInfo geomBaseInfo, ViewModel.SectionBundleInfo sectionBundleInfo) { if (IsSameBaseParas(hdrBaseInfo, geomBaseInfo, sectionBundleInfo)) {//判断是否修改了 return 0;//0表示没有变化 } this._hdrBaseInfo = hdrBaseInfo; this._geomBaseInfo = geomBaseInfo; this._sectionBundleInfo = sectionBundleInfo; //出口直径标准化 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); 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; outflowParas1.H2 = 5; outflowParas1.Dia = GetStdDia(outer_dia); double height1 = 5 * (int)((((geomBaseInfo.D3 / 2 + sectionBundleInfo.H[8] / 2) * 1.4141 + outflowParas1.Dia / 2) / 5) + 1); outflowParas1.Heigh = height1; outflowParas1.Septalradius = 2; _parasControlCenter.InitialParas(hdrBaseInfo, geomBaseInfo, sectionBundleInfo); _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; outflowParas2.H2 = 5; outflowParas2.Dia = GetStdDia(outer_dia); double height2 = 5 * (int)(((outflowParas2.Dia - Math.Sqrt(4 * sectionBundleInfo.Area[8] / Math.PI)) / (2 * Math.Tan(4 * Math.PI / 180))) / 5 + 0.5); if(height2 < geomBaseInfo.D3/ 2) { height2 = geomBaseInfo.D3 * 0.75; } outflowParas2.Heigh = height2; outflowParas2.Septalradius = 3; _parasControlLine.InitialParas(hdrBaseInfo, geomBaseInfo, sectionBundleInfo); _parasControlLine.IsInvokeRefreshShapeAble = false; _parasControlLine.SetBindingData(outflowParas2); _parasControlLine.IsInvokeRefreshShapeAble = true; //圆弧中心 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; } else { InitialOutflowStyle(); RefreshModel(); } return 1; } private bool IsSameBaseParas( ViewModel.HdrBaseInfo hdrBaseInfo, ViewModel.GeomBaseInfo geomBaseInfo, ViewModel.SectionBundleInfo sectionBundleInfo) { if (this._hdrBaseInfo == null) return false; if (this._geomBaseInfo == null) return false; if (this._sectionBundleInfo == null) return false; if (!this._hdrBaseInfo.IsSame(hdrBaseInfo)) return false; if (!this._geomBaseInfo.IsSame(geomBaseInfo)) return false; if (!this._sectionBundleInfo.IsSame(sectionBundleInfo)) return false; this._hdrBaseInfo = hdrBaseInfo; this._geomBaseInfo = geomBaseInfo; this._sectionBundleInfo = sectionBundleInfo; return true; } private static double GetStdDia(double mm) { //var iFlangeCodeList = new int[] {10,15,20,25,32, // 40,50,65,80,100, // 125,150,200,250,300, // 350,400,450,500,600, // 700,800,900,1000,1200, // 1400,1600,1800,2000,5000,100000}; //var iFlangeCodeList = new Double[] {6,8,10,15,20,25,32,40,50,65,80,100,125,150,175, // 200,225,250,300,350,400,450,500,550,600,650,700,750,800,900,1000, // 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 >= 7 && mm < 9) stdDia = 8; if (mm >= 9 && mm < 11) stdDia = 10; if (mm >= 11 && mm < 17.5) stdDia = 15; if (mm >= 17.5 && mm < 22.5) stdDia = 20; if (mm >= 22.5 && mm < 28.5) stdDia = 25; if (mm >= 28.5 && mm < 36) stdDia = 32; if (mm >= 36 && mm < 45) stdDia = 40; if (mm >= 45 && mm < 57.5) stdDia = 50; if (mm >= 57.5 && mm < 72.5) stdDia = 65; if (mm >= 72.5 && mm < 90) stdDia = 80; if (mm >= 90 && mm < 112.5) stdDia = 100; if (mm >= 112.5 && mm < 137.5) stdDia = 125; if (mm >= 137.5 && mm < 162.5) stdDia = 150; if (mm >= 162.5 && mm < 187.5) stdDia = 175; if (mm >= 187.5 && mm < 212.5) stdDia = 200; if (mm >= 212.5 && mm < 237.5) stdDia = 225; if (mm >= 237.5 && mm < 275) stdDia = 250; if (mm >= 275 && mm < 325) stdDia = 300; if (mm >= 325 && mm < 375) stdDia = 350; if (mm >= 375 && mm < 425) stdDia = 400; if (mm >= 425 && mm < 475) stdDia = 450; if (mm >= 475 && mm < 525) stdDia = 500; if (mm >= 525 && mm < 575) stdDia = 550; if (mm >= 575 && mm < 625) stdDia = 600; if (mm >= 625 && mm < 675) stdDia = 650; if (mm >= 675 && mm < 725) stdDia = 700; if (mm >= 725 && mm < 775) stdDia = 750; if (mm >= 775 && mm < 850) stdDia = 800; if (mm >= 850 && mm < 950) stdDia = 900; if (mm >= 950 && mm < 1050) stdDia = 1000; if (mm >= 1050 && mm < 1150) stdDia = 1100; if (mm >= 1150 && mm < 1250) stdDia = 1200; if (mm >= 1250 && mm < 1350) stdDia = 1300; if (mm >= 1350 && mm < 1450) stdDia = 1400; if (mm >= 1450 && mm < 1550) stdDia = 1500; if (mm >= 1550 && mm < 1700) stdDia = 1600; if (mm >= 1700 && mm < 1900) stdDia = 1800; if (mm >= 1900 && mm < 2100) stdDia = 2000; if (mm >= 2100 && mm < 2300) stdDia = 2200; if (mm >= 2300 && mm < 2500) stdDia = 2400; if (mm >= 2500 && mm < 2700) stdDia = 2600; if (mm >= 2700 && mm < 2900) stdDia = 2800; if (mm >= 2900 && mm < 3100) stdDia = 3000; if (mm >= 3100 && mm < 3300) stdDia = 3200; if (mm >= 3300 && mm < 3500) stdDia = 3400; if (mm >= 3500 && mm < 3700) stdDia = 3600; if (mm >= 3700 && mm < 3900) stdDia = 3800; if (mm >= 3900 && mm < 4100) stdDia = 4000; //for (int i = 0; i < iFlangeCodeList.Count() - 1; i++) //{ // if (mm <= iFlangeCodeList[i]) // return iFlangeCodeList[i]; //} //return iFlangeCodeList.Last(); return stdDia; } // public ViewModel.OutflowParas GetBindingData(out string error) { error = ""; ViewModel.OutflowParas _outflowParas = null; if (_link_type == eOutflowLinkStyle.直线圆弧 && _sharp_type != eOutflowShapeStyle.侧面出口_直线连接) { if (_sharp_type == eOutflowShapeStyle.中心出口) { if (_parasControlArcCenter == null) 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; } _outflowParas.ShapeStyle = _sharp_type; _outflowParas.LinkStyle = _link_type; return _outflowParas; } public void SetBindingData(ViewModel.OutflowParas paras) { if (paras == null) return; if (_sectionBundleInfo == null) { throw new Exception("未初始化ctrlSetOutflowParas控件"); } this._sharp_type = paras.ShapeStyle; this._link_type = paras.LinkStyle; 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.侧面出口_曲线连接) { 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.中心出口) { comboBoxType.SelectedIndex = 0; } else if (_sharp_type == DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.侧面出口_曲线连接) { comboBoxType.SelectedIndex = 1; } else if (_sharp_type == DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.侧面出口_直线连接) { comboBoxType.SelectedIndex = 2; } if(_link_type == eOutflowLinkStyle.直线圆弧) { checkBox圆弧连接.Checked = true; } else { checkBox圆弧连接.Checked = false; } InitialOutflowStyle(); } private void BuildAllTips() { metroToolTip第六步提示.SetToolTip(this.metroTile出口图片, "断面图"); } public void ShowPage(DPumpHydr.ViewModel.eWizardStepDiretion step_direction) { //if (step_direction == DPumpHydr.ViewModel.eWizardStepDiretion.前进) //{ // var resp = OnRefreshShape3D(_outflowParas); // if (resp != null) // { // if (_stype == eOutflowStyle.侧面出口_直线连接) // { // _sideCurveExitControl.SetBindingData(resp); // } // else // { // _sidelineExitControl.SetBindingData(resp); // } // } //} //else //{ //} } private void mBtn更新模型_Click(object sender, EventArgs e) { RefreshModel(); } private void RefreshModel() { string error; var resp = OnRefreshShape3D(GetBindingData(out error)); if (resp != null) { if (_link_type == eOutflowLinkStyle.直线圆弧 && _sharp_type != eOutflowShapeStyle.侧面出口_直线连接) { if (_sharp_type == eOutflowShapeStyle.中心出口) { _parasControlArcCenter.SetBindingData(resp); } else if (_sharp_type == eOutflowShapeStyle.侧面出口_曲线连接) { _parasControlArcSide.SetBindingData(resp); } } else { if (_sharp_type == eOutflowShapeStyle.侧面出口_直线连接) { _parasControlLine.SetBindingData(resp); } else if (_sharp_type == eOutflowShapeStyle.侧面出口_曲线连接) { _parasControlCurve.SetBindingData(resp); } else { _parasControlCenter.SetBindingData(resp); } } } } public Action OnMoveSectPosi = null; internal void SetSect9Posi(double sect9Posi) { ctrlSection910Posi1.SetSect9Posi(sect9Posi); } internal void SetSect10Posi(double sect9Posi) { ctrlSection910Posi1.SetSect10Posi(sect9Posi); } private void comboBoxType_SelectedIndexChanged(object sender, EventArgs e) { if (comboBoxType.SelectedIndex == 0) { _sharp_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.中心出口; //checkBox圆弧连接.Enabled = true; //checkBox圆弧连接.Visible = true; //if (checkBox圆弧连接.Checked) //{ // _link_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowLinkStyle.直线圆弧; //} //else //{ _link_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowLinkStyle.曲线; //} } else if (comboBoxType.SelectedIndex == 1) { _sharp_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.侧面出口_曲线连接; //checkBox圆弧连接.Enabled = false; //checkBox圆弧连接.Visible = false; _link_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowLinkStyle.曲线; //if (checkBox圆弧连接.Checked) //{ // _link_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowLinkStyle.直线圆弧; //} //else //{ _link_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowLinkStyle.曲线; //} } else if (comboBoxType.SelectedIndex == 2) { _sharp_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle.侧面出口_直线连接; //checkBox圆弧连接.Enabled = false; //checkBox圆弧连接.Visible = false; _link_type = DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowLinkStyle.曲线; } InitialOutflowStyle(); RefreshModel(); } private void btnNextStep_Click(object sender, EventArgs e) { 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(); } } }