// SPDX-License-Identifier: GPL-3.0-or-later
一个 QuickLook 插件(Windows),在资源管理器里选中
Touchstone S 参数文件(.s1p、.s2p、…、.snp、.ts)后按空格,即可以
OxyPlot 图表的形式预览频响曲线。
- 解析 Touchstone v1.1 / v2.x:RI / MA / DB 三种数据格式,S / Y / Z / G / H 参数类型,Hz / kHz / MHz / GHz 频率单位,逐端口参考阻抗。
- 支持跨行数据:多端口文件常把一个频点的数据拆在多个物理行,解析器会 按数据流自动归并(修过把续行误读成负频率的 bug)。
- 支持
[Noise]噪声块(噪声系数 + 等效噪声电阻)。 - 一张图绘制全部
Sij(或Yij/Zij/ …)曲线:- Y 轴:dB / 幅值 / 实部 / 虚部 / 相位(°)胶囊切换;
- X 轴:线性 / 对数切换;
- 图例按端口数排成矩阵(s2p → 2×2,s3p → 3×3 …),可点击显示/隐藏曲线;
- 悬停数据点显示读数 tooltip。
- 跟随 Windows 浅色 / 深色模式(读
AppsUseLightTheme,图表、选项条、图例、 tooltip 整体换肤)。 - 界面语言跟随系统显示语言:中文系统显示中文,否则显示英文。
- 大文件保护:绘图抽稀到每条曲线 ≤ 4000 点,避免 OxyPlot 卡死。
- 文件头嗅探:非 Touchstone 文件直接放行,不抢其他预览插件的活。
- More 菜单:用系统默认文本编辑器打开、在资源管理器中定位。
.s1p .s2p .s3p .s4p .s5p .s6p .s7p .s8p .snp .ts
从 Releases
下载 QuickLook.Plugin.SnpViewer.qlplugin,在资源管理器里选中它按空格,
点安装即可。
手动安装也可以:
- 退出 QuickLook(托盘图标 → Quit)。
- 把
.qlplugin(就是个 ZIP)解压,将内容拷进插件目录下的QuickLook.Plugin.SnpViewer文件夹(没有就新建)。Installer 版路径一般是%AppData%\pooi.moe\QuickLook\QuickLook.Plugin\,其他发行版见 官方 wiki。 - 启动 QuickLook,选中
.s2p文件按空格。
Linux 下编不了(WPF / net462),以 CI(
Buildworkflow,windows-latest+ .NET SDK 8)结果为准,不要在本地dotnet build碰运气。
:: 编译检查
dotnet build QuickLook.Plugin.SnpViewer.sln -c Release
:: 测试
dotnet test tests\QuickLook.Plugin.SnpViewer.Tests.csproj
:: 只跑一个测试
dotnet test tests\QuickLook.Plugin.SnpViewer.Tests.csproj --filter "FullyQualifiedName~<TestName>"
:: 打包(生成的 QuickLook.Plugin.SnpViewer.qlplugin 在仓库根目录)
powershell -ExecutionPolicy Bypass -File package.ps1 -Configuration Release -Platform AnyCPU注意:
.sln里的平台名是Any CPU(带空格),.csproj里是AnyCPU(不带空格), 两边拼写必须同步,否则报 MSB4126。.qlplugin必须用package.ps1(走dotnet publish,保证 NuGet 依赖 DLL 被 stage 进来)生成,不要手卷 zip,更不要直接打包Build\...目录。 包内约定:插件 DLL +OxyPlot*.dll+Translations.config+QuickLook.Plugin.Metadata.config全放 zip 根目录;不含QuickLook.Common.dll(宿主自带)、*.pdb和缓存。- 发版前记得 bump
QuickLook.Plugin.Metadata.config里的<Version>, 空格键安装器就认这个文件。
测试用 samples/ 里的 fixture(.s1p / .s2p,含 [Noise])断言解析出的
精确数值;解析器改动请同步加回归测试。
.
├── QuickLook.Plugin.SnpViewer/
│ ├── Plugin.cs # IViewer 实现(嗅探 + 预览入口)
│ ├── Plugin.MoreMenu.cs # IMoreMenu 实现(打开/定位)
│ ├── SnpPanel.xaml(.cs) # WPF 面板 + OxyPlot 视图模型
│ ├── ThemeHelper.cs # 系统深浅色检测 + 图表配色 + 语言选择
│ ├── TouchstoneParser.cs # Touchstone v1/v2 文本解析器
│ ├── TouchstoneDocument.cs # 数据模型
│ ├── Translations.config
│ ├── QuickLook.Plugin.Metadata.config # 空格键安装器用的元数据(含版本号)
│ └── QuickLook.Plugin.SnpViewer.csproj
├── samples/ # 解析器 fixture
├── tests/ # xUnit 测试
├── package.ps1 # 打 .qlplugin(CI 和本地共用同一脚本)
├── build.cmd / build.sh # 快捷构建脚本
├── AGENTS.md # 给 AI 助手的仓库专属注意事项
└── LICENSE-GPL.txt
依赖(NuGet 自动拉取,无需手动安装):OxyPlot.Wpf 2.1.2(注意不是
2.2+,图例 API 不一样)、QuickLook.Common 4.5.0。目标框架 net462。
- 预览显示 "Failed to preview" 但构建是绿的:先看
%AppData%\pooi.moe\QuickLook\QuickLook.Exception.log里本插件的堆栈, 不要猜。 - 已知的几个坑都记在
AGENTS.md(BAML 加载上下文、冻结 brush 不能改、Plot.Model必须代码赋值等),改 UI 相关代码前建议先读一遍。
GPL-3.0-or-later,见 LICENSE-GPL.txt。所有源码文件头带 SPDX 标识。
- QuickLook(QL-Win 社区)。
- OxyPlot(WPF 绘图引擎)。
- Touchstone File Format Specification v2.1 (IBIS Open Forum)。
