docs(vtk): 修订重构 spec(平面生命周期/废弃逐ds拖z/…溢出/底图选型)

§8.2 平面生命周期:首勾建平面定z(之后固定),全消则平面+底图一并销毁;
§11 逐ds独立拖Z(nudgeSelectedMapLinesZ/mapLineZOffset_)废弃移除;
§6 图标「…」溢出:宽度挤压分支必须工作可验证;
§9.2 选型定为参数化 TileBasemap 多实例(groundZ/opacity/Street纯平),1个3D+N个2D。
This commit is contained in:
gaozheng 2026-06-30 20:13:38 +08:00
parent bc79530456
commit ac50aaa51e
1 changed files with 19 additions and 10 deletions

View File

@ -70,7 +70,7 @@
## 6. 响应式图标工具条(新建 `SectionIconBar`
- 段头右侧承载图标工具条:**默认最多显示 3 个图标**;图标总数超 3或段宽被挤压放不下时**右侧图标依次收进末尾「…」下拉菜单**。`resizeEvent` 动态重算可见数。
- 段头右侧承载图标工具条:**默认最多显示 3 个图标**;图标总数超 3**或段宽被挤压放不下时****右侧图标依次收进末尾「…」下拉菜单**。`resizeEvent` 动态重算可见数 —— 这是**必须实现并可验证**的行为:即使图标 ≤3当栏位宽度收窄到放不下时右侧图标也要实时折进「…」栏位变宽再弹回
- 每个图标 = `QToolButton`autoRaise + glyph + tooltip点击触发对应操作部分弹 popup
- 各维度图标集:
| 段 | 图标(左→右,右侧优先收进…) |
@ -78,7 +78,7 @@
| 3D 反演(电阻率/视电阻率/瞬变) | `新增三维体`、`筛选` |
| 3D 三维体 | `筛选` |
| 2D 轨迹 | `z值`、`筛选`、`底图` |
- 注:当前各段图标 ≤3…」折叠为**前瞻能力**(后续图标会增加),需实现但当前不触发
- 注:当前各段图标 ≤3数量超 3」分支暂不触发但**「宽度挤压」分支必须工作**(窄栏即折叠);两个分支都要实现(后续图标会增加,数量分支随之生效)
---
@ -117,9 +117,11 @@
### 8.2 2D 按类型平面(需求 5
- 同一 2D 类型(段)勾选的全部 ds 投影到**一块平面**
- 平面 z = 该类型**第一个被勾选 ds** 的 z首个勾选时确定;该 ds 取消后平面 z 保持,由 z 滑块掌控)。
- 平面 z = 该类型**第一个被勾选 ds** 的 z首个勾选时确定后**固定不变**,仅由 z 滑块整体升降)。
- 平面**纯平、不渲染高程**。
- 同类型其余 ds 的折线全部落在此平面 z覆盖现有逐 ds 全局 Z逐 ds 拖动偏移 `mapLineZOffset_` 的取舍见 §11
- 同类型其余 ds 的折线全部落在此平面 z。
- **平面生命周期**:该类型**首个 ds 被勾选** → 创建平面(定 z+ 创建其平面底图§9.2);期间 z 固定;该类型**全部 ds 取消勾选** → 平面**与其底图一并销毁**。
- 逐 ds 独立拖动 Z`nudgeSelectedMapLinesZ` / `mapLineZOffset_`**废弃**,统一到类型平面 z。
- 渲染复用 `MapLineActor`(折线几何不变),仅 Z 落点改为「所属类型平面 z」。
---
@ -129,10 +131,17 @@
### 9.1 3D 共享底图1 个)
- 沿用 `TileBasemap` 单例带高程地形Z=0。透明度参数化默认 0.5,由 §7.5 popup 调);支持隐藏。瓦片范围规则不变。
### 9.2 2D 平面底图N 个,每类型一块)
- 每个 2D 类型一块**纯平矢量底图**:复用天地图矢量图层 `vec_w` + `buildFlat`,贴在该类型平面 z§8.2)上。
- 瓦片范围**复用** `dataHorizontalRadius()×10``[2000,30000]m` 规则。
- 实现选型(实现期定):把 `TileBasemap` 参数化z + 强制 flat + 图层 + opacity + 实例 id以支持多实例或抽出轻量 `PlaneBasemap`。优先参数化复用,避免瓦片下载/坐标对齐逻辑重复。
### 9.2 2D 平面底图N 个,每类型一块)—— 实现选型已定
- **决策:参数化 `TileBasemap` 支持多实例**(不另抽 `PlaneBasemap`)。依据:`TileBasemap` 的「相机驱动 LOD + 四叉树细分 + 视锥剔除 + 限并发下载 + GeoLocalFrame 配准」正是平面底图所需,且其状态全为 per-instance无全局/静态状态,`tileKey` 为纯函数),多实例天然可行。新抽类要么重写数百行 LOD/网络逻辑,要么退化成单层无 LOD 大平面(缩放发虚、且违背「瓦片范围参考三维规则」)。
- **需改的 3 处硬编码**
| 改动 | 现状 | 改为 |
|---|---|---|
| 地面 Z | `kGroundZ=0` 常量 | 构造/setter 传 `groundZ`2D 平面 = 类型平面 z |
| 透明度 | `kTerrainOpacity=0.55` 固定 | 参数化,默认 0.5 可调 |
| 平面/矢量模式 | 由 `Kind` 隐含 | 复用 `Street`(vec_w)+`buildFlat`(已是纯平矢量路径,跳过 DEM/warp |
- **最终布局**1 个 `TileBasemap`3DSatellite/带高程Z=0§9.1+ N 个 `TileBasemap`(每 2D 类型一个Street/纯平矢量,`groundZ`=平面 z。共享同一 `Scene` / `GeoLocalFrame`
- **生命周期管理器**(挂 `VtkSceneController`):按 2D 类型持有 N 个实例 + 各自平面 z该类型首勾 → 建实例§8.2 定 z该类型全消 → 销毁实例(连同折线平面)。
- 瓦片范围**复用** `dataHorizontalRadius()×10``[2000,30000]m` 规则(各实例共享同一 `dataRadiusProvider`)。
- 坐标对齐沿用 `GeoLocalFrame`经纬→局部frame 重锚逻辑不变。
---
@ -146,7 +155,7 @@
## 11. 迁移说明 / 取舍 / 待定
- **替代 2026-06-26 spec**:该 spec 的「一场景两相机 + 按维度显隐 + 高程拖动分层」中,**相机锁定 + 维度显隐被本 spec 推翻**改单一自由场景共存。其「2D 沿 Z 拖动分离」语义改由「按类型平面 + z 滑块」承担——逐 ds 独立拖动 `nudgeSelectedMapLinesZ` / `mapLineZOffset_` 是否保留待定:默认**退役**(统一到类型平面 z若实测需要单条微调再议
- **替代 2026-06-26 spec**:该 spec 的「一场景两相机 + 按维度显隐 + 高程拖动分层」中,**相机锁定 + 维度显隐被本 spec 推翻**改单一自由场景共存。其「2D 沿 Z 拖动分离」语义改由「按类型平面 + z 滑块」承担——逐 ds 独立拖动 `nudgeSelectedMapLinesZ` / `mapLineZOffset_`(及拾取拖动浮层读数)**废弃移除**,统一到类型平面 z
- **`dd_raster`** 仍未接2026-06-26 §6 遗留),本 spec 不含;后续作为新的 2D 类型段加入时复用 §8.2/§9.2 平面+底图机制。
- **3D 反演段 vs 三维体段**:均为 D3但 3D 反演段渲染为帘面、三维体段为体素/雷达体——共用 3D 底图与自由场景,无需区分。
- **责任拆分**`SectionIconBar` 响应式工具条、`TileBasemap` 多实例参数化、`DatasetColumn` 动态显隐 三块相互独立,可分别实现与测试。
@ -159,7 +168,7 @@
2. 段**动态显隐**:无对应数据的段不显示;面板全空时显示居中占位提示。
3. 段头操作为**图标工具条**:默认最多 3 个,超出/挤压时右侧收进「…」下拉。3D 反演段含「新增三维体/筛选」2D 轨迹段含「z值/筛选/底图」。
4. 「筛选」图标可**展开/收起**段内筛选行(默认折叠)。
5. 勾选 2D 轨迹:同类型 ds 投影到**一块纯平平面**,平面 z = 首个勾选 ds 的 z「z值」滑块整体升降该平面「底图」popup 可换矢量平面底图/无 + 调透明度(默认 50%)。
5. 勾选 2D 轨迹:同类型 ds 投影到**一块纯平平面**,平面 z = 首个勾选 ds 的 z(之后固定)「z值」滑块整体升降该平面「底图」popup 可换矢量平面底图/无 + 调透明度(默认 50%)。该类型**全部取消勾选 → 平面与其底图一并消失**。
6. 3D 与 2D 数据在**同一自由透视场景**同时可见,可自由旋转(无锁定俯视、无 tab 切换)。
7. 渲染区工具栏 Gear 下方新增「地图」按钮,控制全局 3D 底图(天地图/无 + 透明度默认 50%)。
8. 「导入雷达」入口出现在顶部「设备」菜单;三维体段头不再有该按钮。