Commit Graph

800 Commits

Author SHA1 Message Date
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