ZedGraph實時曲線實例


public partial class FrmMain : Form
{
// 起始時間以毫秒為單位
int tickStart = 0;

public FrmMain()
{
InitializeComponent();
this.timeDraw.Tick += new EventHandler(timeDraw_Tick);
}

private void FrmMain_Load(object sender, EventArgs e)
{
//獲取引用
GraphPane myPane = zedGraphControl1.GraphPane;
//設置標題
myPane.Title.Text = "實時曲線";
//設置X軸說明文字
myPane.XAxis.Title.Text = "時間";
//設置Y軸說明文字
myPane.YAxis.Title.Text = "溫度";

//設置1200個點,假設每50毫秒更新一次,剛好檢測1分鍾,一旦構造后將不能更改這個值
RollingPointPairList list = new RollingPointPairList(1200);

//開始,增加的線是沒有數據點的(也就是list為空)
//增加一條名稱:Voltage,顏色Color.Bule,無符號,無數據的空線條
LineItem curve = myPane.AddCurve("溫度", list, Color.Blue, SymbolType.None);

timeDraw.Interval = 50; //設置timer控件的間隔為50毫秒
timeDraw.Enabled = true; //timer可用
timeDraw.Start(); //開始

myPane.XAxis.Scale.Min = 0; //X軸最小值0
myPane.XAxis.Scale.Max = 30; //X軸最大30
myPane.XAxis.Scale.MinorStep = 1;//X軸小步長1,也就是小間隔
myPane.XAxis.Scale.MajorStep = 5;//X軸大步長為5,也就是顯示文字的大間隔

//改變軸的刻度
zedGraphControl1.AxisChange();

//保存開始時間
tickStart = Environment.TickCount;
}

private void timeDraw_Tick(object sender, EventArgs e)
{
//確保CurveList不為空
if (zedGraphControl1.GraphPane.CurveList.Count <= 0)
{
return;
}

//取Graph第一個曲線,也就是第一步:在GraphPane.CurveList集合中查找CurveItem
LineItem curve = zedGraphControl1.GraphPane.CurveList[0] as LineItem;
if (curve == null)
{
return;
}

//第二步:在CurveItem中訪問PointPairList(或者其它的IPointList),根據自己的需要增加新數據或修改已存在的數據
IPointListEdit list = curve.Points as IPointListEdit;

if (list == null)
{
return;
}

// 時間用秒表示
double time = (Environment.TickCount - tickStart) / 1000.0;
// 3秒循環
list.Add(time, Math.Sin(2.0 * Math.PI * time / 3.0));
Console.WriteLine(time.ToString());

Scale xScale = zedGraphControl1.GraphPane.XAxis.Scale;
if (time > xScale.Max - xScale.MajorStep)
{
xScale.Max = time + xScale.MajorStep;
xScale.Min = xScale.Max - 30.0;
}

//第三步:調用ZedGraphControl.AxisChange()方法更新X和Y軸的范圍
zedGraphControl1.AxisChange();

//第四步:調用Form.Invalidate()方法更新圖表
zedGraphControl1.Invalidate();
}

private void Form1_Resize(object sender, EventArgs e)
{
SetSize();
}

private void SetSize()
{
// 控制始終是以10像素插入矩形從客戶端的形
Rectangle formRect = this.ClientRectangle;
formRect.Inflate(-10, -10);

if (zedGraphControl1.Size != formRect.Size)
{
zedGraphControl1.Location = formRect.Location;
zedGraphControl1.Size = formRect.Size;
}
}

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM