geopro/src/render/actors/VoxelActor.hpp

49 lines
3.0 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.

#pragma once
#include <vtkSmartPointer.h>
#include <vtkVolume.h>
#include <vtkImageData.h>
#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<vtkVolume> 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<vtkVolume> 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<vtkImageData>& 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<vtkVolume> 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<vtkImageData>& 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<vtkVolume> buildVoxelI16FromImage(vtkImageData* shortImg,
const geopro::core::Quant& q,
const geopro::core::ColorScale& cs,
double vminPhys, double vmaxPhys);
} // namespace geopro::render