using DevExpress.PivotGrid.PivotTable; using DevExpress.Xpo.Helpers; 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 SimulationSinglePumpFeatCtrl : DevExpress.XtraEditors.XtraUserControl { public SimulationSinglePumpFeatCtrl() { InitializeComponent(); this.layoutControl1.SetupLayoutControl(); this.pumpOperationChart1.DesignPointChangedEvent += PumpParallelChart1_DesignPointChangedEvent; this.pumpOperationChart1.QueryPointChangedEvent += PumpParallelChart1_QueryPointChangedEvent; this.hydroSinglePumpListExtendGridCtrl1.StateChangedEvent += HydroSinglePumpListExtendGridCtrl1_StateChangedEvent; } /// /// 保存事件 /// public event Action SaveEvent; private Yw.Model.HydroModelInfo _hydroInfo = null; private Yw.Model.HydroPumpInfo _pumpInfo = null; /// /// 绑定数据 /// public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Yw.Model.HydroPumpInfo pumpInfo) { if (hydroInfo == null) { return; } if (pumpInfo == null) { return; } _hydroInfo = hydroInfo; _pumpInfo = pumpInfo; this.hydroSinglePumpListExtendGridCtrl1.SetBindingData(pumpInfo); var allStateList = this.hydroSinglePumpListExtendGridCtrl1.GetStateList(); var vm = CreateViewModel(allStateList); this.pumpOperationChart1.SetBindingData(vm); } //状态改变事件 private void HydroSinglePumpListExtendGridCtrl1_StateChangedEvent(List allStateList) { if (_hydroInfo == null) { return; } if (_pumpInfo == null) { return; } var vm = CreateViewModel(allStateList); this.pumpOperationChart1.SetBindingData(vm); } //保存 private void btnSave_Click(object sender, EventArgs e) { Save(); } //创建 private PumpOperationViewModel CreateViewModel(List allStateList) { if (_hydroInfo == null) { return default; } if (_pumpInfo == null) { return default; } if (allStateList == null || allStateList.Count != 2) { return default; } var rated = allStateList[0]; var current = allStateList[1]; var vm = new PumpOperationViewModel(); vm.Id = _pumpInfo.Code; vm.Name = _pumpInfo.Name; vm.RatedQ = _pumpInfo.RatedQ.HasValue ? _pumpInfo.RatedQ.Value : 0; vm.RatedH = _pumpInfo.RatedH.HasValue ? _pumpInfo.RatedH.Value : 0; vm.RatedP = _pumpInfo.RatedP; vm.RatedN = _pumpInfo.RatedN.HasValue ? _pumpInfo.RatedN.Value : 0; vm.RatedHz = _pumpInfo.RatedHz; vm.CurrentHz = current.Hz; vm.CurrentN = current.N; vm.CurrentStatus = _pumpInfo.LinkStatus == Yw.Hydro.PumpStatus.Open; 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 = new CubicSpline2d(qh_pts); var qh_current_pts = qh_pts.GetQHPointListByN(rated.Hz, current.Hz); vm.CurrentCurveQH = new CubicSpline2d(qh_current_pts); } } var curveqp = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQP); if (curveqp != null) { var qppts = curveqp.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); if (qppts != null && qppts.Count > 3) { vm.CurveQP = new CubicSpline2d(qppts); var sqppts = qppts.GetQHPointListByN(rated.Hz, current.Hz); vm.CurrentCurveQP = new CubicSpline2d(sqppts); } } var curveqe = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQE); if (curveqe != null) { var qepts = curveqe.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); if (qepts != null && qepts.Count > 3) { vm.CurveQE = new CubicSpline2d(qepts); var sqepts = qepts.GetQHPointListByN(rated.Hz, current.Hz); vm.CurrentCurveQE = new CubicSpline2d(sqepts); } } return vm; } //设计点改变 private void PumpParallelChart1_DesignPointChangedEvent(List obj) { var vmList = obj?.Select(x => new HydroSinglePumpDesignPointViewModel() { Name = x.Name, Hz = x.Hz, N = x.N, 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.hydroSinglePumpDesignPointListGridCtrl1.SetBindingData(vmList); } //查询点改变 private void PumpParallelChart1_QueryPointChangedEvent(List obj) { var vmList = obj?.Select(x => new HydroSinglePumpQueryPointViewModel() { Name = x.Name, Hz = x.Hz, N = x.N, 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.hydroSinglePumpQueryPointListGridCtrl1.SetBindingData(vmList); } //设计点 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.pumpOperationChart1.SetDesignPoint(q, h); } /// /// 保存 /// public void Save() { if (this.hydroSinglePumpListExtendGridCtrl1.HasChanged) { this.hydroSinglePumpListExtendGridCtrl1.HasChanged = false; var result = XtraMessageBox.Show("是否使用现有状态更新模型?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes; if (!result) { return; } var allStateList = this.hydroSinglePumpListExtendGridCtrl1.GetStateList(); if (allStateList == null || allStateList.Count != 2) { return; } var working = new HydroWorkingPumpViewModel() { LinkStatus = _pumpInfo.LinkStatus, CurrentHz = allStateList[1].Hz }; this.SaveEvent?.Invoke(working); } } } }