Tanghaowei
31b63fd0e8
#T:修复扫描界面编码问题。
2026-07-28 18:06:13 +08:00
Tanghaowei
73d20c6930
#T:修补扫描界面xaml文件编码问题;
2026-07-28 17:45:09 +08:00
Tanghaowei
57b08d6e7d
#T:扫描界面支持中英文切换
2026-07-28 16:36:37 +08:00
Tanghaowei
71d5f474b2
#T:增加标定工具箱支持中英文切换
2026-07-28 13:10:23 +08:00
ZHANG Zhengxuan
25ddf5592e
已合并 PR 202: 检测池 YXLON 对标、CNC 编排增强、代码重构与联网更新
...
### 🔧 CNC 编排与执行
- CNC 编排面板统一嵌入主界面,不再弹出独立窗口
- CNC 编排算子预览受实时生效总开关控制
- 高级算子模块输出参数控制
- 取消流水线算子数量限制
### 🎨 Pipeline 编辑器增强
- 状态栏消息提示全面补充:新建/加载/保存/另存为/删除流水线、算子上下移/参数变更/实时生效开关/执行流水线等
- 切换流水线时清空 PreviewImage,避免显示旧流水线结果
- Ribbon "插入检测模块" 按钮修复
### 🔄 重构与代码清理
- 泛型仓储基类(JsonRepositoryBase)+ 通用 Json 默认值
- MainViewModel Measurement 部分 partial 拆分
- 文件合并化简:
- Security:AuthenticationModels / Permission / UserRole → SecurityModels.cs
- DefaultPasswords + PermissionMatrix → PermissionService.cs
- StateChangedEventArgs → AppStateService.cs
- ScaleBar 3 个枚举文件 → ScaleBarOverlay.cs
- Cnc service 工具文件合并
- Converters → Helpers/
- Inspection 服务文件合并
- 移除主视口检测池运行时界面层与死代码
- 命名空间对齐与引用清理
### 📦 联网更新
- 集成 Velopack 联网更新框架
- 启动自动检查更新、设置页面配置项
- 发布脚本(build-release.ps1)
- 联网更新技术文档
### 📖 文档与注释
- Services 目录下 176 处方法/类添加中文注释
- 架构与结构说明文档
- zh-TW.resx 简体转繁体 + 补全 56 个缺失翻译键
### 🐛 修复
- Splash 关闭后 MainWindow 置顶显示
- 修复编码问题(BGA 向导预览、算子重复插入、状态栏消息)
- VoidMeasurementProcessor 输出控制项恢复(合并时被覆盖)
- 测量工具按钮激活态被 hover 覆盖
- 修复编译错误
- 虚拟仿真默认导航图像从 相机1.bmp 改为 PhotoImage.png
- 运动参数标签单位 μm → mm(载物台 X/Y、射线源 Z、探测器 Z、FOD、FDD)
### 📋 其他
- 优化日志记录
- 检测记录查看器 UI 优化
- 应用图标资源(XplorerPlane.png)
2026-07-27 15:28:11 +08:00
XplorePlane Developer
3b17fc9e2c
优化结构
2026-07-27 10:23:37 +08:00
XplorePlane Developer
dcc325a553
docs: Services 目录下所有类添加中文注释(176 处)
2026-07-27 10:15:27 +08:00
XplorePlane Developer
94ef763719
fix: zh-TW.resx 简体转繁体(含新增的 56 个键)
2026-07-27 10:02:03 +08:00
XplorePlane Developer
dd55674f29
fix: 补全 zh-TW.resx 缺失的 56 个翻译键
2026-07-27 09:59:34 +08:00
XplorePlane Developer
21497b90be
取消流水线算子限制
2026-07-27 09:30:35 +08:00
XplorePlane Developer
6882a273fd
修复错误
2026-07-24 19:02:31 +08:00
XplorePlane Developer
539b626117
修复输出控制项目
2026-07-24 18:59:28 +08:00
XplorePlane Developer
2767510385
fix: 恢复 VoidMeasurementProcessor 输出控制项(合并时被 Develop/XP 版本覆盖)
2026-07-24 18:58:54 +08:00
XplorePlane Developer
1dc3f98fcd
合并 Develop/XP(PR 200: 气泡检测算法更新)
2026-07-24 18:53:53 +08:00
XplorePlane Developer
3b764a4243
优化日志的记录
2026-07-24 18:17:35 +08:00
XplorePlane Developer
c161476df5
在 PipelineEditorViewModel.cs 中,以下操作原先没有状态栏提示,现已补充:
...
操作修改状态栏消息示例新建流水线已有,保留已新建流水线加载流水线显示文件名 + 算子数已加载流水线:焊点检测.xpm(5 个算子)保存流水线显示流水线名 + 算子数 + 文件名流水线已保存:焊点检测(5 个算子 → 焊点检测.xpm)另存为流水线同上同上删除流水线已有,保留流水线已删除上移算子新增已上移算子:高斯模糊下移算子新增已下移算子:阈值处理算子参数变更新增已更新参数:核大小(Int32)实时生效开关新增 开/关 两种消息实时生效已开启 / 实时生效已关闭添加算子已有,保留已添加算子:Canny 边缘检测移除算子已有,保留已移除算子:中值滤波启用/停用算子已有,保留已启用算子:高斯模糊执行流水线消息增强(含流水线名称)正在执行流水线「焊点检测」— 5 个节点...执行完成消息增强流水线「焊点检测」执行完成(5 个节点)加载图像增加图像尺寸已加载图像:sample.tif(2048×2048)参数校验失败已有,保留参数错误:算子'阈值'的阈值输入不合理
2026-07-24 18:06:21 +08:00
XplorePlane Developer
74157c1f31
切换流水线时只清空了节点列表(PipelineNodes.Clear()),但 PreviewImage 没有清空。第 2 条流水线执行时 SourceImage 是对的(原图),但 UI 通过 DisplayImage 显示的是旧的 PreviewImage(流水线1的结果),导致看起来像是在流水线1的结果上继续处理
2026-07-24 17:58:52 +08:00
LI Wei.lw
41a4d01e0b
已合并 PR 200: 更新气泡检测算法
...
1. BGA/空隙检测新增四种检测模式:Fixed(固定阈值)、TopHat(顶帽变换)、LocalContrast(局部对比度)、AdaptiveStatistics(自适应统计),三种检测算子(BgaVoidRate/VoidMeasurement/QfnLeadPadVoid)均已支持
2. 检测面板参数按模式折叠可见性,避免无关参数干扰操作;空隙渲染改为轮廓线+编号展示,与焊球检测风格统一
3. 修复 SubPixelZoomProcessor 中 GaussianBlur 输入深度不匹配问题:原 result(TDepth 可能为 ushort)直接传参导致类型不匹配,改为先 Convert<Gray,float> 再传参
4. 修复多处资源泄漏与边界问题:GrayscaleProcessor 的 Convert 和算术运算中间 Image 未释放、ShockFilterProcessor 迭代中间图未释放且 sign 函数 laplacian=0 时偏差、DifferenceProcessor 边界行列未初始化、FromFloatImage 均匀图像返回全黑
2026-07-24 17:42:09 +08:00
XplorePlane Developer
81a4b306c0
Ribbon "插入检测模块"按钮(ExecuteInsertNode(CncNodeType.InspectionModule)):
...
选中模块节点 → ReplaceSelectedInspectionModule() — 保留名称、清空流水线
选中位置节点 → 在 SavePosition 块末尾新建一个空检测模块
选中其他节点 → 在节点下方新建一个空检测模块
实时流水线窗口的"推送到 CNC"按钮(InsertInspectionModuleFromPipeline(pipeline)):
选中模块节点 → ReplaceSelectedInspectionModuleWithPipeline(pipeline) — 保留节点和名称、替换流水线内容
选中位置节点 → EnsureOwningSavePositionSelected() → 新建检测模块并挂载流水线
选中其他节点 → 同上
2026-07-24 17:39:40 +08:00
XplorePlane Developer
05f609f08d
修复编码问题
2026-07-24 16:02:55 +08:00
XplorePlane Developer
957157ae80
fix: 修复编译错误、BGA向导预览、算子重复插入及状态栏消息
...
## Compilation fixes
- Fix XAML namespace reference XplorePlane.Converters → XplorePlane.Helpers (EventLogView, StateDisplayView)
- Add missing using for ISampleTypeRepository / JsonSampleTypeRepository in App.xaml.cs
- Fix ILoggerService.Warn() calls using Exception as first arg instead of message string
- Serialize CncProgram to JSON when passing to MatrixLayout (expects string, not CncProgram object)
- Suppress CS8632 nullable annotation warnings project-wide
## BGA wizard fixes
- Fix preview not showing on step 3: force RefreshBgaPreview() when entering final step
- Add step validation in CanNext() to prevent skipping to preview with invalid inputs
- Notify NextCommand.CanExecuteChanged when inputs change
- Fix RunProgress runtime binding error: set Mode=OneWay for ProgressBar.Value
## Operator toolbox: prevent duplicate insertion
- Add static OperatorTarget property for direct dispatch to active pipeline
- PipelineEditorView registers as toolbox target on load (floating window only)
- CNC page sets initial target; PipelineEditorWindow resets to CNC pipeline on close
- '+' button inserts only to the active pipeline instead of broadcasting to all subscribers
## Pipeline editor status bar messages
- Add StatusBarMessageEvent / StatusBarMessagePayload to CommonEvents.cs
- PipelineEditorViewModel publishes status on all ops (add/remove/reorder/save/execute)
- MainViewModel subscribes and displays on main window bottom status bar
- Auto-clear after timeout (3s info, 5s error)
## docs
- Merge three architecture docs into consolidated XplorePlane-架构与结构说明.md
2026-07-24 15:59:16 +08:00
XplorePlane Developer
1f26d10358
修复算子工具箱插入错误 启动时 → target = CNC 流水线
...
打开实时流水线 → target = 实时流水线浮动窗口
在实时流水线窗口 → "+" 只插入实时流水线
关闭实时流水线 → target 回退到 CNC 流水线
在 CNC 页面 → "+" 只插入 CNC 模块
2026-07-24 15:46:18 +08:00
XplorePlane Developer
152ac39798
refactor: CNC 编排面板统一嵌入主界面,不再弹出独立窗口
2026-07-24 14:55:03 +08:00
XplorePlane Developer
78c552d413
移除将当前流水线插入CNC的功能
2026-07-24 14:46:49 +08:00
wei.lw.li
1f5b14cfff
fix(ImageProcessing): 修复资源泄漏和边界处理问题
2026-07-24 14:30:28 +08:00
XplorePlane Developer
8f950ac6fa
refactor: 虚拟仿真默认导航图像从 相机1.bmp 改为 PhotoImage.png
2026-07-24 14:13:16 +08:00
XplorePlane Developer
b504dc44c0
refactor(P0): 泛型仓储基类 + MainViewModel partial 拆分
2026-07-24 14:01:53 +08:00
XplorePlane Developer
9a50e71758
fix: Splash关闭后MainWindow置顶显示
2026-07-24 11:57:12 +08:00
XplorePlane Developer
575f25d92f
refactor: 移除主视口检测池运行时界面层并清理对应死代码
2026-07-24 11:52:38 +08:00
XplorePlane Developer
d86a934fe8
引入向导
2026-07-24 11:36:46 +08:00
XplorePlane Developer
e1486ff7f0
更新架构文档说明
2026-07-24 10:43:45 +08:00
XplorePlane Developer
1e037199f2
修复编译错误
2026-07-24 10:22:20 +08:00
XplorePlane Developer
aeadc86ebe
feat: 检测池 YXLON 对标 - 任务2 BGA 引导式向导弹窗
2026-07-24 10:13:23 +08:00
XplorePlane Developer
4276ba00e0
feat: 检测池 YXLON 对标 - 任务1 样品类型一体化 UI 与多项 Cnc/图像处理改进
2026-07-24 09:56:11 +08:00
XplorePlane Developer
81e37a34df
refactor: merge DefaultPasswords and PermissionMatrix into PermissionService.cs
2026-07-24 09:41:33 +08:00
XplorePlane Developer
83b3a91176
refactor: move utility files to Helpers/, merge dialog interface into Views
2026-07-24 09:38:16 +08:00
XplorePlane Developer
0c0aebe306
refactor: merge Cnc service utility files
2026-07-24 09:33:43 +08:00
XplorePlane Developer
b6fbcc9708
refactor: merge StateChangedEventArgs into AppStateService.cs
2026-07-24 09:30:28 +08:00
XplorePlane Developer
c96fbe9c56
refactor: merge 3 Security model files into SecurityModels.cs
2026-07-24 09:29:24 +08:00
XplorePlane Developer
de52c8bee4
refactor: merge 3 ScaleBar enum files into ScaleBarOverlay.cs
2026-07-24 09:26:04 +08:00
XplorePlane Developer
cda6d234cf
refactor: move Converters.cs from Converters/ to Helpers/, update namespace
2026-07-24 09:25:06 +08:00
XplorePlane Developer
f41f581b5a
refactor: merge and simplify Inspection service files
...
Consolidates 33 Inspection service files by extracting shared utilities,
merging small/singleton classes, and eliminating code duplication (~275 lines
of net reduction).
Changes:
- Extract InspectionBitmapEncoder – centralizes Bmp/PngBitmapEncoder logic
previously duplicated in InspectionExecutionRecorder, PoolArchiveHelper,
InspectionMapStore
- Extract InspectionJsonDefaults – centralizes JsonSerializerOptions
previously defined in 4 files (InspectionDefinitionSnapshot,
JsonInspectionDefinitionRepository, InspectionMapStore, InspectionResultStore)
- Extract InspectionMetricHelper – shares Metrics→InspectionMetricResult
mapping between InspectionExecutionRecorder and PoolArchiveHelper
- Extract InspectionPixelAnalysis to its own file – detaches pixel utilities
from AdvancedInspectionExecutors so MosaicInspectionAcquisitionService can
reference them without a cross-concern dependency
- Merge InspectionDefinitionSnapshot.Clone → JsonInspectionDefinitionRepository
then delete standalone file
- Merge IPoolInteraction enum+interface into DefaultPoolInteraction.cs
- Merge InspectionManifestWriter.WriteAsync into InspectionResultStore as
WriteManifestAsync, delete separate file
- Combine IInspectionDefinitionDialogService + IInspectionPoolDialogService
into IInspectionDialogService, update all consumers
- Deduplicate coordinate validation by adding
InspectionCoordinateTransform.ValidateOrError() and calling it from
InspectionDefinitionValidator instead of inlining the same checks
- Delete: IInspectionDefinitionDialogService.cs, InspectionDefinitionSnapshot.cs,
InspectionRunDetailModels.cs (duplicate of Models namespace types)
2026-07-24 09:07:14 +08:00
XplorePlane Developer
a00ce714c8
fix: 主视口检测池面板默认可见 + 红线框立即绘制 + 新增方案入口
...
- InspectionPoolRuntimePanel 默认 Visible(之前 Collapsed 导致用户
找不到配置入口),无方案时显示"选择方案或创建新方案"
- 新增"新建方案"按钮,直接打开检测池设置窗口
- RenderInspectionPoolOverlay 移除对 RoiCanvas.CanvasWidth <= 0
的拦截,画布无图像时使用 1400×1400 默认尺寸绘制红线框预览
- RenderWithLogicalDivision 接收外部 canvasW/canvasH 参数,
不再硬绑定 RoiCanvas 当前尺寸
- 恢复误删的 ProgressBar + Null 安全检查
修改文件:
- Views/Main/ViewportPanelView.xaml
- Views/Main/ViewportPanelView.xaml.cs
2026-07-23 17:49:55 +08:00
XplorePlane Developer
60fb293ef1
feat: 检测池编辑器改为步骤树导航,对齐参考软件 UX
...
新增 EditorStepItem 步骤树模型,替换原来的平铺参数列表:
- 左侧改为双 Tab:「项目」列表 +「步骤」树
- 步骤树按执行顺序排列:基本设置 / BGA 焊球矩阵 / Overview
/ Tile[0,0]~Tile[1,1] / Restore Position
- 右侧属性面板根据选中的步骤动态切换内容
- 新增 Description 字段
- BGA 参数变更时自动重建步骤树
新增 1 文件,修改 3 文件:
- ViewModels/Inspection/Pool/EditorStepItem.cs(新)
- ViewModels/Inspection/Pool/InspectionPoolPageViewModel.cs
- Views/Inspection/Pool/InspectionPoolPageView.xaml
2026-07-23 17:24:27 +08:00
XplorePlane Developer
a594887bd8
feat: 检测池页面精简与全链路补齐
...
页面重组:
- 3-Tab 配置向导合并为一页式布局,减少操作层级
- BGA 参数变更时自动生成 Tile,不再需要手动点"生成 Tile"
- Tile 步距从 Magnification + Pitch 自动推算(mmPerPixel 换算)
- Tile DataGrid 改为只读预览,去除复杂的 Tile 增/删/排序编辑
- 去除"启用序列"复选框,BGA 默认走 Overview→Tiles→Restore 序列
- 新增 TilePreviewSummary 属性,实时显示"4 个 Tile · 4×4 Ball"
全链路补齐(之前已完成):
- Phase 1: BgaBallResult / OverallSummary 强类型化
- Phase 2: InspectionPoolResultWindow 结果弹窗
- Phase 3: ImageStitchingService 图像拼接 + 拼接图统一检测
- Phase 3: 红线框 Overlay + Ball 标注
- P1: IPoolInteraction Tile 失败重试/跳过/中止
- P1: PoolArchiveHelper 子 Run 归档 + CNC 主 Run 关联事件
新增 8 文件,修改 15 文件
2026-07-23 16:43:10 +08:00
XplorePlane Developer
58cb345ada
feat: 检测池 P0/P1 补齐 — 拼接/弹窗/强类型/交互/归档
...
Phase 1 — 结果模型强类型化:
- BgaBallResult(BallId/Status/Measured/Confidence/S/D/M/F/V)
- OverallSummary(Expected/Detected/Pass/Fail/Miss/Error)
- BgaTileResultMerger 产出 BallResults + Summary
Phase 2 — 结果弹窗 InspectionPoolResultWindow:
- 16 Ball 明细 + S/D/M/F/V + 汇总计数 + 总体判定横幅
- Continue/Abort 按钮 + FAILED 时备注提示
- 执行完成后主视口自动弹出
Phase 3 — 图像拼接 ImageStitchingService:
- 基于平台坐标计算像素偏移 + 羽化融合 + 质量评分
- 执行流改为「采集→拼接→统一 BGA 检测」
- 结果行通过 Ball ID 反算归属 Tile
Phase 1-P1 — Tile 异常交互与 CNC 子 Run 归档:
- IPoolInteraction 接口(Retry/Skip/Abort),最多 3 次重试
- CNC 语境默认跳过,独立运行弹窗交互
- PoolArchiveHelper:检测池子 Run 归档 + CNC 主 Run 追加摘要
- DI 注册新增服务
新增 8 文件,修改 12 文件
2026-07-23 16:31:16 +08:00
XplorePlane Developer
8dd9b67c3b
图像拼接
2026-07-23 16:26:38 +08:00
XplorePlane Developer
2c99df750a
feat: 检测池 P0 补齐 — 结果强类型化 + 结果弹窗
...
Phase 1 — 结果模型强类型化:
- InspectionDefinitionModels.cs 新增 BgaBallResult record(BallId, Status,
Measured, Confidence, Size/Displacement/SolderMass/Deformation/Voids,
SourceTileId, FailureReason)和 OverallSummary record(Expected/
Detected/Pass/Fail/Miss/Error计数)
- InspectionExecutionResult 新增 BallResults / Summary 属性
- BgaTileResultMerger.Merge() 同步产出强类型 BallResults 和 Summary,
MISS 行指标为 null、Measured=false
Phase 2 — 结果弹窗 InspectionPoolResultWindow:
- 新增窗口:16 Ball 明细 DataGrid(ID/Result/Confidence/S/D/M/F/V/Tile/
FailureReason)+ 汇总区(Expected/Detected/Pass/Fail/Miss/Error + 总
体 PASSED/FAILED 横幅)+ 备注 + Continue/Abort
- 新增 InspectionPoolResultViewModel
- InspectionPoolEvents.cs Payload 增加 BallResults/Summary 字段
- InspectionExecutionCoordinator PublishCompleted 传入 BallResults
- ViewportPanelView.xaml.cs 执行完成后弹出结果窗口,Continue/Abort
和备注反馈回状态栏
2026-07-23 16:20:13 +08:00
XplorePlane Developer
4f7b299da6
feat: Tile 生成从硬编码 2×2 升级为动态 N×M 网格
...
GenerateTwoByTwo() 仅支持将 BGA 网格一分为二(最多 4 个 Tile),
无法满足更大 BGA 阵列(如 9×9)需要更细 Tile 划分的场景。
修改:
- InspectionPoolSequenceEditorMapper.GenerateTwoByTwo() →
GenerateTiles(grid, tileRows, tileColumns, stepXmm, stepYmm)
支持任意行列划分,每 Tile 均匀分摊 Ball,超出 BGA 范围时自动截断
- InspectionPoolPageViewModel 新增 TileGridRows / TileGridColumns
属性(默认 2×2),命令名 GenerateTwoByTwoTilesCommand →
GenerateTilesCommand
- InspectionPoolPageView.xaml 增加 Tile 行数 / Tile 列数输入框,
替换原只有步距输入+2×2按钮的布局
- 测试同步更新,新增 9×9×3×3、6×6×2×2、溢出 BGA 等用例
2026-07-23 16:12:42 +08:00
XplorePlane Developer
9d28228839
feat: 统一 XP 文件扩展名体系 — 矩阵 .xpmatrix / 检测池 .xppool
...
原矩阵布局和检测池定义文件均使用泛型 .json 后缀,无法从文件名
区分内容类型。现按 xp- 前缀 + 全拼命名约定统一:
.xp → CNC 程序 (不变)
.xpm → 流水线模块 (不变)
.xpz → CNC 迁移包 (不变)
.xpmap → 检查标记图 (不变)
.xpmatrix → 矩阵布局方案 (原 .json)
.xppool → 检测池定义 (原 .json)
修改:
- Resources.resx / zh-CN / en-US / zh-TW:Matrix_JsonFileFilter →
Matrix_XpmatrixFileFilter(矩阵方案文件 *.xpmatrix)
- MatrixEditorViewModel.cs:保存/加载对话框默认扩展名
.json → .xpmatrix,filter 名同步更新
- JsonInspectionDefinitionRepository.cs:文件扫描模式
*.json → *.xppool,GetPath() 文件名模板同步更新
2026-07-23 15:45:05 +08:00