Commit Graph

16 Commits

Author SHA1 Message Date
gaozheng 0f521c5b24 feat(vtk): P1 复活中央渲染 — VtkSceneController + I3dSceneRepository + Scene加vtkProp
复活被 6241eb3 摘除的中央 VTK 数据驱动渲染:
- Scene 新增 addViewProp(vtkProp*):体绘制 vtkVolume(非 vtkActor)经此进场
- I3dSceneRepository(异步回调契约) + LocalSample3dRepository:dimensionOf 维度映射 /
  loadVolume→VolumeGrid(std::array 去裸数组) / loadTerrainPaths;data 层零 VTK 依赖
- VtkSceneController(QObject) 取代 main.cpp 死掉的 rebuildCentral lambda + 裸 show* 标志:
  勾选数据集/视图模式/图层/比例 → 经仓储取 core::* → I3dSceneView 重建场景;
  QPointer+generation 守异步回调生命周期与新鲜度;inRebuild_ 避免同步路径双 render
- I3dSceneView 抽象解耦编排与 VTK(VtkSceneView 真实现 + 测试 fake)
- 删除被取代的 CentralScene;main.cpp 接线 对象勾选/2D-3D/图层/主题(主题 context 用 sceneCtrl 防悬垂)
- 新增测试 14(Scene/3d-repo/VtkSceneController),ctest 172/172 全绿

构建基建修复(本就潜在缺陷,任何 clean 构建/新人 checkout 都会撞):
- vcpkg.json 加 builtin-baseline:新版 vcpkg manifest 模式必需,否则全新 checkout 无法 configure
- build.bat 修 vswhere(VS2026 预览 -latest 恒空 → -all -prerelease -requires VC.Tools)
  + 括号块内路径变量加引号(防 Program Files (x86) 的 ) 提前闭合)
2026-06-15 21:01:26 +08:00
gaozheng 78f96dbc08 fix(review): 修 cpp-review HIGH/MEDIUM —散点ys越界/colorSvc析构泄漏/QwtPlot autoDelete注释/控制器catch(...)防busy死锁 + 清死代码simplifyInPlace/simplifyTol + 填充等比限幅 + DTO行数校验+枚举钳制 + ContourLine.level默认NaN 2026-06-11 18:59:19 +08:00
gaozheng 4fbab033f0 fix(ui): 等值线用vtkStripper连成长折线(使沿线数值标注可落上) + 网格页(图+异常)分割器放入页签内QScrollArea(滚动限页签内) + 等值线测试 2026-06-11 18:21:52 +08:00
gaozheng b772b5a169 build(qwt): 集成 Qwt 6.2 静态库(cmake/qwt.cmake 对接官方Qt6,绕开qmake/vcpkg) + 冒烟用例 + 返工方案文档
二维图表返工前置:QwtPlot 作科学图表框架。源码 external/qwt-src(gitignore)按 ENV_SETUP 拉取。
2026-06-11 14:47:19 +08:00
gaozheng 00c42f7a8d feat(render): ContourBands NaN 凸包裁剪(剔除无效quad)+等值线DP简化 2026-06-11 11:41:26 +08:00
gaozheng b7e0a2034d feat(render): ContourBands 双线性上采样+盒式平滑预处理(对齐 web 2x+smooth) 2026-06-11 11:39:05 +08:00
gaozheng f1ad490096 feat(render): ContourBands 从 VTK banded 提取色带多边形+等值线几何 2026-06-11 11:37:09 +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 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 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 c9d0d90433 feat(render): GeoLocalFrame(经纬→局部米) + CurtainActor(测线竖直帘面) 2026-06-07 22:47:41 +08:00
gaozheng ebf1e0929d feat(render): dd_voxel 体绘制(IDW->vtkImageData->GPU RayCast) + 交互切片
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 21:51:21 +08:00
gaozheng cdf49020af feat(render): render 层(Scene/ColorLut/GridContourActor/相机预设) + 2D/3D 切换 2026-06-07 21:42:55 +08:00