Files
REVOXELSEG_DICOM/工程分析/实现方案-2026-05-08-01-53-07.md

86 lines
4.1 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-08-01-53-07
## 修改目标
1. 固定融合视角的 DICOM 物理尺寸基准,使切片范围变化不改变模型原始位置。
2. DICOM 切片范围默认显示到最高切片,并支持 `M-N` 双向范围选择。
3. 优化逆向工作区布局,浏览器放大后可滚动访问 DICOM 切片范围。
4. 项目库项目加载/导入后后台预加载 DICOM 与模型预览。
5. 模型切分开启后,在 DICOM 切割帧上叠加 Mask 轮廓/填充,直观看到切割位置。
## 涉及路径
- `WebSite/src/components/ProjectLibrary.tsx`
- `WebSite/src/components/ReverseWorkspace.tsx`
- `WebSite/server.ts`
- `工程分析/经验记录.md`
## 技术路线
### 固定 DICOM 体基准
- 后端 `dicom-fusion-volume``physicalSize.depth` 改为完整 DICOM 序列深度,而不是当前 `start/end` 范围深度。
- 前端 FusionThreeView 使用完整物理尺寸计算 DICOM box 和模型缩放,范围变化只改变参与显示的帧,不改变空间基准。
- 模型 pivot 保持 DICOM 中心,不根据切片范围重新定位。
### 双向范围滑条
- 恢复 `sliceStart``sliceEnd` 两个状态,但 UI 使用同一范围卡片表达。
- 初始值设为 `sliceStart=maxSlice``sliceEnd=maxSlice`,即默认最高切片。
- 请求接口前将 `min(sliceStart,sliceEnd)``max(sliceStart,sliceEnd)` 作为真实 `M-N`
- UI 显示 `M-N / total`,并提供两个滑条在同一区域控制左右端点。
### 放大布局
- 逆向工作区根容器允许纵向滚动。
- 主三列区域保留内部滚动,左侧融合区域不因高度压缩导致 DICOM 范围卡片不可达。
### 后台预加载
- 项目库加载项目列表后,对默认/选中项目发起低成本预加载:
- DICOM 预览中间帧。
- 前几个 STL preview。
- 融合体最高切片。
- 使用 `void` 异步调用,不阻塞 UI。
### 切割 Mask 叠加
- FusionThreeView 中当 `cutEnabled` 时,根据当前切割帧创建 DICOM texture overlay。
- 在切割帧平面上叠加半透明橙色 Mask 区域和边界线,表示模型切割位置。
- 该 Mask 是可视化辅助层,不改变模型、不写出 NIfTI。
## 数据流或交互流程
1. 进入逆向工作区读取项目,计算 `maxSlice=dicomCount-1`
2. 初始范围设为 `maxSlice-maxSlice`
3. 用户拖动双向范围控制,前端排序后请求 `dicom-fusion-volume?start=M&end=N`
4. 后端返回当前范围帧,但 physical depth 始终以完整 DICOM 序列计算。
5. FusionThreeView 使用固定 DICOM box 渲染 DICOM 与模型,模型位姿不受范围变化影响。
6. 启用模型切分后,在切割帧平面叠加 Mask 预览。
## 兼容性与回滚方案
- 对任意 DICOM 总数使用 `dicomCount` 和接口返回 `total`,不硬编码 300。
- 若项目没有 DICOM 或 STL预加载自动跳过。
- 回滚本次 commit 可恢复旧的单端点切片范围与切割显示。
## 预计文件变更
- `server.ts`:修正融合体 physical depth 基准。
- `ProjectLibrary.tsx`:新增项目后台预加载。
- `ReverseWorkspace.tsx`:双向范围、布局滚动、固定模型空间、切割 Mask 叠加。
## 人工审核状态
用户已声明本次不需要二次人工确认,按默认执行确认规则直接执行。
## 执行记录
- 已将后端 `dicom-fusion-volume``physicalSize.depth` 改为完整 DICOM 序列深度,避免切片范围变化导致 DICOM 体和模型空间重新缩放。
- 已将融合视图中每张 DICOM 帧的 Z 位置改为按真实 `volume.indices` 映射到完整 DICOM 深度,范围变化只增减显示帧,不重新铺满空间。
- 已将逆向工作区 DICOM 切片范围改为双端点控制,支持 `M-N` 显示范围。
- 已将默认切片范围初始化为最高切片 `maxSlice-maxSlice`,不硬编码 300。
- 已让逆向工作区根容器支持纵向滚动,浏览器放大时仍可滚动访问 DICOM 切片范围。
- 已在项目库中加入项目后台预加载:最高 DICOM 预览、最高融合体、前三个 STL 预览。
- 已在模型切分开启时,在切割 DICOM 帧上叠加橙色 Mask 预览和边界标记,使用户能直接在 DICOM 上看到切割位置。