using DevExpress.Charts.Native; using DevExpress.Utils.About; using DevExpress.XtraCharts; using DevExpress.XtraEditors; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Yw.WinFrmUI { public partial class HydroSingleLossCurveCtrl : DevExpress.XtraEditors.XtraUserControl { public HydroSingleLossCurveCtrl() { InitializeComponent(); } /// /// 绑定数据 /// public void SetBindingData(List allNodeLossList) { AutoFitAxises(allNodeLossList); var allElevList = allNodeLossList?.Select(x => new HydroLossCurvePointVieModel(x.Distance, x.Elev)).ToList(); this.elevBindingSource.DataSource = allElevList; var allLossList = new List(); allNodeLossList?.ForEach(x => { allLossList.Add(new HydroLossCurvePointVieModel(x.Distance, x.StartHead)); allLossList.Add(new HydroLossCurvePointVieModel(x.Distance, x.EndHead)); }); this.lossBindingSource.DataSource = allLossList; } //自动适应刻度 private void AutoFitAxises(List allNodeLossList) { if (allNodeLossList == null || allNodeLossList.Count < 1) { return; } var diagram = this.chartControl1.Diagram as XYDiagram; var allDistances = allNodeLossList.Select(x => x.Distance).Distinct().ToList(); var distanceMax = allDistances.Max(); diagram.AxisX.Tickmarks.MinorVisible = false; diagram.AxisX.WholeRange.SideMarginsValue = 0; if (distanceMax <= 10) { diagram.AxisX.WholeRange.MinValue = 0; diagram.AxisX.WholeRange.MaxValue = 10; diagram.AxisX.NumericScaleOptions.GridSpacing = 1; } else if (distanceMax <= 100) { diagram.AxisX.WholeRange.MinValue = 0; diagram.AxisX.WholeRange.MaxValue = 100; diagram.AxisX.NumericScaleOptions.GridSpacing = 10; } else if (distanceMax <= 1000) { diagram.AxisX.WholeRange.MinValue = 0; diagram.AxisX.WholeRange.MaxValue = 1000; diagram.AxisX.NumericScaleOptions.GridSpacing = 100; } else if (distanceMax <= 10000) { diagram.AxisX.WholeRange.MinValue = 0; diagram.AxisX.WholeRange.MaxValue = 10000; diagram.AxisX.NumericScaleOptions.GridSpacing = 1000; } else { } var allHeads = allNodeLossList.Select(x => Math.Max(x.StartHead, x.EndHead)).ToList(); var headMax = allHeads.Max(); diagram.AxisY.Tickmarks.MinorVisible = false; diagram.AxisY.WholeRange.SideMarginsValue = 0; if (headMax <= 10) { diagram.AxisY.WholeRange.MinValue = 0; diagram.AxisY.WholeRange.MaxValue = 10; diagram.AxisY.NumericScaleOptions.GridSpacing = 1; diagram.AxisY.VisualRange.SetMinMaxValues(0, 10); } else if (distanceMax <= 100) { diagram.AxisY.WholeRange.MinValue = 0; diagram.AxisY.WholeRange.MaxValue = 100; diagram.AxisY.NumericScaleOptions.GridSpacing = 10; diagram.AxisY.VisualRange.SetMinMaxValues(0, 100); } else if (distanceMax <= 1000) { diagram.AxisY.WholeRange.MinValue = 0; diagram.AxisY.WholeRange.MaxValue = 1000; diagram.AxisY.NumericScaleOptions.GridSpacing = 100; diagram.AxisY.VisualRange.SetMinMaxValues(0, 1000); } else if (distanceMax <= 10000) { diagram.AxisY.WholeRange.MinValue = 0; diagram.AxisY.WholeRange.MaxValue = 10000; diagram.AxisY.NumericScaleOptions.GridSpacing = 1000; diagram.AxisY.VisualRange.SetMinMaxValues(0, 10000); } else { } var allElevs = allNodeLossList.Select(x => x.Elev).ToList(); var elevMax = allElevs.Max(); diagram.SecondaryAxesY[0].Tickmarks.MinorVisible = false; diagram.SecondaryAxesY[0].WholeRange.SideMarginsValue = 0; if (elevMax <= 30) { diagram.SecondaryAxesY[0].WholeRange.MinValue = 0; diagram.SecondaryAxesY[0].WholeRange.MaxValue = 100; diagram.SecondaryAxesY[0].NumericScaleOptions.GridSpacing = 10; diagram.SecondaryAxesY[0].VisualRange.SetMinMaxValues(0, 100); } else if (distanceMax <= 300) { diagram.SecondaryAxesY[0].WholeRange.MinValue = 0; diagram.SecondaryAxesY[0].WholeRange.MaxValue = 1000; diagram.SecondaryAxesY[0].NumericScaleOptions.GridSpacing = 100; diagram.SecondaryAxesY[0].VisualRange.SetMinMaxValues(0, 1000); } else if (distanceMax <= 3000) { diagram.SecondaryAxesY[0].WholeRange.MinValue = 0; diagram.SecondaryAxesY[0].WholeRange.MaxValue = 10000; diagram.SecondaryAxesY[0].NumericScaleOptions.GridSpacing = 1000; diagram.SecondaryAxesY[0].VisualRange.SetMinMaxValues(0, 10000); } else { } } } }