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