41 lines
1.9 KiB
C++
41 lines
1.9 KiB
C++
#pragma once
|
||
#include <vector>
|
||
|
||
#include <vtkImageData.h>
|
||
#include <vtkSmartPointer.h>
|
||
#include <vtkVolume.h>
|
||
|
||
#include "geo/CrsTransform.hpp"
|
||
#include "geo/GeoLocalFrame.hpp"
|
||
#include "model/ColorScale.hpp"
|
||
#include "model/Field.hpp"
|
||
|
||
namespace geopro::render {
|
||
|
||
// dd_voxel 体素结果:体绘制 volume + 内部 image(含 origin/spacing,供交互切片)。
|
||
struct VoxelResult {
|
||
vtkSmartPointer<vtkVolume> volume;
|
||
vtkSmartPointer<vtkImageData> image;
|
||
bool valid() const { return volume != nullptr && image != nullptr; }
|
||
};
|
||
|
||
// 把若干测线散点(GIS projX/projY + 深度 ylist)配准到 GeoLocalFrame 世界系并 IDW 成体素。
|
||
// 配准:(projX,projY) --crs(项目CRS→EPSG:4326)--> (lon,lat) --frame--> 局部米(x East,y North);
|
||
// 垂向 z = -ylist(深度向下,与帘面 z 取负一致)。
|
||
// IDW:maxDist 裁剪约束插值域(两交叉测线→十字片,设计 §10);NaN 留空→体绘制透明。
|
||
// crs 须为「项目 CRS(如 EPSG:4547) → EPSG:4326」;frame 与帘面/地图共用以保证空间配准。
|
||
// zDisplayScale:把纵向夸张"烤进"输出 image 的 z 间距与原点(IDW 采样仍用真实 cellZ),
|
||
// 使体绘制 + 切片(vtkImagePlaneWidget 作用于此 image) + 帘面(actor SetScale 同倍)三者纵向一致。
|
||
// 输入不足(无点)返回 valid()==false 的空结果。
|
||
VoxelResult buildVoxelFromScatters(const std::vector<geopro::core::ScatterField>& profiles,
|
||
const geopro::core::ColorScale& cs,
|
||
const geopro::core::CrsTransform& crs,
|
||
const geopro::core::GeoLocalFrame& frame,
|
||
double cellXY = 1.0,
|
||
double cellZ = 0.5,
|
||
double power = 2.0,
|
||
double maxDist = 4.0,
|
||
double zDisplayScale = 1.0);
|
||
|
||
} // namespace geopro::render
|