2026-05-20-00-38-39 对齐FOV并强化网格截面填充

This commit is contained in:
2026-05-20 00:48:34 +08:00
parent 5cf1b20d2f
commit 3e6b1e0d9f
5 changed files with 385 additions and 49 deletions

View File

@@ -0,0 +1,67 @@
# 实现方案-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`