Files
REVOXELSEG_DICOM/工程分析/实现方案-2026-05-07-16-35-52.md

112 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 实现方案 - 2026-05-07-16-35-52
## 修改目标
围绕项目库 3D 模型预览页,完善整体位姿控制、旋转中心和方位提示:
- 将单个 `重置位姿` 拆为 `重置旋转位姿``重置平移缩放位姿`
- 旋转 X/Y/Z 增加 `-90°``+90°` 快捷按钮。
- 平移 X/Y/Z 增加负向/正向快捷步进按钮,缩放增加缩小/放大快捷按钮。
- 将模型旋转中心稳定在所有 STL 拼装后整体包围盒的中心。
- 在 3D 模型画布右下角增加 X/Y/Z 方位坐标提示和当前旋转角度。
## 涉及路径
- `WebSite/src/components/ProjectLibrary.tsx`
## 技术路线
### 1. 拆分重置按钮
新增两个函数:
- `resetModelRotationPose()`
- 只重置 `rotateX``rotateY``rotateZ``0`
- 保留 `translateX/Y/Z``scale`
- `resetModelTransformPose()`
- 重置 `translateX``translateY``translateZ``0``scale``1`
- 保留 `rotateX/Y/Z`
`整体位姿` 标题右侧按钮改为两个小按钮:
- `重置旋转位姿`
- `重置平移缩放位姿`
### 2. 增加快捷调整按钮
为位姿控制行增加快捷按钮:
- 旋转 X/Y/Z
- `-90°`:当前角度减 90并限制在 `[-180, 180]`
- `+90°`:当前角度加 90并限制在 `[-180, 180]`
- 平移 X/Y/Z
- 负向按钮:每次减 `0.25`
- 正向按钮:每次加 `0.25`
- 仍限制在 `[-2, 2]`
- 缩放:
- 缩小按钮:每次减 `0.1`
- 放大按钮:每次加 `0.1`
- 仍限制在 `[0.5, 2.5]`
为避免数值越界和重复逻辑,新增统一的 `clampModelPoseValue()``nudgeModelPose()`
### 3. 修正模型旋转中心
当前 STL 预览已经会对 mesh geometry 进行中心化处理。本次进一步显式拆分 Three.js 层级:
- `poseGroup`:负责整体平移。
- `pivotGroup`:位于模型整体几何中心,负责旋转和缩放。
- 所有 STL mesh 挂载在 `pivotGroup` 下,并在写入顶点时先减去整体包围盒中心。
动画循环中:
- `poseGroup.position = translateX/Y/Z`
- `pivotGroup.rotation = rotateX/Y/Z`
- `pivotGroup.scale = baseScale * scale`
这样模型始终围绕整体包围盒中心旋转,平移不会改变旋转轴心。
### 4. 增加右下角 X/Y/Z 方位提示
`NativeStlViewer` 容器中增加绝对定位 overlay
- 显示三个彩色轴向X 红色、Y 绿色、Z 蓝色。
- 显示当前 `rotateX/Y/Z` 数值,随滑块、快捷按钮、鼠标拖拽同步刷新。
- 放置于画布右下角,避免遮挡左下角 `MODEL PATH` 状态信息。
## 数据流与交互流程
1. 用户点击快捷按钮或拖动滑块。
2. 前端调用 `updateModelPose()``nudgeModelPose()`
3. `modelPose` React 状态更新。
4. `NativeStlViewer` 通过 `poseRef` 在 Three.js 动画循环中读取最新状态。
5. Three.js 更新 `poseGroup``pivotGroup`
6. 右下角方位提示读取同一份 `modelPose` 并更新显示。
## 兼容性与回滚方案
- 修改只影响 3D 模型页面,不影响 DICOM 影像、分割结果、后端 API。
- 若旋转中心方案出现异常,可回滚到单 group 结构,同时保留 UI 快捷按钮。
- 若 overlay 影响视觉,可只保留文本角度提示,不影响核心模型显示。
## 预计文件变更
- `WebSite/src/components/ProjectLibrary.tsx`
- 新增位姿 clamp/nudge/reset 方法。
- 更新整体位姿控制区 UI。
- 调整 `NativeStlViewer` 的 group 层级。
- 增加右下角方位提示 overlay。
## 人工审核状态
- 实现方案:用户已确认。
- 确认信息:用户回复“都确认,后续直接搞”。
## 执行结果
- 已在 `WebSite/src/components/ProjectLibrary.tsx` 完成实现。
- 已拆分 `重置旋转位姿``重置平移缩放位姿`
- 已为旋转、平移、缩放增加快捷调整按钮。
- 已将 3D 模型渲染层级拆为平移容器和中心旋转容器。
- 已新增右下角 X/Y/Z 方位与旋转角度提示。