如何在Linux 上运行 SciChart WPF图表控件?
SciChart – 一个跨平台图表库,可实现 Windows Presentation Foundation (WPF)、JavaScript 以及原生 iOS (Swift/Objective-C) 和 Android (Java/Kotlin),基于代号为 Visual Xccelerator® 的专有 C++ 渲染引擎。这提供了 SciChart 众所周知的速度和性能,但另一个好处是,该引擎跨平台提供单一共享代码库,用于绘制高性能科学、金融和医疗图表和图形,并在 DirectX、OpenGL、Metal 和 WebGL 中提供硬件加速。
到目前为止,还没有可以在 Qt 中运行的纯 C++ 版本的 SciChart,但是,我们一直在努力为 SciChart 提供 Linux 支持。
SciChart 获取
为什么在 Linux 上使用 SciChart?
WPF 应用程序通常是 Windows 应用程序,因为它们需要 Microsoft .NET 和 Windows Presentation Foundation 才能运行。但是,一部分要求极高的科学、金融或医疗应用程序需要在 Linux 上运行图表。这可能适用于:
- 嵌入式系统
- 定制便携式硬件
- 电子测试设备
- 射频或频谱分析仪
- 示波器
- 工厂、工业流程或石油钻井平台中的终端或信息亭
- 船舶仪表
- 飞机仪表
通过在嵌入式系统上运行 Linux,嵌入式设备制造商的成本基础将大幅下降,因为他们无需支付 Windows 许可证费用。
此外,Linux 的 RTOS(实时操作系统)特性使其非常适合需要高性能、大数据或实时图表的高性能关键嵌入式系统。
WPF 可以在 Linux 上运行吗?
微软于 2014 年推出了 .NET Core,后来被 .NET 取代,旨在成为 .NET Framework 的跨平台实现。众所周知,C# 代码和 .NET 多年来一直能够在 Linux(和 macOS)上运行,但 WPF 呢?
据微软官方消息,WPF 仅适用于 Windows,因为该框架的这一部分并未移植到 Linux。然而,Avalonia 的天才们却取得了惊人的成就:他们成功制作了一个完全跨平台的框架,名为 Avalonia XPF,这是 Windows Presentation Foundation 的一个版本,使用 OpenGL 而不是 DirectX 运行。
什么是 Avalonia XPF?
Avalonia XPF 是 Windows Presentation Foundation (WPF) 的专有跨平台实现,由 Avalonia UI 的开发人员为您带来。这使旧版和现有应用程序能够完全兼容 WPF,但允许它们在 Windows、Linux 和 macOS 上运行。它通过将 WPF 中的 DirectX 和 MilCore Windows 特定函数和例程替换为 OpenGL 和 C++ 中的等效函数和例程来实现这一点。结果是,现有的 WPF 应用程序可以移植到 Linux 上运行,通常无需任何代码更改,只需几分钟即可完成。
对于拥有大型 WPF 应用程序并希望针对多个平台的团队来说,这可以节省大量时间,这一点怎么强调也不为过。
为 Avalonia XPF 引入 SciChart
SciChart 已经与 Avalonia 团队合作了一段时间,为您带来了可在 Linux 上运行的与 Avalonia XPF 兼容的 SciChart WPF 版本。
以下是我们所做的以及我们的做法:
- 我们的 C++ Visual Xccelerator® 引擎已重新定位到 Linux,并使用 CMake 进行编译
- 我们已经替换了 SciChart 中的所有 DirectX 渲染,以便根据平台动态选择 DirectX 或 OpenGL。
- 我们为 SciChart WPF 构建了一个并行解决方案,它将针对 Avalonia XPF 以及现有的 .NET Framework、.NET 6、7、8 等运行……
- 示例应用程序和演示都已在新环境中测试。
需要说明的是,我们几乎无需对 SciChart WPF 本身进行任何代码更改,也 无需对 API 进行任何更改。这是一个完全 100% 兼容的 SciChart 版本,当针对 Avalonia XPF 时,它可以在 Linux 上神奇地运行。
早期预览 – Linux 上的 XPF 版 SciChart
下面是在 Linux 上运行的 Avalonia XPF 的 SciChart 的视频。
我们正在使用 Visual Studio Code 编译示例/演示应用程序,并在 Ubuntu VM 中运行一些示例。
值得注意的是,这是与 Windows 版 SciChart WPF 完全相同的代码和 API,这意味着当针对 Avalonia XPF 时,您的 Windows 应用程序将兼容并能够在 Linux 上运行。
第一个演示是 Spectrogram(频谱分析仪)演示,展示了 SciChart 在 Linux 上实时图表的实时功能,接下来是 ECG Monitor 演示,这是一个实时医疗生命体征监测器。
然后,我们展示了数字分析仪性能演示 - 这是一个大数据演示,它加载了多个数字数据通道,每个通道有数百万(甚至数亿)个数据点。这对于创建逻辑分析仪硬件很有用。
在撰写本文时,所有 2D 示例均已启用。3D 图表和示例也可用,但在发布之前我们还需要解决一两个错误。
以下是使用 Avalonia XPF 在 Linux 上运行的 SciChart WPF 的更多屏幕截图。



相关文章:
如何在Linux 上运行 SciChart WPF图表控件?
SciChart – 一个跨平台图表库,可实现 Windows Presentation Foundation (WPF)、JavaScript 以及原生 iOS (Swift/Objective-C) 和 Android (Java/Kotlin),基于代号为 Visual Xccelerator 的专有 C 渲染引擎。这提供了 SciChart 众所周知的速度和性能&am…...
C--字符串函数处理总结
文章目录 函数接口strchrstrtok 常见应用int 转化 字符串1 2 3 4 (int ) ---> 1,2,3,4 (char []) 字符串转化为 int1,2,3,4(char []) ---> 1 2 3 4 (int ) 函数接口 strchr char *strch…...
PLSQL-将一份excel数据导入到一张物理表(Oracle)
–>> 很简单~ 平时用惯了DBeaver,突然要用PLSQL Developer,确实很生疏。 –>> 我的场景,将一份.csv文件数据手动导入到Oracle下的一张物理表中去。 研究了半天,看网上说的可以用:Tools → ODBC Importer &…...
【系统架构设计师】状态模式
状态模式(State Pattern)是行为设计模式的一种,它允许一个对象在其内部状态改变时改变它的行为。对象看起来像是改变了它的类。这种模式可以用于实现一些复杂的有限状态机,在不同的条件下改变对象的行为而无需修改对象本身。下面是一个关于状态模式的详细介绍,包括其概念、…...
Linux网络编程1——socket通信
一.网络准备 1.套接字 在TCP/IP 协议中,“ip 地址TCP 或UDP 端口号”唯一标识网络通讯中的一个进程。“IP 地址端口号”就对应一个socket。欲建立连接的两个进程各自有一个 socket 来标识,那么这两个 socket 组成的 socket pair 就唯一标识一个连接。因…...
【每日一题】LeetCode 1052.爱生气的书店老板(数组、滑动窗口)
【每日一题】LeetCode 1052.爱生气的书店老板(数组、滑动窗口) 题目描述 书店老板的商店每天有不同数量的顾客进入。每分钟,老板可能或可能不会生气。如果老板生气,那一分钟的顾客就会不满意。老板知道一个秘密技巧,…...
IDEA中无法使用 Subversion 命令行客户端 svn Subversion 可执行文件的路径可能是错误的
IDEA中无法使用 Subversion 命令行客户端 svn 我在新电脑上安装好IDEA和SVN后使用IDEA拉取和提交项目时提示无法使用。 解决方案 我这边的问题是在安装TortoiseSVN的时候少启用了一个功能,需要重新安装并把这个功能启用。 在这一步需要把command line client to…...
ThreadLocal 在线程池中的内存泄漏问题
ThreadLocal 是一种非常方便的工具,它为每个线程创建独立的变量副本,避免了线程之间的共享数据问题。然而,在线程池环境中,ThreadLocal 的使用必须非常谨慎,否则可能会引发内存泄漏问题。 为什么 ThreadLocal 可能导致…...
如何编写Prompt,利用AI高效生成图表——图表狐(FoxChart)指南
在数据可视化领域,图表是数据的重要表达方式。为了让更多人能够轻松高校地生成美观、专业的图表,图表狐(FoxChart)应用而生。然而,要想充分发挥AI的潜力,编写合适的Prompt至关重要。本文介绍一些编写Prompt的原则,帮助…...
Redis主从数据同步过程:命令传播、部分重同步、复制偏移量等
请记住胡广一句话,所有的中间件所有的框架都是建立在基础之上,数据结构,计算机网络,计算机原理大伙一定得看透!!~ 1. Redis数据同步 1.1 数据同步过程 大家有没想过为什么Redis多机要进行数据同步&#…...
《JavaEE进阶》----13.<Spring Boot【配置文件】>
本篇博客讲解 1.SpringBoot配置文件的格式以及对应的语法 2.了解两个配置文件格式的差异、优缺点。 我们这里只做简单的介绍。看会,了解,学会读取就行了。 因为配置文件实在太多了,这里只做基础的介绍。 一、配置文件的作用 前言 计算机中有许…...
【练习8】
链接:https://www.nowcoder.com/questionTerminal/e671c6a913d448318a49be87850adbcc 分析: 创建一个二维数组来实现杨辉三角,因为当前元素的值是上一行的当前列与前一列的和,所以创建数组的时候要实现n1,相当于罩子一…...
vivado 时间汇总报告
步骤7:时间汇总报告 定时路径在时钟元素处开始和结束。输入和输出端口不是顺序的 元素,默认情况下,Vivado时序分析不会对进出I/O端口的路径进行计时 设计,除非指定了输入/输出延迟约束。 在此步骤中,您将在Vivado中生成…...
【软考】设计模式之代理模式
目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点7. 缺点8. java示例 1. 说明 1.代理模式(Proxy Pattern)。2.意图:为其他对象提供一种代理以控制对这个对象的访问。3.通过提供与对象相同的接口来控制对这个对象的访问。4.是设计模…...
3.创建型设计模式详解:生成器模式与原型模式的深度解析
设计模式(Design Patterns)是软件开发中常用的解决方案,帮助开发者处理常见的设计问题。创建型设计模式专注于对象的实例化,旨在提高系统的灵活性和可维护性。在这篇文章中,我们将深入探讨创建型设计模式中的生成器模式…...
goframe结构体标签和命令行标签
元数据gmeta 基础标签 更多了解:https://swagger.io/specification/ g.Meta path:"/profile" method:"get" summary:"展示个人资料页面" tags:"个人" g.Meta mime:"text/html" type:"string" example…...
pytest压力测试:不断发送数据,直到发现数据丢失
示例场景 假设有一个 send_data 函数接受数据并返回成功或失败的状态。 创建一个测试用例,通过逐步增加数据量来测试这个函数,直到返回失败为止。 步骤 定义压力测试函数 定义一个函数。不断发送数据,直到发现数据丢失。 创建 pytest 测试…...
自选择问题和处理效应模型
自选择问题和处理效应模型 DGP 注意: 这里的概率密度超过了1,这是正常的。概率密度的三原则,1是大于等于0;2是积分等于1;对于连续型随机变量,给定一个具体的x值,f(x)并不是该事件发生的概率。而…...
[数据集][目标检测]水面垃圾检测数据集VOC+YOLO格式2027张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2027 标注数量(xml文件个数):2027 标注数量(txt文件个数):2027 标注…...
OpenCV 之 模版匹配多个对象、图片旋转 综合应用
引言 在图像处理和计算机视觉中,模板匹配是一种常用的技术,用于在一幅较大的图像中查找与给定模板图像相似的部分。然而,在实际应用中,目标物体可能会出现在不同的角度,这就需要我们在匹配之前对模板进行旋转处理。本…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
