Commit Graph

773 Commits

Author SHA1 Message Date
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
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
XplorePlane Developer e1a656c244 fix(cnc): 补全 ResultTables 数据链路,BGA焊球明细表现在 UI 卡片中可显示
InspectionReportViewer 的 PopulateDetailPanel 从 detail.ResultTables
读出了 BGA焊球明细等结构化结果表,但从未传给 ViewModel/View 层,
导致 UI 仅显示了汇总指标(Metrics),明细表整段丢失。

修改:
- InspectionNodeCardViewModel 新增 resultTables 构造函数参数,
  筛选本节点表数据,暴露 HasResultTables / ResultTableColumns / ResultTableRows
- InspectionReportViewerViewModel.PopulateDetailPanel 传递 detail.ResultTables
- InspectionReportViewerWindow.xaml 每个节点卡片底部添加检测明细 DataGrid
- InspectionReportViewerWindow.xaml.cs 代码后置动态生成列 + 不合格行标红
2026-07-23 15:33:39 +08:00
zhengxuan.zhang e5f0aef9a7 增加 导入和导出功能 2026-07-23 13:22:17 +08:00
zhengxuan.zhang 6be3018566 新增CNC程序编辑恢复、导出与导入功能
编辑恢复:
- 新增 CncEditSessionStateService,记录编辑会话状态(session.json)并支持
  5 秒防抖 autosave,用于程序异常退出/切换页面后继续编辑
- CncEditorViewModel 集成会话恢复:打开编辑器时优先询问是否恢复未保存的
  autosave 内容,否则静默恢复上次打开的文件;保存/关闭/退出时写入会话状态
- CncNodeViewModel 新增 IsManualImageMissing 计算属性,CncPageView 树节点
  据此标红提示手动图片文件缺失

导出(跨设备迁移):
- 新增 CncPackageExportService,将 .xp 程序及其引用的手动图片、模板匹配
  资产打包为 .xpz(ZIP),资产路径重写为包内相对路径,生成含来源机器信息
  和 SHA256 校验和的 manifest.json
- CncEditorViewModel 新增 ExportPackageCommand;MainWindow Ribbon「文件」
  组新增「导出CNC包」按钮

导入(跨设备迁移):
- 新增 CncProgramIntegrityChecker,统一校验资产缺失(复用编辑恢复同一套
  判定标准)、坐标越界(对照本机 MotionControlConfig 轴限位)、设备相关
  参数人工核对提示,供编辑恢复/导出/导入三处场景共用
- 新增 CncPackageImportService,解压 .xpz、校验 manifest 中的 SHA256、
  反序列化程序、把资产落地到本机 Plan/{程序名}_import_{时间戳}/Assets/
  并重写为本机绝对路径,返回完整性报告
- CncEditorViewModel 新增 ImportPackageCommand:导入前对未保存修改二次
  确认,导入后按报告弹出「X 个节点正常 / Y 个节点需人工核对」提示;
  MainWindow Ribbon 新增「导入CNC包」按钮
- Resources 四语言资源文件补充导入/导出相关文案键

涉及文件:
- 新增 Services/Cnc/{CncEditSessionStateService,CncPackageExportService,
  CncPackageImportService,CncProgramIntegrityChecker}.cs
- 新增 Models/Cnc/CncPackageModels.cs
- 修改 ViewModels/Cnc/{CncEditorViewModel,CncNodeViewModel}.cs
- 修改 ViewModels/Main/MainViewModel.cs
- 修改 Views/Main/MainWindow.xaml、Views/Cnc/CncPageView.xaml
- 修改 App.xaml.cs(服务注册)
- 修改 Resources/Resources*.resx(zh-CN/zh-TW/en-US/默认)

构建验证:dotnet build XplorePlane/XplorePlane.csproj -c Debug --no-restore
通过,0 个编译错误(existing 的 CS8604 可空引用警告与本次改动无关)
2026-07-23 13:21:42 +08:00
zhengxuan.zhang 74cb77b911 CNC编排算子预览受实时生效总开关控制
CncInspectionModulePipelineViewModel 新增 IsRealtimeApplyEnabled 属性,
TriggerDebouncedPreview 在开关关闭时跳过执行。与 PipelineEditorView 中
已有的眼睛按钮绑定一致,用户关闭后加载/启用算子不再触发实时预览。
2026-07-23 11:07:46 +08:00
zhengxuan.zhang abd82b4403 CNC编排改为嵌入式面板,替换实时流水线显示
- CNC编排不再弹出独立窗口,改为在右侧面板中替换实时流水线
- MainViewModel新增IsCncEditorMode/ActivePanelContent属性控制面板切换
- ImagePanelView改为ContentControl绑定ActivePanelContent,CNC模式下
  显示标题栏和"关闭编排"按钮
- 打开CNC时面板宽度扩大到540,关闭时恢复320
- 关闭CNC编排时检查IsModified,提示是否保存
- ExecuteCncEditorAction不再弹窗,统一走嵌入式面板
- 新增Cnc_ConfirmSaveBeforeClose多语言资源
2026-07-23 10:50:46 +08:00
zhengxuan.zhang dda00f4a8a 优化检测记录查看器和Pipeline编辑器UI
检测记录查看器(InspectionReportViewerWindow):
- 左侧列表宽度从520缩小到380,右侧详情区获得更多空间
- 取消比例尺显示(ScaleBarDisplayMode枚举新增Hidden值)
- 节点卡片内图片和指标表从上下排列改为左右排列
- 摘要区域新增开始时间和完成时间字段
- 移除底部事件时间线区域(关键信息已合并到摘要)

Pipeline编辑器(PipelineEditorView):
- 输出控制GroupBox仅在算子存在OutputXxx参数时显示
- PipelineNodeViewModel新增HasOutputControls属性
- PipelineEditorView.xaml注册BooleanToVisibilityConverter
2026-07-23 10:30:15 +08:00
zhengxuan.zhang b0d746c7bf Merge branch 'Develop/XP' into Feature/TURBO-002-Cnc 2026-07-23 09:15:21 +08:00
zhengxuan.zhang 47a2df84c7 修复CNC执行错误提示和输出控制写入manifest
- 添加 Cnc_NodeExecutionFailed 多语言资源(中/英/繁),修复弹窗
  显示资源键名而非本地化文本的问题
- ExtractResultTables 根据 Pipeline 参数中的 OutputXxx 控制项
  动态过滤结果表的行字段和列定义,取消勾选的字段不再写入
  manifest.json
- 新增 GetOutputConfig 辅助方法从 Pipeline 节点参数提取输出配置
2026-07-22 17:48:53 +08:00
zhengxuan.zhang bcd0bbecf9 增加联网更新文档 2026-07-22 17:32:28 +08:00
ZHANG Zhengxuan bce09243aa 已合并 PR 195: 累计功能
1、新增浮动调试工具栏,目前只有一个随机移动XY按钮;
2、解决启动速度问题
3、调整主界面,将硬件相关降低级别
4、完善CNC对齐命令
2026-07-22 17:14:59 +08:00
zhengxuan.zhang 9063b73938 完善联网更新功能:启动自动检查、设置页面配置、发布脚本
- 设置页面通用Tab新增"联网更新"配置卡片:更新服务器地址输入框、
  启动时检查更新开关,保存后持久化到 App.config
- App.xaml.cs 启动完成后延迟5秒静默检查更新,有新版本弹窗提示重启
- SettingsViewModel 新增 UpdateServerUrl/UpdateCheckOnStartup 属性
- 修复标定文件写入路径:calibrationDir 改为数据目录避免安装目录权限问题,
  TryAutoLoadCalibration 增加外层 try-catch 防止启动崩溃
- 新增 build-release.ps1 发布脚本:编译、vpk打包、部署到WampServer一键完成
2026-07-22 17:13:39 +08:00
zhengxuan.zhang 6c3faab87a 集成 Velopack 联网更新功能
- 添加 Velopack 1.2.0 NuGet 包
- 新建 AppUpdateService(IAppUpdateService),支持从内网 HTTP 服务器
  检查版本、下载增量/全量包、应用更新并重启
- App.xaml.cs 入口添加 VelopackApp.Build().Run() 初始化钩子
- App.config 新增 Update:ServerUrl 和 Update:CheckOnStartup 配置项
- MainViewModel 新增 CheckForUpdateCommand,MainWindow Ribbon 帮助组
  添加"检查更新"按钮
- DI 容器注册 IAppUpdateService 为单例
2026-07-22 16:36:17 +08:00
zhengxuan.zhang f30c42ad1f 修复汇总:
CncNodeExecutionProgress record — 新增 ErrorMessage 可选参数,用于传递具体错误信息到 UI 层

CncExecutionService 主循环 —

新增 nodeErrorMessage 局部变量收集错误信息
Pipeline 返回 null 时设 nodeSucceeded = false 并记录默认错误描述
catch 块中同时记录 ex.Message 到 nodeErrorMessage
progress report 传递 ErrorMessage: nodeErrorMessage
CncEditorViewModel.OnExecutionProgress — Failed 状态时:

读取 progress.ErrorMessage 显示具体原因
StatusMessage 包含错误详情
新增弹窗通知:_dialogs.Show("Cnc_NodeExecutionFailed", ...) 弹出错误对话框
现在 CNC 执行中任何算子异常都会同时通过:

底部状态栏显示红色错误文字
节点树中节点变红(Failed 状态)
弹窗提醒用户具体哪个节点失败及原因
2026-07-22 16:24:29 +08:00
zhengxuan.zhang d1f1c09988 CncPageView.xaml — 运动参数标签从 (μm) 改为 (mm):载物台 X/Y、射线源 Z、探测器 Z、FOD、FDD
StateModels.cs — MotionState record 注释修正:直线轴单位标注从 μm 改为 mm,与实际从 ActualPosition(mm)读取的值一致
2026-07-22 15:48:31 +08:00
zhengxuan.zhang 0abb204c82 1. 插入CNC后自动关闭窗体
三个 ViewModel 新增 Action RequestClose 属性
ExecuteInsertToCnc 成功后调用 RequestClose?.Invoke()
code-behind 中绑定 RequestClose = () => Close()
2. 输出控制 CheckBox 联动表格列显隐

新建 BindingProxy 辅助类(解决 DataGridColumn 不继承 DataContext 的问题)
三个面板的 DataGrid 列通过 Visibility="{Binding Data.OutputXxx, Source={StaticResource Proxy}, Converter={StaticResource BoolToVis}}" 绑定到对应的输出控制属性
取消勾选某项后,对应列即时隐藏;CNC 执行时 Processor 会读取这些 OutputXxx 参数来决定写入 manifest.json 的字段
2026-07-22 15:40:27 +08:00
zhengxuan.zhang 8b1d20bd34 高级算子模块 输出参数的控制 2026-07-22 15:40:20 +08:00
zhengxuan.zhang 98b7fe3d48 修复CNC检测模块Pipeline预览执行时源图像循环污染问题
编辑Pipeline(启用/禁用算子等)触发预览后,结果图像会更新到主视口,
导致下次预览从视口取到的是上次结果而非原图,形成输入循环。

修复方式:
- 选中检测模块时快照当前视口原始源图像并缓存到 _originalSourceImage
- ResolvePreviewSourceImage 优先返回缓存的原图
- 切换/取消选中模块时清空缓存
2026-07-22 14:51:12 +08:00
zhengxuan.zhang c5327b0204 修复测量工具按钮激活态被hover覆盖的问题
- 为测量工具按钮(点点距、点线距、角度、通孔填锡率、气泡测量)
  增加激活态自定义 ControlTemplate,彻底避免 Telerik RadRibbonButton
  内部 VisualStateManager 的 hover 效果覆盖激活背景色
- 提取共享模板 ActiveMeasureButtonTemplate,减少重复定义
- 激活态模板使用 TemplateBinding Text 正确显示按钮文字
2026-07-22 14:19:09 +08:00
zhengxuan.zhang 00aaa5b97d 1、调整主界面按钮,将硬件相关按钮降低级别;2、将相机设置移入设置页面中 2026-07-22 13:06:34 +08:00
zhengxuan.zhang 83de6e3770 Merge branch 'Develop/XP' into Feature/TURBO-002-Cnc 2026-07-22 11:41:01 +08:00
zhengxuan.zhang 6f763e5669 修复生成输出位置的问题 2026-07-22 11:39:56 +08:00