import type { D3InterpolateName } from '../colors'; import type { Matrix3x3, Vec2, Vec3 } from '../math'; import type { Crystal } from '../structure'; import { type ScalarGrid3D } from './grid'; export interface DataRange { min: number; max: number; abs_max: number; mean: number; } export interface VolumetricData extends ScalarGrid3D { order: `z_fastest`; dims: Vec3; lattice: Matrix3x3; origin: Vec3; data_range: DataRange; periodic: boolean; label?: string; source?: string; source_filename?: string; } export type VolumeGrid = Pick; export declare function make_volume(values: Float64Array, dims: Vec3, fields: Omit): VolumetricData; export declare function volume_from_json(raw: unknown): VolumetricData; export declare const normalize_active_volume_idx: (active_volume_idx: number, volume_count: number) => number; export interface VolumetricFileData { structure: Crystal; volumes: VolumetricData[]; } export interface IsosurfaceLayer { isovalue: number; color: string; opacity: number; visible: boolean; show_negative: boolean; negative_color: string; volume_idx?: number; color_volume_idx?: number; colormap?: D3InterpolateName; color_range?: Vec2; } export interface IsosurfaceSettings { layers: IsosurfaceLayer[]; wireframe: boolean; halo: number; display_range?: [Vec2, Vec2, Vec2]; } export declare const LAYER_COLORS: readonly ["#3b82f6", "#ef4444", "#22c55e", "#a855f7", "#f97316", "#06b6d4", "#eab308", "#ec4899"]; export declare function grid_data_range(values: ArrayLike): DataRange; export declare const MAX_GRID_POINTS = 500000; export declare function downsample_grid(grid: ScalarGrid3D, max_points?: number): ScalarGrid3D; export declare const DEFAULT_ISOSURFACE_SETTINGS: IsosurfaceSettings; export declare const SHELL_STEPS: readonly (readonly [fraction: number, opacity: number])[]; export declare const auto_volume_layer: (volume: VolumetricData, volume_idx: number, color_offset?: number, shell_idx?: number) => IsosurfaceLayer; export declare const auto_isosurface_settings: (volume: VolumetricData) => IsosurfaceSettings; export declare const pin_layers: (layers: IsosurfaceLayer[], active_volume_idx: number) => (IsosurfaceLayer & { volume_idx: number; })[]; export declare function remove_volume(volumes: VolumetricData[], layers: IsosurfaceLayer[], removed_idx: number, active_volume_idx?: number): { volumes: VolumetricData[]; layers: IsosurfaceLayer[]; }; export declare function label_file_volumes(volumes: VolumetricData[], filename: string, source_filename?: string): VolumetricData[]; export declare const lattices_match: (lattice_a: readonly (readonly number[])[] | undefined, lattice_b: readonly (readonly number[])[] | undefined, tolerance?: number) => boolean; interface VolumeMergeResult { volumes: VolumetricData[]; layers: IsosurfaceLayer[]; first_touched_idx: number; n_added: number; } export declare function merge_imported_volumes(existing: VolumetricData[], existing_layers: IsosurfaceLayer[], incoming: VolumetricData[], active_volume_idx?: number): VolumeMergeResult; export {};