示波器显示

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 轴时,您可以模拟示波器流程。