56 lines
3.6 KiB
C++
56 lines
3.6 KiB
C++
#pragma once
|
||
#include <vtkActor.h>
|
||
#include <vtkSmartPointer.h>
|
||
#include <vtkVolume.h>
|
||
#include <vtkImageData.h>
|
||
#include "model/Field.hpp"
|
||
#include "model/ColorScale.hpp"
|
||
#include "model/ScalarVolumeI16.hpp"
|
||
namespace geopro::render {
|
||
|
||
// 体上抽等值面(marching cubes/FlyingEdges)→ 不透明实心 actor,凸显超阈异常体(参考图红块)。
|
||
// img 为 buildVoxel 暴露的 vtkImageData(标量=物理值,留空=哨兵 vmin-1,低于任意 isoValue 不成面)。
|
||
// isoValue 在 [vmin,vmax] 内;颜色取 ColorScale 在 isoValue 处的实色、不透明。无超阈区 → 返回 nullptr。
|
||
vtkSmartPointer<vtkActor> buildIsosurface(vtkImageData* img, const geopro::core::ColorScale& cs,
|
||
double vmin, double vmax, double isoValue);
|
||
|
||
// 把 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
|