Files
REVOXELSEG_DICOM/工程分析/实现方案-2026-05-20-00-38-39.md

68 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 实现方案-2026-05-20-00-38-39
## 实现方案文档路径
`工程分析/实现方案-2026-05-20-00-38-39.md`
## 修改目标
将右侧“逆向分割映射视图”的坐标映射改为与左侧“三维融合视图”同源的 DICOM 物理 FOV并强化 STL Mesh-Plane Intersection 与实体填充,减少尺度错位和截面漏隙。
## 涉及路径
- `WebSite/src/components/ReverseWorkspace.tsx`
- `工程分析/需求分析-2026-05-20-00-38-39.md`
- `工程分析/实现方案-2026-05-20-00-38-39.md`
- `工程分析/测试方案-2026-05-20-00-38-39.md`
- `工程分析/经验记录.md`
## 技术路线
1. 新增统一空间指标计算:
- 从 DICOM `physicalSize.width/height``spacing.slice` 推导物理深度。
- 复用左侧三维融合视图 `baseExtent=4.6` 的归一化策略。
- 计算 `dicomWidth/dicomHeight/dicomDepth`、当前 slice 对应 Z 坐标、STL bounds 中心和 `modelBaseScale`
- 左侧三维视图也改为使用全部 STL bounds 作为全局模型尺度,隐藏构件只影响渲染,不再改变全局比例。
2. 修改右侧 STL 顶点变换:
- 按左侧三维层级顺序复现 `modelPivot``modelPoseGroup`
- 使用 `modelBaseScale * pose.scale`、旋转、平移和 pivot Z 偏移。
3. 修改右侧画布坐标映射:
- `x` 映射到 `[-dicomWidth/2, dicomWidth/2]`
- `y` 映射到 `[-dicomHeight/2, dicomHeight/2]`
- 画布宽高仍为 DICOM preview 像素,物理 FOV 与 Base Layer 完全一致。
4. 提升 Overlay 数据精度:
- 右侧 STL preview 请求改为 `200000` 上限,尽量使用完整网格。
- 继续逐三角面执行 Mesh-Plane Intersection得到截面线段。
5. 强化实体填充:
- 扫描线收集截面线段交点并进行内部填充。
- 对填充结果做边界外 flood fill自动补齐内部未填孔洞。
- 使用离屏 canvas 合成每个构件,避免多构件透明区域互相擦除。
## 执行步骤
- 更新右侧空间指标、位姿变换和点到画布映射函数。
- 更新左侧三维视图的模型 bounds 计算,保证构件显隐不改变全局 FOV。
- 更新 STL preview 请求 limit。
- 更新实体填充函数,加入内部孔洞填充。
- 执行 `npm run lint``npm run build`
- 重新部署并验证服务。
- 追加经验记录并提交推送。
## 兼容性与回滚方案
- 不改变外部 API 和状态结构。
- 若新 FOV 映射异常,可回退到上一版 `drawVoxelOverlayLayer` 的归一化映射。
- 若最大 STL preview 请求导致性能压力,可降低右侧独立请求 limit但保留同源 FOV 计算。
## 预计文件变更
- `ReverseWorkspace.tsx`:更新 FOV 坐标、模型变换、填充算法和请求精度。
- 新增本次三份工程文档。
- 更新 `经验记录.md`
## 提交与部署策略
- 提交信息:`2026-05-20-00-38-39 对齐FOV并强化网格截面填充`
- 显式暂存本次相关文件,避免提交历史删除状态。
- 使用 Gitea origin/main 备份并重新部署 `revoxelseg-dicom`