geopro/docs/superpowers/HANDOFF-2026-06-26-vtk-anom...

12 KiB
Raw Blame History

HANDOFF — VTK 3D 视图:创建异常打磨 + 切片/异常交互 + 二维分析改造2026-06-26

分支 feat/vtk-3d-view。桌面端 Qt6 + VTK 9.6。本会话围绕「创建异常」全链路打磨、切片/异常交互修复、全局中文化,最后转入「二维分析改造」的需求厘清 + 写 spec。下一步=按 spec 实现二维分析 A 期。


0. 立刻要做的事(下个会话从这里开始)

二维分析改造 A 期已实现(未提交,下个会话需用户实跑反馈手感/角度。specdocs/superpowers/specs/2026-06-26-2d-analysis-topdown-elevation.mdcommit 227ee8f)。分期 A→B→C

  • A已实现 build+439测试全绿未提交一场景两相机。切「二维分析」tab → 近俯视(下压12°≈78°俯角)+禁旋转(左键改平移、仅平移/缩放);按维度翻 actor SetVisibility(轨迹↔体/帘面/异常,不清空);切片 SetEnabled 显隐(不销毁);地形+底图常驻;切回三维还原相机快照。待用户实跑:①近俯视角度是否合适②切换是否瞬时③左键平移手感④切回三维视角还原是否自然。
    • 改动文件:CameraPreset.{hpp,cpp}(applyNearTop2D)、PickInteractorStyle.{hpp,cpp}(setLock2D)、SliceTool.{hpp,cpp}(setVisible)、InteractionManager.{hpp,cpp}(setMode2D)、VtkSceneView.{hpp,cpp}(setAnalysisMode2D+mapLineDs_+相机快照)、ColumnDrawer.{hpp,cpp}(analysisModeChanged 信号)、main.cpp(接信号)。
    • 已知小风险2D 取景 computeDataBounds 含隐藏的 3D 体包围盒(地形主导,影响小);切片 SetEnabled 显隐属 GUI 不可自测项。
  • B已实现 build+441测试全绿未提交待实跑:二维里选中足迹(单/Ctrl 多选)→ 竖向拖动只改高程 Z、锁 XY、顶部实时高程读数浮层Z 偏移按 dsId 持久(切走再回/全量重建保留)。手势:单击足迹=选中、Ctrl+单击=多选切换、点空白=取消+平移、(多)选后竖向拖动=整体改 Z。
    • 实现:VtkSceneViewpickMapLineAt/nudgeSelectedMapLinesZ/selectedMapLineZ/clearMapLineSelectionvtkCellPicker+PickFromList 只拾可见足迹、选中高亮黄加粗、mapLineZOffset_ 持久);PickInteractorStyle lock2D 下命中足迹→Z 拖动(onPick2D/onDrag2D/onDrag2DEnd+worldPerPixelZ 像素→世界Z)、否则平移;InteractionManager::pickStyle() 暴露样式;main.cpp 接回调 + 高程读数浮层(复用提示样式)。
    • 待用户实跑:①拾取灵敏度(tol 0.012)②拖动 Z 灵敏度/方向(上移=抬高)③多选拖动④读数是否合理(现为 actor 包围盒中心世界 Z含 placement+偏移,未除 VE)。
  • C下一步dd_raster 纳入 2D 过滤 + 按 ddCode 分派渲染 + 栅格地理配准贴地形。阻塞dd_raster 数据端点未确认(需后端给「像素 + 四至/投影」端点)。

1. 环境 / 命令 / 铁律(必读)

  • 构建:用 PowerShell 工具跑 cmd /c "D:\Git\lanbingtech\geopro\build.bat app"Claude 的 Bash 跑 build 会被环境劫持,用 PowerShell。测试 build.bat testctest439 用例)。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 e6c1259748644c8da0954d864bb82604base URL http://tenant.geomative.cn/pop-api;样例 projectId 1439735554211840。可用 curl 查接口。

2. 本会话已完成(提交清单,新→旧)

创建异常全链路(核心工作量)

  • 227ee8f 二维分析 specdoc
  • 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 返工(点交互/点渲染小球/截图/类型空态)。
  • 75c13273ed1ea758544ffc6756aa 截图相机方案A(已废)、异常类型接平台真实类型(listExceptionTypes 按形态)、点/线/面三态子菜单、样式接平台 legend(getExceptionTypeDetail)。
  • 截图最终方案:只从切片 2D 剖面图、按异常几何 buffer 裁剪captureAnomalyShotFromSliceGIS buffer+掩膜,点圆/线胶囊/面外扩多边形)。

其它

  • 56e4b3a 登录验证码容器白底。
  • 8563693 分段折叠向上收起stretch 动态:展开=1/折叠=0+尾弹簧)。
  • d6e52cb 三维分析分段面板视觉打磨chevron 段头/描边新增按钮/顶部留白)。
  • fb911a9 坐标轴面板硬编码色 token 化。
  • cdd7613 vtk-3d-openapi 文档对齐实测DsPage 行在 data.list、DsRow 全字段、装置不在 data/page
  • 2f6ec7d1742b7531ad7a4 装置筛选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}captureAnomalyShotFromSlicesrc/render/actors/AnomalyActor.cpp(点=球/线=折线/面=闭合多边形);src/app/main.cpponSliceContextMenuRequested ~509 起:菜单+绘制+对话框+保存接线QLabel 提示浮层)。
  • 样式来源:选中平台异常类型 → getExceptionTypeDetail 取 legendpolylineColor/Width/Shape, pointColor…→ 套到异常 lineColor/lineWidth/dashed。
  • 截图:只裁切片那张 2D 剖面图(InteractionManager::selectedSliceColorImage 现取 SliceTool::coloredResliceImage()=widget ColorMap 输出,与屏幕同源)。

仍卡在后端P3非客户端问题

  • 异常真保存 newException 卡:异常 remarkSourceId 须指向真实 dsObjectId三维体/切片),但真后端无任何登记三维体/切片为 dsObject 的端点(实测 voxel/generateslice/generate、通用 dsObject create 全无)。当前 saveAnomaly 是内存 mock。后端补登记端点后整链可接真。
  • 平台「点」类异常类型该项目为空(线/面有)→ 画点时类型下拉空属正常。

4. 二维分析改造——已确认的设计决策(与用户逐条敲定)

  1. 不分两个场景:一个 3D 地形场景(带高程)+ 底图贴地形,两栏只是相机不同。"二维分析只是 3D 的固定视角"。
  2. 二维相机:锁定近俯视(7580°非绝对正俯视),禁旋转,仅平移+缩放。(绝对正俯视看不出高程→留倾斜)
  3. 切 tab 显隐:翻另一方数据集 SetVisibility不显示,非清空)→ 性能零代价VTK 跳过不可见 actor、切换瞬时、只占内存。地形+底图常驻。绝不清空(重体素重建会卡)。
  4. 高程拖动(C1):二维里选中 2D 内容(单/多选)→ 竖向拖动只改高程 Z、锁 XY、实时读数。用途=分离叠在一起的 2D 层。
  5. 维度过滤2D = dd_trajectory_data+ C 期 dd_rasterdd_radar_2d/3d 是 3D不进 2D。已对齐 DD0623c1a824e)。
  6. 雷达客户反馈:只影响数据模型 + 3D 视图渲染(二维雷达=线、三维雷达=切面、带打标)+ 详情页校准——均属另立任务,不在本次 2D 改造。2D 只显示轨迹线、打标暂不做(与本设计一致)。

5. 关键代码锚点(二维分析改造用)

  • 切 2D 视图模式钩子:Column2DDataset::view2DModeChangedmain.cppsceneCtrl(搜 view2DModeChanged)。
  • 维度分类:src/app/DatasetDimension.cpp::dimOfcol2D 用);src/data/api/Api3dRepository.cpp + src/data/repo/LocalSample3dRepository.cpp::dimensionOf
  • 2D 内容注入:main.cpp ~502 col2D->setDatasets(splitByDimension(...).dim2D);勾选渲染 Column2DDataset::checkedDatasetsChangedloadMapLine/MapLineActor
  • 场景/相机/可见:VtkSceneViewactor 管理)、VtkSceneControllerInteractionManager(拾取/选中,新增 deselectSlice)。
  • 地形+底图:buildTerrain带高程VE 垂直夸张相关)、TileBasemap(天地图按经纬贴)。
  • 数据字典:D:\Projects\GEOPRO\DD0623.xlsx46 个 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)。
  • 真后端 APIdocs/apis/business_OpenAPI.json
  • 二维分析 specdocs/superpowers/specs/2026-06-26-2d-analysis-topdown-elevation.md