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;
|
using Yw.Hydro;
|
using Yw.EPAnet;
|
|
namespace Yw.WinFrmUI
|
{
|
public partial class HydroSingleWorkingLossCurveCtrl : DevExpress.XtraEditors.XtraUserControl
|
{
|
public HydroSingleWorkingLossCurveCtrl()
|
{
|
InitializeComponent();
|
}
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData
|
(
|
Yw.Model.HydroModelInfo hydroInfo,
|
HydroCalcuResult calcuResult,
|
Yw.Model.HydroVisualInfo visual
|
)
|
{
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
var network = hydroInfo.ToNetwork();
|
if (network == null)
|
{
|
return;
|
}
|
var node = network.GetAllNodes()?.Find(x => x.Id == visual.Code);
|
if (node == null)
|
{
|
return;
|
}
|
var allPathList = network.AnalyzeDownstreamPath(node, calcuResult.EPAnetCalcuResult);
|
var allEpaLossList = network.GetChartNodeByPathLinks(allPathList, calcuResult.EPAnetCalcuResult);
|
var allNodeLossList = allEpaLossList?.Select(x => new HydroNodeLossViewModel(x)).ToList();
|
SetBindingData(allNodeLossList);
|
}
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData(List<HydroNodeLossViewModel> allNodeLossList)
|
{
|
AutoFitAxises(allNodeLossList);
|
var allElevList = allNodeLossList?.Select(x => new HydroLossCurvePointVieModel(x.Distance, x.Elev)).ToList();
|
this.elevBindingSource.DataSource = allElevList;
|
var allLossList = new List<HydroLossCurvePointVieModel>();
|
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<HydroNodeLossViewModel> 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
|
|
|
}
|
|
|
|
}
|
}
|