9.3 KiB
9.3 KiB
VTK 三维视图「三栏结构重构」设计
- 日期:2026-06-16
- 分支:
feat/vtk-3d-view - 状态:设计稿(经高保真原型逐项对齐用户反馈后定稿)
- 上位文档:
2026-06-15-vtk-3d-supplementary-design.md(总设计 v2)。本文是其 A1 三栏结构 的实现增量设计,就 UI 形态与若干控件细节,取代总 spec §7.1 中"左侧新 dock / tab 二选一"的开放表述。 - 高保真原型:
docs/superpowers/mockups/2026-06-16-three-column-layout.html(深色令牌取自src/app/Theme.cpp;默认即定稿方案)。 - 需求来源:
Geopro3.0 需求表.xlsx「补充需求」页签(已逐行精读,行号见下文)。
0. 目标与范围(用户已确认)
把当前"旧二维/三维切换 + 三个浮层"的过渡态 UI,重组为需求 A1 的三个子列表栏,并接通到已有的渲染/交互能力。
本轮 IN
- 三栏内嵌侧栏(VTK 视图内左侧抽屉 + 三 tab + 可折叠);删除旧「二维地图/三维视图」互斥切换;中央 dock 改名 「VTK视图」。
- 收编三浮层:左上
layerPanel(图层勾选)、右上axisBar(P2 工具条)→ 并入「三维数据集」栏;左下sliceBar→ 删除(切片改走三维分析右键菜单)。 - 三维数据集栏:工具条 4 栏位接 P2 已实现控制器;数据集列表按
dimensionOf过滤 3D ds + 勾选 → 接现有VtkSceneController渲染。 - 二维数据集栏:列表按 2D 过滤;「地图 / 2D视图」控件做出来(底图瓦片渲染留 P5,本轮控件 UI + 2D 视图 Z 平面接通)。
- 三维分析栏:对象→三维体模型→切片 树;两个右键菜单 UI 完整;右键「切片」(上下/前后/左右/任意) 接已有
SliceTool(替代 sliceBar)。 - VTK视图 + 数据详情 标题栏右侧加全屏按钮。
本轮 OUT(菜单项可见但暂 stub/禁用,留 P4/P5)
- 切片 CRUD:保存 / 保存为 / 导出 / 删除(P4,
I3dSceneRepository接口已留位)。 - 色阶编辑(F26 参考 Geopro 1.0,无参考,留 P4)。
- 底图瓦片渲染(P5)、异常体管理 / 三维体详情 / 任务管理(P4)。
1. 核心架构决策(关键澄清)
全工作台只有一个共享的中央 VTK 视图,三栏是叠在其上的「子列表栏」,各自把数据喂进同一视图。证据(需求交叉验证):
- 行 2「VTK视图上提供三个子列表栏」;行 11「显示在 VTK 中」;行 16「显示在 VTK 的 2D 视图」;行 19「显示在 vtk 的三维视图」——三处同指一个 VTK。
- 需求行 36「VTK视图」挂在「三维分析」下,只是把视图交互(选中拖动旋转 / 双击正视)归类描述,不代表视图归三维分析独有。
推论(本轮落地):
- 旧「二维地图/三维视图」互斥分段按钮(
main.cpp:308-316一带)删除。 - 2D 不再是独立视图模式,而是 VTK 视图里的一个 2D 图层/平面(底图 + 2D 数据,摆在某 Z 平面),由「二维数据集」栏控制。
- 中央 dock 名
二维地图/三维视图→VTK视图(同时承载 2D/3D,且为需求原文叫法)。
2. 三栏物理形态(方案 C·视图内嵌侧栏)
- 三栏 = VTK 视图内左侧的抽屉式侧栏,三个 tab:
三维数据集 / 二维数据集 / 三维分析,一次显一栏。 - 画布在侧栏右侧、不被遮挡;侧栏右缘有折叠开关(◀/▶),折叠后画布全宽。
- 侧栏与画布同属 VTK 视图容器(侧栏是视图子控件,符合"VTK视图上提供")。
- 左侧保留现有
ObjectTreePanel(「对象」dock)作为筛选来源:三栏列表只在"被勾选对象"范围内、按维度过滤显示 ds(需求行 10/15)。两级关系:勾对象 → 三栏按维度显示其 ds。 - 现有左下「数据集」dock(详情查看)保留,与三栏列表并存(总 spec §7.1 已定的"两条线")。
取舍记录:曾考虑"左侧独立 dock + tab"(方案 A)与"竖向分段"(方案 B),均被否——需求「VTK视图上」明确栏在视图内;浮窗式(最初的 C)遮挡画面亦否,改为抽屉式。
3. 各栏内容(逐行对齐需求,含控件形态)
3.1 三维数据集栏(行 3–11)
工具条 = 4 个分组栏位 + 数据集列表:
- 坐标轴设置(行 4–6)——表单式,每项一行、左对齐:
- 显示方式:下拉(标准 / 三维立体 / 不显示)
- O点位置:按钮(弹框设原点)
- 刻度:下拉(无刻度 / 米 / 英尺 / 经纬度)
- 字体:按钮(设刻度文字字体)
- 水平/垂直比例(行 7)——单个拖动滑块 + 数值(如 2.0×,纵向放大系数;现有
kVerticalExaggeration)。非两个独立控件。 - 快捷视图(行 8)——6 钮:前 / 后 / 左 / 右 / 上 / 下。
- 缩放 Zoom(行 9)——3 钮:放大(In) / 缩小(Out) / 适配(Fit)。
- 数据集列表(行 10–11)——
dimensionOf==Dim3D过滤勾选对象的 ds,勾选→渲染。
3.2 二维数据集栏(行 12–16)= 3 栏位
- 地图(行 13)——下拉(天地图 / Google Map / 隐藏)。底图瓦片渲染留 P5。
- 2D视图(行 14)——下拉(关闭 / Z=0 / 顶部 / 底部 / 自定义);选「自定义」显数值输入框。
- 「自定义 Z」= 世界绝对高程(米),向上为正,与「Z=0/顶部/底部」同坐标系(
GeoLocalFrame世界 Z)。决策依据:同一下拉里「Z=0」即绝对值,「自定义」只是输入任意绝对 Z;与业界(Petrel/Leapfrog/ParaView)水平面高度用项目 CRS 绝对高程一致。
- 「自定义 Z」= 世界绝对高程(米),向上为正,与「Z=0/顶部/底部」同坐标系(
- 数据集列表(行 15–16)——
dimensionOf==Dim2D过滤,勾选→渲染到 VTK 的 2D 视图。
3.3 三维分析栏(行 17–35)
-
数据集列表 = 树(行 18):对象 → 三维体模型数据集 → 切片。可勾选三维体/切片 → 渲染(行 19)。
-
右键菜单(按节点类型分派):
三维体数据集(行 20–27,直接项,无"创建切片"父级,无删除):
菜单项 说明 本轮 切片 ▸ 上下 / 前后 / 左右 / 任意 一级「切片」父菜单 + 二级方向(上下/前后/左右=固定角度;任意=初始 45°可调) 接已有 SliceTool 色阶 参考 Geopro 1.0 OUT(stub/禁用) 显示 / 隐藏 actor 可见性 IN 数据详情 详情栏显示 IN(接现有详情) 注:需求字面是"上下切片/前后切片…"直接项;本轮按用户决策归入「切片」一级父菜单、二级去「切片」二字显「上下/前后/左右/任意」。
切片数据集(行 28–35,有删除):
菜单项 本轮 保存 / 保存为 / 导出 / 删除 OUT(P4 CRUD,stub/禁用) 色阶 OUT 显示 / 隐藏 IN 数据详情 IN -
VTK视图交互(行 36–38)、切片分析(行 39–51,含视图内切片右键:创建异常/保存/导出图片/导出dat/正视图/视图翻转/关闭)——属交互层,多已在 P3 实现或留 P4,本轮不在树结构范围内。
4. 全屏功能(新需求)
- 在 「VTK视图」 与 「数据详情」 两个 dock 标题栏右侧各加一个全屏切换按钮:点击→该视图充满工作区;再点→还原。
- 理由:两视图含图形、内容多,常需全屏操作。
- 实现方向(ADS):给
CDockWidget标题栏插入自定义QToolButton,切换时把该 dock 最大化覆盖 dock 管理区(隐藏同级 / 浮动后最大化,择一,落地时定)。
5. 代码触点(落地指引,细节进 plan)
src/app/main.cpp::buildWorkbench:- 删
layerPanel/axisBar/sliceBar三浮层及其锚定器(RightTopAnchor/BottomLeftAnchor)与showLayerPanel显隐逻辑。 - 删旧「二维地图/三维视图」分段切换;
vtkDock改名「VTK视图」。 - VTK 视图容器内新建抽屉侧栏(QTabWidget 或自绘,三 tab)+ 折叠开关;三栏工具条/列表迁入。
- dock 布局持久化版本号须 bump(见
main.cpp:1429附近注释:改 dock 名/结构要升版本,否则旧布局反序列化错位)。
- 删
- 三维数据集工具条接 P2 已实现的
VtkSceneController坐标轴/比例/快捷视图/zoom 槽(原 axisBar 的接线迁移,不重写控制器)。 - 数据集列表:用
I3dSceneRepository::dimensionOf过滤;勾选信号接VtkSceneController(复用现checkedTmsChanged一路的编排)。 - 三维分析树右键「切片」→ 调已有
InteractionManager/SliceTool建切片(替代 sliceBar 原按钮路径)。 - 全屏按钮:ADS 标题栏自定义按钮 + 最大化/还原。
6. 待定 / 风险
- 全屏在 ADS 的最大化实现方式(隐藏同级 vs 浮动最大化)落地时定。
- 二维「地图」底图本轮仅控件,渲染 P5;需确保控件状态能持久化到 P5 不返工。
- 三栏侧栏与 ADS dock 的交互(侧栏是 VTK 容器子控件,不是 dock)——确保折叠/全屏时布局正确。
- dock 名变更后旧用户布局失效(bump 版本号后回落默认排布,可接受)。