using DevExpress.PivotGrid.PivotTable; using DevExpress.XtraEditors; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Yw.Geometry; using Yw.Pump; using Yw.WinFrmUI.Phart; namespace HStation.WinFrmUI { public partial class SimulationPumpParallelCtrl : DevExpress.XtraEditors.XtraUserControl { public SimulationPumpParallelCtrl() { InitializeComponent(); this.layoutControl1.SetupLayoutControl(); this.hydroPumpListExtendGridCtrl1.StateChangedEvent += HydroPumpListExtendGridCtrl1_StateChangedEvent; this.pumpParallelChart1.DesignPointChangedEvent += PumpParallelChart1_DesignPointChangedEvent; this.pumpParallelChart1.QueryPointChangedEvent += PumpParallelChart1_QueryPointChangedEvent; this.pumpParallelChart1.ParallelStatusChangedEvent += PumpParallelChart1_ParallelStatusChangedEvent; } /// /// 保存事件 /// public event Action> SaveEvent; /// /// 并联状态改变事件 /// public event Action ParallelStatusChangedEvent; /// /// 绑定列表 /// public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo) { this.hydroPumpListExtendGridCtrl1.SetBindingData(hydroInfo); var allStateList = this.hydroPumpListExtendGridCtrl1.GetStateList(); var allVmList = CreateParallelViewModels(allStateList); this.pumpParallelChart1.SetBindingData(allVmList); } //状态改变事件 private void HydroPumpListExtendGridCtrl1_StateChangedEvent(List allStateList) { var allVmList = CreateParallelViewModels(allStateList); this.pumpParallelChart1.SetBindingData(allVmList); } //保存 private void btnSave_Click(object sender, EventArgs e) { var result = XtraMessageBox.Show("是否使用现有水泵状态更新模型?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes; if (!result) { return; } var allStateList = this.hydroPumpListExtendGridCtrl1.GetStateList(); if (allStateList == null || allStateList.Count < 1) { return; } var allSaveList = allStateList.Select(x => new SimulationPumpParallelSaveItemViewModel() { Code = x.Code, LinkStatus = x.RunStatus ? Yw.Hydro.PumpStatus.Open : Yw.Hydro.PumpStatus.Closed, SpeedRatio = Math.Round(x.Hz / x.Vmo.RatedHz, 2) }).ToList(); this.SaveEvent?.Invoke(allSaveList); } //创建 private List CreateParallelViewModels(List allStateList) { var allRunList = allStateList?.Where(x => x.RunStatus).ToList(); if (allRunList == null || allRunList.Count < 1) { return default; } var vmList = new List(); foreach (var item in allRunList) { var vm = new PumpParallelViewModel(); vm.Id = item.Code; vm.Name = item.Name; vm.RatedQ = item.Vmo.RatedQ; vm.RatedH = item.Vmo.RatedH; vm.RatedP = item.Vmo.RatedP; vm.RatedN = item.Vmo.RatedN; vm.RatedHz = item.Vmo.RatedHz; vm.CurrentHz = item.Hz; vm.CurrentN = Math.Round(item.Hz / item.Vmo.RatedHz * vm.RatedN, 1); vm.CurrentColor = item.Color; double extend = 1; var curveqh = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.CurveQH); if (curveqh != null) { var qh_pts = curveqh.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); if (qh_pts != null && qh_pts.Count > 3) { vm.CurveQH = qh_pts; var qh_current_pts = qh_pts.GetQHPointListByN(item.Vmo.RatedHz, item.Hz); vm.CurrentCurveQH = qh_current_pts; if (item.Extend > 100) { vm.CurrentExtendFlow = vm.CurrentCurveQH.Max(x => x.X); extend = item.Extend / 100; var qh_current_extend_pts = vm.CurrentCurveQH.GetExpandPointList(Yw.Ahart.eFeatType.Cubic, 1, extend, 20); vm.CurrentCurveQH = qh_current_extend_pts; } } } var curveqp = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.CurveQP); if (curveqp != null) { var qp_pts = curveqp.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); if (qp_pts != null && qp_pts.Count > 3) { vm.CurveQP = qp_pts; var qp_current_pts = qp_pts.GetQPPointListByN(item.Vmo.RatedHz, item.Hz); vm.CurrentCurveQP = qp_current_pts; if (extend > 1) { var qp_current_extend_pts = vm.CurrentCurveQP.GetExpandPointList(Yw.Ahart.eFeatType.Cubic, 1, extend, 20); vm.CurrentCurveQP = qp_current_extend_pts; } } } var curveqe = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.CurveQE); if (curveqe != null) { var qe_pts = curveqe.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); if (qe_pts != null && qe_pts.Count > 3) { vm.CurveQE = qe_pts; var qe_current_pts = qe_pts.GetQEPointListByN(item.Vmo.RatedHz, item.Hz); vm.CurrentCurveQE = qe_current_pts; if (extend > 1) { var qe_current_extend_pts = vm.CurrentCurveQE.GetExpandPointList(Yw.Ahart.eFeatType.Cubic, 1, extend, 20); vm.CurrentCurveQE = qe_current_extend_pts; } } } vmList.Add(vm); } return vmList; } //设计点改变 private void PumpParallelChart1_DesignPointChangedEvent(List obj) { var vmList = obj?.Select(x => new HydroPumpDesignPointViewModel() { Code = x.Id, Name = x.Name, DesignQ = Math.Round(x.Q, 1), DesignH = Math.Round(x.H, 2), DesignP = x.P.HasValue ? Math.Round(x.P.Value, 1) : null, DesignE = x.E.HasValue ? Math.Round(x.E.Value, 1) : null, }).ToList(); this.hydroPumpDesignPointListGridCtrl1.SetBindingData(vmList); } //查询点改变 private void PumpParallelChart1_QueryPointChangedEvent(List obj) { var vmList = obj?.Select(x => new HydroPumpQueryPointViewModel() { Code = x.Id, Name = x.Name, QueryQ = Math.Round(x.Q, 1), QueryH = Math.Round(x.H, 2), QueryP = x.P.HasValue ? Math.Round(x.P.Value, 1) : null, QueryE = x.E.HasValue ? Math.Round(x.E.Value, 1) : null, }).ToList(); this.hydroPumpQueryPointListGridCtrl1.SetBindingData(vmList); } //并联状态改变事件 private void PumpParallelChart1_ParallelStatusChangedEvent(bool status, string msg) { this.ParallelStatusChangedEvent?.Invoke(status, msg); } //设计点 private void btnDesign_Click(object sender, EventArgs e) { var qtext = this.txtDesignQ.Text.Trim(); if (string.IsNullOrEmpty(qtext)) { TipFormHelper.ShowWarn("请输入设计点流量!"); return; } var htext = this.txtDesignH.Text.Trim(); if (string.IsNullOrEmpty(htext)) { TipFormHelper.ShowWarn("请输入设计点扬程!"); return; } var q = double.Parse(qtext); var h = double.Parse(htext); this.pumpParallelChart1.SetDesignPoint(q, h); } } }