2.2 KiB
2.2 KiB
实现方案:DICOM 范围驱动模型切分
时间戳:2026-05-08-03-13-20
修改目标
将逆向工作区模型切分从“独立帧滑块 + 单切面 + CUT MASK 贴图”改为“DICOM 切片范围双端点 + 双 clipping plane + 保留中间模型”。
涉及路径
WebSite/src/components/ReverseWorkspace.tsx工程分析/经验记录.md
技术路线
- 删除
createCutMaskTexture及其调用,彻底去掉CUT MASK贴图。 - 删除
cutSlice状态、初始化和模型切分的帧进度条。 - 项目加载时将
sliceStart初始化为0,sliceEnd初始化为maxIndex,让初始范围显示1~300。 FusionThreeView接收cutStart、cutEnd,来自displayStart、displayEnd。- 根据 DICOM 全序列总数和物理深度,将
cutStart/cutEnd映射为 DICOM Z 坐标。 - 创建两个 clipping plane:
- 起点切面:剔除起点外侧。
- 终点切面:剔除终点外侧。
- 模型材质在
cutEnabled时使用两个 clipping plane,clipIntersection=false,从而保留两平面之间的中间区域。 - 用两张半透明橙色切面辅助显示切割位置,但不再显示任何 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。
人工审核状态
用户已在项目工作流历史中确认后续直接执行,本次不等待二次人工审核。