import { InterpolationType } from '../../../enums/index.js';
import type { CPUFallbackEnabledElement, ICamera, IImage, IImageVolume, Point2, Point3, VOIRange } from '../../../types/index.js';
import type { PlanarDataPresentation } from './PlanarViewportTypes.js';
export type PlanarCPUSampledSliceState = {
    image: IImage;
    samplingMode: 'source-slice' | 'viewport';
    focalPoint: Point3;
    translationReferenceFocalPoint: Point3;
    right: Point3;
    up: Point3;
    normal: Point3;
    spacingInNormalDirection: number;
    canvasWidth: number;
    canvasHeight: number;
    parallelScale: number;
    scaleRatio: number;
    interpolationType: InterpolationType;
};
export type PlanarCPUVolumeResampleDecision = 'resample' | 'reuse' | 'defer';
export default class PlanarCPUVolumeSampler {
    private sampleSequence;
    private scalarViewportSampler;
    private scalarRangeCache;
    private readonly sliceArrayPool;
    clearCachedScalarRange(voxelManager: NonNullable<IImageVolume['voxelManager']>): void;
    releaseSampledSliceState(sampledSliceState?: PlanarCPUSampledSliceState): void;
    clearSliceArrayPool(): void;
    private getScalarDataRange;
    getCameraBasis(camera: ICamera<unknown>): {
        right: Point3;
        up: Point3;
        normal: Point3;
    };
    getResolvedVOIRange(voiRange: VOIRange | undefined, fallbackLower: number, fallbackUpper: number): VOIRange;
    getFallbackStoredRange(volume: IImageVolume): {
        min: number;
        max: number;
    };
    createOrUpdateEnabledElement(args: {
        enabledElement?: CPUFallbackEnabledElement;
        canvas: HTMLCanvasElement;
        image: IImage;
        modality?: string;
    }): CPUFallbackEnabledElement;
    updateCPUFallbackViewport(args: {
        enabledElement: CPUFallbackEnabledElement;
        sampledSliceState: PlanarCPUSampledSliceState;
        camera: ICamera<unknown> & {
            presentationScale?: Point2;
        };
        dataPresentation?: PlanarDataPresentation;
        defaultVOIRange?: VOIRange;
    }): void;
    needsResample(args: {
        sampledSliceState?: PlanarCPUSampledSliceState;
        width: number;
        height: number;
        camera: ICamera<unknown> & {
            presentationScale?: Point2;
        };
        dataPresentation?: PlanarDataPresentation;
        deferViewportResample?: boolean;
    }): boolean;
    getResampleDecision(args: {
        sampledSliceState?: PlanarCPUSampledSliceState;
        width: number;
        height: number;
        camera: ICamera<unknown> & {
            presentationScale?: Point2;
        };
        dataPresentation?: PlanarDataPresentation;
        deferViewportResample?: boolean;
    }): PlanarCPUVolumeResampleDecision;
    sampleSliceImage(args: {
        volume: IImageVolume;
        width: number;
        height: number;
        camera: ICamera<unknown> & {
            presentationScale?: Point2;
        };
        dataPresentation?: PlanarDataPresentation;
        useViewportSamplingForLinear?: boolean;
    }): PlanarCPUSampledSliceState;
    private trySampleOrthogonalSliceFromVoxelManager;
    private sampleVoxelAtContinuousIndex;
    private sampleNearestColorAtContinuousIndex;
    private sampleLinearColorAtContinuousIndex;
    private toColorSample;
    private createDefaultColorSample;
    private writeVoxelValue;
    private getVolumeNumberOfComponents;
    private getSliceArrayConstructor;
    private acquireSliceArray;
    private releaseSliceArray;
    private getSliceArrayPoolKey;
    private createSliceImage;
    private shouldPreserveFloatScalarSamples;
}
