Files
REVOXELSEG_DICOM/工程分析/实现方案-2026-05-04-05-56-34.md

86 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 实现方案 - 2026-05-04-05-56-34
## 修改目标
修正 DICOM 矢状面/冠状面的物理比例,新增 DICOM 详细信息查询;简化 3D 模型显示控制,加入更高实体化档位,并实现画布内鼠标旋转、平移、滚轮缩放且同步整体位姿控件。
## 涉及路径
- `WebSite/server.ts`
- `WebSite/src/types.ts`
- `WebSite/src/lib/api.ts`
- `WebSite/src/components/ProjectLibrary.tsx`
- `工程分析/经验记录.md`
## 技术路线
### 1. DICOM 空间信息解析
- 扩展后端 DICOM tag 解析:
- Pixel Spacing `(0028,0030)`:单张切片内行/列像素实际距离。
- Slice Thickness `(0018,0050)`
- Spacing Between Slices `(0018,0088)`
- Image Position Patient `(0020,0032)`:优先用相邻切片空间位置差计算真实切片间距。
- Patient、Study、Series、Modality、Manufacturer、Rows、Columns、Window、Rescale 等基础信息。
- 在 DICOM volume cache 中保存 `rowSpacing``columnSpacing``sliceSpacing`
### 2. 多平面物理比例重采样
- 当前矢状面/冠状面生成后先得到原始矩阵。
- 根据物理尺寸计算目标比例:
- 横向:`切片数 * sliceSpacing`
- 矢状面纵向:`rows * rowSpacing`
- 冠状面纵向:`columns * columnSpacing`
- 以较小物理间距作为输出采样单位,将重建图像最近邻重采样到接近真实物理比例的像素宽高。
- 返回 `spacing``physicalSize`,供前端信息展示。
### 3. DICOM 详细信息查询
- 新增后端接口:`GET /api/projects/:projectId/dicom-info`
- 返回默认项目第一张 DICOM 与序列聚合信息:
- patient、study、series、image、window、spacing、sequence、source 等分组。
- 前端 DICOM 影像页新增“信息”按钮,打开弹窗/面板展示基本信息、像素间距、切片间距、图像矩阵、物理尺寸、文件数量、首尾文件等。
### 4. 3D 模型控制简化与增强
- 去掉“白色实体”开关和“自动旋转”开关。
- 默认模型不自动旋转,正向放置。
- 实体化档位改为:`预览 / 标准 / 精细 / 超精细`
- 后端 STL preview 抽样上限提升到 `72000`,前端超精细档使用 `72000`
- 重置位姿按钮移动到“整体位姿”标题右侧。
### 5. 鼠标/滚轮位姿交互
-`NativeStlViewer` 容器上监听 pointer 和 wheel
- 左键拖拽:旋转 X/Y。
- 右键或 Shift+拖拽:平移 X/Y。
- 滚轮:缩放。
- 交互时通过 `onPoseChange` 回写 React state使滑块数值同步变化。
- 禁用浏览器右键菜单,避免右键平移时弹出菜单。
- 位姿仍作用于整体 group不改变 STL 构件相对位置。
## 数据流或交互流程
1. 前端请求 DICOM preview后端解析/缓存体数据和空间信息,按真实物理比例输出矢状面/冠状面。
2. 前端点击 DICOM 信息按钮,请求 dicom-info弹窗展示元数据和空间参数。
3. 前端进入 3D 模型页,按当前实体化档位请求 STL preview。
4. 用户拖拽/滚轮操作画布,`NativeStlViewer` 更新位姿并回写父组件,右侧滑块同步变化。
5. 用户点击重置位姿,模型回到默认正向摆放。
## 兼容性与回滚方案
- 若某些 DICOM tag 缺失,后端使用默认 spacing `1mm`,并在详情中展示“未知/默认”。
- 多平面重采样使用最近邻,避免引入新依赖;如比例异常可回滚到原始矩阵输出。
- 超精细档可能更慢,但保留低档位可回退。
- 鼠标交互只作用于项目库 3D 视图,不影响 DICOM、导出和逆向工作区。
## 预计文件变更
- 后端DICOM metadata/spacing 解析、多平面重采样、dicom-info API、STL 上限。
- 前端DICOM 信息弹窗、3D 控件重构、鼠标交互回写位姿。
- 文档:测试结果和经验记录追加。
## 人工审核状态
用户已明确本次无需人工二次确认,文档落地后直接执行。