import { PerspectiveCamera, OrthographicCamera, Vector3, Plane, Box3 } from 'three';
import { SpeckleView } from '../../..';
import { SectionToolEvent } from '../SectionTool';
import { SpeckleCameraControls } from '../../objects/SpeckleCameraControls';
export type CanonicalView = 'front' | 'back' | 'up' | 'top' | 'down' | 'bottom' | 'right' | 'left' | '3d' | '3D';
export type InlineView = {
    position: Vector3;
    target: Vector3;
};
export type PolarView = {
    azimuth: number;
    polar: number;
    radius?: number;
    origin?: Vector3;
};
export declare enum CameraProjection {
    PERSPECTIVE = 0,
    ORTHOGRAPHIC = 1
}
export declare enum CameraControllerEvent {
    Stationary = 0,
    Dynamic = 1,
    FrameUpdate = 2,
    ProjectionChanged = 3
}
export interface IProvider {
    get provide(): string;
}
export interface ICameraProvider extends IProvider {
    get enabled(): boolean;
    set enabled(val: boolean);
    get renderingCamera(): PerspectiveCamera | OrthographicCamera;
    get controls(): SpeckleCameraControls;
    setCameraView(objectIds: string[], transition: boolean, fit?: number): any;
    setCameraView(view: CanonicalView | SpeckleView | InlineView | PolarView, transition: boolean): any;
    setCameraView(box: Box3, transition: boolean, fit?: number): any;
    on(e: CameraControllerEvent, handler: (data: boolean) => void): any;
    removeListener(e: SectionToolEvent, handler: (data: Plane[]) => void): any;
}
export declare abstract class ICameraProvider {
    static readonly Symbol = "ICameraProvider";
    static isCameraProvider(extension: any): extension is ICameraProvider;
}
export interface ISectionProvider extends IProvider {
    get enabled(): boolean;
    set enabled(val: boolean);
    on(e: SectionToolEvent, handler: (data: Plane[]) => void): any;
    removeListener(e: SectionToolEvent, handler: (data: Plane[]) => void): any;
}
export declare abstract class ISectionProvider {
    static readonly Symbol = "ISectionProvider";
}
