2026-05-20-01-38-33 完善NII导出与位姿持久化

This commit is contained in:
2026-05-20 01:56:54 +08:00
parent 19bd706453
commit 7099bfde8d
8 changed files with 1084 additions and 145 deletions

View File

@@ -0,0 +1,71 @@
# 实现方案-2026-05-20-01-38-33
## 实现方案文档路径
`工程分析/实现方案-2026-05-20-01-38-33.md`
## 修改目标
完善逆向工作区导出与位姿持久化:移除自动配准演示入口,新增可选导出 DICOM NIfTI、分割 NIfTI 和位姿 JSON修复 blob 下载警告,增加三维坐标轴示意,并让保存位姿跨项目进入持久保留。
## 涉及路径
- `WebSite/server.ts`
- `WebSite/src/lib/api.ts`
- `WebSite/src/types.ts`
- `WebSite/src/components/ReverseWorkspace.tsx`
- `工程分析/需求分析-2026-05-20-01-38-33.md`
- `工程分析/实现方案-2026-05-20-01-38-33.md`
- `工程分析/测试方案-2026-05-20-01-38-33.md`
- `工程分析/经验记录.md`
## 技术路线
1. 后端扩展项目状态:
- 增加 `modelPoses` 字段,保存默认、俯视、侧视与用户自定义位姿。
- 新增 `PATCH /api/projects/:projectId/model-poses`
2. 后端重写导出:
- 新增通用 NIfTI-1 写入函数。
- DICOM 原始影像导出为 int16 HU `.nii.gz`,维度与 spacing 来自 DICOM。
- 分割影像导出为 STL 构件采样切面填充后的 uint8 label map `.nii.gz`,维度与 spacing 与 DICOM 完全一致。
- 位姿数据导出为 JSON并记录导出时的当前 activePose。
- 保留 `/export-mask` 兼容旧分割导出。
3. 前端下载方式:
- 用直链 `<a href>` 下载替代 `fetch -> Blob -> URL.createObjectURL`
- 新增导出选项复选框和“导出所选”动作,分割和位姿导出会携带当前模型位姿。
4. UI 调整:
- 去掉“开始自动配准”按钮和相关演示进度状态。
- 顶部按钮改为“导出全部 NII.GZ”。
- 三维融合视角右下角增加固定 XYZ 坐标轴示意。
5. 位姿持久化:
- 项目加载时读取 `project.modelPoses`
- 保存/重命名位姿时写回后端。
## 执行步骤
- 更新类型定义和后端状态归一化。
- 实现 NIfTI/位姿导出接口。
- 更新前端 API 下载方法。
- 更新 ReverseWorkspace UI、导出选项、位姿保存逻辑和坐标轴。
- 执行 `npm run lint``npm run build`
- 验证新导出接口返回文件,重新部署并推送。
## 兼容性与回滚方案
-`downloadMask``/export-mask` 保持可用,只把底层分割 NIfTI 改为同维度数据。
- 如果完整 DICOM NIfTI 导出耗时过高,可后续增加范围导出或后台任务。
- 如果浏览器仍对 HTTP 下载提示安全警告,需要部署 HTTPS本次先消除 blob URL 警告来源。
## 预计文件变更
- `server.ts`项目位姿字段、DICOM NIfTI 导出、STL Label Map 导出、位姿导出、兼容旧导出。
- `api.ts`:直链下载和导出选项 API。
- `types.ts`:项目位姿类型。
- `ReverseWorkspace.tsx`:移除自动配准、导出选项、坐标轴、位姿持久化。
- 新增本次三份工程文档,更新经验记录。
## 提交与部署策略
- 提交信息:`2026-05-20-01-38-33 完善NII导出与位姿持久化`
- 显式暂存本次相关文件,避免提交历史删除状态。
- 推送到 Gitea `origin/main` 并重新部署。