import { Vector3, BoundingInfo } from '../loader/babylonjs-import';
import { PivotTargetCamera } from './PivotTargetCamera';
import { TwinfinityViewer } from '../loader/twinfinity-viewer';
import { TwinfinityCameraBehavior } from './TwinfinityCameraBehavior';
import './CameraExtensions';
import '../loader/SceneExtensions';
import { CameraDirection } from './CameraExtensions';
import { PickOption } from '../loader/Selectables';
import { PickResult } from '../loader/PickResult';
export type Viewer = TwinfinityViewer;
export type AABB = BoundingInfo;
/** Camera projection modes */
export declare enum Projection {
    Perspective = 0,
    Orthographic = 1
}
/**
 * CameraMode can have one of three values
 * * 'fps' = first person camera, mouse control the rotation of the camera pivoting around itself. Move around with keyboard keys W, A, S and D.
 * * 'pivot' = Left mouse button intersects BIM model for finding a pivot point. This point is then used for rotation calculation camera about pivot.
 * * 'all' = 'pivot' by default, 'fps' when holding the right mouse button.
 *
 * Middle mouse button pans the camera view and scroll wheel controls zoom.
 */
export type CameraMode = 'fps' | 'pivot' | 'all';
export declare enum PivotMode {
    Auto = 0,
    Fixed = 1
}
/** Contains options for toggling camera functionality */
export interface CameraOptions {
    /** If `true` then camera can be moved along its axes using a keyboard. Default is by arrow keys or WASD keys. */
    isKeyboardMoveEnabled: boolean;
    /** If `true` then camera can be panned. */
    isPanEnabled: boolean;
    /** If `true` then camera can be zoomed */
    isZoomEnabled: boolean;
    /** If `true` then camera can be rotated */
    isRotationEnabled: boolean;
    /** Determines mode of camera.  */
    mode: CameraMode;
}
export declare class ViewerCamera {
    private viewer;
    readonly activeCamera: PivotTargetCamera;
    private _projection;
    static readonly cameraMinZ = 0.01;
    private _pivotCameraPostProcess;
    constructor(viewer: Viewer);
    /**
     * This method is to make sure that the FXAA filter is always the last postprocess to be applied. ATM Babylon has no real way of rearranging post processes
     */
    private disposeAndReEnableFXAA;
    get maxZ(): number;
    set maxZ(n: number);
    get minZ(): number;
    set minZ(n: number);
    /**
     * Attaches a behavior to the camera.
     * @param behavior The behavior to be attached to the camera.
     * @returns true if the behavior was successfully attached to the camera, otherwise false.
     */
    attachBehavior(behavior: TwinfinityCameraBehavior): boolean;
    /**
     * Detaches a behavior from the camera.
     * @param behavior The behavior to be detached from the camera.
     * @returns true if the behavior was successfully detached to the camera, otherwise false.
     */
    detachBehavior(behavior: TwinfinityCameraBehavior): boolean;
    setPivot(mode: PivotMode, pivot?: Vector3): void;
    clearPivot(): void;
    get position(): Vector3;
    set position(position: Vector3);
    get target(): Vector3;
    set target(target: Vector3);
    get forwardVector(): Vector3;
    zoomToExtent(aabb: BoundingInfo, direction?: CameraDirection): void;
    pick(o: PickOption): PickResult;
    get projection(): Projection;
    set projection(projection: Projection);
    get mode(): CameraMode;
    set mode(v: CameraMode);
    get topDownMode(): boolean;
    set topDownMode(topDownMode: boolean);
    get options(): CameraOptions;
}
//# sourceMappingURL=ViewerCamera.d.ts.map