#pragma once #include #include #include #include #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 volume; vtkSmartPointer 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& 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