using Yw.Ahart; namespace Yw.WinFrmUI.Phart { public partial class UniversalChartExcelEditCtrl : DevExpress.XtraEditors.XtraUserControl { public UniversalChartExcelEditCtrl() { InitializeComponent(); this.gridView1.SetDefaultEditView(); this.gridView1.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; 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.universalEditChart1.DefinePointChangedEvent += UniversalEditChart1_DefinePointChangedEvent; this.universalEditChart1.SelectedPointIndexChangedEvent += (index) => { this.gridView1.FocusedRowHandle = index; }; } private Yw.Ahart.eFeatType _feat_type; private List _def_pt_list = null; /// /// 绑定数据 /// public void SetBindingData(Yw.Ahart.eCurveType curve_type, List def_pt_list, Yw.Ahart.eFeatType feat_type = Yw.Ahart.eFeatType.Cubic) { _def_pt_list = def_pt_list?.Select(t => { var x = Math.Round(t.X, 2); var y = Math.Round(t.Y, 2); return new Yw.Geometry.Point2d(x, y); }).ToList(); _feat_type = feat_type; _def_pt_list ??= new List(); SetChart(_feat_type, _def_pt_list); var (axis_x_title, axis_y_title) = PhartAxisTitleHelper.Get(curve_type); this.colX.Caption = axis_x_title; this.colY.Caption = axis_y_title; this.universalEditChart1.AxisXTitle = axis_x_title; this.universalEditChart1.AxisYTitle = axis_y_title; this.barEditModel.EditValue = 0; this.barFeatType.EditValue = _feat_type; this.bindingSource1.DataSource = _def_pt_list; this.bindingSource1.ResetBindings(false); } private void UniversalEditChart1_DefinePointChangedEvent(List pt_list) { _def_pt_list.Clear(); if (pt_list != null && pt_list.Any()) _def_pt_list.AddRange(pt_list); this.bindingSource1.ResetBindings(false); SetChart(_feat_type, _def_pt_list); } //设置图表 private void SetChart(Yw.Ahart.eFeatType feat_type, List def_pt_list) { if (def_pt_list == null || def_pt_list.Count < 4) { this.universalEditChart1.Clear(); return; } var fit_pt_list = def_pt_list.GetPointList(feat_type); this.universalEditChart1.SetBindingData(def_pt_list, fit_pt_list); } //值变换 private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) { SetChart(_feat_type, _def_pt_list); } //拟合类型 private void barFeatType_EditValueChanged(object sender, EventArgs e) { _feat_type = (Yw.Ahart.eFeatType)this.barFeatType.EditValue; SetChart(_feat_type, _def_pt_list); } //鼠标模式 private void barEditModel_EditValueChanged(object sender, EventArgs e) { var index = (int)this.barEditModel.EditValue; this.universalEditChart1.MouseModel = index == 0; } //添加点 private void barAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { 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(_feat_type, _def_pt_list); } //删除点 private void btnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_def_pt_list == null || !_def_pt_list.Any()) return; 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(_feat_type, _def_pt_list); } /// /// 获取数据 /// public bool Get(out Yw.Ahart.eFeatType feat_type, out List pt_list) { feat_type = _feat_type; pt_list = _def_pt_list; if (_def_pt_list == null || !_def_pt_list.Any()) return false; return true; } } }