## XplorePlane 平面CT软件 ### 系统目标 XplorePlane 系统用于控制平面 CT 设备的各个子系统(射线源、探测器、运动控制、相机)并完成采集图像的处理与分析,为研发与调试提供统一的软件平台。 ### 总体架构 - 客户端框架: WPF + Prism MVVM(目标框架 net8.0-windows) - 图像处理内核: ImageProcessing.Core(算子基类)+ ImageProcessing.Processors(具体算子),基于 EmguCV - 相机控制: XP.Camera(Basler pylon SDK 封装,支持软件触发、参数读写) - 硬件抽象: XP.Common + XP.Hardware.RaySource(射线源控制) - 日志: Serilog - UI 组件: Telerik RadRibbonView、Fluent.Ribbon ### 解决方案结构 ``` XplorePlane.sln ├── XplorePlane/ # 主应用程序(WPF) ├── XP.Camera/ # 相机控制库(Basler) ├── ImageProcessing/ # 独立图像处理应用 ├── ImageProcessing.Core/ # 图像处理算子基类 ├── ImageProcessing.Processors/ # 具体算子实现 ├── ImageProcessing.Controls/ # 图像显示控件(ImageCanvasControl) ├── ImageROIControl/ # ROI 绘制控件 ├── XplorePlane.Tests/ # 单元测试 └── ExternalLibraries/ # 外部 DLL 和 ONNX 模型 ``` ### XplorePlane 主项目结构 ``` XplorePlane/ ├── App.xaml / App.xaml.cs # 应用入口 + DI 容器配置(AppBootstrapper) ├── Views/ │ ├── Main/ │ │ ├── MainWindow.xaml # 主窗口(Telerik Ribbon + 三栏布局) │ │ ├── NavigationPropertyPanelView.xaml # 相机实时预览面板 │ │ └── MotionControlPanelView.xaml # 运动控制面板 │ ├── Cnc/ # CNC 编辑器 / 矩阵编排视图 │ ├── ImageProcessing/ # 图像处理面板视图 │ └── CameraSettingsWindow.xaml # 相机参数设置对话框 ├── ViewModels/ │ ├── Main/ │ │ ├── MainViewModel.cs # 主窗口 ViewModel │ │ └── NavigationPropertyPanelViewModel.cs # 相机预览 ViewModel │ ├── Cnc/ # CNC / 矩阵 ViewModel │ └── ImageProcessing/ # 图像处理 / 流水线 ViewModel ├── Services/ │ ├── AppState/ # 全局状态管理(线程安全) │ ├── Camera/ # 相机服务 │ ├── Cnc/ # CNC 程序服务 │ ├── Matrix/ # 矩阵编排服务 │ ├── Measurement/ # 测量数据服务 │ ├── Pipeline/ # 流水线执行 / 持久化 │ └── Recipe/ # 检测配方服务 ├── Models/ # 数据模型(State、CNC、Matrix、Pipeline 等) ├── Events/ # Prism 事件 ├── Libs/ │ ├── Hardware/ # 硬件库 DLL(XP.Common、XP.Hardware.RaySource) │ └── Native/ # 原生依赖库 └── Assets/Icons/ # 工具栏图标 ``` ### 相机集成 相机实时影像集成在主窗口左下角的 NavigationPropertyPanelView 中: - 连接/断开相机(Basler,通过 ICameraController) - 开始/停止采集(软件触发模式) - 实时预览(Live View,勾选"实时"复选框) - 鼠标悬停显示像素坐标 - 相机参数设置对话框(曝光时间、增益、分辨率、像素格式) - 主界面 Ribbon 硬件栏提供"相机设置"快捷按钮 相机控制逻辑移植自 ImageProcessing 项目,使用 XP.Camera.PixelConverter 进行像素数据转换,通过 Application.Dispatcher.Invoke 保证 UI 线程安全。 ### 依赖注入(DI) 使用 Prism + DryIoc,在 AppBootstrapper.RegisterTypes() 中统一注册: - ICameraFactory / ICameraController / ICameraService(单例) - IRaySourceService / IRaySourceFactory(单例) - IAppStateService(单例,线程安全状态管理) - NavigationPropertyPanelViewModel(单例,相机预览共享实例) - 各 Service 和 ViewModel(按需注册) ### 构建 ```bash # Debug dotnet build XplorePlane.sln -c Debug # Release dotnet build XplorePlane.sln -c Release ``` ### TO-DO List - [x] 软件基于 WPF + Prism 基础的框架 - [x] 日志库的引用(通过 XP.Common.dll) - [x] 按推荐的 DLL 目录结构进行修改 - [x] 通过库依赖的方式调用日志功能 - [x] 界面的布局 - [x] 相机实时影像集成(连接、采集、Live View、像素坐标显示) - [x] 相机参数设置对话框(曝光、增益、分辨率、像素格式) - [x] 主界面硬件栏相机设置按钮 - [ ] 打通与硬件层的调用流程 - [ ] 打通与图像层的调用流程