import { TwinfinityViewer } from './loader/twinfinity-viewer';
import { Vector3 } from './loader/babylonjs-import';
import { CameraMode, CameraOptions, PivotMode } from './camera/ViewerCamera';
import { Bound } from './Types';
import { BimIfcObject } from './loader/bim-ifc-object';
import { TwinfinityCameraBehavior } from './camera/TwinfinityCameraBehavior';
import { CameraDirection } from './camera/CameraExtensions';
import { BimCoreApi } from './BimCoreApi';
/**
 * This interface defines a Camera look at, where two 3D points define positions for eye to look from and target to look towards.
 */
export interface CameraLookAt {
    eye: Vector3;
    target: Vector3;
}
/**
 * CameraProjection can have one of two strings.
 * * 'perspective' = normal geometry scale by distance.
 * * 'orthographic' = isometric view projection where distance to camera does not affect object scale.
 */
export type CameraProjection = 'perspective' | 'orthographic';
export declare class BimCamera {
    private readonly _viewer;
    private readonly _api;
    /**
     * @internal NOTE: Internal API. Subject to change. Use of these APIs in production applications is not supported.
     */
    constructor(_viewer: TwinfinityViewer, _api: BimCoreApi);
    /**
     * Sets camera projection.
     * @param projection The camera projection to set.
     */
    setProjection(projection: CameraProjection): void;
    /**
     * Sets camera position at eye and rotation to look towards target.
     * @param eye Point to look from.
     * @param target Point to look towards.
     */
    lookAt(eye: Vector3, target: Vector3): void;
    /**
     * Sets camera rotation to look towards the specified direction and zooms to extent of visible objects.
     * @param direction The direction to look from (top = -Z, bottom = +Z, front = +Y, back = -Y, left = +X, right = -X).
     */
    lookFrom(direction: CameraDirection): void;
    /**
     * Zooms camera to the extent of the specified bounding box.
     * @param extent Bounding box in format [minX, minY, minZ, maxX, maxY, maxZ].
     * @param direction [Optional]. If set, the camera is positioned according to the direction during zoom. Otherwise, the current direction is kept.
     */
    zoomToExtent(extent: Bound, direction?: CameraDirection): void;
    /**
     * Resets the camera to the default view. Camera is positioned to view entire building
     * @param direction Optional. Direction camera should look at building from. Default is a angled top position.
     */
    defaultView(direction?: CameraDirection): void;
    /**
     * Returns camera forward vector.
     */
    forwardVector(): Vector3;
    /**
     * @deprecated Use {@link cameraOptions}  instead
     * Locks camera to prevent user interaction.
     */
    lock(): void;
    /**
     * @deprecated Use Use {@link cameraOptions} instead
     * Unlocks camera to allow for user interaction.
     */
    unlock(): void;
    /**
     * @deprecated Use {@link cameraOptions} instead
     * Sets whether camera should prevent user interaction or not.
     * @param locked Whether camera should be locked or not.
     */
    setLock(locked: boolean): void;
    /**
     * @deprecated Use the mode property instead
     * Sets camera mode.
     * @param mode The camera mode to set.
     */
    setMode(mode: CameraMode): void;
    /**
     * Sets the camera mode (pivot, fps or all). See {@link CameraMode} for more information
     */
    set mode(mode: CameraMode);
    /**
     * Gets the camera mode (pivot, fps or all). See {@link CameraMode} for more information
     */
    get mode(): CameraMode;
    /**
     * Sets the pivot point to use a (mouse, touch) cursor-based pivot point (Auto).
     *
     * @param mode Should be PivotMode.Auto
     */
    setPivot(mode: PivotMode.Auto): void;
    /**
     * Sets the pivot point to a fixed point.
     * @param mode Should be PivotMode.Fixed
     * @param pivot The object or point that the camera should pivot around.
     */
    setPivot(mode: PivotMode.Fixed, pivot: Vector3 | BimIfcObject): void;
    /**
     * Returns the current camera position and target as a string
     */
    getViewAsString(): string;
    /**
     * Sets the camera's position and target from given string
     * @param viewString A string generated by {@link getViewAsString}
     */
    setViewFromString(viewString: string): void;
    /**
     * 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;
    /**
     * Gets or sets options for camera pivot control.
     */
    get cameraOptions(): CameraOptions;
    /**
     * @deprecated Same as {@link cameraOptions}.
     */
    get pivotOptions(): CameraOptions;
}
//# sourceMappingURL=BimCamera.d.ts.map