2.5 KiB
2.5 KiB
实现方案:完整 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
技术路线
- 保留
createStlPreview作为网页预览和 bounds 统计来源。 - 新增导出专用 STL 迭代逻辑,直接读取完整二进制 STL buffer 中的全部三角面,不再使用
sampleLimit=200000的预览顶点数组作为 NIfTI 生成输入。 - 对每个三角面执行当前位姿变换、DICOM 物理坐标映射、Mesh-Plane Intersection 和扫描线光栅化。
- 将每个构件、每个 slice 的 rows 光栅化到临时 mask,再做四边 flood fill,填补闭合区域内部孔洞后写入最终 Label Map。
- 保持
visible/all分割范围、labels JSON、导出包结构不变。
执行步骤
- 阅读当前导出生成链路,确认抽样来源和填充缺口。
- 编写完整 STL 三角面读取辅助函数,避免长期缓存完整顶点数组。
- 替换
createSegmentationData中遍历payload.vertices的逻辑。 - 增强后端 slice mask 的内部孔洞填补。
- 运行类型检查、构建、导出接口验证。
- 用脚本检查导出的 Label Map 体素分布,重点确认
头部label 不再只集中于少量散点。 - 追加经验记录、提交、推送并重新部署。
兼容性与回滚方案
- 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重新部署。