geopro/docs/superpowers/STATUS.md

102 lines
12 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(测线),复选框勾选测线 → 控制中央显示哪些测线的 dd_section。
- **左下 数据真实显示栏**(对齐原型):单击测线 → 列其采集批次(数据集,tab 数据/文件);单击采集批次 → 数据详情+异常列表+属性。启动自动选首测线+首数据集。
- **中央 二维地图 / 三维视图**(两个**真内容**,非相机切换):
- 二维地图 = `MapLineActor`:测线 `lat/lon` 轨迹**红线**俯视(浅底),像地图。
- 三维视图 = `CurtainActor`:沿测线的**竖直断面墙**(分段色带,z 纵向夸张×3,沿弯曲测线弯)。中央工具条**仅**「二维地图/三维视图」。**3D 左上「视图详情」浮层**(对齐原型,仅 3D 显示):图层勾选 **帘面 / 体素**(体素=`buildVoxelFromScatters` 两交叉测线散点经 EPSG:4547 配准 IDW,与帘面同纵向夸张;PROJ 不可用则禁用)。
- **下方 数据详情**:工具条「原数据/网格数据」切换 +「显示异常/显示电极/显示等值线」开关(对齐原型)。单击数据集 → 网格数据=`GridContourActor` 平面剖面(#18,colorBar 真实非均匀分段值上色,纵向夸张×1.5);原数据=`ScatterActor` 彩色方块散点(#17);显示异常=`AnomalyActor` dashed 折线叠加;显示电极=`ElectrodeActor` 顶边 ▼ 标记;显示等值线=#18 黑色等值线显隐(同纵向夸张对齐)。
- **右上 异常列表**(对齐原型):单击数据集→列该数据集异常(颜色块+名称(类型)+派生「位置/深/尺寸」),勾选框显隐,与数据详情异常叠加联动(取消勾选→该异常虚线隐藏)。
- **右下 属性**:名称/网格 nx×ny/vmin·vmax/异常数。
- 单元测试累计 **38 个全绿**(core/data/net/render;含 Scatter 2 + Anomaly 4 + VoxelRegister 1 + Electrode 2、修复了陈旧的 Curtain mapper 类型断言);离屏 `verify_section/map/curtain_3d/scatter/section_anomaly(含电极▼)/voxel_top/voxel_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/异常) | 🔶 **三视图 + 散点#17 + 异常叠加 已对; dd_voxel 引擎已验证(UI 未接,待 3D 图层控制)**;**DEM地形(需加gdal) / 底图瓦片 / dd_slice / 布局对齐原型(左下数据列表/右上异常列表/电极/3D图层浮层) 未做** |
## 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 ✅ 已实证确定(2026-06-08)**:剖面 `projectX/Y` 的真实 CRS = **EPSG:4547「CGCS2000 / 3-degree Gauss-Kruger CM 114E」**(=`+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80`)。
- **如何确定**:同一条测线既有网格电极 `lat/lon`(EPSG:4326)又有散点 `projectX/Y`;用 pyproj 把 lat/lon→EPSG:4547 得 `dX=+0.20m, dY=+0.30m`(亚米级),反向→经纬 `dlon/dlat≈3e-6°(~0.3m)`。Krassovsky(北京54)椭球差 44m 排除→**椭球=GRS80/CGCS2000(与 WGS84 现今差<1m,M1 可视化无影响)**。
- 旧结论"EPSG:32649 解出 111°E"是因 32649 中央经线=111°E;改用 CM=114°E 即完美吻合
- **影像 `image.tfw` 仍是 EPSG:3857**(与项目系不同,DEM/底图须 PROJ 重投影);`dem.tif` 自身 CRS GDAL 读时核对
- **影响**:DEM/影像 **dd_voxel 回归 不再被 CRS 阻塞**——散点 projX/Y 可经 EPSG:45474326→`GeoLocalFrame` 与帘面/地图配准
- **坐标统一**:帘面/地图/数据详情已统一用 **lat/lon→GeoLocalFrame(等距圆柱)局部米**;dd_voxel 输入(散点 projX/projY)现可经 **EPSG:4547→lat/lon→GeoLocalFrame** 配准(CRS 已定);VoxelActor 代码就绪,待接入
- 网格 `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 点/线/面)~~ **已完成**(2026-06-08,叠加在数据详情 #18/#17 ,「显示异常开关默认开;离屏 `verify_section_anomaly.png` 折线位置吻合 ref_18;样本 3 异常均 markType=2 dashed;app 待人工登录复核)。****:dashed 点画在 VTK OpenGL2 下偏弱(几乎实线),几何/颜色/位置正确,纯观感项可后续调
3. **DEM/影像地形**:加 vcpkg `gdal`;GDAL dem.tif/image.tif;**影像 EPSG:3857 必须 PROJ 重投影到世界系**;`vtkWarpScalar` 地形面 + 纹理
4. **dd_voxel 回归**: **已完成**(2026-06-08,CRS 已定 EPSG:4547)。`render::buildVoxelFromScatters`:散点 projX/Y45474326GeoLocalFrame 配准 + IDW(maxDist 裁剪)→ `buildVoxel`;离屏 `verify_voxel_top.png` 两臂支撑吻合 ref voxel_hslice、`verify_voxel_3d.png` profile1 片贴合帘面;+1 单测(VoxelRegister, PROJ_DATA)。**UI 已接入**(增量3):3D视图详情浮层体素图层勾选驱动;main() 自动设 PROJ_DATA(部署须随包附带 proj 数据);PROJ 不可用则该层禁用。****:仅 2 交叉线薄十字片(15.9% 充填,半透明偏淡),可信满体需3线(设计 §1014)。**dd_slice 交互切片未做**(buildVoxel 已暴露 image reslice widget)。
5. **底图瓦片**(二维地图,天地图/Mapbox):M1.5
6. **Credential(QtKeychain)**:记住一个月免登录持久化(P3 Task2 未做)。
7. 多测线:当前样本仅 1 dd_section(grid1);多条共存机制已就绪,加数据即叠加
8. 取景微调(数据详情/帘面的相机余量);纵向夸张倍数(剖面1.5/帘面3)可做成可调
9. render 仍部分内联在 main.cpp;可逐步抽到 view/controller
10. **布局对齐原型**(权威参考 `http://prototype.geomative.cn/`;截图存 `.playwright-mcp/`)。**计划见 `plans/2026-06-08-m1-prototype-layout.md`(六面板 + view/ 抽取,增量序列)**。进度:
- **增量1 右上「异常列表」**(2026-06-08,`panels/AnomalyListPanel`,与数据详情显隐联动;待人工复核)。
- **增量2 左下「数据列表」+ 对象树到 TM 层**(2026-06-08,`panels/DatasetListPanel`; GSTM 复选驱动中央, DS 移出树入数据列表 tab 数据/文件, DS 单击详情+异常+属性, 启动自动选首测线/首数据集;待人工复核)。
- **增量3 3D「视图详情」图层浮层**(2026-06-08,QFrame 浮于 QVTK 左上, 3D 显示;帘面/体素图层勾选;体素经此正经接入=之前移除的工具条开关的正确归宿;main() PROJ_DATA;待人工复核浮层渲染+体素显隐)。
- 🔶 **增量4 电极标记 + 工具条**(2026-06-08,`ElectrodeActor` 顶边 PNG 核对吻合; +「显示电极/显示等值线开关;待人工复核)。****:数值标签色阶配置/滤波处理(M1.5/进阶)。
- 渲染积木累计含 `ElectrodeActor`(顶边 ▼)。底图影像=DEM/底图任务(需 GDAL)。
- 架构:新面板抽到 `src/app/panels/`(暂随 app 编译, login/),控制 main.cpp 体量;后续可升 `src/view/`
## 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 核对方向/颜色/几何,再接进 appapp 是交互窗口,无法离屏验证,接入后需人工登录肉眼确认
## 8. 文档与工具索引
- 设计基线:`specs/2026-06-07-geopro-desktop-m1-design.md`(§45 已含正确视图模型注记)
- 计划:`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 散点)、`AnomalyActor`(异常 /线/)、`VoxelActor`(`buildVoxel` 体绘制)、`buildVoxelFromScatters`(散点CRS配准IDW体素,VoxelFromScatters.hpp)、`ColorLutBuilder`、`CameraPreset`、`Scene`;`core::GeoLocalFrame`(经纬局部米)、`core::CrsTransform`(PROJ,EPSG:45474326)。
- 散点 #17 专属色阶经 `LocalSampleRepository::loadScatterColorScale`(剖面原数据自带色阶,范围/分段与网格色阶不同)。