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
{
}
}
}
}