Commit Graph

485 Commits

Author SHA1 Message Date
gaozheng 839e5c3487 feat(nav): 数据/文件页签接 data-page/file-page(按TM+classifyType拉取,文件页签展示名/大小) 2026-06-09 14:54:32 +08:00
gaozheng 5b18dc44ae style(app): 数据集列表去隔行变色,改为细分割线+hover/选中反馈 2026-06-09 14:31:25 +08:00
gaozheng 60d46cf1db fix(nav): 实测整改——项目用my/profile/queryProject、切换空间重注入token、结构按type建树(过滤DS)、下拉互斥、去重复项目根 2026-06-09 13:58:59 +08:00
gaozheng 1f1cf5cd3c docs(spec): 对齐实现(buildStructTree/StructTreeNode + structureLoaded 扁平节点 + 防重入/URL编码) 2026-06-09 12:17:11 +08:00
gaozheng 601706d120 fix: 代码评审整改(控制器防重入 + URL 百分号编码 + 测试/注释完善) 2026-06-09 12:15:04 +08:00
gaozheng 405fb2ae4f feat(app): 工作台接入真实导航(空间/项目/对象树/DS),中央渲染占位 2026-06-09 12:01:30 +08:00
gaozheng 6241eb3a7e feat(app): CentralScene 数据驱动 helper(解耦中央三维编排,下一轮接真实DS复用) 2026-06-09 11:54:48 +08:00
gaozheng c78022a6b6 feat(app): ObjectTreePanel 被动对象树(项目→GS→TM) 2026-06-09 11:52:31 +08:00
gaozheng 6e78e50b0b feat(app): TopBar 升级为数据驱动类(工作空间/项目切换信号) 2026-06-09 11:48:40 +08:00
gaozheng f4ca9bcd38 feat(controller): WorkbenchNavController 导航状态机 2026-06-09 11:44:31 +08:00
gaozheng fa4bbf08b3 feat(data): ApiProjectRepository 实现 5 个导航接口 2026-06-09 11:40:40 +08:00
gaozheng 695aa8c310 fix(data): buildStructTree 用 visited 集防环(不可信结构数据避免无限递归) 2026-06-09 11:38:02 +08:00
gaozheng 2bc22a55d6 feat(data): buildStructTree 扁平→树(叶子=TM,含直挂/孤儿/空表) 2026-06-09 11:33:14 +08:00
gaozheng a32bd763da feat(data): NavDto parseProjects/parseStructNodes/parseDatasets 2026-06-09 11:16:36 +08:00
gaozheng bf67c01ac9 feat(data): NavDto 脚手架 + parseWorkspaces(含测试接入) 2026-06-09 11:00:39 +08:00
gaozheng fc458ec702 feat(data): 导航模型(Workspace/ProjectSummary/StructNode) + IProjectRepository 接口 2026-06-09 10:56:51 +08:00
gaozheng 1fd8bb4d63 docs: 保留并解耦中央三维编排(CentralScene helper) + 补充下一轮对接真实DS步骤 2026-06-09 10:49:31 +08:00
gaozheng 46358f2964 docs: 接入真实导航 实现计划(plan) 2026-06-09 10:28:16 +08:00
gaozheng 3992a49c8f docs: 接入真实导航(工作空间/项目/对象树) 设计文档 2026-06-09 10:18:34 +08:00
gaozheng 3be4cdbdde docs: 接入真实导航(工作空间/项目/对象树) 设计文档 2026-06-09 10:13:46 +08:00
gaozheng 462cfaac9d feat(m1): dock 布局持久化 + 记住登录(QtKeychain) + 纵向夸张统一
- 3 dock 布局/窗口几何 QSettings 持久化(退出保存、启动恢复;ADS 按标题作键)
- 4 记住登录:FetchContent QtKeychain v0.14.0(Qt6,静态) + Credential 同步存取;登录窗加「记住登录(30天)」复选框;启动有有效 token 则免登录
- 5 Z 基准统一:kCurtainZScale(3)/kDetailYScale(1.5) 合并为单一 kVerticalExaggeration(2.0),帘面/体素/切片/剖面/地形一致
2026-06-09 09:42:27 +08:00
gaozheng 5633427335 chore: 排除 ScreenShot/.claude 并移除冗余参考文档
- .gitignore 增加 ScreenShot/、.claude/
- 从版本库移除:ScreenShot 截图、Geopro3.0 菜单.xlsx、banner.png、数据格式说明.docx、需求调研-20260608.md
- 保留 docs/剖面网格数据的色阶数据2等文件/(app 运行时示例数据,待真实实现后再移除)
2026-06-08 21:33:21 +08:00
gaozheng 72761fc05f feat(ui): 工作台与登录 UI/UX 整体重构,对齐 Web 原型
- 登录窗品牌化重设计(头部横幅+纵向字段),移除默认账号密码
- 全局浅色主题精致化:基准字体 10pt、去线框留白、下划线标签页、扁平分隔条、High-DPI 直通、压平 Fusion 3D 立体描边
- 顶部:菜单栏(视图/项目管理/业务工具/设备 多级菜单)+ 工具条(工作空间切换/项目选择/帮助·通知·设置/用户)
- ADS 子窗口去除关闭·浮动·拖动等操作并隐藏自带标题栏;改用自绘面板表头(图标+标题+操作按钮)
- 右侧异常列表/对象属性合并为 Tab 面板,属性独立面板;数据集动态标题+数量徽标
- 矢量图标体系(Lucide SVG via QSvgRenderer);状态栏常驻坐标系/世界系原点
- 对象树修复:单标题、保留折叠箭头、选中高亮不覆盖缩进列
2026-06-08 21:06:59 +08:00
gaozheng e27a93073a chore(render): 撤销切片性能诊断埋点 + 记录实测结论
- 实测(帧间隙时间戳)定位: 拖切片本身流畅(GPU/RTX3060, 每帧~7-15ms); 唯一卡点是首次开
  体素/切片的 GPU 着色器编译+体上传(一次性 ~1.2-1.7s), 属固有成本, M1 可接受。
- 撤销临时诊断埋点(帧时间戳); 体绘制保持全程统一全质量(Auto/InteractiveAdjust=0)。
- STATUS §6 记录性能排查结论与教训(勿臆测根因, CPU回退/磁盘flush 均被实测否定)。
- 全 40 测试绿; app 构建干净。
2026-06-08 12:25:10 +08:00
gaozheng a0fcc4cc62 fix(render): 切片偶尔停顿根因修复 — 体绘制改全程统一全质量 + 撤销诊断埋点
- 实测(render_verify + 帧耗时埋点)定位: 体绘制走 GPU(RTX3060), 每帧~7ms(669帧全<21ms),
  渲染根本不慢; 前判"CPU回退"错误。"偶尔停顿"是帧间间隙, 非慢帧。
- 根因: ①诊断埋点每帧 flush 磁盘(偶发延迟) ②vtkSmartVolumeMapper AutoAdjust 的"停手补高清"突跳。
- 修: 撤销帧耗时埋点(及无效的 DesiredUpdateRate 改动); VoxelActor 关交互降采样(Auto/Interactive
  AdjustSampleDistances=0)→全程统一全质量(GPU 足够), 消除停手补帧的突跳。
- 全 40 测试绿; app 构建干净。
2026-06-08 12:12:38 +08:00
gaozheng 6c60f5a83d perf(render): 拖切片不卡 — 交互时体绘制自动降采样
- 反馈: 开体素时拖切片卡(每帧全质量重渲 GPU 体绘制跟不上拖动帧率)。
- 修: 切片交互时 interactor DesiredUpdateRate=20fps + VoxelActor mapper
  Auto/InteractiveAdjustSampleDistances → 拖动时体绘制自动降采样提帧率, 松手按 StillUpdateRate 恢复全质量。
- 全 40 测试绿; app 构建干净。
2026-06-08 11:49:53 +08:00
gaozheng 65283492fb fix(render): 切片与体素纵向一致 — 把纵向夸张烤进体素 image(切片穿过体素而非在旁)
- 反馈: 切片显示在 3D 图形旁边/比例不符。根因: 切片(vtkImagePlaneWidget)作用于体素 image 原始
  米坐标(1x), 而体素体绘制/帘面是 3x(actor SetScale) → 纵向比例不一致, 切片错位。
- 修: buildVoxelFromScatters 加 zDisplayScale, 把纵向夸张烤进输出 image 的 z 原点/间距
  (IDW 采样仍用真实 cellZ); app 传 kCurtainZScale 并去掉 volume 的 actor SetScale。
  现体绘制/切片/帘面同在 3x 坐标 → 切片穿过体素、与帘面纵向一致。
- 全 40 测试绿; app 构建干净。(render_verify 仍用默认 1x 在原始坐标核对配准, 不受影响。)
2026-06-08 11:46:39 +08:00
gaozheng f57291a127 fix(render): 地形高程按测线地表基准 rebase + 切片改左键拖动移动切面
- 反馈1 地形浮空/偏位: 诊断确认 DEM 是 WGS84 经纬度(26x10, 覆盖~700x330m), 测线仅~70m 在其南缘
  (横向"偏"实为地形覆盖远大于测线, 地理正确); 纵向浮空因地形用绝对高程(16-95m) vs 帘面深度。
  → buildTerrain 加 zOffset(从高程减基准), app 传测线地表高程中位数 refElev, 使地形落在测线附近。
  完整 Z 基准统一(与帘面/体素夸张一致)仍属 spec M-3 待办。
- 反馈2 切片交互: vtkImagePlaneWidget 默认左键=取值光标(十字), 不直观; 改 左键=移动切面
  (VTK_SLICE_MOTION_ACTION)、中键=取值。现在左键拖动直接滑动切面。
- 全 40 测试绿; app 构建干净。
2026-06-08 11:38:14 +08:00
gaozheng 7007619bf2 feat(render): DEM 地形+影像贴图(spec ④) + dd_slice 交互切片
- TerrainActor(buildTerrain): GDAL 读 dem.tif(高程)+ image.tif(影像); DEM CRS→4326→
  GeoLocalFrame 配准成 vtkStructuredGrid warp 面; 影像经 GDAL 读像素(行翻转正立)作纹理,
  按经纬→EPSG:3857→像素 算纹理坐标贴图(影像/DEM 异源 CRS 重投影对位)。影像读失败→按高程上色。
  离屏 verify_terrain_3d.png 核对: 卫星影像正立贴微起伏面、配准对位。+2 单测。
- 注: 影像须 GDAL 读(vtkTIFFReader 对此压缩 TIFF 报错"reading the row")。
- dd_slice: 3D「视图详情」加「切片」图层 = vtkImagePlaneWidget 在体素 image 拖切面(spec M1-b)。
- 接入 app: 3D 浮层五图层(帘面/体素/切片/地形); repo.demPath()/imagePath(); PROJ 不可用则禁用。
- vcpkg 加 gdal(连带 hdf5/netcdf/geos 等, 已缓存); 全 40 测试绿; app 构建干净。
- 注: 地形/切片 Z 基准与帘面/体素纵向夸张未统一(spec M-3 待办); dem 低分辨率→起伏细微。
2026-06-08 11:25:45 +08:00
gaozheng 8466fe3a5a feat(view): 剖面电极标记 ▼ + 显示电极/显示等值线 开关(对齐原型, 增量4)
- ElectrodeActor(buildElectrodes): 剖面顶边(最浅深度)各 x 列画朝下三角 ▼; 坐标与 #18 一致。
  离屏 verify_section_anomaly.png 顶边电极带核对吻合; +2 单测(三角数/顶点位置/空安全)。
- 数据详情工具条加「显示电极」(默认开,网格数据模式)+「显示等值线」(默认开, gate #18 黑色等值线)。
- 全 38 测试绿; app 构建干净; 待人工登录复核。
- 增量4 剩: 数值标签 / 色阶配置 / 滤波处理(进阶/M1.5)。
2026-06-08 09:52:18 +08:00
gaozheng a2efef8ada feat(view): 3D「视图详情」图层浮层 + 体素正经接入(对齐原型, 增量3)
- 中央 QVTK 左上浮层(QFrame, 仅三维显示, 工具条下方, raise 置顶): 图层勾选「帘面 / 体素」。
- rebuildCentral: 帘面层 gate buildCurtain; 体素层 → buildVoxelFromScatters 体绘制(同纵向夸张)。
  showCurtain(默认开)/showVoxel(默认关)/crs 共享态; 切视图自动显隐浮层。
- 体素经此正经接入(取代 42a7ed1 移除的困惑工具条开关, 这才是它对齐原型的归宿)。
- main() 自动定位 PROJ_DATA(候选路径; 部署须随包附带 proj 数据); PROJ 不可用→体素勾选禁用+提示。
- app 构建干净; 待人工登录复核(浮层渲染于 QVTK 之上 + 勾体素出十字片)。
2026-06-08 09:42:09 +08:00
gaozheng 50c4de4019 feat(view): 左下数据列表 + 对象树收到测线层(对齐原型, 增量2)
- 对象树 GS→TM(测线复选, UserRole+2=tmId); DS(采集批次)移出树, 入左下「数据真实显示栏」
  (QTabWidget 数据/文件; panels/DatasetListPanel)。findTm 按 tmId 查 TM。
- 中央 rebuildCentral 改遍历勾选的测线 → 渲染其 dd_section(可多条共存)。
- 树单击测线→填数据列表; 数据列表单击采集批次→loadDataset(数据详情+异常列表+属性,抽共享 lambda)。
- 启动自动选首个含 dd_section 的测线 + 首数据集(对齐原型默认载入态)。
- structure 取一次共享; app 构建干净; 待人工登录复核。
2026-06-08 09:33:06 +08:00
gaozheng 127e9a0b21 feat(view): 右上异常列表面板 + 与数据详情异常显隐联动(对齐原型, 增量1)
- panels/AnomalyListPanel(populateAnomalyList): 颜色块 + 名称(类型) + 由 location.coordinate
  派生「位置 Xm·深 Ym·尺寸 Zm」; 可勾选(默认显示), UserRole 存异常下标。
- 右侧 dock 拆上下: 右上「异常列表」/ 右下「属性」(补"异常 N 个")。
- 单击数据集→重填列表(QSignalBlocker 防回灌)+ 清空隐藏集; 勾选变化→更新 hiddenAnoms
  → rebuildDetail 逐异常按下标过滤显隐(取消勾选→该异常虚线隐藏)。
- 计划落地 plans/2026-06-08-m1-prototype-layout.md(六面板对齐原型, 增量序列); STATUS §6.10 更新。
- app 构建干净; 待人工登录复核交互。
2026-06-08 09:24:11 +08:00
gaozheng 42a7ed16d4 fix(app): 移除令人困惑的「体素」工具条开关(与二维/三维平级且不在原型)
- dd_voxel 体素引擎(buildVoxelFromScatters)保留:已 PNG 核对 + 单测验证,是合格积木。
- 但把它做成中央工具条开关是设计失误:与"二维/三维"互斥视图平级却是复选、且仅 3D 生效,
  令人困惑(重蹈上会话"2维/3维/体素混淆"覆辙),且原型中央只有「二维地图|三维视图」。
- 中央恢复干净两视图(对齐原型)。体素待做 3D 图层控制(对齐原型「视图详情」浮层)再正经接入。
- 同步移除 app 内 CrsTransform/PROJ_DATA 等仅为该开关的接线; render 层引擎与测试不动。
2026-06-08 09:13:25 +08:00
gaozheng 9b77d07359 feat(render): dd_voxel 回归 — 散点经 EPSG:4547 配准到世界系成体素 + 3D 接入
- buildVoxelFromScatters(VoxelFromScatters): 两交叉测线散点(projX/Y) 经
  CrsTransform(EPSG:4547→4326) → GeoLocalFrame 局部米 + 深度(-ylist) 配准到帘面/地图
  同世界系, IDW(maxDist 裁剪 NaN 留空) → buildVoxel; 暴露 image 供后续 dd_slice。
- 离屏核对: verify_voxel_top.png 两臂支撑吻合 Python 真值 voxel_hslice;
  verify_voxel_3d.png profile1 片贴合帘面(同系配准正确)。
- 接入 app: 中央工具条「体素」开关(仅 3D 有效, 默认关), 与帘面同纵向夸张叠加。
  main() 按候选路径自动设 PROJ_DATA(部署须随包附带 proj 数据)。
- 新增 VoxelRegister 单测(需 PROJ_DATA, tests CMake 已注入); 全 36 测试绿。
- 注: 仅 2 交叉线→薄十字片(15.9% 充填), 体绘制半透明偏淡(低不透明度固有);
  可信满体需≥3线(设计 §10/§14)。dd_slice 交互切片未做。
2026-06-08 09:05:27 +08:00
gaozheng 2d39a3af26 docs(crs): 实证确定项目 CRS = EPSG:4547 (CGCS2000 3度带 GK CM 114E)
- 方法: 同一测线既有网格电极 lat/lon(EPSG:4326) 又有散点 projectX/Y;
  pyproj 把 lat/lon→EPSG:4547 得 dX=0.20m/dY=0.30m(亚米级), 反向~0.3m;
  Krassovsky(北京54)椭球差 44m 排除 → 椭球 GRS80/CGCS2000(与 WGS84 现差<1m)。
- proj4: +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80
- 旧"EPSG:32649 解出 111°E"系因 32649 中央经线=111°E; 改 CM=114°E 即完美吻合。
- 影响: DEM/影像 与 dd_voxel 回归 不再被 CRS 阻塞(散点可经 4547→4326→GeoLocalFrame
  与帘面/地图配准)。影像 tfw 仍 EPSG:3857 须重投影; dem.tif CRS 待 GDAL 核对。
- 同步 STATUS §4/§5 + spec §5。
2026-06-08 08:50:25 +08:00
gaozheng d4b4a4bc64 feat(render): 异常叠加(AnomalyActor) + 数据详情命名对齐原型
- AnomalyActor(buildAnomalies): 按 markType 点(vtkVertex)/线(开放polyline,dashed)
  /面(闭合polyline轮廓), 每异常一 actor 带自身 lineColor/width/dashed; 坐标(x,-y,0)
  与 #18 同空间。离屏 verify_section_anomaly.png 折线位置吻合 Python 真值 ref_18。
- 接入 app 数据详情: 「显示异常」开关(默认开)叠加在 #18/#17 上(同纵向夸张对齐)。
- 按原型(prototype.geomative.cn)重命名数据详情切换为「原数据/网格数据」并调顺序。
- 新增 test_anomaly 4 例(线/面闭合/点/空跳过/颜色/y取负); 全 35 测试绿。
- STATUS §6.10 记录原型权威布局与待对齐项(左下数据列表/右上异常列表/电极/底图)。
- 注: dashed 点画在 VTK OpenGL2 下偏弱(几何/颜色/位置正确), 纯观感项后续调。
2026-06-08 07:56:25 +08:00
gaozheng f51fe44533 feat(render): 散点#17(ScatterActor) — 数据详情「反演剖面/原数据」切换
- ScatterActor(buildScatter): ScatterField+ColorScale → vtkPolyData 彩色方块散点
  (x=距离/y=深度取负, 与#18同坐标系; 点标量+LUT, 色阶范围优先colorBar真实分段值)
- 离屏 verify_scatter.png 核对吻合 Python 真值 ref_17(三角拟断面/顶部深蓝/右侧紫)
- 接入 app 数据详情: 工具条「反演剖面(#18)/原数据(#17)」互斥切换, rebuildDetail 统一重建
- LocalSampleRepository.loadScatterColorScale: 散点自带色阶(范围/分段与网格色阶不同)
- 修复陈旧测试 test_curtain(断言改为 vtkPolyDataMapper+banded 非空 polydata)
- 新增 test_scatter 2 例(点数/verts/上色/y取负/退化安全); 全 31 测试绿
2026-06-08 07:43:49 +08:00
gaozheng 95bc521f49 docs: 同步 spec/STATUS/plan 至正确视图模型(二维地图=测线线/三维=竖直帘面/数据详情=#18; 体素搁置CRS; 渲染须离屏PNG核对) — 供下次会话接续P4 2026-06-07 23:40:55 +08:00
gaozheng 8af0de2ba1 fix(login): 输入框显式白底深字+边框(修失焦文字不可见); 登录页样式微调 2026-06-07 23:35:30 +08:00
gaozheng ebd7779b51 feat(app): 中央二维地图(测线线)/三维视图(断面墙)两视图 + 数据详情(#18纵向夸张), 接入已验证渲染积木 2026-06-07 23:30:55 +08:00
gaozheng e59b6b3dfe feat(render): MapLineActor(测线轨迹线,二维地图) + 帘面分段着色(清晰色带, 与#18一致); 离屏PNG核对三视图均正确 2026-06-07 23:25:55 +08:00
gaozheng 2d7dfe3582 fix(render): 数据详情#18修正 — 用colorBar真实非均匀分段值做等值线级(修一片蓝)+纵向夸张; ColorScale暴露stopValues 2026-06-07 23:18:52 +08:00
gaozheng 039c04a233 docs(STATUS): 诚实记录视图渲染未达标(像素核对)+ 离屏验证工具为今后验证手段 + 2D地图需独立线actor 2026-06-07 23:09:32 +08:00
gaozheng 96fac3313b wip(render): 深度方向修正(取负) + 离屏渲染验证工具(render_verify->PNG)
诚实记录: 经离屏PNG肉眼核对, 帘面渲染仍不正确(扭曲飘带/俯视空白), '2D=俯视帘面'模型不成立(竖直帘面俯视仅一条发丝线), 需独立的地图线actor。色阶偏蓝(线性LUT)。详见后续 STATUS。
之前几版'已验证'仅进程级冒烟, 未看像素 -> 漏掉剖面倒置等问题。
2026-06-07 23:08:15 +08:00
gaozheng 7713271557 refactor(app): 中央地图/3D单场景(竖直帘面)+下方数据详情(#18平面剖面), 去除体素节点与模式混乱 2026-06-07 22:53:29 +08:00
gaozheng c9d0d90433 feat(render): GeoLocalFrame(经纬→局部米) + CurtainActor(测线竖直帘面) 2026-06-07 22:47:41 +08:00
gaozheng f4e61cb947 plan: M1 视图重构(对齐原型/用户): 中央地图-3D单场景+竖直帘面, 下方数据详情, 体素搁置(CRS) 2026-06-07 22:43:29 +08:00
gaozheng 8d060afbd5 docs: 新增 STATUS.md 会话交接(状态/完成度/构建约定/已知问题/正确视图模型/下次接续) 2026-06-07 22:30:14 +08:00
gaozheng 51f217e1dd refactor(app): 视图改为对象树勾选驱动+单一2D/3D相机, 体素作为dd_voxel数据集(去除三模式混乱) 2026-06-07 22:29:21 +08:00