WPF_基于ScottPlot的实时曲线绘制

1 安装ScottPlot

WPF_基于ScottPlot的实时曲线绘制_第1张图片

WPF_基于ScottPlot的实时曲线绘制_第2张图片 

2 测试代码

2.1 MainWindow.cs

using System;
using System.Diagnostics;
using System.Threading;
using System.Windows;

namespace ScottplotTest
{
    /// 
    /// MainWindow.xaml 的交互逻辑
    /// 
    public partial class MainWindow : Window
    {

        double[] myData1 = new double[200];
        double[] myData2 = new double[200];
        ScottPlot.Plottable.SignalPlot signalPlot1;
        ScottPlot.Plottable.SignalPlot signalPlot2;
        bool initflag = false;
        
        public MainWindow()
        {
            InitializeComponent();

            this.Closing += CloseWindow;

            signalPlot1 = this.WpfPlot1.Plot.AddSignal(myData1, 0.1, System.Drawing.Color.Black, label: "曲线1");
            signalPlot2 = this.WpfPlot1.Plot.AddSignal(myData2, 0.1, System.Drawing.Color.Magenta, label: "曲线2");


            //WpfPlot1.Plot.XAxis.Label("Time (milliseconds)");
            WpfPlot1.Plot.YAxis.Label("Celsius temperature (°C)");
            WpfPlot1.Plot.XAxis2.Label("Title");

            // One Axis Only
            WpfPlot1.Plot.XAxis.Ticks(false);
            WpfPlot1.Plot.XAxis.Line(false);
            WpfPlot1.Plot.YAxis2.Line(false);
            WpfPlot1.Plot.XAxis2.Line(false);
            

            Thread SPdataProcessing = new Thread(RefreshOPMUI);

            //signalPlot1.Label = "a";
            // signalPlot2.Label = "b";

            WpfPlot1.Plot.Legend();
           
            WpfPlot1.Refresh();
   
            signalPlot1.IsVisible = true;
            signalPlot2.IsVisible = true;

            initflag = true;

            signalPlot1.OffsetX = 0;
            signalPlot2.OffsetX = 0;

            
            SPdataProcessing.Start();

            Array.Copy(myData1, 1, myData1, 0, myData1.Length - 1);
            Array.Copy(myData2, 1, myData2, 0, myData2.Length - 1);

            myData1[myData1.Length - 1] = 50;
            myData2[myData2.Length - 1] = 20;
            WpfPlot1.Refresh();



        }

        public void RefreshOPMUI()
        {
            while (true)
            {
                Random rd = new Random();

                int v1 = rd.Next(0, 200);
                int v2 = rd.Next(0, 1000);

                // double[] values = ScottPlot.DataGen.RandomWalk(rand, 2);
                Array.Copy(myData1, 1, myData1, 0, myData1.Length - 1);
                Array.Copy(myData2, 1, myData2, 0, myData2.Length - 1);

                myData1[myData1.Length - 1] = v1;
                myData2[myData2.Length - 1] = v2;
                Dispatcher.Invoke(new Action(delegate
                {
                    WpfPlot1.Refresh();
                    WpfPlot1.Plot.AxisAutoY();
                    // WpfPlot1.Plot.AxisAutoX();
                }));

                
                Thread.Sleep(50);
            }
        }

        // 关闭窗口
        private void CloseWindow(object sender, System.ComponentModel.CancelEventArgs e)
        {
            Process.GetCurrentProcess().Kill();
            this.Close();
        }


        private void CheckBox_Checked(object sender, RoutedEventArgs e)
        {
            if (initflag == false) {
                return;
            }
            if (checkBox.IsChecked == true) {
                signalPlot1.IsVisible = true;
            }
            else{
                signalPlot1.IsVisible = false;
            }
        }

        private void CheckBox1_Checked(object sender, RoutedEventArgs e)
        {
            if (initflag == false)
            {
                return;
            }
            if (checkBox1.IsChecked == true)
            {
                signalPlot2.IsVisible = true;
            }
            else
            {
                signalPlot2.IsVisible = false;
            }
        }
    }
}

 2.2 MainWindow.xaml


    
        
        
        
    

3 运行结果

ScottPlotTestVideo2

4 离线移植

4.1 文件拷贝

WPF_基于ScottPlot的实时曲线绘制_第3张图片

 

所以离线移植到新的项目的时候,需要拷贝 packages文件夹 以及 packages.config文件

4.2 添加引用

对比安装前与安装后

WPF_基于ScottPlot的实时曲线绘制_第4张图片

1、ScottPlot引用路径:                          

packages\ScottPlot.4.1.59\lib\netstandard2.0\ScottPlot.dll

2、ScottPlot.WPF引用路径:                 

packages\ScottPlot.WPF.4.1.59\lib\net461\ScottPlot.WPF.dll

3、System.Drawing引用路径:               

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Drawing.dll

4、System.Drawing.Common引用路径:

packages\System.Drawing.Common.4.6.1\lib\net461\System.Drawing.Common.dll

5、System.Numerics引用路径:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Numerics.dll
6、System.Numerics.Vectors引用路径:

packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll

 4.2.1  [1、2、4、6]用浏览的方式是找到

WPF_基于ScottPlot的实时曲线绘制_第5张图片

WPF_基于ScottPlot的实时曲线绘制_第6张图片 

WPF_基于ScottPlot的实时曲线绘制_第7张图片 

4个引用的操作步骤一样,就不一一截图了。

WPF_基于ScottPlot的实时曲线绘制_第8张图片 

4.2.2  [3、5]用搜索的方式是找到

 WPF_基于ScottPlot的实时曲线绘制_第9张图片

 

5、值得注意的一点

新建项目

WPF_基于ScottPlot的实时曲线绘制_第10张图片

注意:新建程序时 框架是:.NET Framework 4.6.1,所以安装的ScottPlot很多引用路径都是n461.

离线移植的程序,最好也选这:.NET Framework 4.6.1

感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。

你可能感兴趣的:(WPF,wpf,scottplot,实时曲线绘制)