feat/vtk-3d-view #7
|
|
@ -0,0 +1,101 @@
|
|||
# 二维分析:锁定俯视相机 + 内容显隐 + 高程拖动 — Spec(2026-06-26)
|
||||
|
||||
## 0. 一句话目标
|
||||
把「二维分析」从"另一套平面地图"改为**同一个 3D 地形场景的一个锁定近俯视视角**:切 tab 只切相机+翻另一方数据集的可见标志(不清空),二维内容(轨迹/栅格)落在带高程的地形上,且可选中后沿高程上下拖动分离。
|
||||
|
||||
---
|
||||
|
||||
## 1. 背景与现状
|
||||
- 三维分析栏(`CategoryAnalysisTab`)与二维分析栏(`Column2DDataset` / `col2D`)**共用同一个 `VtkSceneView` / `InteractionManager` / `renderWindow`**。现状:两栏勾选的 actor 叠在同一场景,切 tab 不切相机、不区分内容。
|
||||
- 二维内容现状:`col2D` 勾选 → `loadMapLine`(`dd/ert/trajectory/line`)→ `MapLineActor`(lat/lon 折线);有 `view2DModeChanged` 信号已接到 `sceneCtrl`(2D 视图模式钩子,本 spec 在其上扩展)。
|
||||
- 地形 + 底图:场景已有地形(`buildTerrain`,带高程)+ 天地图底图(`TileBasemap`,按经纬贴)。
|
||||
- 维度分类:`DatasetDimension::dimOf` + `Api3dRepository/LocalSample3dRepository::dimensionOf`,已对齐数据字典 DD0623(2D = `dd_trajectory_data`,commit c1a824e)。
|
||||
|
||||
**用户确认的认知**:二维分析"只是 3D 的固定视角",底图不是平面图、是**带高程的地形图**;内容沿用不清空。
|
||||
|
||||
---
|
||||
|
||||
## 2. 核心设计:一个场景 + 两种相机
|
||||
- **不分两个场景**,只有一个 3D 地形场景(地形 + 底图 + 全部已勾选数据),两栏区别仅在**相机**与**哪类数据集可见**。
|
||||
|
||||
| | 三维分析 | 二维分析 |
|
||||
|---|---|---|
|
||||
| 相机 | 自由透视(可旋转/倾斜/平移/缩放) | **锁定近俯视**(不可旋转,仅平移+缩放)|
|
||||
| 可见数据集 | 3D 数据集(体/切片/剖面…)可见;2D 数据集隐藏 | 2D 数据集(轨迹/栅格)可见;3D 数据集隐藏 |
|
||||
| 地形 + 底图 | 常驻可见 | 常驻可见(同一地形,俯视看即"地形图")|
|
||||
|
||||
---
|
||||
|
||||
## 3. 二维分析的相机:锁定近俯视
|
||||
- 切到二维分析 → 相机切到**近俯视固定角(约 75–80°,非绝对正俯视)**:理由——绝对正俯视在正交/小透视下高程变化不可见,留一点倾斜以便看出高低(§5 拖动反馈需要)。
|
||||
- 锁定:**禁用旋转**(interactor style 不响应旋转/倾斜),仅保留**平移 + 缩放**。
|
||||
- 切回三维分析 → 恢复自由透视相机(恢复切走前的视角或合理默认)。
|
||||
- 实现锚点:扩展 `view2DModeChanged` 钩子 → `VtkSceneController` 切相机模式 + 切 interactor style(或在 style 内按模式禁旋转)。
|
||||
|
||||
---
|
||||
|
||||
## 4. 内容显隐:切 tab 翻可见标志(**不清空**)
|
||||
- 切 tab 时,对"另一方"的数据集 actor 用 `SetVisibility(false)`,切回 `SetVisibility(true)`。**不移除 actor、不重建**。
|
||||
- 性能:VTK 渲染跳过不可见 actor → 隐藏内容**不参与绘制、不耗 FPS**;切换瞬时(无重插值/重传 GPU);唯一代价是内存/显存驻留(数据本已加载,无新增加载)。
|
||||
- **禁止用清空**:重体素(GPR/ERT)每次切回要重插值+重传 GPU,必卡。
|
||||
- 地形 + 底图两边都不隐藏。
|
||||
- 实现锚点:`VtkSceneView` 按数据集维度(`dimensionOf`/记录每 actor 的维度)批量翻可见标志;切 tab 时调用。
|
||||
|
||||
---
|
||||
|
||||
## 5. 高程拖动(C1):选中 2D 内容沿 Z 上下移
|
||||
- 二维分析里,**拾取选中已渲染的 2D 内容**(轨迹/栅格),支持**单选 / 多选**。
|
||||
- 选中后**竖向拖动 → 仅改其高程 Z(离地高度)**,**锁死 X/Y**(不动地理位置)。用于把叠在一起的 2D 层分离、看清。
|
||||
- 拖动时**实时显示当前高程数值**(屏幕浮层读数)。
|
||||
- 近俯视固定角(§3)使高低可见。
|
||||
- 实现锚点:新增/复用一个 2D 拾取-拖动交互(类似切片 widget 但只允许 Z 平移 + 多选);actor 的 Z 偏移持久(切走再回保留)。
|
||||
- 待定:高程是否需要随数据保存(暂定仅会话内 actor 变换,不落库;接真实端点再议)。
|
||||
|
||||
---
|
||||
|
||||
## 6. dd_raster:二维栅格过滤 + 渲染(本期新增)
|
||||
- 数据字典 DD0623:`dd_raster`(栅格/遥感影像,**本次新增**,展示模式 2D,形态=栅格)。
|
||||
- 纳入 2D 过滤:`dimOf`/`dimensionOf` 增 `dd_raster` → `Dim2D`;但 col2D 勾选渲染须**按 ddCode 分派**——轨迹走 `loadMapLine`,栅格走**栅格加载**(不可让栅格走轨迹端点)。
|
||||
- 渲染:取栅格的**地理范围(四至/仿射)+ 像素**,作为**地理配准的纹理平面贴到地形上**(带高程,可被 §5 高程拖动),类似底图瓦片按经纬度定位。
|
||||
- 依赖:dd_raster 的**数据端点**(返回像素 + 四至/投影)——**待确认**,未明确前 §6 不落地(先做 §3–§5)。
|
||||
|
||||
---
|
||||
|
||||
## 7. 维度过滤口径(对齐数据字典 DD0623,已部分落地)
|
||||
- 2D(足迹/栅格):`dd_trajectory_data`(统一通用轨迹,"保留",已并入 dd_radar_rtk_trajectory)+ `dd_raster`(本期新增,随 §6)。
|
||||
- 已删除、不再单列:`dd_radar_rtk_trajectory` / `dd_transient_electromagnetic_trajectory_data` / `dd_radar_channel_trajectory`(字典均"删除")。已清理:commit c1a824e。
|
||||
- `dd_radar_2d` / `dd_radar_3d`:字典为 `展示模式=3D`(通道剖面 / 三维插值模型)→ **属三维分析,不进 2D 过滤**。
|
||||
|
||||
---
|
||||
|
||||
## 8. 与雷达客户反馈的边界(本 spec **不含**)
|
||||
- 雷达 TM 模型(单/双/多频,每频一个 `dd_radar_2d`/`dd_radar_3d`,共用一个 `dd_trajectory_data` 轨迹)→ 数据模型,与本 spec 无冲突。
|
||||
- 雷达**数据在 3D 视图的渲染**(二维雷达=线/curtain、三维雷达=切面,按 trace 坐标,带打标 hover tip)→ **三维分析的另立任务**。
|
||||
- 详情页用 trace 坐标校准异常 + 剖面打标 → 详情页另立任务。
|
||||
- **2D 视图只显示轨迹线、打标暂不在 2D 展示**(客户 #6 修正)→ 与本 spec 的"2D 显示轨迹足迹"一致,无新增 2D 工作。
|
||||
- 雷达轨迹就是 `dd_trajectory_data`,本 spec 的 2D 分析按统一轨迹处理,无需特判。
|
||||
|
||||
---
|
||||
|
||||
## 9. 实现分期
|
||||
- **A. 一场景两相机**:切 tab → 锁定近俯视/恢复自由相机 + 翻另一方数据集可见标志(§3、§4)。基础,先做。
|
||||
- **B. 高程拖动**:2D 拾取单/多选 + 仅 Z 拖动 + 锁 XY + 实时读数(§5)。
|
||||
- **C. dd_raster**:过滤纳入 + 按 ddCode 分派渲染 + 栅格地理配准贴地形(§6)。依赖栅格数据端点确认。
|
||||
|
||||
---
|
||||
|
||||
## 10. 风险 / 待定
|
||||
- 近俯视角度(75–80°)需实机调;用户若坚持绝对正俯视,则 §5 高程反馈改为纯数值(不直观)。
|
||||
- §4 翻可见标志需可靠区分每个 actor 的维度归属(按数据集 ddCode 记录维度 → actor)。
|
||||
- §5 高程是否持久化/落库待定(暂会话内)。
|
||||
- §6 dd_raster 数据端点(像素 + 四至/投影)未确认 → C 期阻塞点。
|
||||
- 切相机/可见标志切换需与现有 `view2DModeChanged`、底图、地形 VE(垂直夸张)逻辑兼容,勿互相打架。
|
||||
|
||||
---
|
||||
|
||||
## 11. 验收
|
||||
- 切到二维分析:相机变近俯视、**不能旋转**,只能平移+缩放;3D 数据集(体/切片/剖面)不可见,轨迹+地形+底图可见。
|
||||
- 切回三维分析:恢复自由相机;3D 数据集重新可见,2D 轨迹隐藏。切换**瞬时无卡顿**(无重建)。
|
||||
- 二维分析里选中一条/多条轨迹,竖向拖动→只改高程、地理位置不动、实时显示高程;叠在一起的层能被拉开。
|
||||
- (C 期)勾选 dd_raster → 栅格按地理范围贴在地形上、可被高程拖动;轨迹与栅格各走各的加载路径、互不串。
|
||||
- 维度过滤与数据字典 DD0623 一致(2D=trajectory_data+raster;radar_2d/3d 归 3D)。
|
||||
Loading…
Reference in New Issue