import { EventDispatcher, Vector3, Object3D, Box3 } from "three";
import { Graphic, Poi, Floor, Poi2 } from "../elements";
import { Selection } from "../operations/selection/selection";
import { HoverHelper } from "../operations";
import { CameraBound } from "../utils/camera-bound";
import { Control } from "./control";
import { Renderer } from "./renderer";
import { ContextScene } from "./scene";
import { ContextCamera } from "./camera";
import { BMap } from "../bmap";
import { CollisionSystem } from "./collision-system";
export interface ContextEventMap {
    update: {};
    "graphic-click": {
        graphics: Graphic[];
        position: Vector3 | null;
    };
    "poi-click": {
        pois: Poi[];
    };
    'pointer-level': {};
    'pointer-over': {
        e: PointerEvent;
        graphics: Graphic[];
        pois: Poi[];
        position: Vector3 | null;
    };
    'pointer-move': {
        e: PointerEvent;
        graphics: Graphic[];
        pois: Poi[];
        position: Vector3 | null;
    };
    'change-ratio': {
        px: number;
    };
    "select-graphic": {
        graphics: Graphic[];
        isMultipleSelect: boolean;
    };
    "hover": {
        graphics: Graphic[];
    };
    "control-change": {};
    "resize": {
        width: number;
        height: number;
    };
    "control-zoom-change": {
        zoom: number;
    };
}
export declare class Context extends EventDispatcher<ContextEventMap> {
    container: HTMLElement;
    bmap: BMap;
    scene: ContextScene;
    renderer: Renderer;
    camera: ContextCamera;
    control: Control;
    lights: import("three").Group<import("three").Object3DEventMap>;
    currentFloor?: Floor;
    selection: Selection;
    hoverHelper: HoverHelper;
    private basicRatio?;
    cameraBound: CameraBound;
    collisionSystem: CollisionSystem;
    range: import("@turf/turf").Feature<import("@turf/turf").Polygon, import("@turf/turf").Properties>;
    clientSize: {
        width: number;
        height: number;
        x: number;
        y: number;
    };
    renderRf: number;
    basicZoom: number;
    constructor(container: HTMLElement, bmap: BMap);
    get config(): import("..").Config;
    get center(): [number, number];
    setRange(range: [number, number][]): void;
    resizeClientSize(): void;
    init(): void;
    onControlChange: () => void;
    onControlChangeZoom: ({ zoom }: {
        zoom: number;
    }) => void;
    onRendererUpdate: () => void;
    /**
     * 获取两个点之间的像素数
     */
    getRatio(point1?: Vector3, point2?: Vector3): number;
    changeAmbientLightColor(color: string | number): void;
    switchFloor(floor: Floor, disposeFloor?: boolean): void;
    onWindowResize: () => void;
    onClick: (e: MouseEvent) => void;
    /**
     * 获取屏幕坐标对应的graphic
     * @param x
     * @param y
     * @returns
     */
    getGraphicsByDeviceXy(x: number, y: number): {
        graphics: Graphic[];
        position: Vector3 | null;
    };
    /**
     * 获取屏幕坐标对应的poi
     * @param x
     * @param y
     * @returns
     */
    getPoisByDeviceXy(x: number, y: number): (Poi | Poi2)[];
    onPointerover: (e: PointerEvent) => void;
    onPointermove: (e: PointerEvent) => void;
    onPointerleave: (e: PointerEvent) => void;
    onSelectionSelect: ({ graphics, isMultipleSelect }: {
        graphics: Graphic[];
        isMultipleSelect: boolean;
    }) => void;
    onHoverChange: ({ graphics }: {
        graphics: Graphic[];
    }) => void;
    registryEvent(): void;
    unRegistryEvent(): void;
    /**
     * 设置纵向旋转角度
     * @param polar 弧度
     */
    setPolarAngle(polar: number, duration?: number): Promise<unknown>;
    /**
     * 设置横向旋转角度
     * @param azimuthal 弧度
     */
    setAzimuthalAngle(azimuthal: number, duration?: number): void | Promise<unknown>;
    getCameraLookAt(): Vector3;
    /**
     * 按照一个中心点设置相机的放大缩小
     * @param zoom
     * @param center
     * @returns
     */
    setZoom(zoom: number, center: Vector3, duration?: number): Promise<unknown>;
    getFitCameraToObjectZoom(object: Object3D, padding?: [number, number, number, number], force2DView?: boolean): {
        zoom: number;
        center: Vector3;
    };
    getFitCameraToBoxZoom(box: Box3, padding?: [number, number, number, number], force2DView?: boolean): {
        zoom: number;
        center: Vector3;
    };
    /**
     * 放大相机到物体占全屏
     * @param object
     * @param padding
     * @param duration
     * @returns
     */
    fitCameraToObject(object: Object3D, padding?: [number, number, number, number], duration?: number, force2DView?: boolean): Promise<unknown>;
    fitCameraToBox(box: Box3, padding?: [number, number, number, number], duration?: number, force2DView?: boolean): Promise<unknown>;
    getFitCameraToGroundZoom(padding?: [number, number, number, number], duration?: number, force2DView?: boolean): number | undefined;
    fitCameraToGround(padding?: [number, number, number, number], duration?: number, force2DView?: boolean): Promise<unknown>;
    /**
     * 修改相机位置
     * @param position 修改后的相机的位置
     * @param duration 动画持续时间
     */
    setCameraPosition(position: Vector3, duration: number): Promise<unknown>;
    pauseRender(): void;
    continueRender(): void;
    forceUpdate(): void;
    dispose(): void;
}
