6.9 KiB
6.9 KiB
Geopro 3.0 桌面客户端 — 当前状态与交接(M1 进行中)
更新:2026-06-07 · 分支:feat/m1-core(尚未合并 master)
本文件是会话交接的单一事实来源。下次继续前先读本文 +
specs/2026-06-07-geopro-desktop-m1-design.md(设计基线)。计划在plans/。
铁律教训:渲染正确性必须用离屏 PNG 肉眼核对,不能只看"进程启动不崩"。工具:
tests/spike/render_verify.cpp→render_verify.exe→D:/dev/spike_data/verify_*.png。本会话多次"声称成功"实为自欺,根因就是没看像素。
1. 现在能跑起来的东西(已离屏 PNG 核对 / 真机验证)
桌面 app geopro_desktop:
- 真实登录:LoginWindow(用户名/密码/图形验证码/记住)→
verifyCodeCheck→ RSA 加密密码 →login2→ token → 进工作台。真机登录成功;输入框样式已修(三态白底深字)。 - 工作台 ADS 三区 + 数据详情:
- 左 对象树:GS→TM→DS,复选框勾选 → 控制中央显示哪些测线。
- 中央 二维地图 / 三维视图(两个真内容,非相机切换):
- 二维地图 =
MapLineActor:测线lat/lon轨迹红线俯视(浅底),像地图。 - 三维视图 =
CurtainActor:沿测线的竖直断面墙(分段色带,z 纵向夸张×3,沿弯曲测线弯)。
- 二维地图 =
- 下方 数据详情:单击数据集 →
GridContourActor平面反演剖面(#18,colorBar 真实非均匀分段值上色,纵向夸张×1.5)。 - 右 属性:名称/网格 nx×ny/vmin·vmax。
- 单元测试累计 ~28 个全绿(core/data/net/render);离屏
verify_section/map/curtain_3d.png均核对正确。
2. 各 Phase 完成度
| Phase | 内容 | 状态 |
|---|---|---|
| P0 | 三 spike | ✅ |
| P1 | core(LocalFrame/模型/ColorScale/IDW/CrsTransform/GeoLocalFrame) | ✅ |
| P2 | data(解析器/LocalSampleRepository)+ 对象树 | ✅ |
| P3 | 登录(RsaEncryptor/ApiClient/AuthService/LoginWindow) | ✅(Credential 记住免登录未做) |
| P4 | 渲染:render 层 + 二维地图(线)+ 三维视图(帘面)+ 数据详情(#18) | 🔶 核心三视图已对;散点#17 / 异常叠加 / DEM地形 / dd_voxel回归 / 底图瓦片 未做 |
3. 构建约定(机器本地)
- VS2026(MSVC 14.51)+ 官方 MSVC Qt 6.11.1(
D:\Qt\6.11.1\msvc2022_64)+ vcpkg(d:\dev\vcpkg)。 - 方案②-修订:Qt/VTK/ADS/QtKeychain 对接官方 Qt(不走 vcpkg);非 Qt 依赖走 vcpkg。VTK 9.6.2 源码编在
external/vtk-install。统一 Release。 - 构建/测试经
& cmd /c "D:\Git\lanbingtech\geopro\external\dev.bat <cmd>"(PowerShell 调,Bash 下参数透传坏)。C: 极小→TEMP/构建全在 D:。 - app 构建前先
taskkill /IM geopro_desktop.exe /F(运行中 LNK1104 锁 exe)。 - 部署:
D:\Qt\6.11.1\msvc2022_64\bin\windeployqt.exe --release <exe>(找不到 ads dll 的警告无害);VTK/vcpkg dll 由 POST_BUILDTARGET_RUNTIME_DLLS拷。 - 离屏渲染验证:
render_verify需 PATH 加external\vtk-install\bin+build\release\vcpkg_installed\x64-windows\bin再运行。 - 改源码用 Write 工具,勿用 PowerShell
Set-Content -Encoding UTF8(会把中文注释弄乱、断构建)。
4. 关键决策与已核实事实
- 登录:基址
http://tenant.geomative.cn/pop-api;头geomativeauthorization: Geomative <token>;getImageCode验证码答案明文data.code;verifyCodeCheck→login2靠会话 cookie 串联;login2checkCode空;token=data.accessToken。 - RSA 公钥已取(Playwright route 注入 setPublicKey hook + 缓存绕过 + 真登录捕获),
resources/rsa_public_key.pem(RSA-2048,PKCS#1 v1.5)。 - CRS ⚠️:剖面
projectX/Y真实 CRS 不是 EPSG:32649(实测 111°E vs 数据 114°E/香港);影像 tfw 是 EPSG:3857。做 DEM/底图配准前必须向客户确认项目 CRS。 - 坐标统一:帘面/地图/数据详情已统一用 lat/lon→GeoLocalFrame(等距圆柱)局部米;但 dd_voxel 输入(散点)只有 projX/projY,与 lat/lon 无法配准(CRS 未确认)→ 体素暂搁置(VoxelActor 代码保留,未接 UI)。
- 网格
v/z为[j=y][i=x],点序 i 最快;深度y越大越深→渲染时 z 取负;colorBar 网格色阶 alpha=0–255、LVL 色阶 alpha=0–1;等值线级用 colorBar 真实分段值(均匀分级会一片蓝)。
5. 正确的视图模型(已实现,P4 续做务必照此,勿再走偏)
对齐原型 + 物探用户工作流:
- 二维地图 与 三维视图 是两种不同内容(地图=测线线/点/底图;3D=断面墙/体素/地形),不是同一物体换相机。
- 数据详情(下方)才是"分析单条数据集"的专业图(ERT=#18 平面反演剖面)。
- 体素、异常体是 3D 视图里的内容/派生产物,不是对象树里硬塞的兄弟节点。
- 渲染表现由 dd 类型决定(dd_section→帘面/剖面;dd_voxel→体绘制;轨迹→点;异常→线/面)。
- 2D 相机可考虑锁旋转(只平移缩放)以区别 3D。
6. 已知问题 / 待办(P4 下次会话)
- 散点 #17:
ScatterActor(剖面原数据 2597 点彩色散点),可作数据详情的"原数据"视图。 - 异常叠加:
AnomalyActor(markType 点/线/面),叠加在剖面/帘面上(异常数据已能解析)。 - DEM/影像地形:加 vcpkg
gdal;GDAL 读 dem.tif/image.tif;影像 EPSG:3857 必须 PROJ 重投影到世界系;vtkWarpScalar地形面 + 纹理。 - dd_voxel 回归:需先确认项目 CRS,使散点 projX/Y 能转到 lat/lon 世界系,与帘面配准;VoxelActor 已就绪。
- 底图瓦片(二维地图,天地图/Mapbox):M1.5。
- Credential(QtKeychain):记住一个月免登录持久化(P3 Task2 未做)。
- 多测线:当前样本仅 1 条 dd_section(grid1);多条共存机制已就绪,加数据即叠加。
- 取景微调(数据详情/帘面的相机余量);纵向夸张倍数(剖面1.5/帘面3)可做成可调。
- render 仍部分内联在 main.cpp;可逐步抽到 view/controller。
7. 渲染验证手段(务必用)
cmd /c "...\external\dev.bat cmake --build build/release --target render_verify"
# 运行(PATH 加 vtk-install\bin 与 vcpkg bin)→ 看 D:/dev/spike_data/verify_*.png
新增/改动渲染后,先用此离屏 PNG 核对方向/颜色/几何,再接进 app。app 是交互窗口,无法离屏验证,接入后需人工登录肉眼确认。
8. 文档与工具索引
- 设计基线:
specs/2026-06-07-geopro-desktop-m1-design.md(§4/§5 已含正确视图模型注记) - 计划:
plans/下 phase0-4 +2026-06-07-m1-view-redesign.md(正确视图模型)+ spike-report - 环境:
../ENV_SETUP_Windows.md - 验证脚本:
tools/validate_samples.py(#17/#18 真值)、tools/validate_voxel.py(voxel)、tests/spike/render_verify.cpp(app 渲染积木离屏核对) - 渲染积木(render 层):
MapLineActor(测线线)、CurtainActor(断面墙)、GridContourActor(#18 平面)、VoxelActor(体,未接 UI)、ColorLutBuilder、CameraPreset、Scene;core::GeoLocalFrame(经纬→局部米)。