using Yw.WinFrmUI.Phart; 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.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.universalEditChart1.DefinePointChangedEvent += UniversalEditChart1_DefinePointChangedEvent; this.universalEditChart1.SelectedPointIndexChangedEvent += (index) => { this.gridView1.FocusedRowHandle = index; }; this.Enabled = false; } 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); this.Enabled = true; } 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; var bol = PhartVerifyHelper.VerifyCount(_feat_type, count); if (!bol) return; _def_pt_list.Remove(row); this.bindingSource1.ResetBindings(false); SetChart(_feat_type, _def_pt_list); } //粘贴板覆盖 private void barBtnPastePlateCovering_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (!ClipboardCurveTextUIHelper.CopyDouble(out List> list)) return; if (list == null || list.Count < 1) return; if (list.Count != 2) { TipFormHelper.ShowError("数据不完整"); return; } var cell_count = list.Count; var min_row_count = list.Min(x => x.Count); var pt_list = new List(min_row_count); for (int i = 0; i < min_row_count; i++) { var x = list[0][i]; var y = list[1][i]; if (x.HasValue && y.HasValue) { pt_list.Add(new Geometry.Point2d(x.Value, y.Value)); } } var bol = PhartVerifyHelper.VerifyCount(_feat_type, pt_list.Count); if (!bol) return; _def_pt_list.Clear(); _def_pt_list.AddRange(pt_list); 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; } } }