2026-05-20-02-55-11 修复头部STL实体导出
This commit is contained in:
51
工程分析/实现方案-2026-05-20-02-55-11.md
Normal file
51
工程分析/实现方案-2026-05-20-02-55-11.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# 实现方案:完整 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` 重新部署。
|
||||
Reference in New Issue
Block a user