Files
REVOXELSEG_DICOM/工程分析/实现方案-2026-05-20-02-55-11.md

52 lines
2.5 KiB
Markdown
Raw Permalink 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.
# 实现方案:完整 STL 网格导出与实体填充增强
实现方案文档路径:`工程分析/实现方案-2026-05-20-02-55-11.md`
## 修改目标
修复大面数 STL 构件导出后在 ITK-SNAP 中呈散点的问题,使分割 NIfTI 的 Label Map 基于完整二进制 STL 三角面求交,并在每层生成连续实体区域。
## 涉及路径
- `WebSite/server.ts`
- `工程分析/需求分析-2026-05-20-02-55-11.md`
- `工程分析/实现方案-2026-05-20-02-55-11.md`
- `工程分析/测试方案-2026-05-20-02-55-11.md`
- `工程分析/经验记录.md`
## 技术路线
1. 保留 `createStlPreview` 作为网页预览和 bounds 统计来源。
2. 新增导出专用 STL 迭代逻辑,直接读取完整二进制 STL buffer 中的全部三角面,不再使用 `sampleLimit=200000` 的预览顶点数组作为 NIfTI 生成输入。
3. 对每个三角面执行当前位姿变换、DICOM 物理坐标映射、Mesh-Plane Intersection 和扫描线光栅化。
4. 将每个构件、每个 slice 的 rows 光栅化到临时 mask再做四边 flood fill填补闭合区域内部孔洞后写入最终 Label Map。
5. 保持 `visible/all` 分割范围、labels JSON、导出包结构不变。
## 执行步骤
1. 阅读当前导出生成链路,确认抽样来源和填充缺口。
2. 编写完整 STL 三角面读取辅助函数,避免长期缓存完整顶点数组。
3. 替换 `createSegmentationData` 中遍历 `payload.vertices` 的逻辑。
4. 增强后端 slice mask 的内部孔洞填补。
5. 运行类型检查、构建、导出接口验证。
6. 用脚本检查导出的 Label Map 体素分布,重点确认 `头部` label 不再只集中于少量散点。
7. 追加经验记录、提交、推送并重新部署。
## 兼容性与回滚方案
- API 参数和前端调用不变,外部使用者无需调整。
- 若完整 STL 导出耗时不可接受,可在后续引入后台任务或空间索引;本次先保证导出结果正确。
- 回滚时可恢复到上一个提交,但会重新暴露大面数构件抽样导致的散点问题。
## 预计文件变更
- `WebSite/server.ts`:新增完整 STL 迭代与 slice mask 填充逻辑。
- `工程分析/*-2026-05-20-02-55-11.md`:记录本次工作流。
- `工程分析/经验记录.md`:追加 A/B/C/D 经验。
## 提交与部署策略
- 只暂存本次相关代码和工程分析文档。
- commit message 包含 `2026-05-20-02-55-11` 和简要描述。
- 推送到 Gitea 后使用 `tmux` 会话 `revoxelseg-dicom` 重新部署。