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; #region X轴 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) { var maxValue = Math.Ceiling(distanceMax); diagram.AxisX.WholeRange.MinValue = 0; diagram.AxisX.WholeRange.MaxValue = maxValue; diagram.AxisX.NumericScaleOptions.GridSpacing = 1; } else if (distanceMax <= 50) { var maxValue = Math.Ceiling(distanceMax / 10); diagram.AxisX.WholeRange.MinValue = 0; diagram.AxisX.WholeRange.MaxValue = maxValue * 10; diagram.AxisX.NumericScaleOptions.GridSpacing = 5; } else if (distanceMax <= 100) { var maxValue = Math.Ceiling(distanceMax / 10); diagram.AxisX.WholeRange.MinValue = 0; diagram.AxisX.WholeRange.MaxValue = maxValue * 10; diagram.AxisX.NumericScaleOptions.GridSpacing = 10; } else if (distanceMax <= 500) { var maxValue = Math.Ceiling(distanceMax / 100); diagram.AxisX.WholeRange.MinValue = 0; diagram.AxisX.WholeRange.MaxValue = maxValue * 100; diagram.AxisX.NumericScaleOptions.GridSpacing = 50; } else if (distanceMax <= 3000) { var maxValue = Math.Ceiling(distanceMax / 100); diagram.AxisX.WholeRange.MinValue = 0; diagram.AxisX.WholeRange.MaxValue = maxValue * 100; diagram.AxisX.NumericScaleOptions.GridSpacing = 100; } else if (distanceMax <= 5000) { var maxValue = Math.Ceiling(distanceMax / 1000); diagram.AxisX.WholeRange.MinValue = 0; diagram.AxisX.WholeRange.MaxValue = maxValue * 1000; diagram.AxisX.NumericScaleOptions.GridSpacing = 200; } else if (distanceMax <= 10000) { var maxValue = Math.Ceiling(distanceMax / 1000); diagram.AxisX.WholeRange.MinValue = 0; diagram.AxisX.WholeRange.MaxValue = maxValue * 1000; diagram.AxisX.NumericScaleOptions.GridSpacing = 1000; } else { } #endregion #region 总水头y轴 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 (headMax <= 100) { var maxValue = Math.Ceiling(headMax / 10); diagram.AxisY.WholeRange.MinValue = 0; diagram.AxisY.WholeRange.MaxValue = maxValue * 10; diagram.AxisY.NumericScaleOptions.GridSpacing = 5; diagram.AxisY.VisualRange.SetMinMaxValues(0, maxValue * 10); } else if (headMax <= 3000) { var maxValue = Math.Ceiling(headMax / 100); diagram.AxisY.WholeRange.MinValue = 0; diagram.AxisY.WholeRange.MaxValue = maxValue * 100; diagram.AxisY.NumericScaleOptions.GridSpacing = 50; diagram.AxisY.VisualRange.SetMinMaxValues(0, maxValue * 100); } else if (headMax <= 6000) { var maxValue = Math.Ceiling(headMax / 1000); diagram.AxisY.WholeRange.MinValue = 0; diagram.AxisY.WholeRange.MaxValue = maxValue * 1000; diagram.AxisY.NumericScaleOptions.GridSpacing = 100; diagram.AxisY.VisualRange.SetMinMaxValues(0, maxValue * 1000); } else { } #endregion #region 标高y轴 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 <= 10) { diagram.SecondaryAxesY[0].WholeRange.MinValue = 0; diagram.SecondaryAxesY[0].WholeRange.MaxValue = 50; diagram.SecondaryAxesY[0].NumericScaleOptions.GridSpacing = 5; diagram.SecondaryAxesY[0].VisualRange.SetMinMaxValues(0, 50); } else if (elevMax <= 100) { diagram.SecondaryAxesY[0].WholeRange.MinValue = 0; diagram.SecondaryAxesY[0].WholeRange.MaxValue = 1000; diagram.SecondaryAxesY[0].NumericScaleOptions.GridSpacing = 50; diagram.SecondaryAxesY[0].VisualRange.SetMinMaxValues(0, 1000); } else if (distanceMax <= 500) { diagram.SecondaryAxesY[0].WholeRange.MinValue = 0; diagram.SecondaryAxesY[0].WholeRange.MaxValue = 5000; diagram.SecondaryAxesY[0].NumericScaleOptions.GridSpacing = 100; diagram.SecondaryAxesY[0].VisualRange.SetMinMaxValues(0, 5000); } else if (distanceMax <= 1000) { diagram.SecondaryAxesY[0].WholeRange.MinValue = 0; diagram.SecondaryAxesY[0].WholeRange.MaxValue = 10000; diagram.SecondaryAxesY[0].NumericScaleOptions.GridSpacing = 500; diagram.SecondaryAxesY[0].VisualRange.SetMinMaxValues(0, 10000); } else { } #endregion } } }