using DevExpress.XtraEditors; using System.Data; using Yw.WinFrmUI.Phart; //编辑原始的性能曲线 namespace HStation.WinFrmUI { public partial class CompressorPerform2dEditCtrl : DevExpress.XtraEditors.XtraUserControl { public CompressorPerform2dEditCtrl() { InitializeComponent(); this.gridView1.SetNormalEditView(); this.gridView1.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; this.curveExpressEditChart.OnDefinePointChanged += FeatCurvesDispCtrl1_OnDefinePointChanged; } private List _pt_ql_list = null; private List _fitCurvePoints = null; public void SetAxisTile(string x, string y) { this.curveExpressEditChart.SetAxisTitle(x, y); } /// /// 初始化数据 /// public void SetBindingData() { _pt_ql_list = null; _fitCurvePoints = new List(); this.bindingSource1.DataSource = _fitCurvePoints; } /// /// 初始化数据(目前没有定义点) /// public void SetBindingData(Yw.Geometry.CubicSpline2d cubic_spline_ql) { if (cubic_spline_ql == null) return; List pt_ql_list; pt_ql_list = cubic_spline_ql.GetPointList(12); SetBindingData(pt_ql_list, pt_ql_list); } /// /// 初始化数据 /// public void SetBindingData(List pt_ql_list, List def_pt_ql_list) { _fitCurvePoints = new List(); this.bindingSource1.DataSource = _fitCurvePoints; _pt_ql_list = null; if (pt_ql_list == null || pt_ql_list.Count < 4) { this.curveExpressEditChart.InitialChartData(); return; } _pt_ql_list = pt_ql_list; this.cmbCurveType.Properties.Items.Clear(); this.cmbCurveType.Properties.Items.Add("开度损失曲线"); this.cmbCurveType.SelectedIndex = 0; this.curveExpressEditChart.SetBindingData(_pt_ql_list, def_pt_ql_list); ReloadCurvePoints(); } //性能曲线点修改事件 private void FeatCurvesDispCtrl1_OnDefinePointChanged(List points) { _fitCurvePoints.Clear(); _pt_ql_list = points; foreach (Yw.Geometry.Point2d pt in _pt_ql_list) { var x = Math.Round(pt.X, 2); var y = Math.Round(pt.Y, 2); _fitCurvePoints.Add(new Yw.Geometry.Point2d(x, y)); } this.bindingSource1.ResetBindings(false); } //单元格修改后触发 private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) { _pt_ql_list = _fitCurvePoints.Select(x => new Yw.Geometry.Point2d(x)).ToList(); ReloadCurvePoints(); } //按钮点击事件 private void buttonEdit_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) { if (e.Button.Tag == null) return; var tag = e.Button.Tag.ToString(); switch (tag) { case "Delete": DeletePoint(); break; case "InsertPoint": InsertPoint(); break; case "ReloadCalcu": ReloadCalcu(); break; } } /// /// 刷新数据 /// private void ReloadCurvePoints() { _fitCurvePoints.Clear(); foreach (Yw.Geometry.Point2d pt in _pt_ql_list) _fitCurvePoints.Add(new Yw.Geometry.Point2d(pt.X, pt.Y)); var list = _fitCurvePoints?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList(); this.curveExpressEditChart.UpdateCurve(list); this.bindingSource1.ResetBindings(false); } //删除点 private void DeletePoint() { var row = this.gridView1.GetFocusedRow() as Yw.Geometry.Point2d; if (row == null) return; if (XtraMessageBox.Show("是否删除此点?", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) return; _fitCurvePoints.Remove(row); this.bindingSource1.ResetBindings(false); var points = new List(); foreach (var curvePoint in _fitCurvePoints) { var x = curvePoint.X; var y = curvePoint.Y; points.Add(new Yw.Geometry.Point2d(x, y)); } _pt_ql_list = points; this.curveExpressEditChart.UpdateCurve(points); } //插入点 private void InsertPoint() { var dlg = new InputXYDlg(); List points = null; dlg.SetLabelX("Q"); dlg.SetLabelY("L"); points = _pt_ql_list; if (dlg.ShowDialog() != DialogResult.OK) return; points.Add(new Yw.Geometry.Point2d(dlg.X, dlg.Y)); ReloadCurvePoints(); } //重新计算 private void ReloadCalcu() { if (_fitCurvePoints == null) return; ReloadCurvePoints(); } /// /// 设置曲线坐标 /// public void SetCoordinateByDialog() { this.curveExpressEditChart.SetChartAxis(); } /// /// 获取点信息 /// /// /// public bool GetPoints(out List pt_ql_list) { pt_ql_list = _pt_ql_list?.ToList(); if (pt_ql_list == null || pt_ql_list.Count < 4) { XtraMessageBox.Show("点数过少!"); return false; } return true; } } }