using DevExpress.Mvvm.Native; using System.Data; using Yw.Pump; using Yw.Vmo; using Yw.WinFrmUI.Phart; namespace HStation.WinFrmUI { public partial class SimulationPumpAnalyChartCtrl : DevExpress.XtraEditors.XtraUserControl { public SimulationPumpAnalyChartCtrl() { InitializeComponent(); this.pumpRunViewChart1.RunPointSelectedEvent += PumpRunViewChart1_RunPointSelectedEvent; } private Yw.Model.HydroModelInfo _hydroInfo = null;//水力信息 private Yw.Model.HydroPumpInfo _pumpInfo = null;//水泵信息 private Dictionary _allCalcuResultDict = null;//计算结果字典 /// /// 绑定数据 /// public void SetBindingData ( Yw.Model.HydroModelInfo hydroInfo, Yw.Model.HydroPumpInfo pumpInfo, Dictionary allCalcuResultDict ) { if (hydroInfo == null) { return; } if (pumpInfo == null) { return; } _hydroInfo = hydroInfo; _pumpInfo = pumpInfo; _allCalcuResultDict = allCalcuResultDict; var vm = CreateViewModel(hydroInfo, pumpInfo, allCalcuResultDict); SetBindingData(vm); } /// /// 绑定数据 /// public void SetBindingData(PumpRunViewViewModel vm) { this.pumpRunViewChart1.SetBindingData(vm); this.barCheckE.Checked = this.pumpRunViewChart1.QEVisible; this.barCheckP.Checked = this.pumpRunViewChart1.QPVisble; if (vm != null && vm.Items != null) { var item = vm.Items.FirstOrDefault(); SetCurrent(item); } } //设置当前 private void SetCurrent(PumpRunViewItemViewModel item) { if (item != null) { this.barTxtQ.EditValue = $"{Math.Round(item.Q, 1)}m³/h"; this.barTxtH.EditValue = $"{Math.Round(item.H, 2)}m"; this.barTxtP.EditValue = $"{Math.Round(item.P ?? 0, 1)}kW"; this.barTxtE.EditValue = $"{Math.Round(item.E ?? 0, 1)}%"; } } //创建视图 private PumpRunViewViewModel CreateViewModel ( Yw.Model.HydroModelInfo hydroInfo, Yw.Model.HydroPumpInfo pumpInfo, Dictionary allCalcuResultDict ) { if (hydroInfo == null) { return default; } if (pumpInfo == null) { return default; } var vm = new PumpRunViewViewModel(); vm.Id = _pumpInfo.Code; vm.Name = _pumpInfo.Name; vm.CurveName = $"额定曲线({_pumpInfo.RatedHz}hz)"; vm.RatedQ = _pumpInfo.RatedQ; vm.RatedH = _pumpInfo.RatedH; vm.RatedP = _pumpInfo.RatedP; vm.RatedN = _pumpInfo.RatedN; vm.RatedHz = _pumpInfo.RatedHz; vm.Color = Color.Black; var curveqh = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.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 curveqp = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.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 curveqe = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.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; } } if (allCalcuResultDict != null && allCalcuResultDict.Count > 0) { vm.Items = new List(); foreach (var kvp in allCalcuResultDict) { var working = kvp.Key; var workingPump = kvp.Value.Items?.Find(x => x.Code == pumpInfo.Code); if (workingPump == null) { continue; } if (workingPump.LinkStatus != Yw.Hydro.LinkStatus.Open) { continue; } var vmItem = new PumpRunViewItemViewModel(); vm.Items.Add(vmItem); vmItem.Id = working.ID.ToString(); vmItem.Name = working.Name; if (working.ID < 1) { vmItem.Name = "运行"; } vmItem.Hz = workingPump.CurrentHz; vmItem.N = workingPump.CurrentN; vmItem.Color = HydroPumpCurveColorHelper.GetRandomColor(allCalcuResultDict.Keys.ToList().IndexOf(working)); vmItem.CurveName = $"{working.Name}({vmItem.Hz}hz)"; if (working.ID < 1) { vmItem.CurveName = $"运行曲线({vmItem.Hz}hz)"; } vmItem.Q = workingPump.CurrentQ ?? 0; vmItem.H = workingPump.CurrentH ?? 0; vmItem.P = workingPump.CurrentP; vmItem.E = workingPump.CurrentE; vmItem.CurveQH = workingPump.CurrentCurveQH; vmItem.CurveQP = workingPump.CurrentCurveQP; vmItem.CurveQE = workingPump.CurrentCurveQE; } } return vm; } //效率线 private void barCheckE_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.pumpRunViewChart1.QEVisible = this.barCheckE.Checked; } //功率线 private void barCheckP_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.pumpRunViewChart1.QPVisble = this.barCheckP.Checked; } //设置坐标轴 private void barBtnCoord_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.pumpRunViewChart1.SetChartAxis(); } //设置当前 private void PumpRunViewChart1_RunPointSelectedEvent(PumpRunViewItemViewModel obj) { SetCurrent(obj); } } }