import { ArcRotateCamera, BoundingInfo } from '../runtime';
import { Base } from '../base/Base';
import { App } from '../core/App';
import { Entity } from '../entity/Entity';
import { CameraMode } from './CameraMode';
import { Point3D } from '../misc/Point3D';
import { CameraPerson } from './CameraPerson';
import { OrthographicView } from './OrthographicView';
import { AutoRotate } from './AutoRotate';
import { EasingFunction } from './EasingFunction';
/**
 * 相机管理器
 */
export declare class CameraMgr extends Base {
    /**
     * 相机
     */
    camera: ArcRotateCamera;
    private _updateObserver;
    private _flyTween;
    private _cache;
    private _radiusLimit;
    private _flyStartData;
    private _flyEndData;
    private _flyingData;
    private _person;
    /**
     * 是否锁定拖动的灵敏度（直径小于5时生效，用于资产模型编辑）
     */
    lockPanning: boolean;
    /**
     * 自动旋转
     */
    readonly autoRotate: AutoRotate;
    /**
     * 实例化一个相机管理器对象
     * @param app 应用
     */
    constructor(app: App);
    /**
     * 获取或设置人称
     */
    get person(): CameraPerson;
    set person(value: CameraPerson);
    _setCameraByRoaming(): Promise<void>;
    /**
     * 获取相机是否在飞行
     */
    get flying(): boolean;
    /**
     * 获取或设置近裁剪面距离
     */
    get near(): number;
    set near(value: number);
    /**
     * 获取或设置远裁剪面距离
     */
    get far(): number;
    set far(value: number);
    /**
     * 获取或设置是否开启相机操作（包括旋转、平移、缩放）
     */
    get inputEnabled(): boolean;
    set inputEnabled(value: boolean);
    /**
     * 获取或设置旋转启用（仅左键，中键不禁用）
     */
    get enableRotate(): boolean;
    set enableRotate(value: boolean);
    /**
     * 获取或设置缩放启用
     */
    get enableZoom(): boolean;
    set enableZoom(value: boolean);
    /**
     * 获取或设置平移启用
     */
    get enablePan(): boolean;
    set enablePan(value: boolean);
    private _setButtonEnable;
    /**
     * 获取或设置相机沿Y轴的旋转角度（弧度）
     */
    get alpha(): number;
    set alpha(value: number);
    /**
     * 获取或设置相机沿X轴的旋转角度（弧度）
     */
    get beta(): number;
    set beta(value: number);
    /**
     * 获取或设置相机到目标点的半径
     */
    get radius(): number;
    set radius(value: number);
    /**
     * 获取或设置目标点位置
     */
    get target(): Point3D;
    set target(value: Point3D);
    /**
     * 获取或设置相机位置
     */
    get position(): Point3D;
    set position(value: Point3D);
    /**
     * 获取或设置当前在Y轴上的惯性值。这个数字越大，相机停止的时间就越长。
     */
    get inertialAlphaOffset(): number;
    set inertialAlphaOffset(value: number);
    /**
     * 获取或设置当前在X轴上的惯性值。这个数字越大，相机停止的时间就越长。
     */
    get inertialBetaOffset(): number;
    set inertialBetaOffset(value: number);
    /**
     * 获取或设置Y轴上允许的最小角度。这可以帮助限制相机在场景中移动的方式。
     */
    get lowerAlphaLimit(): number;
    set lowerAlphaLimit(value: number);
    /**
     * 获取或设置Y轴上允许的最大角度。这可以帮助限制相机在场景中移动的方式。
     */
    get upperAlphaLimit(): number;
    set upperAlphaLimit(value: number);
    /**
     * 获取或设置X轴上允许的最小角度。这可以帮助限制相机在场景中移动的方式。
     */
    get lowerBetaLimit(): number;
    set lowerBetaLimit(value: number);
    /**
     * 获取或设置X轴上允许的最大角度。这可以帮助限制相机在场景中移动的方式。
     */
    get upperBetaLimit(): number;
    set upperBetaLimit(value: number);
    /**
     * 获取或设置相机与目标允许的最小距离(相机不能靠近)。这可以帮助限制相机在场景中移动的方式。
     */
    get lowerRadiusLimit(): number;
    set lowerRadiusLimit(value: number);
    /**
     * 获取或设置相机与目标的最大允许距离(相机不能再远)。这可以帮助限制相机在场景中移动的方式。
     */
    get upperRadiusLimit(): number;
    set upperRadiusLimit(value: number);
    /**
     * 获取或设置摄像机沿X轴平移期间使用的当前惯性值。
     */
    get inertialPanningX(): number;
    set inertialPanningX(value: number);
    /**
     * 获取或设置摄像机沿Y轴平移期间使用的当前惯性值。
     */
    get inertialPanningY(): number;
    set inertialPanningY(value: number);
    /**
     * 获取或设置在平移模式和捏/缩放模式下考虑相机的距离。基本上，如果你的手指移开超过这个距离，你会被认为在捏模式。
     */
    get pinchToPanMaxDistance(): number;
    set pinchToPanMaxDistance(value: number);
    /**
     * 获取或设置相机可以平移的最大距离。这可以帮助相机始终在你的场景中。
     */
    get panningDistanceLimit(): number;
    set panningDistanceLimit(value: number);
    /**
     * 获取或设置相机的平移目标
     */
    get panningOriginTarget(): [number, number, number];
    set panningOriginTarget(value: [number, number, number]);
    /**
     * 获取或设置在平移过程中使用的惯性值。0表示停止惯性，1表示没有减速。
     */
    get panningInertia(): number;
    set panningInertia(value: number);
    /**
     * 获取或设置指针沿X轴的角度灵敏度或摄像机旋转的速度。
     */
    get angularSensibilityX(): number;
    set angularSensibilityX(value: number);
    /**
     * 获取或设置指针沿Y轴的角度灵敏度或摄像机旋转的速度。
     */
    get angularSensibilityY(): number;
    set angularSensibilityY(value: number);
    /**
     * 获取或设置指针缩放精度或相机缩放的速度。
     */
    get pinchPrecision(): number;
    set pinchPrecision(value: number);
    /**
     * 获取或设置指针缩放增量百分比或摄像机缩放的速度。如果不为0，则使用它来代替pinchDeltaPrecision。它定义了当前相机的百分比。缩放时使用的半径作为增量。
     */
    get pinchDeltaPercentage(): number;
    set pinchDeltaPercentage(value: number);
    /**
     * 获取或设置指针使用自然缩放来覆盖缩放精度和缩放增量百分比。当usennaturalpinchzoom是真实的，多点触摸变焦将在这样的任何物体在飞机上的相机的目标点将缩放完美的手指运动。
     */
    get useNaturalPinchZoom(): boolean;
    set useNaturalPinchZoom(value: boolean);
    /**
     * 获取或设置指针平移的灵敏度或相机移动的速度。
     */
    get panningSensibility(): number;
    set panningSensibility(value: number);
    /**
     * 获取或设置鼠标滚轮精度或摄像机缩放的速度。
     */
    get wheelPrecision(): number;
    set wheelPrecision(value: number);
    /**
     * 获取或设置鼠标滚轮增量百分比或摄像机缩放的速度。如果不为0，则使用它来代替pinchDeltaPrecision。它定义了当前相机的百分比。缩放时使用的半径作为增量。
     */
    get wheelDeltaPercentage(): number;
    set wheelDeltaPercentage(value: number);
    /**
     * 通过zoomOn函数定义在一个特定的网格上缩放半径的大小。
     */
    get zoomOnFactor(): number;
    set zoomOnFactor(value: number);
    /**
     * 定义相机位置的屏幕偏移量。
     */
    get targetScreenOffset(): [x: number, y: number];
    set targetScreenOffset(value: [x: number, y: number]);
    /**
     * 允许相机完全反转。如果是假的，相机不能倒过来。
     */
    get allowUpsideDown(): boolean;
    set allowUpsideDown(value: boolean);
    /**
     * 获取或设置相机的模式，0=透视，1=正交
     */
    get mode(): CameraMode;
    set mode(value: CameraMode);
    /**
     * 获取或设置正交投影的左边距
     */
    get orthoLeft(): number;
    set orthoLeft(value: number);
    /**
     * 获取或设置正交投影的右边距
     */
    get orthoRight(): number;
    set orthoRight(value: number);
    /**
     * 获取或设置正交投影的顶边距
     */
    get orthoTop(): number;
    set orthoTop(value: number);
    /**
     * 获取或设置正交投影的底边距
     */
    get orthoBottom(): number;
    set orthoBottom(value: number);
    /**
     * 获取正交投影的宽度
     */
    get orthoWidth(): number;
    /**
     * 获取正交投影的高度
     */
    get orthHeight(): number;
    /**
     * 从给定位置和目标重建角度(alpha, beta)和半径
     */
    rebuildAnglesAndRadius(): void;
    /**
     * 使用一个位置来定义当前相机的相关信息，如alpha, beta和半径
     * @param position 定义要设置摄像机的位置
     */
    setPosition(position: Point3D): void;
    /**
     * 定义相机应该查看的目标。这将自动调整alpha、beta和半径以适应新的目标。
     * @param target 新目标
     */
    setTarget(target: Point3D): void;
    private _onPerspectiveUpdate;
    private _onOrthographicUpdate;
    private _onUpdate;
    /**
     * 更新限制（切换场景后调用）
     */
    updateLimit(): void;
    /**
     * 自适应观察指定物体
     * @param obj 物体
     * @param time 花费的时间，默认值500毫秒
     * @param callback 完成回调函数
     */
    fit(obj: Entity | BoundingInfo, time?: number, callback?: () => void): void;
    /**
     * 自适应观察指定物体数组
     * @param arr 物体数组
     * @param time 花费的时间，默认值500毫秒
     * @param callback 完成回调函数
     */
    fitArray(arr: Entity[], time?: number, callback?: () => void): void;
    /**
     * 飞行
     * @param position 相机位置
     * @param target 目标
     * @param time 花费的时间，默认值2000毫秒
     * @param callback 完成回调函数
     * @param easing 缓动函数类型
     */
    flyTo(position: Point3D, target: Point3D, time?: number, callback?: () => void, easing?: EasingFunction): void;
    private _updateOrthographic;
    /**
     * 停止飞行
     */
    stopFlying(): void;
    private _updateAngelLimit;
    /**
     * 切换到正交投影
     * @param time 事件，默认500毫秒
     * @param callback 回调函数，默认为空
     * @param view 视图，默认顶视图
     */
    toOrthographic(time?: number, callback?: () => void, view?: OrthographicView): void;
    /**
     * 切换到透视投影
     */
    toPerspective(time?: number, callback?: () => void): void;
    /**
     * 释放
     */
    dispose(): void;
    /**
     * 打印日志
     */
    log(): void;
}
