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

2.2 KiB
Raw Blame History

实现方案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 初始化为 0sliceEnd 初始化为 maxIndex,让初始范围显示 1~300
  4. FusionThreeView 接收 cutStartcutEnd,来自 displayStartdisplayEnd
  5. 根据 DICOM 全序列总数和物理深度,将 cutStart/cutEnd 映射为 DICOM Z 坐标。
  6. 创建两个 clipping plane
    • 起点切面:剔除起点外侧。
    • 终点切面:剔除终点外侧。
  7. 模型材质在 cutEnabled 时使用两个 clipping planeclipIntersection=false,从而保留两平面之间的中间区域。
  8. 用两张半透明橙色切面辅助显示切割位置,但不再显示任何 mask 图片。

数据流或交互流程

  • 用户调整 DICOM 切片范围
  • displayStart/displayEnd 归一化端点顺序。
  • 前端按该范围加载 DICOM 纹理,并将同一范围传给 FusionThreeView 的模型切割逻辑。
  • 用户启用 模型切分STL 模型只显示两帧之间的区域。

兼容性与回滚方案

  • 若双 clipping plane 行为异常,可回滚本次 ReverseWorkspace.tsx 修改,恢复 cutSlice 单切面逻辑。
  • 本次不改 API 和数据文件,回滚只影响前端可视化。

风险控制

  • 使用 npm run lint 检查 TypeScript。
  • 使用 npm run build 检查生产构建。
  • rg 确认源码和构建产物不再包含 CUT MASKcreateCutMaskTexture
  • 重新部署后从 dev server 拉取源码确认不再存在模型切分帧滑块。

预计文件变更

  • 修改 ReverseWorkspace.tsx
  • 新增本次需求、实现、测试方案文档。
  • 追加 经验记录.md

人工审核状态

用户已在项目工作流历史中确认后续直接执行,本次不等待二次人工审核。