geopro/docs/OPTIMIZATION-BACKLOG.md

58 lines
4.3 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/③/反向② `69e8790`;④ 拾取串选 `63cda56`,体 PickableOff逻辑修复待 live 复核)
- **记录日期**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 管理)。
- **④ 切片拾取串选**:已修(`63cda56`)。根因=点击落体内部时 picker 命中体、worldPoint 落体内 →
`nearestSlice` 按平面距离选错切片。修法=体 actor `PickableOff`,光标拾取只落切片平面 → worldPoint
落在光标下那张切片 → 选对(`onPick` 仅命中时触发,未命中不误选)。重叠切片仍按最前优先(合理)。
逻辑闭合但**未 live 点击验证**(工具无法交互点击 3D 切片);若仍有偏差需 live 复核(重叠循环切换等)。
- **更新**2026-06-25 issue2+③+反向²(`69e8790`)+④(`63cda56`) 全部实现。