geopro/docs/superpowers/STATUS.md

89 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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);原数据=`ScatterActor` 彩色方块散点(#17,x=距离/y=深度取负,用散点自带色阶)。
- **右 属性**:名称/网格 nx×ny/vmin·vmax。
- 单元测试累计 **31 个全绿**(core/data/net/render;含 Scatter 2 个、修复了陈旧的 Curtain mapper 类型断言);离屏 `verify_section/map/curtain_3d/scatter.png` 均核对正确(scatter 与 Python 真值 ref_17 吻合)。
## 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) | 🔶 **核心三视图 + 散点#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_BUILD `TARGET_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** 串联;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 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=0255、LVL 色阶 alpha=01;等值线级用 **colorBar 真实分段值**(均匀分级会一片蓝)。
## 5. 正确的视图模型(已实现,**P4 续做务必照此,勿再走偏**
对齐原型 + 物探用户工作流:
- **二维地图** 与 **三维视图** 是**两种不同内容**(地图=测线线/点/底图;3D=断面墙/体素/地形),**不是同一物体换相机**。
- **数据详情**(下方)才是"分析单条数据集"的专业图(ERT=#18 平面反演剖面)。
- 体素、异常体是 3D 视图里的内容/派生产物,**不是对象树里硬塞的兄弟节点**。
- 渲染表现由 **dd 类型**决定(dd_section→帘面/剖面;dd_voxel→体绘制;轨迹→点;异常→线/面)。
- **2D 相机可考虑锁旋转**(只平移缩放)以区别 3D。
## 6. 已知问题 / 待办P4 下次会话)
1. ~~**散点 #17**:`ScatterActor`(剖面原数据 2597 点彩色散点),数据详情"原数据"视图~~**已完成**(2026-06-08,离屏 PNG 核对吻合 Python 真值,接入数据详情「反演剖面/原数据」切换;app 待人工登录肉眼复核交互)。
2. **异常叠加**:`AnomalyActor`(markType 点/线/面),叠加在剖面/帘面上(异常数据已能解析)。**下一项**。
3. **DEM/影像地形**:加 vcpkg `gdal`;GDAL 读 dem.tif/image.tif;**影像 EPSG:3857 必须 PROJ 重投影到世界系**;`vtkWarpScalar` 地形面 + 纹理。
4. **dd_voxel 回归**:需先确认项目 CRS,使散点 projX/Y 能转到 lat/lon 世界系,与帘面配准;VoxelActor 已就绪。
5. **底图瓦片**(二维地图,天地图/Mapbox):M1.5。
6. **Credential(QtKeychain)**:记住一个月免登录持久化(P3 Task2 未做)。
7. 多测线:当前样本仅 1 条 dd_section(grid1);多条共存机制已就绪,加数据即叠加。
8. 取景微调(数据详情/帘面的相机余量);纵向夸张倍数(剖面1.5/帘面3)可做成可调。
9. 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 平面)、`ScatterActor`(#17 散点)、`VoxelActor`(体,未接 UI)、`ColorLutBuilder`、`CameraPreset`、`Scene`;`core::GeoLocalFrame`(经纬→局部米)。
- 散点 #17 专属色阶经 `LocalSampleRepository::loadScatterColorScale`(剖面原数据自带色阶,范围/分段与网格色阶不同)。