From fadcd1223951bd5db4b66658c95c2a3c9f9f7c4c Mon Sep 17 00:00:00 2001 From: gaozheng Date: Fri, 26 Jun 2026 23:30:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(gpr):=20=E8=A1=A5=20Api3dRepository::create?= =?UTF-8?q?GprVolume=20=E5=A3=B0=E6=98=8E=20+=20=E4=BB=93=E5=82=A8?= =?UTF-8?q?=E9=80=8F=E4=BC=A0=20targetDy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit HEAD 的 Api3dRepository.cpp 已定义 createGprVolume,但 .hpp 缺该声明 (成员定义无声明 → geopro_data 编译不过)。本提交补上声明,修复构建。 并把线内通道插值 targetDy(默认 2.5cm) 透传到 createGprVolumeGrid → app 渲染链也得密 Y 体(与 io::gpr 桥同口径,0=不插值)。 --- src/data/GprVolumeRepository.cpp | 8 +++++--- src/data/GprVolumeRepository.hpp | 5 ++++- src/data/api/Api3dRepository.hpp | 6 ++++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/data/GprVolumeRepository.cpp b/src/data/GprVolumeRepository.cpp index fd9f88a..a1b1277 100644 --- a/src/data/GprVolumeRepository.cpp +++ b/src/data/GprVolumeRepository.cpp @@ -36,12 +36,14 @@ VolumeGrid builtI16ToVolumeGrid(const geopro::core::BuiltI16& built) { } VolumeGrid createGprVolumeGrid(const std::string& lineDir, - const std::string& linePrefix, int coarse) { + const std::string& linePrefix, int coarse, + double targetDy) { // 走 P1/P2 链(io::gpr)得处理后 int16 量化体 → 反量化为 app 的 float 体。 // metricsOut 传 nullptr:repository 只产数据,度量留给 gpr_poc CLI。 + // targetDy 透传 → 默认走线内通道插值(2.5cm 网格),app 渲染链即得密 Y 体。 const geopro::core::BuiltI16 built = - geopro::io::gpr::buildLineVolumeFromGpr3dv(lineDir, linePrefix, - /*metricsOut=*/nullptr, coarse); + geopro::io::gpr::buildLineVolumeFromGpr3dv( + lineDir, linePrefix, /*metricsOut=*/nullptr, coarse, targetDy); return builtI16ToVolumeGrid(built); } diff --git a/src/data/GprVolumeRepository.hpp b/src/data/GprVolumeRepository.hpp index 054fb2a..59f7ff8 100644 --- a/src/data/GprVolumeRepository.hpp +++ b/src/data/GprVolumeRepository.hpp @@ -26,9 +26,12 @@ VolumeGrid builtI16ToVolumeGrid(const geopro::core::BuiltI16& built); // lineDir/linePrefix 同 gpr3dv-smoke / build-line(如 "D:/Downloads/明星路", "明星路_001")。 // coarse(下采样因子,≥1):沿测线(道/X 轴)每 coarse 道取 1,省内存;横向/深度保全分辨率。 // 稠密 VolumeGrid 全内存,长线需较大 coarse 控内存(默认 4 = build-line POC 档)。 +// targetDy(米,>0 启用):线内【通道间插值】目标横向间距(读真实道偏移规则化,不跨线)。 +// 默认 0.025(2.5cm);0=不插值(Y=原通道数)。详见 io::gpr::buildLineVolumeFromGpr3dv。 // 失败(加载失败/立方体为空)→ 抛 std::runtime_error(由 io::gpr 链抛出,原样透传)。 VolumeGrid createGprVolumeGrid(const std::string& lineDir, - const std::string& linePrefix, int coarse = 4); + const std::string& linePrefix, int coarse = 4, + double targetDy = 0.025); } // namespace geopro::data diff --git a/src/data/api/Api3dRepository.hpp b/src/data/api/Api3dRepository.hpp index 4b27033..98576c7 100644 --- a/src/data/api/Api3dRepository.hpp +++ b/src/data/api/Api3dRepository.hpp @@ -42,6 +42,12 @@ public: std::string createVolume(VolumeBuildParams params, const std::string& name); // 请求体形态创建:组装真实 VoxelGenerateRequest → 派生 params 存储 + 打印请求体 JSON(供后端联调)。 std::string createVolume(const VoxelGenerateRequest& req); + // GPR 三维体:走 io::gpr 逐线管线(含线内通道插值,§1)直接产体并【预填 cachedGrid】, + // 注册为 dd_voxel 体 → 自动进 volumeRows/三级树,loadVolume 直接命中渲染(不走 mock IDW)。 + // lineDir/linePrefix 同 build-line(如 "D:/Downloads/明星路","明星路_010");coarse 控内存。 + // 返回新 dsId;失败抛 std::runtime_error(加载/立方体空,由 io::gpr 链透传)。 + std::string createGprVolume(const std::string& lineDir, const std::string& linePrefix, + const std::string& name, int coarse = 8); // 取回某三维体组装的请求体(测试/联调);非本 repo 创建或无 request 时返回 nullptr。 const VoxelGenerateRequest* lastVoxelRequest(const std::string& dsId) const; // 已创建三维体的列表行(ddCode="dd_voxel"),供三维分析栏合并注入(每次 setDatasets 追加)。