using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Drawing;
|
using System.Linq;
|
using System.Drawing.Drawing2D;
|
using System.Windows.Forms;
|
using DevExpress.XtraCharts;
|
|
namespace IStation.WinFrmUI.River
|
{
|
public partial class ViewRealTimeRiverWaterLevelCtrl : DevExpress.XtraEditors.XtraUserControl
|
{
|
public ViewRealTimeRiverWaterLevelCtrl()
|
{
|
InitializeComponent();
|
|
this.chartControl1.CustomPaint += new DevExpress.XtraCharts.CustomPaintEventHandler(this.ChartControl实时数据_CustomPaint);
|
}
|
|
private Model.eTideSouce _tideSouce = Model.eTideSouce.Book;
|
public void SetTideSouce(Model.eTideSouce tideSouce)
|
{
|
_tideSouce = tideSouce;
|
|
}
|
|
private Series _areaSeries;
|
private bool _isDispStrip = false;
|
DateTime _rangDay1, _rangDay2, _rangDay3;
|
DateTime _calcDay;
|
private bool _isDay3 = false;
|
/// <summary>
|
/// 初始化默认系列
|
/// </summary>
|
/// <param name="timeValues">数据源</param>
|
//public void SetBindingData(List<Model.TimeWaterLevel> timeValues)
|
//{
|
// _areaSeries = this.chartControl1.Series[0];
|
// if (timeValues == null || timeValues.Count() < 1)
|
// {
|
// // _defaultSeries.BindToData(timeValues, null);
|
// }
|
// else
|
// {
|
// timeValueBindingSource.DataSource = timeValues;
|
// // _defaultSeries.BindToData(timeValues, "Time", "Level");
|
// }
|
// //GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
|
// //GC.Collect(2, GCCollectionMode.Forced);
|
// //GC.WaitForFullGCComplete();
|
//}
|
public List<Model.TimeWaterLevel> SetBindingData3Day (DateTime calc_day, out string benchmark)
|
{
|
_isDay3 = true;
|
benchmark = null;
|
_calcDay = calc_day;
|
string error1, error2, error3;
|
List<Model.TimeWaterLevel> waterLevels长江1, waterLevels长江2, waterLevels长江3;
|
if (calc_day == DateTime.Today)
|
{
|
_rangDay1 = calc_day.AddDays(-1);
|
_rangDay2 = calc_day;
|
_rangDay3 = calc_day.AddDays(1);
|
}
|
else if (calc_day == DateTime.Today.AddDays(1))
|
{
|
_rangDay1 = calc_day.AddDays(-2);
|
_rangDay2 = calc_day.AddDays(-1);
|
_rangDay3 = calc_day;
|
}
|
else
|
{
|
_rangDay1 = calc_day.AddDays(-1);
|
_rangDay2 = calc_day;
|
_rangDay3 = calc_day.AddDays(1);
|
}
|
waterLevels长江1 = IStation.BLL.TideHelper.GetByDay (_tideSouce, _rangDay1, out error1);
|
waterLevels长江2 = IStation.BLL.TideHelper.GetByDay (_tideSouce, _rangDay2, out error2);
|
waterLevels长江3 = IStation.BLL.TideHelper.GetByDay (_tideSouce, _rangDay3, out error3);
|
|
|
|
|
List<Model.TimeWaterLevel> timeValues = new List<Model.TimeWaterLevel>();
|
if (waterLevels长江1 != null)
|
{
|
timeValues.AddRange(waterLevels长江1);
|
}
|
else if(!string.IsNullOrEmpty(error1) && _rangDay1 <= DateTime.Today.AddDays(1))
|
{
|
MessageBox.Show(error1);
|
}
|
if (waterLevels长江2 != null)
|
{
|
timeValues.AddRange(waterLevels长江2);
|
}
|
else if (!string.IsNullOrEmpty(error2) && _rangDay2 <= DateTime.Today.AddDays(1))
|
{
|
MessageBox.Show(error1);
|
}
|
if (waterLevels长江3 != null)
|
{
|
timeValues.AddRange(waterLevels长江3);
|
}
|
else if (!string.IsNullOrEmpty(error3) && _rangDay3 <= DateTime.Today.AddDays(1))
|
{
|
MessageBox.Show(error3);
|
}
|
|
_isDispStrip = true;
|
_areaSeries = this.chartControl1.Series[0];
|
if (timeValues == null || timeValues.Count() < 1)
|
{
|
// _defaultSeries.BindToData(timeValues, null);
|
}
|
else
|
{
|
timeValueBindingSource.DataSource = timeValues;
|
// _defaultSeries.BindToData(timeValues, "Time", "Level");
|
// this.chartControl1.AnnotationRepository[]
|
DevExpress.XtraCharts.TextAnnotation textAnnotationMax = this.chartControl1.AnnotationRepository[0] as DevExpress.XtraCharts.TextAnnotation;
|
DevExpress.XtraCharts.PaneAnchorPoint paneAnchorPointMax = textAnnotationMax.AnchorPoint as DevExpress.XtraCharts.PaneAnchorPoint;
|
|
DevExpress.XtraCharts.TextAnnotation textAnnotationMin = this.chartControl1.AnnotationRepository[1] as DevExpress.XtraCharts.TextAnnotation;
|
DevExpress.XtraCharts.PaneAnchorPoint paneAnchorPointMin = textAnnotationMin.AnchorPoint as DevExpress.XtraCharts.PaneAnchorPoint;
|
|
|
var list22 = timeValues.Where(x => x.Time >= calc_day && x.Time <= calc_day.AddDays(1));
|
var maxLevel = list22.FindObjMaxBy(x => x.Level);
|
paneAnchorPointMax.AxisXCoordinate.AxisValueSerializable = maxLevel.Time.ToString();
|
paneAnchorPointMax.AxisYCoordinate.AxisValueSerializable = maxLevel.Level.ToString();
|
textAnnotationMax.Text = string.Format("max:{0}", maxLevel.Level);
|
|
var minLevel = list22.FindObjMinBy(x => x.Level);
|
paneAnchorPointMin.AxisXCoordinate.AxisValueSerializable = minLevel.Time.ToString();
|
paneAnchorPointMin.AxisYCoordinate.AxisValueSerializable = minLevel.Level.ToString();
|
textAnnotationMin.Text = string.Format("min:{0}", minLevel.Level);
|
}
|
|
SetStripRange( );
|
return timeValues;
|
}
|
public List<Model.TimeWaterLevel> SetBindingData1Day(DateTime start, DateTime end, out string benchmark)
|
{
|
benchmark = null;
|
|
|
string error;
|
var waterLevels长江1 = IStation.BLL.TideHelper.GetByDay(_tideSouce, start, out error);
|
List<Model.TimeWaterLevel> timeValues = new List<Model.TimeWaterLevel>();
|
if (waterLevels长江1 != null)
|
{
|
timeValues.AddRange(waterLevels长江1);
|
}
|
|
_areaSeries = this.chartControl1.Series[0];
|
if (timeValues == null || timeValues.Count() < 1)
|
{
|
// _defaultSeries.BindToData(timeValues, null);
|
}
|
else
|
{
|
timeValueBindingSource.DataSource = timeValues;
|
// _defaultSeries.BindToData(timeValues, "Time", "Level");
|
// this.chartControl1.AnnotationRepository[]
|
DevExpress.XtraCharts.TextAnnotation textAnnotationMax = this.chartControl1.AnnotationRepository[0] as DevExpress.XtraCharts.TextAnnotation;
|
DevExpress.XtraCharts.PaneAnchorPoint paneAnchorPointMax = textAnnotationMax.AnchorPoint as DevExpress.XtraCharts.PaneAnchorPoint;
|
|
DevExpress.XtraCharts.TextAnnotation textAnnotationMin = this.chartControl1.AnnotationRepository[1] as DevExpress.XtraCharts.TextAnnotation;
|
DevExpress.XtraCharts.PaneAnchorPoint paneAnchorPointMin = textAnnotationMin.AnchorPoint as DevExpress.XtraCharts.PaneAnchorPoint;
|
|
var maxLevel = timeValues.Where(x => x.Time >= start && x.Time <= end).FindObjMaxBy(x => x.Level);
|
paneAnchorPointMax.AxisXCoordinate.AxisValueSerializable = maxLevel.Time.ToString();
|
paneAnchorPointMax.AxisYCoordinate.AxisValueSerializable = maxLevel.Level.ToString();
|
textAnnotationMax.Text = string.Format("max:{0}", maxLevel.Level);
|
|
var minLevel = timeValues.Where(x => x.Time >= start && x.Time <= end).FindObjMinBy(x => x.Level);
|
paneAnchorPointMin.AxisXCoordinate.AxisValueSerializable = minLevel.Time.ToString();
|
paneAnchorPointMin.AxisYCoordinate.AxisValueSerializable = minLevel.Level.ToString();
|
textAnnotationMin.Text = string.Format("min:{0}", minLevel.Level);
|
}
|
|
return timeValues;
|
}
|
|
private bool isInitialRange = false;
|
private void SetStripRange( )
|
{
|
var xyDiagram = this.chartControl1.Diagram as DevExpress.XtraCharts.XYDiagram;
|
var strp1 = xyDiagram.AxisX.Strips[0];
|
//strp1.MinLimit.AxisValueSerializable = start.ToString();// "01/01/0001 00:00:00.000";
|
//strp1.MaxLimit.AxisValueSerializable = start.AddDays(1).ToString();// "01/01/0001 01:00:00.000";
|
var strp2 = xyDiagram.AxisX.Strips[1];
|
//strp2.MinLimit.AxisValueSerializable = start.AddDays(1).ToString();// "01/01/0001 00:00:00.000";
|
//strp2.MaxLimit.AxisValueSerializable = start.AddDays(2).ToString();// "01/01/0001 01:00:00.000";
|
if (!isInitialRange)
|
{
|
isInitialRange = true;
|
strp1.MaxLimit.AxisValueSerializable = _rangDay1.AddDays(1).ToString();// "01/01/0001 01:00:00.000";
|
strp1.MinLimit.AxisValueSerializable = _rangDay1.ToString();// "01/01/0001 00:00:00.000";
|
|
strp2.MaxLimit.AxisValueSerializable = _rangDay2.AddDays(1).AddDays(2).ToString();// "01/01/0001 01:00:00.000";
|
strp2.MinLimit.AxisValueSerializable = _rangDay2.AddDays(1).ToString();// "01/01/0001 00:00:00.000";
|
}
|
else
|
{
|
if (DateTime.Parse(strp1.MinLimit.AxisValueSerializable) > _rangDay1.AddDays(1))
|
{
|
isInitialRange = true;
|
strp1.MinLimit.AxisValueSerializable = _rangDay1.ToString();// "01/01/0001 00:00:00.000";
|
strp1.MaxLimit.AxisValueSerializable = _rangDay1.AddDays(1).ToString();// "01/01/0001 01:00:00.000";
|
}
|
else
|
{
|
isInitialRange = true;
|
strp1.MaxLimit.AxisValueSerializable = _rangDay1.AddDays(1).ToString();// "01/01/0001 01:00:00.000";
|
strp1.MinLimit.AxisValueSerializable = _rangDay1.ToString();// "01/01/0001 00:00:00.000";
|
}
|
|
if (DateTime.Parse(strp2.MinLimit.AxisValueSerializable) > _rangDay2.AddDays(1))
|
{
|
isInitialRange = true;
|
strp2.MinLimit.AxisValueSerializable = _rangDay2.ToString();// "01/01/0001 00:00:00.000";
|
strp2.MaxLimit.AxisValueSerializable = _rangDay2.AddDays(1).ToString();// "01/01/0001 01:00:00.000";
|
}
|
else
|
{
|
isInitialRange = true;
|
strp2.MaxLimit.AxisValueSerializable = _rangDay2.AddDays(1).ToString();// "01/01/0001 01:00:00.000";
|
strp2.MinLimit.AxisValueSerializable = _rangDay2.ToString();// "01/01/0001 00:00:00.000";
|
}
|
}
|
}
|
|
|
private void ChartControl实时数据_CustomPaint(object sender, CustomPaintEventArgs e)
|
{
|
if (_isDay3 == false)
|
return;
|
|
if (_isDispStrip == false) return;
|
Graphics g = e.Graphics;
|
//g.SetClip(CalculateDiagramBounds());
|
g.SmoothingMode = SmoothingMode.AntiAlias;
|
|
var mainDiagram = this.chartControl1.Diagram as DevExpress.XtraCharts.XYDiagram;
|
double rang_max = Convert.ToDouble(mainDiagram.AxisY.WholeRange.MaxValue);
|
|
|
using (Font fontDay普通 = new Font("黑体", 14, FontStyle.Regular))
|
using (Font fontDay加粗 = new Font("黑体", 16, FontStyle.Bold))
|
using (SolidBrush brushDay普通 = new SolidBrush(Color.PaleVioletRed))
|
using (SolidBrush brushDay加粗 = new SolidBrush(Color. DarkRed))
|
{
|
StringFormat StrF = new StringFormat();
|
StrF.Alignment = StringAlignment.Center;
|
StrF.LineAlignment = StringAlignment.Far;
|
//StrF.FormatFlags = StringFormatFlags.DirectionVertical;
|
|
var pt1 = mainDiagram.DiagramToPoint(_rangDay1.AddHours(12).ToString(), rang_max);
|
var pt2 = mainDiagram.DiagramToPoint(_rangDay2.AddHours(12).ToString(), rang_max);
|
var pt3 = mainDiagram.DiagramToPoint(_rangDay3.AddHours(12).ToString(), rang_max);
|
|
var str1 = _rangDay1.ToString("MM月dd日");
|
if(_rangDay1==DateTime.Today)
|
{
|
str1 = string.Format("{0}(今日)", _rangDay1.ToString("MM月dd日"));
|
}
|
|
var str2 = _rangDay2.ToString("MM月dd日");
|
if (_rangDay2 == DateTime.Today)
|
{
|
str2 = string.Format("{0}(今日)", _rangDay2.ToString("MM月dd日"));
|
}
|
|
var str3 = _rangDay3.ToString("MM月dd日");
|
if (_rangDay3 == DateTime.Today)
|
{
|
str3 = string.Format("{0}(今日)", _rangDay3.ToString("MM月dd日"));
|
}
|
|
|
|
|
if (_rangDay1 == _calcDay)
|
{
|
g.DrawString(str1, fontDay加粗, brushDay加粗, new Point(pt1.Point.X - 5, pt1.Point.Y - 8), StrF);
|
}
|
else
|
{
|
g.DrawString(str1, fontDay普通, brushDay普通, new Point(pt1.Point.X - 5, pt1.Point.Y - 8), StrF);
|
}
|
|
|
|
if (_rangDay2 == _calcDay)
|
{
|
g.DrawString(str2, fontDay加粗, brushDay加粗, new Point(pt2.Point.X - 5, pt2.Point.Y - 8), StrF);
|
}
|
else
|
{
|
g.DrawString(str2, fontDay普通, brushDay普通, new Point(pt2.Point.X - 5, pt2.Point.Y - 8), StrF);
|
}
|
|
|
|
if (_rangDay3 == _calcDay)
|
{
|
g.DrawString(str3, fontDay加粗, brushDay加粗, new Point(pt3.Point.X - 5, pt3.Point.Y - 8), StrF);
|
}
|
else
|
{
|
g.DrawString(str3, fontDay普通, brushDay普通, new Point(pt3.Point.X - 5, pt3.Point.Y - 8), StrF);
|
}
|
}
|
|
|
}
|
|
}
|
}
|