#pragma once #include #include #include #include "model/Field.hpp" #include "model/ColorScale.hpp" #include "model/ScalarVolumeI16.hpp" namespace geopro::render { // 把 core 规则标量体(IDW 输出,含 NaN 留空)转 vtkImageData,再建 GPU 光线投射体绘制。 // 颜色按 ColorScale 在 [vmin,vmax] 采样;NaN/留空格 → 不透明度 0(透明)。 // 返回 vtkVolume(由调用方加入 renderer)。 vtkSmartPointer buildVoxel(const geopro::core::ScalarVolume& vol, const geopro::core::ColorScale& cs, double ox, double oy, double oz, double dx, double dy, double dz, double vmin, double vmax); // 同上,但额外通过 out 参数暴露内部 vtkImageData,供 main 建交互切片 widget。 vtkSmartPointer buildVoxel(const geopro::core::ScalarVolume& vol, const geopro::core::ColorScale& cs, double ox, double oy, double oz, double dx, double dy, double dz, double vmin, double vmax, vtkSmartPointer& outImage); // int16 量化体 → vtkImageData(vtkShortArray) → GPU 体绘制(与 double 版并列)。 // 传函在量化域取:qmin=q.toQ(vminPhys)、qmax=q.toQ(vmaxPhys);kBlank → 不透明度 0(透明)。 // color 按 ColorScale 在 [vminPhys,vmaxPhys] 采样(对每个量化级 qv 用 q.toPhys(qv) 查色)。 // outImage 暴露内部 vtkImageData,供建交互切片 widget。返回 vtkVolume。 vtkSmartPointer buildVoxelI16(const geopro::core::ScalarVolumeI16& vol, const geopro::core::Quant& q, const geopro::core::ColorScale& cs, double ox, double oy, double oz, double dx, double dy, double dz, double vminPhys, double vmaxPhys, vtkSmartPointer& outImage); // 预构建 VTK_SHORT vtkImageData → GPU 体绘制(供 IVolumeRenderSource 的整卷/工作集图像 // 直接成体,不再从 ScalarVolumeI16 逐体素填)。传函/着色与 buildVoxelI16 一致: // 在量化域取 qmin=q.toQ(vminPhys)、qmax=q.toQ(vmaxPhys);kBlank → 不透明度 0(透明); // 颜色对每个量化级 qv 用 q.toPhys(qv) 反查 ColorScale。shortImg 标量须为 VTK_SHORT。 vtkSmartPointer buildVoxelI16FromImage(vtkImageData* shortImg, const geopro::core::Quant& q, const geopro::core::ColorScale& cs, double vminPhys, double vmaxPhys); } // namespace geopro::render