WPF利用ScottPlot實現(xiàn)動態(tài)繪制圖像
單擊移動
在了解ScottPlot的繪圖邏輯之后,在WPF中生成動態(tài)圖像簡直輕而易舉,只需不斷地刪除舊圖而繪制新圖即可。
新建一個按鈕,綁定下面的函數(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用于計數(shù),以調(diào)整正弦函數(shù)的相位,這個函數(shù)的功能為,每點擊一次按鈕,正弦圖像便相左移動0.1 0.10.1弧度。效果如下

多線程
這種需要通過單擊才能更改圖像的方案,顯然不是我們所希望的,但自動的動態(tài)繪圖函數(shù),其實并不屬于scottPlot的功能,而需要使用C#的多線程。
首先,新建一個動態(tài)余弦繪制函數(shù),其相位取決于當前的時間戳??紤]到我們將在新的線程中調(diào)用這個函數(shù),所以函數(shù)中在使用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();
});
}
然后把這個函數(shù)放在一個循環(huán)中,為了能夠自由控制動態(tài)繪圖,這個函數(shù)需要傳入一個tocken,并寫在循環(huán)的判斷條件中。
private void TaskDynCosLoop(CancellationToken token)
{
while (!token.IsCancellationRequested)
{
dynCos();
Task.Delay(10);
}
}
最后添加一個按鈕,綁定下列動態(tài)繪圖函數(shù),每次點擊,都翻轉(zhuǎn)一次布爾型的drawDynCos,若翻轉(zhuǎn)后drawDynCos為True,則開啟動態(tài)繪圖,通過工廠方法開啟一個新的線程;若反轉(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();
}
}
效果如下

到此這篇關于WPF利用ScottPlot實現(xiàn)動態(tài)繪制圖像的文章就介紹到這了,更多相關WPF ScottPlot繪制圖像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C#編程實現(xiàn)連接SQL SERVER數(shù)據(jù)庫實例詳解
這篇文章主要介紹了C#編程實現(xiàn)連接SQL SERVER數(shù)據(jù)庫的方法,以實例形式較為詳細的分析了C#連接SQL SERVER數(shù)據(jù)庫的相關步驟與具體實現(xiàn)技巧,需要的朋友可以參考下2015-11-11
c# 9.0新特性nint和Pattern matching的使用方法
這篇文章主要介紹了c# 9.0新特性nint和Pattern matching的使用方法,文中講解非常細致,幫助你更好的學習c# 9.0,有需求的朋友可以參考下2020-06-06
WPF實現(xiàn)Interaction框架的Behavior擴展
這篇文章介紹了WPF實現(xiàn)Interaction框架Behavior擴展的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
使用C#與SQL Server數(shù)據(jù)庫進行交互的詳細步驟
在C#中與數(shù)據(jù)庫進行交互,通常使用ADO.NET(ActiveX Data Objects .NET)框架,ADO.NET是.NET Framework中用于數(shù)據(jù)訪問的一組類庫,它提供了多種用于連接和操作數(shù)據(jù)庫的方法,以下是使用C#與SQL Server數(shù)據(jù)庫進行交互的詳細步驟,需要的朋友可以參考下2024-08-08

