geopro/docs/OPTIMIZATION-BACKLOG.md

59 lines
4.4 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.

# 待优化清单Optimization Backlog
> 全局「待优化 / 技术债 / 性能与体验改进」登记簿。**所有**后续发现但当下不做(或暂以折中实现)的优化点
> 都登记到此,并随进展更新状态。区别于 bugbug 当场修,见 CLAUDE.md 技术债规则)——这里收录的是
> 「能用但不够理想、需要更大改造才能做到位」的优化项。
## 状态图例
- 🔴 Open — 待优化,尚未动工
- 🟡 In Progress — 正在做
- 🟢 Done — 已完成(保留记录,标注完成 commit/日期)
- ⚪ Won't Do — 评估后决定不做(标注原因)
## 维护约定
- 新增项用递增 IDOPT-NNN不复用已删 ID。
- 每项含:背景/现状、期望、难点、状态、记录日期、关联 commit。
- 状态变更时更新「状态」行与「更新」行,不删历史。
---
## OPT-001 · 放大系数(VE) 完全无重绘的即时缩放
- **状态**:🔴 Open
- **记录日期**2026-06-25
- **背景/现状**`VtkSceneController::setVerticalExaggeration` 当前走「保留相机重建」commit `7ff6f18`)——
改 VE 时相机不再跳远视角、原地按新夸张重绘,但**数据/底图仍会重建并重绘一次**(有一次闪烁)。
根因VE 被烤进几何——帘面用 `actor->SetScale(1,1,VE)`、体素把 VE 烤进 image 的 z origin/spacing、
地形烤进 `buildTerrain`;且切片附着依赖**含 VE 的 currentVolumeImage_**。
- **期望**:拖动放大系数时纯 actor 层 Z 缩放,**零重载零重绘**、即时跟手(理想可恢复拖动实时预览)。
- **难点**
- 体素须改为「image 建在 VE=1、vtkVolume prop 用 `SetScale(1,1,VE)`」,但切片重采样依赖含 VE 的 image
几何,需同步改造切片附着/重采样链InteractionManager
- 地形/帘面/体素三类 actor 的 VE 应统一走 actor 变换,避免混用(部分烤几何、部分 actor 缩放)。
- 底图(TileBasemap) VE 同步是否也能免重载需评估。
- **关联**`7ff6f18`(当前保留相机的折中实现)。
- **更新**:—
---
## OPT-002 · 多三维体并发的切片渲染
- **状态**:🟢 Doneissue2/③/反向②commit `69e8790`);④ 切片拾取串选仍 🔴 Open见下
- **记录日期**2026-06-25
- **背景/现状**:切片渲染绑定单一「当前体」——`syncSlices` 只显示 `sp.volumeDsId == currentVolumeDsId()`
的切片,`currentVolumeDsId` = 最后添加的体(`VtkSceneView::volumeOwnerDs_`)。勾选第二个三维体后它
成为 current第一个体的切片被 `syncSlices` 隐藏(用户 issue2选第二个体时第一个体的切片消失
根因:`InteractionManager` 把切片附着到单个 `currentVolumeImage_`,不支持同时挂多个体的 image。
- **期望**:多个体同时渲染时,各自的已勾选切片都能并存显示(按各切片的 `volumeDsId` 取对应体 image 重采样)。
- **难点**`InteractionManager` 的切片附着/重采样改为「按 volumeDsId 多体管理」;`VtkSceneView` 需暴露
多个体的 image非单 `currentVolumeImage_`);切片拾取/选中也要按所属体区分。与 OPT 无关的切片右键
「保存/导出」依赖 selectedSlice 当前体,也需一并核对。
- **关联**syncSlices/onVolumeChanged`src/app/main.cpp`)、`VtkSceneView::currentVolumeImage_`。
- **同簇问题(一并改造)**
- **③ 右键体却把切片建到 current 体**:右键三维体 A「生成切片」时仍用 `currentVolumeDsId()`=最后渲染的
体)创建切片。需把目标体 dsId 随右键带下来,并让 addSlice 用 A 的 image依赖多体 image 管理)。
- **④ 切片拾取串选(仍 Open**:点任意切片却选中上下切片。根因是重叠切片下 VTK 的事件路由「最前
平面优先」+ `nearestSlice` 启发式:多张切片在屏幕投影重叠时,最前/最近的那张被选中。
`vtkImagePlaneWidget`(VTK9.6) 不暴露 texture-plane actorpick-list 精确化方案已试→回退。
**须在可交互点击的运行环境里实地调试**(点击重叠的 3D 切片才能验证),盲改会破坏现有可用的选择。
候选方案:自管切片 actor 做精确 pick / 重叠时让用户循环切换 / 调 widget 优先级。
- **更新**2026-06-25 issue2+③+反向② 已实现(`69e8790`);④ 留待能 live 调试的会话单独做。