namespace Yw.WinFrmUI.Phart { public partial class PumpChartExcelEditCtrl : DevExpress.XtraEditors.XtraUserControl { public PumpChartExcelEditCtrl() { InitializeComponent(); this.gridView1.SetDefaultEditView(); this.gridView1.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; this.repImgCmbCurveType.Items.Add("流量扬程", Yw.Ahart.eCurveType.QH, -1); this.repImgCmbCurveType.Items.Add("流量效率", Yw.Ahart.eCurveType.QE, -1); this.repImgCmbCurveType.Items.Add("流量功率", Yw.Ahart.eCurveType.QP, -1); this.repImgCmbFeatType.Items.Add("穿过点", Yw.Ahart.eFeatType.Through, -1); this.repImgCmbFeatType.Items.Add("二次拟合", Yw.Ahart.eFeatType.Quadratic, -1); this.repImgCmbFeatType.Items.Add("三次拟合", Yw.Ahart.eFeatType.Cubic, -1); this.repImgCmbFeatType.Items.Add("四次拟合", Yw.Ahart.eFeatType.Quartic, -1); this.repImgCmbEditModel.Items.Add("鼠标", 0, -1); this.repImgCmbEditModel.Items.Add("键盘", 1, -1); this.pumpEditChart1.DefinePointChangedEvent += PumpEditChart1_DefinePointChangedEvent1; this.pumpEditChart1.SelectedPointIndexChangedEvent += (index) => { this.gridView1.FocusedRowHandle = index; }; this.Enabled = false; } private List _def_qh_pt_list; private List _def_qe_pt_list; private List _def_qp_pt_list; private Yw.Ahart.eFeatType _feat_type_qh; private Yw.Ahart.eFeatType _feat_type_qe; private Yw.Ahart.eFeatType _feat_type_qp; private Yw.Ahart.eCurveType _edit_curve_type; /// /// 绑定数据 /// public void SetBindingData( List def_qh_pt_list, List def_qe_pt_list, List def_qp_pt_list, Yw.Ahart.eFeatType feat_type_qh = Ahart.eFeatType.Cubic, Yw.Ahart.eFeatType feat_type_qe = Ahart.eFeatType.Cubic, Yw.Ahart.eFeatType feat_type_qp = Ahart.eFeatType.Cubic, Yw.Ahart.eCurveType curve_type = Ahart.eCurveType.QH) { _edit_curve_type = curve_type; _feat_type_qh = feat_type_qh; _def_qh_pt_list = def_qh_pt_list?.Select(x => new Geometry.Point2d(x.X, x.Y)).ToList(); _feat_type_qe = feat_type_qe; _def_qe_pt_list = def_qe_pt_list?.Select(x => new Geometry.Point2d(x.X, x.Y)).ToList(); _feat_type_qp = feat_type_qp; _def_qp_pt_list = def_qp_pt_list?.Select(x => new Geometry.Point2d(x.X, x.Y)).ToList(); SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type); this.barImgCmbCurveType.EditValue = _edit_curve_type; this.barEditModel.EditValue = 0; this.barFeatType.EditValue = _feat_type_qh; this.bindingSource1.DataSource = _def_qh_pt_list; this.bindingSource1.ResetBindings(false); this.Enabled = true; } private void PumpEditChart1_DefinePointChangedEvent1(Ahart.eCurveType curve_type, List pt_list) { switch (curve_type) { case Ahart.eCurveType.QH: { _def_qh_pt_list = pt_list; this.bindingSource1.DataSource = _def_qh_pt_list; } break; case Ahart.eCurveType.QE: { _def_qe_pt_list = pt_list; this.bindingSource1.DataSource = _def_qe_pt_list; } break; case Ahart.eCurveType.QP: { _def_qp_pt_list = pt_list; this.bindingSource1.DataSource = _def_qp_pt_list; } break; } this.bindingSource1.ResetBindings(false); SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type); } //设置图表 private void SetChart( List def_qh_pt_list, List def_qe_pt_list, List def_qp_pt_list, Yw.Ahart.eFeatType feat_type_qh, Yw.Ahart.eFeatType feat_type_qe, Yw.Ahart.eFeatType feat_type_qp, Yw.Ahart.eCurveType curve_type ) { var fit_qh_pt_list = def_qh_pt_list?.GetPointList(feat_type_qh); var fit_qe_pt_list = def_qe_pt_list?.GetPointList(feat_type_qe); var fit_qp_pt_list = def_qp_pt_list?.GetPointList(feat_type_qp); this.pumpEditChart1.SetBindingData(def_qh_pt_list, fit_qh_pt_list, def_qe_pt_list, fit_qe_pt_list, def_qp_pt_list, fit_qp_pt_list, curve_type); } //值变换 private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) { SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type); } //曲线类型 private void barImgCmbCurveType_EditValueChanged(object sender, EventArgs e) { _edit_curve_type = (Yw.Ahart.eCurveType)this.barImgCmbCurveType.EditValue; var (axis_x_title, axis_y_title) = PhartAxisTitleHelper.Get(_edit_curve_type); this.colX.Caption = axis_x_title; this.colY.Caption = axis_y_title; switch (_edit_curve_type) { case Ahart.eCurveType.QH: { this.bindingSource1.DataSource = _def_qh_pt_list; } break; case Ahart.eCurveType.QE: { this.bindingSource1.DataSource = _def_qe_pt_list; } break; case Ahart.eCurveType.QP: { this.bindingSource1.DataSource = _def_qp_pt_list; } break; } this.bindingSource1.ResetBindings(false); SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type); } //拟合类型 private void barFeatType_EditValueChanged(object sender, EventArgs e) { var feat_type = (Yw.Ahart.eFeatType)this.barFeatType.EditValue; switch (_edit_curve_type) { case Ahart.eCurveType.QH: _feat_type_qh = feat_type; break; case Ahart.eCurveType.QE: _feat_type_qe = feat_type; break; case Ahart.eCurveType.QP: _feat_type_qp = feat_type; break; } SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type); } //鼠标模式 private void barEditModel_EditValueChanged(object sender, EventArgs e) { var index = (int)this.barEditModel.EditValue; this.pumpEditChart1.MouseModel = index == 0; } //计算 private void barBtnCalc_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_def_qh_pt_list == null || !_def_qh_pt_list.Any()) return; bool is_from_zero; if (_def_qh_pt_list.Last().X > 20) is_from_zero = _def_qh_pt_list.First().X < 1; else is_from_zero = _def_qh_pt_list.First().X < 0.3; switch (_edit_curve_type) { case Ahart.eCurveType.QE: { _def_qe_pt_list = Yw.Pump.CalculationHelper.CalcuE(_def_qh_pt_list, _feat_type_qh, _def_qp_pt_list, _feat_type_qp, Yw.Pump.ConstantParas.WaterDensity, is_from_zero); this.bindingSource1.DataSource = _def_qe_pt_list; } break; case Ahart.eCurveType.QP: { double ref_zero_power = -1; if (_def_qp_pt_list != null && _def_qp_pt_list.Count > 0) ref_zero_power = _def_qp_pt_list.First().Y; _def_qp_pt_list = Yw.Pump.CalculationHelper.CalcuP(_feat_type_qp, _def_qh_pt_list, _feat_type_qh, _def_qe_pt_list, _feat_type_qe, Yw.Pump.ConstantParas.WaterDensity, ref_zero_power, is_from_zero); this.bindingSource1.DataSource = _def_qp_pt_list; } break; } this.bindingSource1.ResetBindings(false); SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type); } //添加点 private void barAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_def_qh_pt_list == null || !_def_qh_pt_list.Any()) return; List def_pt_list = null; switch (_edit_curve_type) { case Ahart.eCurveType.QH: def_pt_list = _def_qh_pt_list; break; case Ahart.eCurveType.QE: def_pt_list = _def_qe_pt_list; break; case Ahart.eCurveType.QP: def_pt_list = _def_qp_pt_list; break; } if (def_pt_list == null) return; double x = 0; double y = 1; if (def_pt_list.Count > 0) { x = def_pt_list.Last().X; y = def_pt_list.Last().Y; } def_pt_list.Add(new Geometry.Point2d(x, y)); this.bindingSource1.ResetBindings(false); this.gridView1.FocusedRowHandle = def_pt_list.Count - 1; SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type); } //删除点 private void btnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_def_qh_pt_list == null || !_def_qh_pt_list.Any()) return; List def_pt_list = null; Yw.Ahart.eFeatType feat_type = Ahart.eFeatType.Cubic; switch (_edit_curve_type) { case Ahart.eCurveType.QH: def_pt_list = _def_qh_pt_list; feat_type=_feat_type_qh; break; case Ahart.eCurveType.QE: def_pt_list = _def_qe_pt_list; feat_type = _feat_type_qe; break; case Ahart.eCurveType.QP: def_pt_list = _def_qp_pt_list; feat_type = _feat_type_qp; break; } var row = this.gridView1.GetCurrentViewModel(def_pt_list); if (row == null) return; var count = def_pt_list.Count - 1; switch (feat_type) { case Ahart.eFeatType.Cubic: { if (count < 4) { TipFormHelper.ShowInfo("点数少于4个点"); return; } } break; case Ahart.eFeatType.Through: { if (count < 1) { TipFormHelper.ShowInfo("点数少于1个点"); return; } } break; case Ahart.eFeatType.Quadratic: { if (count < 3) { TipFormHelper.ShowInfo("点数少于3个点"); return; } } break; case Ahart.eFeatType.Quartic: { if (count < 5) { TipFormHelper.ShowInfo("点数少于5个点"); return; } } break; } def_pt_list.Remove(row); this.bindingSource1.ResetBindings(false); SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type); } /// /// 获取数据 /// public bool Get( out List def_qh_pt_list, out List def_qe_pt_list, out List def_qp_pt_list, out Yw.Ahart.eFeatType feat_type_qh, out Yw.Ahart.eFeatType feat_type_qe, out Yw.Ahart.eFeatType feat_type_qp) { def_qh_pt_list = _def_qh_pt_list; def_qe_pt_list = _def_qe_pt_list; def_qp_pt_list = _def_qp_pt_list; feat_type_qh = _feat_type_qh; feat_type_qe = _feat_type_qe; feat_type_qp = _feat_type_qp; if (def_qh_pt_list == null || !def_qh_pt_list.Any()) return false; return true; } } }