2026-05-24-10-45-43 修正分割显示镜像导出与DICOM交互
This commit is contained in:
68
工程分析/实现方案-2026-05-24-10-45-43.md
Normal file
68
工程分析/实现方案-2026-05-24-10-45-43.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# 实现方案-2026-05-24-10-45-43
|
||||
|
||||
## 实现方案文档路径
|
||||
|
||||
`工程分析/实现方案-2026-05-24-10-45-43.md`
|
||||
|
||||
## 修改目标
|
||||
|
||||
- 定位并修正分割映射显示为空心线段的问题,使二维映射区域默认填充显示。
|
||||
- 为模型位姿增加 X/Y/Z 镜像翻转开关,并贯通保存、导入、导出、前后端类型和渲染。
|
||||
- 修改“构件分别导出”包结构,将所有构件文件集中到同一目录层级。
|
||||
- 为项目库 DICOM 首页预览增加滚轮缩放、拖拽平移和位置重置。
|
||||
- 修正 DICOM 切片编号显示与滑块样式。
|
||||
- 同步更新 `Docker部署/README.md`,说明容器构建会包含这些前后端能力和生产模式注意事项。
|
||||
|
||||
## 涉及路径
|
||||
|
||||
- `WebSite/src/components/ProjectLibrary.tsx`
|
||||
- `WebSite/src/components/ReverseWorkspace.tsx`
|
||||
- `WebSite/src/types.ts`
|
||||
- `WebSite/server.ts`
|
||||
- `Docker部署/README.md`
|
||||
- `工程分析/需求分析-2026-05-24-10-45-43.md`
|
||||
- `工程分析/实现方案-2026-05-24-10-45-43.md`
|
||||
- `工程分析/测试方案-2026-05-24-10-45-43.md`
|
||||
- `工程分析/经验记录.md`
|
||||
|
||||
## 技术路线
|
||||
|
||||
1. 使用 `rg` 定位分割映射、DICOM 预览、位姿控件、导出包逻辑。
|
||||
2. 梳理现有 `ModelPoseValue` 与服务端导出函数,增加镜像字段和默认值。
|
||||
3. 在前端三维/二维变换路径中使用统一位姿对象,新增镜像按钮组。
|
||||
4. 调整二维分割映射绘制逻辑,优先使用闭合轮廓填充;对 sparse/edge-only 结果提供填充兜底。
|
||||
5. 修改导出包 `separate` 模式的目录结构。
|
||||
6. 为项目库 DICOM 画布加入 viewport state:scale、offset、dragging、reset。
|
||||
7. 封装或局部实现 DICOM 切片显示编号反向映射与暗色菱形 range 样式。
|
||||
8. 更新 Docker 部署说明。
|
||||
|
||||
## 执行步骤
|
||||
|
||||
1. 创建本次三件套,最终执行前再次阅读 `经验记录.md`。
|
||||
2. 阅读相关源码和 API,确认现有数据结构。
|
||||
3. 修改类型、服务端和前端实现。
|
||||
4. 更新 Docker 部署文档。
|
||||
5. 执行 `npm run lint`、`npm run build`。
|
||||
6. 重新部署并验证本机、公网、关键 API。
|
||||
7. 追加经验记录。
|
||||
8. 提交并推送 Gitea。
|
||||
|
||||
## 兼容性与回滚方案
|
||||
|
||||
- 新增镜像字段设置默认值,旧状态文件和旧位姿导出没有该字段时按不翻转处理。
|
||||
- 导出包结构改变只影响 `separate` 模式;如需回滚,可恢复服务端包路径生成逻辑。
|
||||
- DICOM 显示缩放/拖动仅改变前端视图,不改变后端切片、导出或空间基准。
|
||||
- 所有历史文档可从 Git 历史恢复。
|
||||
|
||||
## 预计文件变更
|
||||
|
||||
- 前端组件和类型文件。
|
||||
- 后端导出、位姿解析和体素坐标变换逻辑。
|
||||
- Docker 部署说明。
|
||||
- 本次工程分析与经验记录。
|
||||
|
||||
## 提交与部署策略
|
||||
|
||||
- commit message:`2026-05-24-10-45-43 修正分割显示镜像导出与DICOM交互`
|
||||
- 提交范围包含本次源码、Docker 文档和工程分析文档。
|
||||
- 部署使用 `NODE_ENV=production npm run serve -- --host 0.0.0.0 --port 4000`,并保留现有 frpc 容器公网入口。
|
||||
50
工程分析/测试方案-2026-05-24-10-45-43.md
Normal file
50
工程分析/测试方案-2026-05-24-10-45-43.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# 测试方案-2026-05-24-10-45-43
|
||||
|
||||
## 测试方案文档路径
|
||||
|
||||
`工程分析/测试方案-2026-05-24-10-45-43.md`
|
||||
|
||||
## 静态检查
|
||||
|
||||
- `git status --short --branch`:确认只包含本次相关文件。
|
||||
- `rg` 检查新增镜像字段在前端、后端和类型中均有默认值与使用点。
|
||||
- 检查 Docker 部署文档已同步说明。
|
||||
|
||||
## 构建检查
|
||||
|
||||
- `cd WebSite && npm run lint`
|
||||
- `cd WebSite && npm run build`
|
||||
|
||||
## 关键业务场景验证
|
||||
|
||||
- 项目库 DICOM 首页:滚轮缩放、拖拽平移、位置重置可用。
|
||||
- 逆向工作区:X/Y/Z 镜像翻转按钮可改变模型位姿,并能保存/导出。
|
||||
- 分割映射:构件区域以填充实体显示,不再只呈现稀疏线段。
|
||||
- 导出项目结果:`separate` 模式中所有构件 NIfTI 文件位于同一目录层级。
|
||||
- DICOM 切片编号:初始显示符合用户期望,滑块视觉接近截图 5。
|
||||
|
||||
## 医学影像数据相关边界验证
|
||||
|
||||
- 默认 DICOM/STL 项目仍可加载。
|
||||
- 分割填充显示不改变 DICOM 图像本身。
|
||||
- 导出的 NIfTI 文件仍能生成 `.nii` 或 `.nii.gz`。
|
||||
- 镜像翻转参与导出坐标变换,不只停留在 UI。
|
||||
|
||||
## 部署验证
|
||||
|
||||
- 重启 `tmux` 会话 `revoxelseg-dicom`。
|
||||
- 验证 `http://127.0.0.1:4000/api/health`。
|
||||
- 验证 `http://127.0.0.1:4000/`。
|
||||
- 验证 `https://revoxel.huijutec.cn/` 与公网 API。
|
||||
|
||||
## Git/Gitea 备份验证
|
||||
|
||||
- commit message 包含 `2026-05-24-10-45-43`。
|
||||
- 推送后确认远端 `main` 指向新提交。
|
||||
|
||||
## 风险与回归关注点
|
||||
|
||||
- 分割填充不能把构件之间错误合并。
|
||||
- 镜像翻转字段必须向后兼容旧状态。
|
||||
- 切片显示编号与实际 `sliceIndex` 请求不能错位。
|
||||
- 导出包结构改变应在文档和最终汇报中明确。
|
||||
18
工程分析/经验记录.md
18
工程分析/经验记录.md
@@ -1657,3 +1657,21 @@ C. 解决问题方案
|
||||
D. 后续如何避免问题
|
||||
|
||||
后续做程序修改时优先阅读核心三文档和当次三件套,不要在目录中长期堆积几十个历史流水文件。若某次需求产生可复用经验,应写入 `经验记录.md`;若只是一时执行细节,则交由 Git commit 历史保存。文档治理提交前必须确认没有混入源码、医学数据或运行态文件。
|
||||
|
||||
## 2026-05-24-10-45-43 分割显示、镜像位姿、DICOM 顺序与导出包结构联动修正
|
||||
|
||||
A. 具体问题
|
||||
|
||||
逆向分割映射中部分 STL 构件在二维 DICOM 切片上显示为线段或横向连接线,不像填充实体;模型位姿缺少以模型中心沿 X/Y/Z 轴镜像翻转的能力;“构件分别导出”需要所有构件 NIfTI 集中在同一目录;项目库 DICOM 首页缺少滚轮缩放、拖拽平移和位置重置;项目库和工作区的 DICOM 切片编号使用了数组索引顺序,初始显示为 `1/300` 而不是用户期望的 `300/300`,滑条也被误读成进度条。
|
||||
|
||||
B. 产生问题原因
|
||||
|
||||
前端叠加层虽然已有扫描线填充,但在交点稀疏或切面轮廓退化时仍会绘制大量切面线段,视觉上变成“线连接”;服务端导出只保留扫描线交点,缺少稀疏轮廓兜底。`ModelPose` 只包含旋转、平移、缩放,保存、预览、导出都没有镜像字段。DICOM 预览使用零基索引直显,未转换为医学查看习惯的反向层号。自写 tar 导出头只写 100 字节 name 字段,长中文路径会被截断,集中目录后更容易暴露。
|
||||
|
||||
C. 解决问题方案
|
||||
|
||||
为 `ModelPose` 和 `ModelPoseValue` 增加 `flipX/flipY/flipZ`,在默认值、归一化、保存、导入、三维预览、二维映射和服务端 NIfTI 导出中统一生效。二维叠加层改为优先实体填充,稀疏切面用闭合外轮廓兜底,已有填充结果不再叠加粗线段;服务端导出同步增加闭合外轮廓兜底写入。项目库 DICOM 首页新增独立 viewport 状态,支持滚轮缩放、拖拽平移和位置重置。DICOM 显示层号统一使用 `total - sliceIndex`,滑条值反向映射且使用菱形非进度条样式。`separate` 导出改到 `segmentation-parts/` 同一目录,并给 tar 生成补充 PAX path 头,保证中文长路径和 `.nii.gz` 扩展完整。Docker Compose 镜像标签和 README 同步到 20260524 能力说明。
|
||||
|
||||
D. 后续如何避免问题
|
||||
|
||||
凡是新增位姿字段,必须同时检查前端类型、默认状态、保存/导入、三维渲染、二维映射、服务端归一化、导出坐标变换和项目库回放,不能只改一个界面。涉及 DICOM 层号时要明确区分“数组索引”和“对用户显示的医学层号”。导出压缩包如果包含中文或深层路径,必须用 `tar -tzf` 验证路径完整,不要依赖 100 字节 tar name 字段。分割显示的视觉修正也应同步确认导出数据路径,避免 UI 看似实体而 NIfTI 仍是轮廓。
|
||||
|
||||
60
工程分析/需求分析-2026-05-24-10-45-43.md
Normal file
60
工程分析/需求分析-2026-05-24-10-45-43.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# 需求分析-2026-05-24-10-45-43
|
||||
|
||||
## 开始时间
|
||||
|
||||
2026-05-24-10-45-43
|
||||
|
||||
## 原始需求摘要
|
||||
|
||||
用户要求修正逆向工作区和项目库中的分割显示、镜像翻转、导出结构、DICOM 预览交互和 DICOM 切片序号/滚动条样式问题,并同步修正 `Docker部署/` 中相关内容。
|
||||
|
||||
## 业务目标
|
||||
|
||||
- 让二维分割映射中的所有构件尽量以填充实体呈现,避免只显示为线段连接的空心效果。
|
||||
- 在模型位姿中增加沿 X/Y/Z 轴、以模型中心为基准的镜像翻转能力。
|
||||
- 调整“构件分别导出”结果结构,方便后续统一处理各构件 NIfTI 文件。
|
||||
- 项目库 DICOM 首页支持滚轮缩放、拖拽移动和位置重置。
|
||||
- 修正项目库与工作区 DICOM 切片显示顺序和滑块样式,使切片编号符合用户观察习惯。
|
||||
- 保证 Docker 部署说明和容器化运行包含本次能力。
|
||||
|
||||
## 输入与输出
|
||||
|
||||
- 输入:
|
||||
- 用户提供的 5 张截图与问题描述。
|
||||
- 当前 React/Express 一体工程源码。
|
||||
- 现有 Docker 部署目录。
|
||||
- 输出:
|
||||
- 前端 DICOM/分割/位姿 UI 与交互修正。
|
||||
- 后端导出结构修正。
|
||||
- 类型、构建、部署验证结果。
|
||||
- 更新后的 `Docker部署/` 说明或配置。
|
||||
- 本次工程分析文档、经验记录和 Git/Gitea 备份提交。
|
||||
|
||||
## 影响范围
|
||||
|
||||
- `WebSite/src/components/ProjectLibrary.tsx`
|
||||
- `WebSite/src/components/ReverseWorkspace.tsx`
|
||||
- `WebSite/src/types.ts`
|
||||
- `WebSite/server.ts`
|
||||
- `Docker部署/`
|
||||
- `工程分析/`
|
||||
|
||||
## 关键约束
|
||||
|
||||
- 不伪造真实医学级算法能力;如果显示填充来自二维映射渲染增强,应明确其与导出体素结果的关系。
|
||||
- 镜像翻转必须纳入保存位姿、导出位姿和服务端导出计算链路,避免 UI 与导出不一致。
|
||||
- DICOM/STL 空间基准不能因显示缩放或拖动而改变。
|
||||
- 提交时避免混入运行态数据、医学数据和无关文件。
|
||||
|
||||
## 风险点
|
||||
|
||||
- 现有分割映射可能基于 STL 与 DICOM 切面交线或投影采样,空心线段与真实截面、视角或采样算法有关;直接填充需要避免把多个不连通区域错误合并。
|
||||
- 镜像翻转会影响三维显示、二维映射、保存位姿和导出体素化坐标,需要统一变换模型。
|
||||
- NIfTI 导出包结构改变可能影响已有用户脚本,需兼容命名清晰。
|
||||
- 切片顺序修正需要兼顾 axial/sagittal/coronal 与已有 API `sliceIndex` 约定。
|
||||
|
||||
## 待确认问题或默认假设
|
||||
|
||||
- 默认假设:用户希望前端所有分割映射默认显示为填充实体,并且导出体素结果也应按填充体素生成,而不是仅导出轮廓线。
|
||||
- 默认假设:“构建分别导出”指“构件分别导出”,目标是一个导出包内统一放置所有构件 NIfTI 文件,而不是为每个构件再套一个独立目录。
|
||||
- 默认假设:切片编号应按用户看到的顺序显示,初始页显示最后一张即 `300 / 300`,滑块视觉采用截图 5 的暗色轨道和蓝色菱形滑块样式。
|
||||
Reference in New Issue
Block a user