geopro/src/data/GprVolumeRepository.cpp

63 lines
2.5 KiB
C++
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.

#include "data/GprVolumeRepository.hpp"
#include <cmath>
#include <limits>
#include "core/model/ScalarVolumeI16.hpp"
#include "io/gpr/Gpr3dvVolumeBridge.hpp"
#include "io/gpr/NormalizedRadarVolumeBridge.hpp"
namespace geopro::data {
VolumeGrid builtI16ToVolumeGrid(const geopro::core::BuiltI16& built) {
const int nx = built.vol.nx();
const int ny = built.vol.ny();
const int nz = built.vol.nz();
VolumeGrid out;
out.vol = geopro::core::ScalarVolume(nx, ny, nz);
out.origin = built.origin;
out.spacing = built.spacing;
out.vmin = built.vminPhys;
out.vmax = built.vmaxPhys;
// 逐体素反量化(布局一致i 最快、k 最慢)。
// kBlank → NaN下游 render::buildVoxel 把 NaN 映射到 [vmin,vmax] 外的哨兵 →
// 传递函数置全透明(与 float 路径空值语义一致)。
const std::vector<std::int16_t>& src = built.vol.data();
std::vector<double>& dst = out.vol.data();
const double nan = std::numeric_limits<double>::quiet_NaN();
for (std::size_t idx = 0; idx < src.size(); ++idx) {
const std::int16_t q = src[idx];
dst[idx] = (q == geopro::core::ScalarVolumeI16::kBlank)
? nan
: built.quant.toPhys(q);
}
return out;
}
VolumeGrid createGprVolumeGrid(const std::string& lineDir,
const std::string& linePrefix, int coarse,
double targetDy) {
// 走 P1/P2 链(io::gpr)得处理后 int16 量化体 → 反量化为 app 的 float 体。
// metricsOut 传 nullptrrepository 只产数据,度量留给 gpr_poc CLI。
// targetDy 透传 → 默认走线内通道插值(2.5cm 网格)app 渲染链即得密 Y 体。
const geopro::core::BuiltI16 built =
geopro::io::gpr::buildLineVolumeFromGpr3dv(
lineDir, linePrefix, /*metricsOut=*/nullptr, coarse, targetDy);
return builtI16ToVolumeGrid(built);
}
VolumeGrid createRadarVolumeGrid(const std::string& lineDir,
const std::string& linePrefix, int coarse,
double targetDy) {
// 走规范化测线链(io::gpr) 读 .head/.data → int16 量化体 → 反量化为 app 的 float 体。
// 与 createGprVolumeGrid 同适配器(builtI16ToVolumeGrid),仅上游数据源不同。
const geopro::core::BuiltI16 built =
geopro::io::gpr::buildLineVolumeFromNormalized(lineDir, linePrefix, coarse,
targetDy);
return builtI16ToVolumeGrid(built);
}
} // namespace geopro::data