From 9be9ba4e159969fb5e32648c2c34e912ccc3ae6d Mon Sep 17 00:00:00 2001 From: duheng <2286773002@qq.com> Date: 星期五, 28 三月 2025 14:22:42 +0800 Subject: [PATCH] 优化细节问题 --- WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs | 517 +++++++++++++++++++++++++++++---------------------------- 1 files changed, 262 insertions(+), 255 deletions(-) diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs index 3a4afb9..6a95028 100644 --- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs +++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-universal/02-edit/UniversalEditChart.cs @@ -23,11 +23,11 @@ private Series _series_edit_pt; - private List<Yw.Geometry.Point2d> _def_pt_list; + private List<Yw.Geometry.Point2d> _def_pt_list; private List<Yw.Geometry.Point2d> _fit_pt_list; - + private UniversalCoordinate _coordinate; - private bool _initial_data = false; + private bool _initial_data = false; private bool _mouse_mode = false;//榧犳爣妯″紡 #endregion @@ -63,7 +63,7 @@ _axis_y.Title.Text = value; } } - + /// <summary> /// 榧犳爣妯″紡 /// </summary> @@ -75,7 +75,7 @@ } set { - _mouse_mode = value; + _mouse_mode = value; } } @@ -93,9 +93,13 @@ /// </summary> public event Action<List<Yw.Geometry.Point2d>> DefinePointChangedEvent; + /// <summary> + /// 閫変腑鐐� + /// </summary> + public event Action<int> SelectedPointIndexChangedEvent; #endregion - #region Initial + #region Private Initial /// <summary> /// 鍒濆鍖栧浘琛� @@ -114,16 +118,17 @@ _diagram = (XYDiagram)chartControl1.Diagram; - _default_pane=_diagram.DefaultPane; - _axis_x = _diagram.AxisX; + _default_pane = _diagram.DefaultPane; + _axis_x = _diagram.AxisX; + _axis_x.SetAxisXQDisplay(); _axis_y = _diagram.AxisY; - + _axis_y.SetAxisYQHDisplay(); _axis_x.Visibility = DefaultBoolean.False; _axis_x.GridLines.Visible = false; _axis_y.Visibility = DefaultBoolean.False; _axis_y.GridLines.Visible = false; - + this.chartControl1.SetChartMonoColorDisplay(); } @@ -144,249 +149,8 @@ #endregion Initial - #region SetBindingData + #region Private Chart Event - /// <summary> - /// 缁戝畾鏁版嵁 - /// </summary> - public void Clear() - { - _initial_data = false; - _def_pt_list = null; - _fit_pt_list = null; - _coordinate = null; - _series_edit_pt = null; - - this.chartControl1.BeginInit(); - this.chartControl1.Series.Clear(); - this.chartControl1.AnnotationRepository.Clear(); - this.chartControl1.Legend.CustomItems.Clear(); - this.chartControl1.EndInit(); - } - - - /// <summary> - /// 缁戝畾鏁版嵁 - /// </summary> - public void SetBindingData(List<Yw.Geometry.Point2d> def_pt_list, List<Yw.Geometry.Point2d> fit_pt_list, string coordinate = null, Color? color = null) - { - _initial_data = false; - _def_pt_list = def_pt_list?.Select(x => new Geometry.Point2d(x.X, x.Y)).ToList(); - _fit_pt_list = fit_pt_list?.Select(x => new Geometry.Point2d(x.X, x.Y)).ToList(); - _coordinate = UniversalCoordinate.ToModel(coordinate); - _series_edit_pt = null; - - if (color == null) - color = Color.DodgerBlue; - - this.chartControl1.BeginInit(); - this.chartControl1.Series.Clear(); - this.chartControl1.AnnotationRepository.Clear(); - this.chartControl1.Legend.CustomItems.Clear(); - if (IsInvalidData()) - { - _initial_data = false; - this.chartControl1.EndInit(); - return; - } - - _series_edit_pt = AddPointSeries(color.Value, _axis_x, _axis_y, _default_pane, _def_pt_list); - AddLineSeries(color.Value, _axis_x, _axis_y, _default_pane, _fit_pt_list); - if (_coordinate == null) - SetCoordinate(); - - SetChartAxis(); - this.chartControl1.EndInit(); - _initial_data = true; - } - - //鏄惁鏄棤鏁堟暟鎹� - private bool IsInvalidData() - { - if (_def_pt_list == null || !_def_pt_list.Any()) - { - return true; - } - if (_fit_pt_list == null || !_fit_pt_list.Any()) - { - return true; - } - return false; - } - - #region Add Chart Data - - private Series AddPointSeries(Color color, AxisXBase axis_x, AxisYBase axis_y, XYDiagramPaneBase pane, List<Yw.Geometry.Point2d> pt_list) - { - if (pt_list == null || !pt_list.Any()) - return null; - - var view = new DevExpress.XtraCharts.PointSeriesView(); - view.PointMarkerOptions.Size = 8; - view.PointMarkerOptions.Kind = MarkerKind.Circle; - view.PointMarkerOptions.BorderColor = color; - view.Color = color; - view.AxisX = axis_x; - view.AxisY = axis_y; - view.EmptyPointOptions.Color = Color.Transparent; - view.Pane = pane; - - var series_pt_list = new List<SeriesPoint>(); - for (int i = 0; i < pt_list.Count; i++) - { - var pt = pt_list[i]; - var series_pt = new DevExpress.XtraCharts.SeriesPoint(pt.X, new double[] { pt.Y }); - series_pt.Tag = i; - series_pt_list.Add(series_pt); - } - - var series = new DevExpress.XtraCharts.Series(); - series.ShowInLegend = false; - series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical; - series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False; - series.CrosshairEnabled = DefaultBoolean.False; - series.CrosshairLabelVisibility = DefaultBoolean.False; - series.ToolTipEnabled = DefaultBoolean.False; - series.SeriesPointsSorting = SortingMode.None; - series.Visible = true; - series.View = view; - series.CrosshairLabelPattern = "{A}"; - series.Points.AddRange(series_pt_list.ToArray()); - this.chartControl1.Series.Add(series); - - return series; - } - - private void AddLineSeries(Color color, AxisXBase axis_x, AxisYBase axis_y, XYDiagramPaneBase pane, List<Yw.Geometry.Point2d> pt_list, DashStyle dash = DashStyle.Solid) - { - if (pt_list == null || !pt_list.Any()) - return; - - var view = new DevExpress.XtraCharts.LineSeriesView(); - view.LineStyle.DashStyle = dash; - view.LineStyle.LineJoin = System.Drawing.Drawing2D.LineJoin.Round; - view.LineStyle.Thickness = 2; - view.Color = color; - view.EnableAntialiasing = DefaultBoolean.True; - view.MarkerVisibility = DefaultBoolean.False; - view.AxisX = axis_x; - view.AxisY = axis_y; - view.EmptyPointOptions.Color = Color.Transparent; - view.Pane = pane; - - var series_pt_list = pt_list.Select(x => x.ToSeriesPoint()).ToArray(); - var series = new DevExpress.XtraCharts.Series(); - series.ShowInLegend = false; - series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical; - series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False; - series.CrosshairEnabled = DefaultBoolean.False; - series.ToolTipEnabled = DefaultBoolean.False; - series.SeriesPointsSorting = SortingMode.None; - series.Visible = true; - series.View = view; - series.Points.AddRange(series_pt_list); - - this.chartControl1.Series.Add(series); - } - - - #endregion - - #endregion - - - #region Set Axis - - private double _minX, _maxX; - private double _maxY = 0, _minY = 10000; - - /// <summary> - /// 璁剧疆鍧愭爣 - /// </summary> - private void SetCoordinate() - { - if (IsInvalidData()) - { - InitialCoordinate(); - return; - } - - _minX = _def_pt_list.Min(x => x.X); - _maxX = _def_pt_list.Max(x => x.X); - - _minY = _def_pt_list.Min(x => x.Y); - _maxY = _def_pt_list.Max(x => x.Y); - - _minX = Math.Min(_fit_pt_list.Min(x => x.X), _minX); - _maxX = Math.Min(_fit_pt_list.Max(x => x.X), _maxX); - - _minY = Math.Min(_fit_pt_list.Min(x => x.Y), _minY); - _maxY = Math.Min(_fit_pt_list.Max(x => x.Y), _maxY); - - - _coordinate = UniversalCoordinate.CalcCoordinate(_minX, _maxX, _minY, _maxY); - if (_coordinate == null) - return; - if (_coordinate.CoordMinX + _coordinate.CoordSpaceX * this._coordinate.GridNumberX < _maxX * 1.05) - { - _coordinate.GridNumberX++; - } - - } - - /// <summary> - /// 璁剧疆鍥捐〃杞� - /// </summary> - public void SetChartAxis() - { - if (_coordinate == null || IsInvalidData()) - { - _axis_x.Visibility = DefaultBoolean.False; - _axis_x.GridLines.Visible = false; - _axis_y.Visibility = DefaultBoolean.False; - _axis_y.GridLines.Visible = false; - return; - } - - //璁$畻鍒诲害 X - var axis_x_labels = new List<CustomAxisLabel>(); - var display_x = _coordinate.CoordMinX; - for (int i = 0; i < _coordinate.GridNumberX + 1; i++) - { - axis_x_labels.Add(new CustomAxisLabel(display_x.ToString("N0"), display_x)); - display_x = display_x + _coordinate.CoordSpaceX; - } - - _axis_x.CustomLabels.Clear(); - _axis_x.CustomLabels.AddRange(axis_x_labels.ToArray()); - _axis_x.Visibility = DefaultBoolean.True; - _axis_x.GridLines.Visible = true; - - - //璁$畻鍒诲害 Y - var axis_y_labels = new List<CustomAxisLabel>(); - var display_y = _coordinate.CoordMinY + _coordinate.CoordSpaceY * _coordinate.StartLineNoY; - for (int i = _coordinate.StartLineNoY; i < _coordinate.EndLineNoY + 1; i++) - { - axis_y_labels.Add(new CustomAxisLabel(display_y.ToString(), display_y)); - display_y = display_y + _coordinate.CoordSpaceY; - } - - _axis_y.CustomLabels.Clear(); - _axis_y.CustomLabels.AddRange(axis_y_labels.ToArray()); - _axis_y.Visibility = DefaultBoolean.True; - _axis_y.GridLines.Visible = true; - - _axis_x.SetAxisRange(_coordinate.CoordMinX, _coordinate.DispMaxX()); - _axis_y.SetAxisRange(_coordinate.DispMinY(), _coordinate.DispMaxY()); - } - - - - #endregion Calc - - #region Chart Event - private int _pick_point_index = -1; private void chartControl1_MouseDown(object sender, MouseEventArgs e) { @@ -399,6 +163,7 @@ if (hitInfo.InSeriesPoint && hitInfo.SeriesPoint.Tag is int index) { _pick_point_index = index; + this.SelectedPointIndexChangedEvent?.Invoke(_pick_point_index); } } } @@ -427,7 +192,7 @@ if (_pick_point_index < 0) return; if (IsInvalidData()) - return; + return; var x = _series_edit_pt.Points[_pick_point_index].NumericalArgument; var y = _series_edit_pt.Points[_pick_point_index].Values[0]; x = Math.Round(x, 2); @@ -484,8 +249,250 @@ this.DefinePointChangedEvent?.Invoke(_def_pt_list); } - #endregion + #endregion - + #region Set + + /// <summary> + /// 缁戝畾鏁版嵁 + /// </summary> + public void Clear() + { + _initial_data = false; + _def_pt_list = null; + _fit_pt_list = null; + _coordinate = null; + _series_edit_pt = null; + + this.chartControl1.BeginInit(); + this.chartControl1.Series.Clear(); + this.chartControl1.AnnotationRepository.Clear(); + this.chartControl1.Legend.CustomItems.Clear(); + this.chartControl1.EndInit(); + } + + + /// <summary> + /// 缁戝畾鏁版嵁 + /// </summary> + public void SetBindingData(List<Yw.Geometry.Point2d> def_pt_list, List<Yw.Geometry.Point2d> fit_pt_list, string coordinate = null, Color? color = null) + { + _initial_data = false; + _def_pt_list = def_pt_list?.Select(x => new Geometry.Point2d(x.X, x.Y)).ToList(); + _fit_pt_list = fit_pt_list?.Select(x => new Geometry.Point2d(x.X, x.Y)).ToList(); + _coordinate = UniversalCoordinate.ToModel(coordinate); + _series_edit_pt = null; + + if (color == null) + color = Color.DodgerBlue; + + this.chartControl1.BeginInit(); + this.chartControl1.Series.Clear(); + this.chartControl1.AnnotationRepository.Clear(); + this.chartControl1.Legend.CustomItems.Clear(); + if (IsInvalidData()) + { + _initial_data = false; + this.chartControl1.EndInit(); + return; + } + + _series_edit_pt = AddPointSeries(color.Value, _axis_x, _axis_y, _default_pane, _def_pt_list); + AddLineSeries(color.Value, _axis_x, _axis_y, _default_pane, _fit_pt_list); + if (_coordinate == null) + SetCoordinate(); + + SetChartAxis(); + this.chartControl1.EndInit(); + _initial_data = true; + } + + //鏄惁鏄棤鏁堟暟鎹� + private bool IsInvalidData() + { + if (_def_pt_list == null || !_def_pt_list.Any()) + { + return true; + } + if (_fit_pt_list == null || !_fit_pt_list.Any()) + { + return true; + } + return false; + } + + #region Add Chart Data + + private Series AddPointSeries(Color color, AxisXBase axis_x, AxisYBase axis_y, XYDiagramPaneBase pane, List<Yw.Geometry.Point2d> pt_list) + { + if (pt_list == null || !pt_list.Any()) + return null; + + var view = new DevExpress.XtraCharts.PointSeriesView(); + view.PointMarkerOptions.Size = 8; + view.PointMarkerOptions.Kind = MarkerKind.Circle; + view.PointMarkerOptions.BorderColor = color; + view.Color = color; + view.AxisX = axis_x; + view.AxisY = axis_y; + view.EmptyPointOptions.Color = Color.Transparent; + view.Pane = pane; + + var series_pt_list = new List<SeriesPoint>(); + for (int i = 0; i < pt_list.Count; i++) + { + var pt = pt_list[i]; + var series_pt = new DevExpress.XtraCharts.SeriesPoint(pt.X, new double[] { pt.Y }); + series_pt.Tag = i; + series_pt_list.Add(series_pt); + } + + var series = new DevExpress.XtraCharts.Series(); + series.ShowInLegend = false; + series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical; + series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False; + series.CrosshairEnabled = DefaultBoolean.False; + series.CrosshairLabelVisibility = DefaultBoolean.False; + series.ToolTipEnabled = DefaultBoolean.False; + series.SeriesPointsSorting = SortingMode.None; + series.Visible = true; + series.View = view; + series.CrosshairLabelPattern = "{A}"; + series.Points.AddRange(series_pt_list.ToArray()); + this.chartControl1.Series.Add(series); + + return series; + } + + private void AddLineSeries(Color color, AxisXBase axis_x, AxisYBase axis_y, XYDiagramPaneBase pane, List<Yw.Geometry.Point2d> pt_list, DashStyle dash = DashStyle.Solid) + { + if (pt_list == null || !pt_list.Any()) + return; + + var view = new DevExpress.XtraCharts.LineSeriesView(); + view.LineStyle.DashStyle = dash; + view.LineStyle.LineJoin = System.Drawing.Drawing2D.LineJoin.Round; + view.LineStyle.Thickness = 2; + view.Color = color; + view.EnableAntialiasing = DefaultBoolean.True; + view.MarkerVisibility = DefaultBoolean.False; + view.AxisX = axis_x; + view.AxisY = axis_y; + view.EmptyPointOptions.Color = Color.Transparent; + view.Pane = pane; + + var series_pt_list = pt_list.Select(x => x.ToSeriesPoint()).ToArray(); + var series = new DevExpress.XtraCharts.Series(); + series.ShowInLegend = false; + series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical; + series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False; + series.CrosshairEnabled = DefaultBoolean.False; + series.ToolTipEnabled = DefaultBoolean.False; + series.SeriesPointsSorting = SortingMode.None; + series.Visible = true; + series.View = view; + series.Points.AddRange(series_pt_list); + + this.chartControl1.Series.Add(series); + } + + + #endregion + + #endregion + + #region Set Axis + + private double _minX, _maxX; + private double _maxY = 0, _minY = 10000; + + /// <summary> + /// 璁剧疆鍧愭爣 + /// </summary> + private void SetCoordinate() + { + if (IsInvalidData()) + { + InitialCoordinate(); + return; + } + + _minX = _def_pt_list.Min(x => x.X); + _maxX = _def_pt_list.Max(x => x.X); + + _minY = _def_pt_list.Min(x => x.Y); + _maxY = _def_pt_list.Max(x => x.Y); + + _minX = Math.Min(_fit_pt_list.Min(x => x.X), _minX); + _maxX = Math.Min(_fit_pt_list.Max(x => x.X), _maxX); + + _minY = Math.Min(_fit_pt_list.Min(x => x.Y), _minY); + _maxY = Math.Min(_fit_pt_list.Max(x => x.Y), _maxY); + + + _coordinate = UniversalCoordinate.CalcCoordinate(_minX, _maxX, _minY, _maxY); + if (_coordinate == null) + return; + if (_coordinate.CoordMinX + _coordinate.CoordSpaceX * this._coordinate.GridNumberX < _maxX * 1.05) + { + _coordinate.GridNumberX++; + } + + } + + /// <summary> + /// 璁剧疆鍥捐〃杞� + /// </summary> + public void SetChartAxis() + { + if (_coordinate == null || IsInvalidData()) + { + _axis_x.Visibility = DefaultBoolean.False; + _axis_x.GridLines.Visible = false; + _axis_y.Visibility = DefaultBoolean.False; + _axis_y.GridLines.Visible = false; + return; + } + + //璁$畻鍒诲害 X + var axis_x_labels = new List<CustomAxisLabel>(); + var display_x = _coordinate.CoordMinX; + for (int i = 0; i < _coordinate.GridNumberX + 1; i++) + { + axis_x_labels.Add(new CustomAxisLabel(display_x.ToString("N0"), display_x)); + display_x = display_x + _coordinate.CoordSpaceX; + } + + _axis_x.CustomLabels.Clear(); + _axis_x.CustomLabels.AddRange(axis_x_labels.ToArray()); + _axis_x.Visibility = DefaultBoolean.True; + _axis_x.GridLines.Visible = true; + + + //璁$畻鍒诲害 Y + var axis_y_labels = new List<CustomAxisLabel>(); + var display_y = _coordinate.CoordMinY + _coordinate.CoordSpaceY * _coordinate.StartLineNoY; + for (int i = _coordinate.StartLineNoY; i < _coordinate.EndLineNoY + 1; i++) + { + axis_y_labels.Add(new CustomAxisLabel(display_y.ToString(), display_y)); + display_y = display_y + _coordinate.CoordSpaceY; + } + + _axis_y.CustomLabels.Clear(); + _axis_y.CustomLabels.AddRange(axis_y_labels.ToArray()); + _axis_y.Visibility = DefaultBoolean.True; + _axis_y.GridLines.Visible = true; + + _axis_x.SetAxisRange(_coordinate.CoordMinX, _coordinate.DispMaxX()); + _axis_y.SetAxisRange(_coordinate.DispMinY(), _coordinate.DispMaxY()); + } + + + + #endregion Calc + + + + } } \ No newline at end of file -- Gitblit v1.9.3