import type { IImage, IImageVolume, Point2, Point3 } from '../../../types/index.js';
import ResolvedViewportView from '../ResolvedViewportView.js';
import { type PlanarSliceBasis } from './planarSliceBasis.js';
import { type PlanarScaleInput } from './planarCameraScale.js';
import type { PlanarViewState, PlanarPayload, PlanarResolvedICamera, PlanarViewportRenderContext } from './PlanarViewportTypes.js';
import type { PlanarRendering } from './planarRuntimeTypes.js';
type PlanarViewResolutionRenderContext = Partial<Pick<PlanarViewportRenderContext, 'cpu' | 'vtk'>>;
type BasePlanarResolvedViewState = {
    viewState: PlanarViewState;
    canvasWidth: number;
    canvasHeight: number;
    frameOfReferenceUID?: string;
};
type PlanarStackResolvedViewState = BasePlanarResolvedViewState & {
    currentImageIdIndex: number;
    image: IImage;
    maxImageIdIndex: number;
    usePixelGridCenter: boolean;
};
type PlanarVolumeResolvedViewState = BasePlanarResolvedViewState & {
    currentImageIdIndex: number;
    imageVolume: IImageVolume;
    maxImageIdIndex: number;
    usePixelGridCenter: boolean;
};
export declare function resolvePlanarStackImageIdIndex(args: {
    fallbackImageIdIndex: number;
    viewState?: PlanarViewState;
}): number;
declare abstract class BasePlanarResolvedView<TState extends BasePlanarResolvedViewState> extends ResolvedViewportView<TState, PlanarResolvedICamera> {
    protected cachedSliceBasis?: PlanarSliceBasis;
    private cachedPresentation?;
    get pan(): Point2;
    get zoom(): number;
    get scale(): Point2;
    get rotation(): number;
    getSliceBasis(): PlanarSliceBasis;
    canvasToWorld(canvasPos: Point2): Point3;
    worldToCanvas(worldPos: Point3): Point2;
    getFrameOfReferenceUID(): string | undefined;
    withZoom(zoom: number, canvasPoint?: Point2): BasePlanarResolvedView<TState>;
    withScale(scale: PlanarScaleInput, canvasPoint?: Point2): BasePlanarResolvedView<TState>;
    withPan(pan: Point2): BasePlanarResolvedView<TState>;
    flipHorizontal(): BasePlanarResolvedView<TState>;
    flipVertical(): BasePlanarResolvedView<TState>;
    indexToWorld(_index: Point3): Point3 | undefined;
    protected buildICamera(): PlanarResolvedICamera;
    protected getPresentation(): import("./planarRenderCamera.js").DerivedPlanarPresentation;
    protected requireResolvedICamera(): Required<Pick<PlanarResolvedICamera, 'focalPoint' | 'parallelScale' | 'viewPlaneNormal' | 'viewUp'>> & Pick<PlanarResolvedICamera, 'presentationScale'>;
    protected createViewStateState(viewState: PlanarViewState): TState;
    protected abstract buildSliceBasis(): PlanarSliceBasis;
    protected abstract cloneWithViewState(viewState: PlanarViewState): BasePlanarResolvedView<TState>;
}
declare class PlanarStackResolvedView extends BasePlanarResolvedView<PlanarStackResolvedViewState> {
    constructor(state: Omit<PlanarStackResolvedViewState, 'viewState'> & {
        viewState?: PlanarViewState;
    });
    protected buildSliceBasis(): PlanarSliceBasis;
    protected cloneWithViewState(viewState: PlanarViewState): PlanarStackResolvedView;
}
declare class PlanarVolumeResolvedView extends BasePlanarResolvedView<PlanarVolumeResolvedViewState> {
    constructor(state: Omit<PlanarVolumeResolvedViewState, 'viewState'> & {
        viewState?: PlanarViewState;
        sliceBasis?: PlanarSliceBasis;
    });
    indexToWorld(index: Point3): Point3 | undefined;
    protected buildSliceBasis(): PlanarSliceBasis;
    protected cloneWithViewState(viewState: PlanarViewState): PlanarVolumeResolvedView;
}
export declare function getPlanarViewStateCanvasDimensions(args: {
    rendering: PlanarRendering;
    renderContext: PlanarViewResolutionRenderContext;
}): {
    canvasHeight: number;
    canvasWidth: number;
};
export declare function resolvePlanarViewportView(args: {
    viewState: PlanarViewState;
    data?: PlanarPayload;
    frameOfReferenceUID?: string;
    imageIds?: string[];
    rendering?: PlanarRendering;
    renderContext: PlanarViewResolutionRenderContext;
    canvasDimensions?: {
        canvasHeight: number;
        canvasWidth: number;
    };
    sliceIndex?: number;
}): PlanarStackResolvedView | PlanarVolumeResolvedView | undefined;
export type { BasePlanarResolvedViewState, PlanarStackResolvedViewState, PlanarViewResolutionRenderContext, PlanarVolumeResolvedViewState, };
export { BasePlanarResolvedView, PlanarStackResolvedView, PlanarVolumeResolvedView, };
