using DevExpress.Utils; using DevExpress.XtraCharts; namespace PBS.WinFrmUI.DataAnalysis { /// /// 泵图表 /// public partial class PumpViewChart : DevExpress.XtraEditors.XtraUserControl { public PumpViewChart() { InitializeComponent(); InitialChart(); } #region Private Variable private XYDiagram _diagram; private XYDiagramDefaultPane _default_pane; private XYDiagramPane _bottom_pane; private AxisX _axis_x_flow; private AxisY _axis_y_head; private SecondaryAxisY _axis_y_eff; #endregion #region Private Initial /// /// 初始化图表 /// private void InitialChart() { this.chartControl1.RuntimeHitTesting = true; _diagram = (XYDiagram)this.chartControl1.Diagram; _default_pane = _diagram.DefaultPane; _bottom_pane = (XYDiagramPane)_diagram.FindPaneByName("BottomPanel"); _axis_x_flow = _diagram.AxisX; _axis_y_head = _diagram.AxisY; _axis_y_eff = _diagram.SecondaryAxesY.GetAxisByName("AxisYEff"); _axis_y_eff.Alignment = AxisAlignment.Far; _axis_x_flow.Visibility = DefaultBoolean.False; _axis_x_flow.GridLines.Visible = false; _axis_y_head.Visibility = DefaultBoolean.False; _axis_y_head.GridLines.Visible = false; _axis_y_eff.Visibility = DefaultBoolean.False; _axis_y_eff.GridLines.Visible = false; } #endregion #region Set /// /// 清空图表 /// public void Clear() { this.chartControl1.BeginInit(); this.chartControl1.Series.Clear(); for (int i = this.chartControl1.AnnotationRepository.Count - 1; i > 0; i--) { if (i == 0) break; this.chartControl1.AnnotationRepository.RemoveAt(i); } this.chartControl1.Legend.CustomItems.Clear(); this.chartControl1.EndInit(); } /// /// 设置图表 /// public void SetBindingData(List<(List PtList,bool IsPressure,string Name)> vm_list) { this.chartControl1.BeginInit(); this.chartControl1.Series.Clear(); for (int i = this.chartControl1.AnnotationRepository.Count - 1; i > 0; i--) { if (i == 0) break; this.chartControl1.AnnotationRepository.RemoveAt(i); } this.chartControl1.Legend.CustomItems.Clear(); if (IsInvalidData()) { this.chartControl1.EndInit(); return; } AxisXBase axis_x = null; AxisYBase axis_y = null; XYDiagramPaneBase pane = null; foreach (var vm in vm_list) { if (vm.IsPressure) { axis_x = _axis_x_flow; axis_y = _axis_y_head; pane = _default_pane; } else { axis_x = _axis_x_flow; axis_y = _axis_y_eff; pane = _default_pane; } AddLineSeries(vm.Name, axis_x, axis_y, pane, vm.PtList); } this.chartControl1.EndInit(); } //是否是无效数据 private bool IsInvalidData() { return false; } #region Add Chart Data private void AddLineSeries(string id, AxisXBase axis_x, AxisYBase axis_y, XYDiagramPaneBase pane, List pt_list, DevExpress.XtraCharts.DashStyle dash = DevExpress.XtraCharts.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; if (dash!= DashStyle.Solid) { view.LineStyle.Thickness =3; } 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 => new SeriesPoint(x.Time,x.Y)).ToArray(); var series = new DevExpress.XtraCharts.Series(); series.Tag = id; series.ShowInLegend = false; series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.DateTime; 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 } }