Avalonia ScottPlot
Avalonia是.Net跨平台的UI库,支持Windows,Linux,iOS,MacOS,Android等;
ScottPlot为跨平台的UI控件库,支持Avalonia,Windows,Eto,等平台;本文测试内容为Avalonia在Windows,Linux,Android,WebAssembly平台实时动态曲线测试;
本文代码
步骤
- 安装Avalonia For VS2022扩展
- 新建名为AvaScottPlot的Avalonia Cross Platform项目
- 将AvaScottPlot主工程及各个平台的启动工程改为.Net8
- AvaScottPlot工程增加如下引用
<PackageReference Include="ScottPlot.Avalonia" Version="5.0.20" />
- 写代码
- 启动AvaScottPlot.Desktop等工程调试
- Linux端选择AvaScottPlot.Desktop发布为linux-x64选择单文件
关键代码
<!--MainView.axaml-->
<sc:AvaPlot x:Name="plot" />
// MainView.axaml.cs
private void InitLines()
{
if (plot == null) return;
// PlotFont = Fonts.Detect("实时数据");
plot.Plot.Axes.Title.Label.Text = "RealTime Data:实时数据";
plot.Plot.Axes.Title.Label.FontName = PlotFont;
plot.Plot.Clear();
Lines = new LineModel[LineCount];
DateTime start = DateTime.Now;
for (int i = 0; i < LineCount; i++)
{
Lines[i] = new LineModel();
Lines[i].Init(i + 1, plot.Plot, start);
}
plot.Plot.Benchmark.IsVisible = true;
}
public void UpdateData(DateTime ts, double[] data)
{
int Min = Math.Min(data.Length, Lines.Length);
if (Min <= 0) return;
for (int i = 0; i < Min; i++)
{
UpdateData(i, ts, data[i]);
}
Render();
}
private void UpdateData(int i, DateTime ts, double latestValue)
{
var tmp = Lines[i];
tmp.UpdateData(ts, latestValue);
}
public void Render()
{
plot.Plot.Axes.AutoScale();
plot.Refresh();
}
private void TimerElapsed(object? sender, EventArgs e)
{
double[] data = new double[LineCount];
for (int i = 0; i < LineCount; i++)
{
data[i] = Generate.RandomData.RandomNumber(100);
}
UpdateData(DateTime.Now, data);
}
效果
本人电脑配置i5-1035G1,浏览器:Chrome 120.0.6099.225,虚拟机:VMware Workstation 16.2.3 Player;曲线数量20条;
-
Avalonia On Windows 32FPS
-
Avalonia On WebAssembly FPS为1,最小化浏览器时不渲染
-
Avalonia On Linux 在虚拟机中运行FPS为1
-
Avalonia On Android
已知问题
- WebAssembly工程中文显示异常,暂时无法解决