Commit Graph

24 Commits

Author SHA1 Message Date
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 48d21b82e9 fix(ui): 等值线 vtkSplineFilter 样条平滑(去DP简化,贴近原版圆滑曲线) + 标注沿线周期重复+降阈值(小等值线也标注) 2026-06-11 18:33:12 +08:00
gaozheng 4fbab033f0 fix(ui): 等值线用vtkStripper连成长折线(使沿线数值标注可落上) + 网格页(图+异常)分割器放入页签内QScrollArea(滚动限页签内) + 等值线测试 2026-06-11 18:21:52 +08:00
gaozheng 82b654176e fix(ui): 审查修复 loadFailed接线/控制器重入守卫+ddCode降级/散点越界/点异常/Tab deleteLater/makeLines
- main.cpp: DatasetDetailController::loadFailed 连接到 statusBar,5s 显示失败消息
- DatasetDetailController: 加 busy_ 重入守卫;ddCode 非 dd_inversion_data 时直接 loadFailed 降级
- DatasetChartView::showScatter: 按 x/y/v 三者最短长度循环,防越界;加 #include <algorithm>
- DatasetChartView::rebuildAnomalyItems: 先处理 markType==1 点异常(小方块),再走原折线/多边形分支
- DatasetChartView::clearChart: 加注释说明 scene_->clear() + anomalyItems_.clear() 不变式
- DatasetDetailPanel: tabCloseRequested 改用 deleteLater,避免在事件处理期间同步析构
- ContourBands: buildContourBands 按 opt.makeLines 决定是否开 GenerateContourEdgesOn 及提取等值线
2026-06-11 12:42:04 +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 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 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 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 96fac3313b wip(render): 深度方向修正(取负) + 离屏渲染验证工具(render_verify->PNG)
诚实记录: 经离屏PNG肉眼核对, 帘面渲染仍不正确(扭曲飘带/俯视空白), '2D=俯视帘面'模型不成立(竖直帘面俯视仅一条发丝线), 需独立的地图线actor。色阶偏蓝(线性LUT)。详见后续 STATUS。
之前几版'已验证'仅进程级冒烟, 未看像素 -> 漏掉剖面倒置等问题。
2026-06-07 23:08:15 +08:00
gaozheng c9d0d90433 feat(render): GeoLocalFrame(经纬→局部米) + CurtainActor(测线竖直帘面) 2026-06-07 22:47:41 +08:00
gaozheng 3bc006e271 fix(render): 体素卡死修复 — IDW 1/d²快速路径+maxDist提前跳过, 网格粗化(2m/1m), SmartVolumeMapper CPU回退, 忙碌光标; 按钮改名'三维体素' 2026-06-07 22:01:16 +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
gaozheng 87eba2c5a3 scaffold: M1 工程骨架(CMake+vcpkg+分层目录+spike冒烟程序)
- 顶层 CMakeLists / CMakePresets / vcpkg.json(全 vcpkg, Qt+VTK[qt] 共用一份 Qt)
- .clang-format / .clangd / .editorconfig(AI 编码上下文基础设施, 规约 §10.1)
- src 分层目录(core/data/net/render/view/controller/app)+ 各层 README
- src/app: Qt+VTK 冒烟程序(锥体), 作 spike#1/#2 起点
- tests: gtest 冒烟 + ctest 接入
- README
2026-06-07 17:41:10 +08:00