2026-05-08-03-13-20 按DICOM范围切分模型

This commit is contained in:
2026-05-08 03:17:55 +08:00
parent 765e4cc41a
commit 3b133a1d43
5 changed files with 213 additions and 113 deletions

View File

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