docs(handoff): 2026-06-26 创建异常打磨+切片异常交互+二维分析改造交接
This commit is contained in:
parent
227ee8fdef
commit
4e998374e7
|
|
@ -0,0 +1,98 @@
|
|||
# HANDOFF — VTK 3D 视图:创建异常打磨 + 切片/异常交互 + 二维分析改造(2026-06-26)
|
||||
|
||||
> 分支 `feat/vtk-3d-view`。桌面端 Qt6 + VTK 9.6。本会话围绕「创建异常」全链路打磨、切片/异常交互修复、全局中文化,最后转入「二维分析改造」的需求厘清 + 写 spec。**下一步=按 spec 实现二维分析 A 期。**
|
||||
|
||||
---
|
||||
|
||||
## 0. 立刻要做的事(下个会话从这里开始)
|
||||
**实现二维分析改造**,spec 已写好:`docs/superpowers/specs/2026-06-26-2d-analysis-topdown-elevation.md`(commit `227ee8f`)。
|
||||
- 设计已与用户**逐条确认**(见 §4 决策)。分期 A→B→C:
|
||||
- **A(先做)**:一个场景两相机——切「二维分析」tab → 相机锁定**近俯视(75–80°,禁旋转,仅平移/缩放)**;切 tab 翻另一方数据集 actor 的 `SetVisibility`(**不清空**);地形+底图常驻。
|
||||
- **B**:二维里选中 2D 内容(单/多选)→ 竖向拖动只改**高程 Z**、锁 XY、实时高程读数。
|
||||
- **C**:dd_raster 纳入 2D 过滤 + 按 ddCode 分派渲染 + 栅格地理配准贴地形。**阻塞:dd_raster 数据端点未确认**。
|
||||
- 实现锚点:`view2DModeChanged` 信号(`Column2DDataset`→`sceneCtrl`)已存在,在其上扩展相机/可见标志切换。
|
||||
|
||||
---
|
||||
|
||||
## 1. 环境 / 命令 / 铁律(必读)
|
||||
- **构建**:用 PowerShell 工具跑 `cmd /c "D:\Git\lanbingtech\geopro\build.bat app"`(Claude 的 Bash 跑 build 会被环境劫持,用 PowerShell)。测试 `build.bat test`(ctest,**439 用例**)。`vswhere.exe not recognized` 噪声无害。LNK1104=exe 被运行中的 app 锁,需用户关 app 才能链接。
|
||||
- **回复用中文**(用户要求)。
|
||||
- **CLAUDE.md 两条绑定规则**:①发现技术债当场修,不以"非本轮引入"搪塞;②**能自己做的绝不让用户做**——日志(`%LOCALAPPDATA%/Geomative/Geopro3/logs/geopro_*.log`)/数据/构建/诊断都自己来,只在 LNK1104 关 app、或真正产品决策才找用户。
|
||||
- **git**:精确 `git add <files>`(仓库有并行 GPR 会话的脏文件 `.superpowers/sdd/*`、`docs/.../poc-lod-shots/*.png`,**勿误提交**)。提交无 Co-Authored-By(全局禁)。
|
||||
- **后端 token(可访问真实接口,用户给的)**:`geomativeauthorization: Geomative e6c1259748644c8da0954d864bb82604`;base URL `http://tenant.geomative.cn/pop-api`;样例 projectId `1439735554211840`。可用 curl 查接口。
|
||||
|
||||
---
|
||||
|
||||
## 2. 本会话已完成(提交清单,新→旧)
|
||||
**创建异常全链路(核心工作量)**
|
||||
- `227ee8f` 二维分析 spec(doc)。
|
||||
- `c1a824e` 二维维度分类对齐数据字典 DD0623(去 3 个已删除轨迹类型,dimensionOf/dimOf/测试)。
|
||||
- `e8bb2f8`/`1648ccb`/`f230ca8` 异常绘制提示:vtkTextActor 渲染不出中文 → 改 **app 层 QLabel 浮层**(右上角、深底方角、不挡鼠标);列表切到别对象清切片选中(`deselectSlice`)。
|
||||
- `9782a2b` 删除切片/异常加确认框 + **弹框按钮全局中文化**(Qt zh_CN 翻译器 + `formkit::addDialogButtons` 默认「确定/取消」+ 打包补 qtbase_zh_CN.qm)。
|
||||
- `306d7bc` 提示移右上角 + **线双击结束含双击位置**(去回滚)。
|
||||
- `d7ab770` **切片保存后定稿锁定**(`SetInteraction(0)` 不可移动/旋转)+ VTK/列表菜单去「保存·另存」。
|
||||
- `91a7106` **结束手势**:点=单击即完成、线=双击、面=**点回起点闭合**(近起点 12px 吸附+橡皮筋指向起点)。
|
||||
- `1a70ca0` 异常对话框加**样式预览**(选中类型 legend 可视化:点球/线/面)。
|
||||
- `4ae8286` **异常截图配色与切面一致**:取 widget 自身 `GetColorMap()` 输出(非另建 LUT)→ 逐像素一致 + RGBA 外区透明消蓝边。
|
||||
- `d470dc8` 双击/单击隔离(后被 `306d7bc` 改回"含双击位置")+ 异常类型下拉误显「暂无数据」(`EmptyAwareComboBox::realItemCount` 用错 flags 角色→改 `model()->flags()`)。
|
||||
- `04af569` 返工(点交互/点渲染小球/截图/类型空态)。
|
||||
- `75c1327`→`3ed1ea7`→`58544ff`→`c6756aa` 截图相机方案A(已废)、**异常类型接平台真实类型**(`listExceptionTypes` 按形态)、**点/线/面三态**子菜单、**样式接平台 legend**(`getExceptionTypeDetail`)。
|
||||
- 截图最终方案:**只从切片 2D 剖面图、按异常几何 buffer 裁剪**(`captureAnomalyShotFromSlice`,GIS buffer+掩膜,点圆/线胶囊/面外扩多边形)。
|
||||
|
||||
**其它**
|
||||
- `56e4b3a` 登录验证码容器白底。
|
||||
- `8563693` 分段折叠向上收起(stretch 动态:展开=1/折叠=0+尾弹簧)。
|
||||
- `d6e52cb` 三维分析分段面板视觉打磨(chevron 段头/描边新增按钮/顶部留白)。
|
||||
- `fb911a9` 坐标轴面板硬编码色 token 化。
|
||||
- `cdd7613` vtk-3d-openapi 文档对齐实测(DsPage 行在 `data.list`、DsRow 全字段、装置不在 data/page)。
|
||||
- `2f6ec7d`→`1742b75`→`31ad7a4` **装置筛选**:data/page 行不带 properties→改按行自带 `typeName/dsTypeCode` 筛选;parseDsRows 兼容对象形态。
|
||||
- 期间生成了一次安装包:`installer/dist/Geopro_Setup_3.0.0-20260625.exe`(脚本 `installer/build_installer.ps1`,含 windeployqt+样本+PROJ+vc_redist)。
|
||||
|
||||
---
|
||||
|
||||
## 3. 创建异常功能现状(已落地,端到端可用,mock 保存)
|
||||
入口:VTK 切片右键 →「创建异常 → 点/线/面」。流程:圈定(AnomalyDrawTool)→草稿渲染→**从切片2D图buffer裁剪截图**→对话框(名称/异常类型[接平台]/样式预览/备注/截图)→保存(mock)→刷新树+渲染异常 actor。
|
||||
- **关键文件**:`src/render/interact/AnomalyDrawTool.{hpp,cpp}`(三态绘制:点单击完成/线双击/面点起点闭合,Esc取消/Backspace撤点);`src/app/AnomalySaveDialog.{hpp,cpp}`(接 `cmdRepo.listExceptionTypes`/`getExceptionTypeDetail`,样式预览);`src/app/SliceExport.{hpp,cpp}`(`captureAnomalyShotFromSlice`);`src/render/actors/AnomalyActor.cpp`(点=球/线=折线/面=闭合多边形);`src/app/main.cpp`(onSliceContextMenuRequested ~509 起:菜单+绘制+对话框+保存接线,QLabel 提示浮层)。
|
||||
- **样式来源**:选中平台异常类型 → `getExceptionTypeDetail` 取 legend(polylineColor/Width/Shape, pointColor…)→ 套到异常 lineColor/lineWidth/dashed。
|
||||
- **截图**:只裁切片那张 2D 剖面图(`InteractionManager::selectedSliceColorImage` 现取 `SliceTool::coloredResliceImage()`=widget ColorMap 输出,与屏幕同源)。
|
||||
|
||||
### 仍卡在后端(P3,非客户端问题)
|
||||
- **异常真保存 `newException`** 卡:异常 `remarkSourceId` 须指向真实 dsObjectId(三维体/切片),但真后端**无任何登记三维体/切片为 dsObject 的端点**(实测 `voxel/generate`、`slice/generate`、通用 `dsObject create` 全无)。当前 `saveAnomaly` 是内存 mock。后端补登记端点后整链可接真。
|
||||
- 平台「点」类异常类型该项目为空(线/面有)→ 画点时类型下拉空属正常。
|
||||
|
||||
---
|
||||
|
||||
## 4. 二维分析改造——已确认的设计决策(与用户逐条敲定)
|
||||
1. **不分两个场景**:一个 3D 地形场景(带高程)+ 底图贴地形,两栏只是相机不同。"二维分析只是 3D 的固定视角"。
|
||||
2. **二维相机**:锁定**近俯视(75–80°,非绝对正俯视)**,禁旋转,仅平移+缩放。(绝对正俯视看不出高程→留倾斜)
|
||||
3. **切 tab 显隐**:翻另一方数据集 `SetVisibility`(**不显示,非清空**)→ 性能零代价(VTK 跳过不可见 actor)、切换瞬时、只占内存。地形+底图常驻。**绝不清空**(重体素重建会卡)。
|
||||
4. **高程拖动(C1)**:二维里选中 2D 内容(单/多选)→ 竖向拖动只改**高程 Z**、锁 XY、实时读数。用途=分离叠在一起的 2D 层。
|
||||
5. **维度过滤**:2D = `dd_trajectory_data`(+ C 期 `dd_raster`);`dd_radar_2d/3d` 是 3D(不进 2D)。已对齐 DD0623(`c1a824e`)。
|
||||
6. **雷达客户反馈**:只影响数据模型 + **3D 视图**渲染(二维雷达=线、三维雷达=切面、带打标)+ 详情页校准——**均属另立任务,不在本次 2D 改造**。2D 只显示轨迹线、打标暂不做(与本设计一致)。
|
||||
|
||||
---
|
||||
|
||||
## 5. 关键代码锚点(二维分析改造用)
|
||||
- 切 2D 视图模式钩子:`Column2DDataset::view2DModeChanged` → `main.cpp` 接 `sceneCtrl`(搜 `view2DModeChanged`)。
|
||||
- 维度分类:`src/app/DatasetDimension.cpp::dimOf`(col2D 用);`src/data/api/Api3dRepository.cpp` + `src/data/repo/LocalSample3dRepository.cpp::dimensionOf`。
|
||||
- 2D 内容注入:`main.cpp` ~502 `col2D->setDatasets(splitByDimension(...).dim2D)`;勾选渲染 `Column2DDataset::checkedDatasetsChanged` → `loadMapLine`/`MapLineActor`。
|
||||
- 场景/相机/可见:`VtkSceneView`(actor 管理)、`VtkSceneController`、`InteractionManager`(拾取/选中,新增 `deselectSlice`)。
|
||||
- 地形+底图:`buildTerrain`(带高程,VE 垂直夸张相关)、`TileBasemap`(天地图按经纬贴)。
|
||||
- 数据字典:`D:\Projects\GEOPRO\DD0623.xlsx`(46 个 ddCode,列:序号/ddCode/领域/含义/状态/**展示模式(2D/3D)**/**展示形态**/备注…)。解析:openpyxl 可用,中文 GBK 终端会乱码→导 UTF-8 文件再 Read。
|
||||
|
||||
---
|
||||
|
||||
## 6. 待确认/风险
|
||||
- **dd_raster 数据端点**(像素+四至/投影)未确认 → C 期阻塞。
|
||||
- 近俯视角度需实机调;高程是否落库暂定会话内(不落库)。
|
||||
- §3 翻可见标志需可靠区分每个 actor 的维度归属。
|
||||
- 切相机/可见与现有 view2DModeChanged、底图、地形 VE 逻辑勿打架。
|
||||
- **GUI 无法登录自测**:相机/截图/交互类改动我只能保证编译+逻辑,视觉/手感需用户实跑反馈。
|
||||
|
||||
---
|
||||
|
||||
## 7. 相关记忆/文档
|
||||
- 记忆库 `MEMORY.md`(如 login-chain-truth、vtk-3d-persistence-structure、build-vs2026-vcpkg-gotchas、deploy-hardcoded-dev-paths 等)。
|
||||
- vtk-3d API 设计草案:`docs/api/vtk-3d-openapi.json`(已对齐实测,0.6.1)。
|
||||
- 真后端 API:`docs/apis/business_OpenAPI.json`。
|
||||
- 二维分析 spec:`docs/superpowers/specs/2026-06-26-2d-analysis-topdown-elevation.md`。
|
||||
Loading…
Reference in New Issue