# Geopro 3.0 桌面客户端 — 当前状态与交接(M1 进行中) **更新**:2026-06-07 · **分支**:`feat/m1-core`(尚未合并 master) > 本文件是**会话交接的单一事实来源**。下次继续前先读本文 + `specs/2026-06-07-geopro-desktop-m1-design.md`(设计基线)。计划在 `plans/`。 --- ## ⚠️ 最新进展与诚实警示(经离屏 PNG 像素核对) - **教训**:此前多版"已验证"仅为"进程启动不崩"的冒烟,**从未看像素**,导致漏掉**剖面深度倒置**等错误、并夸大"2D 像地图""体素已移除"。**今后渲染必须用离屏 PNG 肉眼核对**(工具:`tests/spike/render_verify.cpp` → `render_verify.exe` 输出 `D:/dev/spike_data/verify_*.png`)。 - **视图渲染现状(不正确,待迭代)**: - `CurtainActor` 帘面经像素核对呈**扭曲近平躺飘带**,不像断面墙(测线 lat/lon 有抖动、深度 15m≪水平 62m;纵向需夸张、几何/取景要调)。深度方向已修(z=-depth)。 - **"二维=俯视帘面"模型不成立**:竖直帘面俯视只剩一条发丝线 → 俯视图基本空白。**真正的二维地图需独立的"测线线 actor"(MapLineActor)+ 底图**,不能靠帘面俯视。 - `GridContourActor` 平面剖面(数据详情#18)管线基本对(已改显式坐标 structuredGrid + 深度取负),但色阶线性偏蓝、取景偏小,需调。 - **结论**:二维地图与三维视图应是**不同的渲染内容**(地图=线/点/底图;3D=帘面/体素/地形),数据详情#18 那块基本可用。下次用 PNG 回路逐帧做正确。 --- ## 1. 现在能跑起来的东西(已验证) 桌面 app `geopro_desktop` 可运行: - **真实登录**:LoginWindow(用户名/密码/图形验证码/记住)→ `verifyCodeCheck` → RSA 加密密码 → `login2` → 真后端返回 `Geomative ` → 进工作台。**已真机登录成功。** - **工作台**:ADS 三栏 = 左对象树(项目→测区→ERT1→数据集) / 中视图 / 右属性。 - **中央视图**:点数据集 → 渲染 ERT 网格剖面(banded 等值面+等值线,按真实 colorBar 上色);「二维/三维」相机切换;「三维体素」= 两交叉剖面 IDW 插值的体绘制。 - 单元测试累计 ~25 个,全绿(core/data/net/render)。 ## 2. 各 Phase 完成度 | Phase | 内容 | 状态 | |---|---|---| | Phase 0 | 三 spike(构建/ADS+QVTK/banded contour) | ✅ 全过(spike-report) | | Phase 1 | core 纯逻辑:LocalFrame / 模型(Field+Anomaly) / ColorScale / IDW / CrsTransform | ✅ 5 任务全完成,TDD 绿 | | Phase 2 | data:解析器 + LocalSampleRepository + 对象树→渲染→属性 | ✅ 4 任务全完成 | | Phase 3 | 登录:RsaEncryptor / ApiClient / AuthService / LoginWindow + 启动接入 | ✅ 核心完成(net+UI+真实登录);**Credential(QtKeychain 记住免登录) 未做**(Task 2 跳过) | | Phase 4 | 三维渲染扩展 | 🔶 部分:Task1(render 层+2D/3D)✅、Task2(voxel+切片)✅(切片已暂移除);**Task3(散点#17+异常叠加)未做、Task4(DEM/GDAL 地形)未做** | ## 3. 构建约定(**机器本地**,重要) - 工具链:VS2026(v18.0,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 依赖(gdal/proj/openssl/eigen3/spdlog/fmt/nlohmann-json/gtest)走 vcpkg。 - **VTK 9.6.2 源码编**在 `external/vtk-install`(`VTK_DIR` 在 CMakePresets);ADS/QtKeychain 走 FetchContent。 - 统一 **Release**(`build/release`);Debug 全量会因无 Debug VTK 失败。 - **所有构建/测试经 `external/dev.bat`**(封装 vcvars+TEMP→D:+cmake/ninja+VCPKG_ROOT;**含绝对路径、已 .gitignore、仅本机有**)。**用 PowerShell 调** `& cmd /c "D:\Git\lanbingtech\geopro\external\dev.bat "`(Bash 下 `%*` 透传会坏)。 - C: 盘极小(~1GB)→ TEMP/源码/构建全在 D:。 - **app 构建前先** `taskkill /IM geopro_desktop.exe /F`(运行中会 LNK1104 锁 exe)。 - 运行前部署:`D:\Qt\6.11.1\msvc2022_64\bin\windeployqt.exe --release `(那条找不到 ads dll 的警告无害);VTK/vcpkg dll 由 POST_BUILD `TARGET_RUNTIME_DLLS` 拷贝。 - 样本 ASCII 拷贝在 `D:\dev\spike_data`(spike 用);app/repo 直接读真实中文路径 `docs\剖面网格数据的色阶数据2等文件\`。 ## 4. 关键决策与已核实事实 - **方案②-修订**(官方 MSVC Qt + 源码 VTK):原装 `D:\Qt\6.11.1\mingw_64` 是 MinGW 版,MSVC 不可链,已补装 MSVC kit。 - **登录**:基址 `http://tenant.geomative.cn/pop-api`;头 `geomativeauthorization: Geomative `;`getImageCode` **验证码答案明文回传** `data.code`;`verifyCodeCheck→login2` 靠**会话 cookie** 串联;login2 `checkCode` 传空;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,数据 lat/lon 是 114°E/香港);影像 tfw 是 EPSG:3857。**做底图/DEM 配准(Phase4 Task4)前必须向客户确认项目 CRS**。 - **voxel 可信度**:仅两条交叉剖面 → "十字片"(~16% 有约束),满体不可信;**可信体需 ≥3 非共线测线或 3D 网格**(数据依赖,需客户提供)。 - 网格 `v`/`z` 为 `[j=y][i=x]`,点序 i 最快;colorBar 网格色阶 alpha=0–255、LVL 色阶 alpha=0–1。 ## 5. 已知问题 / 待修正(**下次注意,避免弄错**) 1. **视图模式是 demo 脚手架,需重构**:当前「二维/三维/三维体素」三按钮把"内容"与"相机"混在一起。**正确模型**(spec §4 本意):单一 3D 场景;**显示什么由对象树勾选 + dd 类型决定**(剖面/体素/轨迹/异常可叠加);**2D/3D 仅是相机开关**作用于整个场景,不绑内容;体素只是数据集的一种 3D 表现,不应是独立按钮。 2. **登录页样式**待调(目前是功能版,非复刻 web 视觉)。 3. **2D 相机未锁旋转**:平面剖面下 2D/3D 视觉差别小;应让 2D 模式禁旋转(`vtkInteractorStyleImage`/自定义)以体现差异。 4. **dd_slice 切片**已从体素移除(稀疏体素切片多为空区);待做"沿数据面"的有意义切片。 5. **Credential(QtKeychain)** 未做 → "记住一个月免登录" 暂未持久化(每次需登录)。 6. **render 仍部分内联在 main.cpp**(VoxelActor 调用、相机切换逻辑);随重构(问题1)抽进 render/view 层。 ## 6. 下次从哪接 1. (建议先)**重构视图模型**(问题1)→ 对象树勾选驱动 + 单一 2D/3D 相机 + 2D 锁旋转。 2. Phase 4 Task 3:散点(#17)`ScatterActor` + 异常叠加 `AnomalyActor`(计划见 `plans/2026-06-07-m1-phase4-render.md`)。 3. Phase 4 Task 4:DEM/影像地形(先确认 CRS,加 vcpkg gdal,GDAL+PROJ 重投影)。 4. Phase 3 Task 2:Credential(QtKeychain)记住免登录。 5. 登录页样式复刻(可用 Playwright 抓 web 登录页样式;之前截图工具对登录页超时,可改抓 computed-style/DOM)。 ## 7. 文档与工具索引 - 设计基线:`specs/2026-06-07-geopro-desktop-m1-design.md` - 计划:`plans/2026-06-07-m1-phase0-spikes.md`(+ spike-report)、`...-phase1-core.md`、`...-phase2-data.md`、`...-phase3-login.md`、`...-phase4-render.md` - 环境:`../ENV_SETUP_Windows.md` - 离线验证脚本:`tools/validate_samples.py`(#17/#18 真值)、`tools/validate_voxel.py`(voxel 真值) - 数据格式:`specs` §6.1 + `docs/数据格式说明.docx`