55 lines
2.2 KiB
Markdown
55 lines
2.2 KiB
Markdown
# 实现方案: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`。
|
||
|
||
## 人工审核状态
|
||
|
||
用户已在项目工作流历史中确认后续直接执行,本次不等待二次人工审核。
|