using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Windows.Forms.DataVisualization.Charting;
using System.Drawing;
using System.Windows.Forms;
namespace KryptonFormAirCompressor.BLL
{
class StartRun
{
static DateTime startTime = DateTime.Now.AddSeconds(-1);
DateTime endTime = startTime.AddSeconds(6);
DateTime kd = DateTime.Parse( "00:00:01" );
Random rd = new Random(); //随机函数,产生Y轴数据
DataTable dt = new DataTable(); //创建数据表,存储数据
int flag = 0; //设置Timer控件是否生效
int i = 0; //显示数据表中的数据行数
double yMax = 400;
double yMin = -400;
double yStep = 200;
Chart mychart = new Chart();
//图表初始化
public void chartInit(Chart ch, TabPage tp)
{
TabPage tabPage2 = tp;
Chart chInit = ch;
ch.Series[ "Series1" ].Points.Clear();
chInit.Width = tabPage2.Width / 2 - 1;
chInit.Height = tabPage2.Height / 3 - 25;
chInit.BackColor = Color.Azure;
//设置是否在内部绘图区域中自动设置合适的图表元素
chInit.ChartAreas[ "ChartArea1" ].Position.Auto = false ;
chInit.ChartAreas[ "ChartArea1" ].Position.X = 0;
chInit.ChartAreas[ "ChartArea1" ].Position.Y = 0;
chInit.ChartAreas[ "ChartArea1" ].Position.Width = 100;
chInit.ChartAreas[ "ChartArea1" ].Position.Height = 100;
chInit.ChartAreas[ "ChartArea1" ].InnerPlotPosition.Auto = false ;
chInit.ChartAreas[ "ChartArea1" ].InnerPlotPosition.X = 7;
chInit.ChartAreas[ "ChartArea1" ].InnerPlotPosition.Y = 4;
chInit.ChartAreas[ "ChartArea1" ].InnerPlotPosition.Width = 88;
chInit.ChartAreas[ "ChartArea1" ].InnerPlotPosition.Height = 85;
////设置X轴字体类型、大小、颜色
//chInit.ChartAreas["ChartArea1"].AxisX.LabelStyle.Font = new System.Drawing.Font("宋体", 10f);
//chInit.ChartAreas["ChartArea1"].AxisX.LabelStyle.ForeColor = Color.Black;
////设置Y轴字体类型、大小、颜色
//chInit.ChartAreas["ChartArea1"].AxisY.LabelStyle.Font = new System.Drawing.Font("宋体", 10f);
//chInit.ChartAreas["ChartArea1"].AxisY.LabelStyle.ForeColor = Color.Black;
}
public double chart(Chart ch, int category, DataTable table, double min, double max, double now)
{
mychart = ch;
dt = table;
yMin = min;
yMax = max;
yStep = (yMax - yMin) / 4;
DataRow dr = dt.NewRow();
dr[ "XTime" ] = DateTime.Now.ToString( "HH:mm:ss" );
switch (category)
{
case 0:
dr[ "YTemp" ] = rd.Next(-360, 360);
break ;
case 1:
dr[ "YTemp" ] = rd.Next(-10, 50);
break ;
case 2:
dr[ "YTemp" ] = rd.Next(-80, 80);
break ;
case 3:
dr[ "YTemp" ] = rd.Next(-360, 360);
break ;
case 4:
dr[ "YTemp" ] = rd.Next(-360, 360);
break ;
case 5:
dr[ "YTemp" ] = rd.Next(-360, 360);
break ;
case 6:
dr[ "YTemp" ] = rd.Next(-360, 360);
break ;
case 7:
dr[ "YTemp" ] = rd.Next(-10, 50);
break ;
case 8:
dr[ "YTemp" ] = rd.Next(-80, 80);
break ;
case 9:
dr[ "YTemp" ] = rd.Next(-360, 360);
break ;
case 10:
dr[ "YTemp" ] = rd.Next(-360, 360);
break ;
case 11:
dr[ "YTemp" ] = rd.Next(-360, 360);
break ;
case 12:
dr[ "YTemp" ] = rd.Next(-360, 360);
break ;
case 13:
dr[ "YTemp" ] = rd.Next(-800, 1000);
break ;
case 14:
dr[ "YTemp" ] = rd.Next(-50, 10);
break ;
case 15:
dr[ "YTemp" ] = rd.Next(-60, 20);
break ;
case 16:
dr[ "YTemp" ] = rd.Next(-360, 360);
break ;
case 17:
dr[ "YTemp" ] = rd.Next(-10, 80);
break ;
default :
dr[ "YTemp" ] = rd.Next(-360, 360);
break ;
//"大气压力",
//"环境温度",
//"环境温度",
//"吸气温度",
//"进气压力",
//"一级吸气温度",
//"一级排气压力",
//"一级排气温度",
//"中冷压差",
//"二级吸气温度",
//"二级排气压力",
//"二级排气温度",
//"喷嘴压差",
//"喷嘴温度",
//"转速",
//"扭矩",
//"电压",
//"电流",
}
dt.Rows.Add(dr);
#region 折线图
mychart.DataSource = dt; //绑定数据
mychart.Series[ "Series1" ].ChartType = SeriesChartType.Spline; //设置图表类型
mychart.Series[ "Series1" ].IsValueShownAsLabel = false ; //显示数据点的值
mychart.Series[ "Series1" ].BorderColor = Color.Green;
//mychart.Series["Series1"].LegendText = "动态温度点";
//mychart.Series["Series1"].Legend.Remove(1);
mychart.Series[ "Series1" ].IsVisibleInLegend = false ;
mychart.Series[ "Series1" ].MarkerStyle = MarkerStyle.Circle; //线条上的数据点标志类型
mychart.Series[ "Series1" ].MarkerBorderWidth = 0;
mychart.Series[ "Series1" ].MarkerColor = Color.Red;
//////设置是否在内部绘图区域中自动设置合适的图表元素
//mychart.ChartAreas["ChartArea1"].Position.Auto = false;
//mychart.ChartAreas["ChartArea1"].Position.X = 0;
//mychart.ChartAreas["ChartArea1"].Position.Y = 1;
//mychart.ChartAreas["ChartArea1"].Position.Width = 100;
//mychart.ChartAreas["ChartArea1"].Position.Height = 100;
//mychart.ChartAreas["ChartArea1"].InnerPlotPosition.Auto = false;
//mychart.ChartAreas["ChartArea1"].InnerPlotPosition.X = 5;
//mychart.ChartAreas["ChartArea1"].InnerPlotPosition.Y = 3;
//mychart.ChartAreas["ChartArea1"].InnerPlotPosition.Width = 90;
//mychart.ChartAreas["ChartArea1"].InnerPlotPosition.Height = 85;
i = dt.Rows.Count - 1;
now = Convert.ToDouble(dt.Rows[i][ "YTemp" ].ToString());
mychart.Series[0].Points.AddXY(Convert.ToDateTime(dt.Rows[i][ "XTime" ].ToString()).ToOADate(), Convert.ToDouble(dt.Rows[i][ "YTemp" ].ToString()));
//X轴设置
//mychart.ChartAreas["ChartArea1"].AxisX.Title = "时间";//X轴标题
mychart.ChartAreas[ "ChartArea1" ].AxisX.TitleAlignment = StringAlignment.Near; //设置X轴标题的名称所在位置位近
mychart.ChartAreas[ "ChartArea1" ].AxisX.MajorTickMark.Enabled = true ; //坐标轴上的刻度线
mychart.ChartAreas[ "ChartArea1" ].AxisX.MajorGrid.Enabled = true ; //不显示竖着的分割线
mychart.ChartAreas[ "ChartArea1" ].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash; //主网格为虚线
mychart.ChartAreas[ "ChartArea1" ].AxisX.LineColor = Color.Blue; //X轴颜色
mychart.ChartAreas[ "ChartArea1" ].AxisX.IsMarksNextToAxis = true ;
//mychart.ChartAreas["ChartArea1"].AxisX.LabelStyle.IsEndLabelVisible = false;//最后一个标签点显示
//图像上方的X2轴设置
mychart.ChartAreas[ "ChartArea1" ].AxisX2.Enabled = AxisEnabled.True;
mychart.ChartAreas[ "ChartArea1" ].AxisX2.MajorGrid.Enabled = false ;
mychart.ChartAreas[ "ChartArea1" ].AxisX2.MajorTickMark.Enabled = false ;
mychart.ChartAreas[ "ChartArea1" ].AxisX2.LineColor = Color.Blue;
mychart.ChartAreas[ "ChartArea1" ].AxisX2.LabelStyle.Enabled = false ;
//设置X轴字体类型、大小、颜色
mychart.ChartAreas[ "ChartArea1" ].AxisX.LabelStyle.Font = new System.Drawing.Font( "宋体" , 10f);
mychart.ChartAreas[ "ChartArea1" ].AxisX.LabelStyle.ForeColor = Color.Black;
//设置Y轴字体类型、大小、颜色
mychart.ChartAreas[ "ChartArea1" ].AxisY.LabelStyle.Font = new System.Drawing.Font( "宋体" , 10f);
mychart.ChartAreas[ "ChartArea1" ].AxisY.LabelStyle.ForeColor = Color.Black;
/************************************************************************/
/* 本文重点讲解时间格式的设置
* 但第一个点并不能保证在原点第一个时间坐标位置,与时间间隔跨度有关系
* 需要设置最小时间,最大小时,时间间隔类型,时间间隔值等四个参数,以保证当前网络跨度内容显示6个主网络线*/
/************************************************************************/
mychart.Series[ "Series1" ].XValueType = ChartValueType.DateTime; //X轴标签为时间类型
mychart.ChartAreas[ "ChartArea1" ].AxisX.LabelStyle.Format = "HH:mm:ss" ; //X轴上显示时、分、秒
if (DateTime.Now.ToOADate() > endTime.ToOADate())
{
endTime = endTime.AddSeconds(6); //延长X时间轴
//设置时间单位的最小、最大值
mychart.ChartAreas[ "ChartArea1" ].AxisX.Minimum = startTime.ToOADate();
mychart.ChartAreas[ "ChartArea1" ].AxisX.Maximum = endTime.ToOADate();
//跨度为秒,间隔是通过最大时间与最小时间差相减除6所得,所以有6个间隔线
mychart.ChartAreas[ "ChartArea1" ].AxisX.IntervalType = DateTimeIntervalType.Seconds;
TimeSpan jianGe = endTime - startTime;
mychart.ChartAreas[ "ChartArea1" ].AxisX.Interval = (jianGe.TotalSeconds) / 6;
}
//Y轴设置
//mychart.ChartAreas["ChartArea1"].AxisY.Title = "气温";//Y轴标题
mychart.ChartAreas[ "ChartArea1" ].AxisY.TitleAlignment = StringAlignment.Far; //设置Y轴标题的名称所在位置位远
mychart.ChartAreas[ "ChartArea1" ].AxisY.Interval = yStep;
mychart.ChartAreas[ "ChartArea1" ].AxisY.Maximum = yMax;
mychart.ChartAreas[ "ChartArea1" ].AxisY.Minimum = yMin;
mychart.ChartAreas[ "ChartArea1" ].AxisY.IsStartedFromZero = true ;
mychart.ChartAreas[ "ChartArea1" ].AxisY.MajorTickMark.Enabled = false ; //坐标轴上的刻度线,为false时少了小横杆线
mychart.ChartAreas[ "ChartArea1" ].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
mychart.ChartAreas[ "ChartArea1" ].AxisY.LineColor = Color.Blue;
//图像上方的X2轴设置
mychart.ChartAreas[ "ChartArea1" ].AxisY2.Enabled = AxisEnabled.True;
mychart.ChartAreas[ "ChartArea1" ].AxisY2.MajorGrid.Enabled = false ;
mychart.ChartAreas[ "ChartArea1" ].AxisY2.MajorTickMark.Enabled = false ;
mychart.ChartAreas[ "ChartArea1" ].AxisY2.LineColor = Color.Blue;
mychart.ChartAreas[ "ChartArea1" ].AxisY2.LabelStyle.Enabled = false ;
#endregion
return now;
}
}
}
|