示波器显示
Oscilloscope Display
作为我的 MTech 项目的一部分,我正在尝试为示波器设计 GUI。虽然我在接受用户对 X 轴和 Y 轴的输入后设置比例没有问题,但我在显示波形时遇到了问题。现在,我正在使用 PolyLine
。每次接收到新值时,更新 disp
数组,清除当前内容并显示波形。
这是我写的一段代码,只是为了添加元素并清除 Grid
.
public partial class MainWindow : Window
{
int[] disp = new int[500];
private int x = 0;
Polyline Wave=new Polyline();
public MainWindow()
{
InitializeComponent();
}
private void SetValue_Click(object sender, RoutedEventArgs e)
{
x++;
SetValue_disp(x);
}
private void SetValue_disp(int x)
{
for (int i = 0; i < disp.Length; i++)
disp[i] = x;
}
private void Clear_Click(object sender, RoutedEventArgs e)
{
TheDisp.Children.Clear();
}
private void Apply_Click(object sender, RoutedEventArgs e)
{
Wave.StrokeThickness = 2;
int i = 0;
foreach (int isp in disp)
{
Wave.Points.Add(new Point(i, isp));
i++;
}
TheDisp.Children.Add(Wave);
}
}
我有以下疑惑
1)为什么点击应用按钮时元素不显示
2) 必须有比清除整个网格并重新显示整个数据更好的方法
感谢任何形式的帮助。
1) Why is the element not displayed when it click on the apply button
因为你没有设置Stroke
属性的PolyLine
。请将此行添加到您的 Apply_Click
方法中:
Wave.Stroke = Brushes.Red;
2) There has to be a better way than to clear the entire grid and re-displaying the entire data all over again
因为点实际上在对象中 PolyLine
所以在那里处理它们应该足够了。立即将 Wave
添加到构造函数中的 Graph.Children
中:
public MainWindow()
{
InitializeComponent();
TheDisp.Children.Add(Wave);
}
当您现在向 Wave.Points
添加值时,它们将显示在图表中。现在随着时间的流逝和新值的出现,只添加新值并为您添加的每个值删除第一个值。
Wave.Points.Add(new Point(X, Y));
// remove the first value
Wave.Points.RemoveAt(0);
点数将保持不变。当您正确处理 X 轴时,您可以模拟示波器流程。
作为我的 MTech 项目的一部分,我正在尝试为示波器设计 GUI。虽然我在接受用户对 X 轴和 Y 轴的输入后设置比例没有问题,但我在显示波形时遇到了问题。现在,我正在使用 PolyLine
。每次接收到新值时,更新 disp
数组,清除当前内容并显示波形。
这是我写的一段代码,只是为了添加元素并清除 Grid
.
public partial class MainWindow : Window
{
int[] disp = new int[500];
private int x = 0;
Polyline Wave=new Polyline();
public MainWindow()
{
InitializeComponent();
}
private void SetValue_Click(object sender, RoutedEventArgs e)
{
x++;
SetValue_disp(x);
}
private void SetValue_disp(int x)
{
for (int i = 0; i < disp.Length; i++)
disp[i] = x;
}
private void Clear_Click(object sender, RoutedEventArgs e)
{
TheDisp.Children.Clear();
}
private void Apply_Click(object sender, RoutedEventArgs e)
{
Wave.StrokeThickness = 2;
int i = 0;
foreach (int isp in disp)
{
Wave.Points.Add(new Point(i, isp));
i++;
}
TheDisp.Children.Add(Wave);
}
}
我有以下疑惑 1)为什么点击应用按钮时元素不显示 2) 必须有比清除整个网格并重新显示整个数据更好的方法
感谢任何形式的帮助。
1) Why is the element not displayed when it click on the apply button
因为你没有设置Stroke
属性的PolyLine
。请将此行添加到您的 Apply_Click
方法中:
Wave.Stroke = Brushes.Red;
2) There has to be a better way than to clear the entire grid and re-displaying the entire data all over again
因为点实际上在对象中 PolyLine
所以在那里处理它们应该足够了。立即将 Wave
添加到构造函数中的 Graph.Children
中:
public MainWindow()
{
InitializeComponent();
TheDisp.Children.Add(Wave);
}
当您现在向 Wave.Points
添加值时,它们将显示在图表中。现在随着时间的流逝和新值的出现,只添加新值并为您添加的每个值删除第一个值。
Wave.Points.Add(new Point(X, Y));
// remove the first value
Wave.Points.RemoveAt(0);
点数将保持不变。当您正确处理 X 轴时,您可以模拟示波器流程。