亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

WPF利用ScottPlot實(shí)現(xiàn)動(dòng)態(tài)繪制圖像

 更新時(shí)間:2023年12月19日 09:00:51   作者:微小冷  
ScottPlot是基于.Net的一款開源免費(fèi)的交互式可視化庫,支持Winform和WPF等UI框架,本文主要為大家詳細(xì)介紹了如何WPF如何使用ScottPlot實(shí)現(xiàn)動(dòng)態(tài)繪制圖像,需要的可以參考下

單擊移動(dòng)

在了解ScottPlot的繪圖邏輯之后,在WPF中生成動(dòng)態(tài)圖像簡(jiǎn)直輕而易舉,只需不斷地刪除舊圖而繪制新圖即可。

新建一個(gè)按鈕,綁定下面的函數(shù)

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用于計(jì)數(shù),以調(diào)整正弦函數(shù)的相位,這個(gè)函數(shù)的功能為,每點(diǎn)擊一次按鈕,正弦圖像便相左移動(dòng)0.1 0.10.1弧度。效果如下

多線程

這種需要通過單擊才能更改圖像的方案,顯然不是我們所希望的,但自動(dòng)的動(dòng)態(tài)繪圖函數(shù),其實(shí)并不屬于scottPlot的功能,而需要使用C#的多線程。

首先,新建一個(gè)動(dòng)態(tài)余弦繪制函數(shù),其相位取決于當(dāng)前的時(shí)間戳??紤]到我們將在新的線程中調(diào)用這個(gè)函數(shù),所以函數(shù)中在使用WPF對(duì)象時(shí),需要在Dispatchar.Invoke中以委托的形式進(jìn)行。

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();
    });
}

然后把這個(gè)函數(shù)放在一個(gè)循環(huán)中,為了能夠自由控制動(dòng)態(tài)繪圖,這個(gè)函數(shù)需要傳入一個(gè)tocken,并寫在循環(huán)的判斷條件中。

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

最后添加一個(gè)按鈕,綁定下列動(dòng)態(tài)繪圖函數(shù),每次點(diǎn)擊,都翻轉(zhuǎn)一次布爾型的drawDynCos,若翻轉(zhuǎn)后drawDynCos為True,則開啟動(dòng)態(tài)繪圖,通過工廠方法開啟一個(gè)新的線程;若反轉(zhuǎn)后為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();
    }
}

效果如下

到此這篇關(guān)于WPF利用ScottPlot實(shí)現(xiàn)動(dòng)態(tài)繪制圖像的文章就介紹到這了,更多相關(guān)WPF ScottPlot繪制圖像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論