WPF利用ScottPlot实现动态绘制图像

 更新时间:2023年12月19日 09:00:51   作者:微小冷  
ScottPlot是基于.Net的一款开源免费的交互式可视化库,支持Winform和WPF等UI框架,本文主要为大家详细介绍了如何WPF如何使用ScottPlot实现动态绘制图像,需要的可以参考下

单击移动

在了解ScottPlot的绘图逻辑之后,在WPF中生成动态图像简直轻而易举,只需不断地删除旧图而绘制新图即可。

新建一个按钮,绑定下面的函数

ScatterPlot dynSinPlot;
int dynClick = 0;

private void btnDynSin_Click(object sender, RoutedEventArgs e)
{
    var xs = Enumerable.Range(0, 100).Select(x => x / 10.0).ToArray();
    double shift = dynClick / 10.0;
    var ys = xs.Select(x => Math.Sin(x+shift)).ToArray();
    dynClick += 1;

    plt.Plot.Remove(dynSinPlot);
    dynSinPlot = plt.Plot.AddScatter(xs, ys, label: "sin");
    plt.Plot.Legend();
    plt.Refresh();
}

其中,dynClick用于计数,以调整正弦函数的相位,这个函数的功能为,每点击一次按钮,正弦图像便相左移动0.1 0.10.1弧度。效果如下

多线程

这种需要通过单击才能更改图像的方案,显然不是我们所希望的,但自动的动态绘图函数,其实并不属于scottPlot的功能,而需要使用C#的多线程。

首先,新建一个动态余弦绘制函数,其相位取决于当前的时间戳。考虑到我们将在新的线程中调用这个函数,所以函数中在使用WPF对象时,需要在Dispatchar.Invoke中以委托的形式进行。

ScatterPlot dynCosPlot;

private void dynCos()
{
    double t = DateTime.Now.Ticks/1000000.0;
    Console.WriteLine(t);
    var xs = Enumerable.Range(0, 100).Select(x => x / 10.0).ToArray();
    var ys = xs.Select(x => Math.Cos(x + t)).ToArray();

    Dispatcher.Invoke(() =>
    {
        plt.Plot.Remove(dynCosPlot);

        dynCosPlot = plt.Plot.AddScatter(xs, ys, label: "cos");
        plt.Plot.Legend();
        plt.Refresh();
    });
}

然后把这个函数放在一个循环中,为了能够自由控制动态绘图,这个函数需要传入一个tocken,并写在循环的判断条件中。

private void TaskDynCosLoop(CancellationToken token)
{
    while (!token.IsCancellationRequested)
    {
        dynCos();
        Task.Delay(10);
    }
}

最后添加一个按钮,绑定下列动态绘图函数,每次点击,都翻转一次布尔型的drawDynCos,若翻转后drawDynCos为True,则开启动态绘图,通过工厂方法开启一个新的线程;若反转后为False,则取消Tocken,从而中止绘图。

bool drawDynCos = false;
CancellationTokenSource dynCts;

private void btnDynCos_Click(object sender, RoutedEventArgs e)
{
    drawDynCos = ! drawDynCos;
    if (drawDynCos)
    {
        dynCts = new CancellationTokenSource();
        Task.Factory.StartNew(
            ()=> TaskDynCosLoop(dynCts.Token));
    }
    else
    {
        dynCts.Cancel();
    }
}

效果如下

到此这篇关于WPF利用ScottPlot实现动态绘制图像的文章就介绍到这了,更多相关WPF ScottPlot绘制图像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# 编码好习惯,献给所有热爱c#的同志

    C# 编码好习惯,献给所有热爱c#的同志

    c#编写者,需要培养的一些好习惯
    2009-02-02
  • C#实现缩放字体的方法

    C#实现缩放字体的方法

    这篇文章主要介绍了C#实现缩放字体的方法,涉及C#操作Matrix实现字体缩放的相关技巧,需要的朋友可以参考下
    2015-06-06
  • C#中正则表达式(Regex)过滤内容的基本使用方法

    C#中正则表达式(Regex)过滤内容的基本使用方法

    在 Regex 类中提供了很多方法来操作正则表达式,这篇文章主要给大家介绍了关于C#中正则表达式(Regex)过滤内容的基本使用方法,需要的朋友可以参考下
    2022-08-08
  • C#自定义组件实现表格的多层表头功能

    C#自定义组件实现表格的多层表头功能

    这篇文章主要为大家详细介绍了如何使用C#自定义组件实现表格的多层表头功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • C#如何给新建的winform程序添加资源文件夹Resources

    C#如何给新建的winform程序添加资源文件夹Resources

    这篇文章主要介绍了C#如何给新建的winform程序添加资源文件夹Resources,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • C#实现图片轮播功能的示例代码

    C#实现图片轮播功能的示例代码

    这篇文章主要为大家详细介绍了如何利用C#实现图片轮播功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • C# DataTable使用方法详解

    C# DataTable使用方法详解

    这篇文章主要为大家详细介绍了C# DataTable的使用方法,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Winform项目中使用FastReport.Net报表控件

    Winform项目中使用FastReport.Net报表控件

    这篇文章介绍了Winform项目中使用FastReport.Net报表控件的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Base64编码解码原理及C#编程实例

    Base64编码解码原理及C#编程实例

    这篇文章主要介绍了Base64编码解码原理及C#编程实例,本文讲解了Base64编码由来、Base64编码原理、C#编程实现,需要的朋友可以参考下
    2014-10-10
  • C#端口转发用法详解

    C#端口转发用法详解

    这篇文章主要介绍了C#端口转发用法,以实例形式较为详细的分析了C#实现端口转发的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03

最新评论