import type { Matrix3x3, Vec2, Vec3 } from '../math'; import type { ScalarGrid3D } from './grid'; import type { VolumeGrid, VolumetricData } from './types'; export declare function trilinear_interpolate(grid: ScalarGrid3D, fx: number, fy: number, fz: number, periodic: boolean): number; type OutOfBoundsPolicy = `clamp` | `fallback`; interface VolumeSamplerOptions { out_of_bounds?: OutOfBoundsPolicy; } interface BulkVolumeSamplerOptions extends VolumeSamplerOptions { position_offset?: Vec3; out?: Float32Array; } export declare function create_volume_sampler(volume: VolumeGrid, { out_of_bounds }?: VolumeSamplerOptions): (position: Vec3) => number; export declare function sample_volume_at_positions(volume: VolumeGrid, positions: Float32Array | Float64Array, { out_of_bounds, position_offset, out }?: BulkVolumeSamplerOptions): Float32Array; interface GridCompatibility { ok: boolean; reason?: string; } export declare function compare_volume_grids(vol_a: VolumetricData, vol_b: VolumetricData, { tolerance }?: { tolerance?: number; }): GridCompatibility; export type DisplayRange = [Vec2, Vec2, Vec2]; export declare function sanitize_display_range(range: DisplayRange, periodic: boolean): DisplayRange; interface VolumeDisplayRangeOptions { display_range?: DisplayRange; tiling?: Vec3; halo?: number; } export declare function resolve_volume_display_range(volume: VolumetricData, { display_range, tiling, halo }?: VolumeDisplayRangeOptions): DisplayRange | null; export declare const range_sample_counts: (volume: VolumeGrid, range: DisplayRange) => Vec3; export declare function extract_volume_range(volume: VolumeGrid & Partial>, range: DisplayRange, max_points?: number): VolumetricData; export declare function prepare_geometry_grid(volume: VolumeGrid, range: DisplayRange | null): { grid: ScalarGrid3D; lattice: Matrix3x3; origin: Vec3; }; export {};