2026-05-20-00-19-47 同步位姿并填充实体映射

This commit is contained in:
2026-05-20 00:30:25 +08:00
parent 2e04e2d5f9
commit 5cf1b20d2f
5 changed files with 620 additions and 63 deletions

View File

@@ -0,0 +1,54 @@
# 实现方案-2026-05-20-00-19-47
## 实现方案文档路径
`工程分析/实现方案-2026-05-20-00-19-47.md`
## 修改目标
让右侧“逆向分割映射视图”的 Overlay Label Map 实时响应中部模型位姿,并将渲染形态从表面三角面投影升级为闭合实体 Mask 区域填充。
## 涉及路径
- `WebSite/src/components/ReverseWorkspace.tsx`
- `工程分析/需求分析-2026-05-20-00-19-47.md`
- `工程分析/实现方案-2026-05-20-00-19-47.md`
- `工程分析/测试方案-2026-05-20-00-19-47.md`
- `工程分析/经验记录.md`
## 技术路线
1.`VoxelizationMappingView` 新增 `modelPose` 入参,父组件直接传入中部工具栏当前位姿。
2. 新增浏览器端刚性变换函数:
- 以全局 STL bounds 中心归一化顶点。
-`scale -> rotateX -> rotateY -> rotateZ -> translate` 顺序变换。
- 将变换后坐标映射到固定 DICOM Overlay 画布坐标系。
3. 将原先“靠近切片的三角面填充”改为“切片平面求交”:
- 对每个三角面与当前 Z 平面求交。
- 收集切面边界线段。
4. 将边界线段按扫描线射线法光栅化为实心 Mask
- 逐行收集边界线段与水平扫描线的交点。
- 采用奇偶配对填充闭合区域内部像素。
- 按构件颜色与透明度写入 Overlay ImageData并通过离屏画布合成避免多构件互相覆盖。
5. 对边界不完全闭合的极少数抽样场景,使用端点多边形保底填充,避免完全空白。
6. 使用 `requestAnimationFrame` 合并高频位姿变化,做到位姿滑条拖动时实时刷新。
7. 更新右侧状态文案,显示实心 Mask 像素数量和参与构件数量。
## 兼容性与回滚方案
- 不修改后端 API不影响 DICOM preview、STL preview 和导出接口。
- 如果新填充算法异常,可回退到上一版 `drawVoxelOverlayLayer`
- 如果某个构件没有形成闭合区域,只影响该构件 Overlay不影响 Base Layer 和其他构件。
## 预计文件变更
- `ReverseWorkspace.tsx`新增位姿变换、切面求交、Mask flood fill、Overlay rAF 重绘。
- 新增本次三份工程文档。
- 更新 `经验记录.md`
## 提交与部署策略
- 执行 `npm run lint``npm run build`
- 重新部署 `tmux` 会话 `revoxelseg-dicom`
- 提交信息:`2026-05-20-00-19-47 同步位姿并填充实体映射`
- 使用已验证的 Gitea 临时凭据方式推送。