gpt4 book ai didi

c# - 如何在 Windows 窗体中使用 Oxyplot 更新绘图

转载 作者:行者123 更新时间:2023-11-30 23:05:26 24 4
gpt4 key购买 nike

我正在做一个项目,我从板上读取一些串行数据,并尝试在图表上显示它。到目前为止,我已经设法在我的应用程序中实现了 Oxyplot。

但我很困惑如何根据来自串行端口的每个新数据更新绘图?

这是我的简化版代码

using OxyPlot;


namespace Motor
{

public partial class Form1 : Form
{


public Form1()
{
InitializeComponent();
ComPort.DataReceived += new
System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived_1);
plot1.Model = GridLinesHorizontal();

}

public static PlotModel GridLinesHorizontal()
{
var plotModel = new PlotModel();
plotModel.Title = "Horizontal";
var linearAxis1 = new LinearAxis();

linearAxis1.MajorGridlineStyle = LineStyle.Solid;
linearAxis1.MinorGridlineStyle = LineStyle.Dot;
linearAxis1.Maximum = 5;
linearAxis1.Minimum = -5;
plotModel.Axes.Add(linearAxis1);

return plotModel;

}


private void port_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
{

InputData = ComPort.ReadLine();

if (InputData != String.Empty)
{
this.BeginInvoke(new SetTextCallback(SetText), new object[] { InputData });
}
}

private void SetText(string text)
{
dVal = double.Parse(text, CultureInfo.InvariantCulture); // convert to double
///// HERE I WANT TO UPDATE THE PLOT with dval
}

}
}

最佳答案

不确定这是否是最好的方法,但像这样的方法应该可行:

using OxyPlot;
using OxyPlot.Axes;
using OxyPlot.Series;

namespace Motor
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ComPort.DataReceived += new
System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived_1);
plot1.Model = GridLinesHorizontal();
//create new LineSeries and add it to the PlotView
Line1 = new LineSeries
{
Title = "Test Series",
Color = OxyColors.Red,
TextColor = OxyColors.Red,
BrokenLineColor = OxyColors.Red
};
plot1.Model.Series.Add(Line1);

}

LineSeries Line1; // declare Line1 as global

public static PlotModel GridLinesHorizontal()
{
var plotModel = new PlotModel();
plotModel.Title = "Horizontal";
var linearAxis1 = new LinearAxis();

linearAxis1.MajorGridlineStyle = LineStyle.Solid;
linearAxis1.MinorGridlineStyle = LineStyle.Dot;
linearAxis1.Maximum = 5;
linearAxis1.Minimum = -5;
plotModel.Axes.Add(linearAxis1);

return plotModel;

}

private void port_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
{
InputData = ComPort.ReadLine();

if (InputData != String.Empty)
{
this.BeginInvoke(new SetTextCallback(SetText), new object[] { InputData });
}
}
int plotIndex = 0;
private void SetText(string text)
{
dVal = double.Parse(text, CultureInfo.InvariantCulture); // convert to double
///// plotIndex is the x value of the new point, not sure if OxyPlot offers an auto increment option
Line1.Points.Add(new DataPoint(plotIndex, dVal));
plotIndex++;
plot1.Invalidate();
}
}
}

关于c# - 如何在 Windows 窗体中使用 Oxyplot 更新绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48834390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com