2.8 KiB
2.8 KiB
实现方案
时间戳:2026-05-04-04-58-36
修改目标
修复项目列表按钮重叠;增强逆向工作区当前项目与融合视图;增加 DICOM 缓存和显示模式;重做 3D 模型渲染加载状态,避免 React Three Fiber 引入的 Three.js Clock 警告。
涉及路径
WebSite/server.tsWebSite/src/lib/api.tsWebSite/src/types.tsWebSite/src/components/ProjectLibrary.tsxWebSite/src/components/ReverseWorkspace.tsx工程分析/测试方案-2026-05-04-04-58-36.md工程分析/经验记录.md
技术路线
- 项目列表布局。
- 将收缩按钮从标题区右侧移到侧栏外侧中线位置。
- 保留
+在项目列表标题行内,避免重叠。
- DICOM 预览缓存与显示模式。
- 后端增加内存缓存:按 project、plane、slice、mode 缓存灰度预览。
- API 增加
mode=default|bone|soft|contrast。 - 前端增加显示模式切换,并将 mode 传给 API。
- 3D 模型渲染。
- 项目库中不再使用 React Three Fiber Canvas。
- 后端增加 STL 二进制采样预览 API,避免浏览器一次解析 240MB 原始 STL。
- 前端改用原生 Three.js 手动创建 renderer、camera、scene、geometry。
- 显示加载进度条;WebGL 不可用时使用二维 canvas 模型预览兜底。
- 使用自动包围盒归一化、居中、缩放,确保模型可见。
- 逆向工作区。
- 拉取当前项目详情。
- 顶部显示当前项目名、DICOM/STL 数量和路径。
- 融合视图显示 DICOM canvas 背景,并叠加简化 STL/模型轮廓或模型投影效果,表达等比例缩放、中心对齐状态。
- 验证与部署。
npm run lintnpm run build- API smoke test
- headless Chrome 冒烟检查
- 重启
tmux会话部署到4000。
数据流
DICOM:
前端选择 plane/slice/mode -> 后端命中或生成缓存预览 -> 前端 canvas 显示。
3D:
前端读取 STL 采样预览 API -> 后端返回抽样三角面顶点 -> 原生 Three.js 生成材质、居中缩放 -> 渲染;WebGL 不可用时绘制二维投影预览。
逆向融合:
前端按当前项目获取 DICOM 预览和项目信息 -> canvas 绘制影像 -> HTML/SVG/Three 投影层叠加中心对齐模型轮廓。
兼容性与回滚方案
- DICOM preview API 兼容旧参数,不传 mode 时默认为 default。
- 如果原生 Three.js 渲染异常,页面会使用二维 canvas 兜底预览,不影响项目库浏览。
- 运行态缓存仅在进程内,不写入 Git。
预计文件变更
- 修改后端 DICOM preview API。
- 修改项目库 3D 组件和 DICOM 控件。
- 修改逆向工作区融合视图。
- 更新工程分析文档和经验记录。
人工审核状态
本次用户明确要求无需人工二次确认。
状态:自动确认,继续执行。