Files
REVOXELSEG_DICOM/工程分析/实现方案-2026-05-08-03-13-20.md

55 lines
2.2 KiB
Markdown
Raw Permalink 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.
# 实现方案DICOM 范围驱动模型切分
时间戳2026-05-08-03-13-20
## 修改目标
将逆向工作区模型切分从“独立帧滑块 + 单切面 + CUT MASK 贴图”改为“DICOM 切片范围双端点 + 双 clipping plane + 保留中间模型”。
## 涉及路径
- `WebSite/src/components/ReverseWorkspace.tsx`
- `工程分析/经验记录.md`
## 技术路线
1. 删除 `createCutMaskTexture` 及其调用,彻底去掉 `CUT MASK` 贴图。
2. 删除 `cutSlice` 状态、初始化和模型切分的帧进度条。
3. 项目加载时将 `sliceStart` 初始化为 `0``sliceEnd` 初始化为 `maxIndex`,让初始范围显示 `1~300`
4. `FusionThreeView` 接收 `cutStart``cutEnd`,来自 `displayStart``displayEnd`
5. 根据 DICOM 全序列总数和物理深度,将 `cutStart/cutEnd` 映射为 DICOM Z 坐标。
6. 创建两个 clipping plane
- 起点切面:剔除起点外侧。
- 终点切面:剔除终点外侧。
7. 模型材质在 `cutEnabled` 时使用两个 clipping plane`clipIntersection=false`,从而保留两平面之间的中间区域。
8. 用两张半透明橙色切面辅助显示切割位置,但不再显示任何 mask 图片。
## 数据流或交互流程
- 用户调整 `DICOM 切片范围`
- `displayStart/displayEnd` 归一化端点顺序。
- 前端按该范围加载 DICOM 纹理,并将同一范围传给 `FusionThreeView` 的模型切割逻辑。
- 用户启用 `模型切分`STL 模型只显示两帧之间的区域。
## 兼容性与回滚方案
- 若双 clipping plane 行为异常,可回滚本次 `ReverseWorkspace.tsx` 修改,恢复 `cutSlice` 单切面逻辑。
- 本次不改 API 和数据文件,回滚只影响前端可视化。
## 风险控制
- 使用 `npm run lint` 检查 TypeScript。
- 使用 `npm run build` 检查生产构建。
-`rg` 确认源码和构建产物不再包含 `CUT MASK``createCutMaskTexture`
- 重新部署后从 dev server 拉取源码确认不再存在模型切分帧滑块。
## 预计文件变更
- 修改 `ReverseWorkspace.tsx`
- 新增本次需求、实现、测试方案文档。
- 追加 `经验记录.md`
## 人工审核状态
用户已在项目工作流历史中确认后续直接执行,本次不等待二次人工审核。