import * as THREE from "three";
import { BaseViewer } from "./BaseViewer";
import { ViewerName } from "./Constants";
import { Viewer3dConfig, ModelConfig, Viewpoint } from "../../core/Configs";
import { EventInfo } from "../../core/input-manager/InputManager";
import { BimTilesModel, TileObject } from "../../core/model";
/**
 * BimTilesViewer
 */
export declare class BimTilesViewer extends BaseViewer {
    name: ViewerName;
    protected pickUsageScene: THREE.Scene;
    loadedModels: BimTilesModel[];
    selectedObject?: TileObject;
    /**
     * Enables the feature to hover on an object and blend it color a bit.
     */
    enableHoverEffect: boolean;
    constructor(viewerCfg: Viewer3dConfig, homeView?: Viewpoint);
    protected setupDefaultEvents(): void;
    protected setDefaultBackground(): void;
    protected handleAnchorPoint(intersect?: THREE.Intersection): void;
    protected handleClickObject(intersection: TileObject): void;
    is3d(): boolean;
    /**
     * Sets a model's opacity.
     */
    setModelOpacity(modelId: string, opacity: number): void;
    /**
     * Clears a model's opacity.
     */
    clearModelOpacity(modelId: string): void;
    /**
     * Sets all models' opacity.
     */
    setModelsOpacity(opacity: number): void;
    /**
     * Clears all models' opacity.
     */
    clearModelsOpacity(): void;
    /**
     * Enables a model's outline.
     */
    enableModelOutline(modelId: string, enable: boolean): void;
    /**
     * Enables all models' outline.
     */
    enableModelsOutline(enable: boolean): void;
    setModelVisible(modelId: string, visible: boolean): void;
    setModelsVisible(visible: boolean): void;
    clearHighlight(): void;
    setDoubleSidedMaterials(): void;
    revertDoubleSidedMaterials(): void;
    clearSelection(): void;
    /** True when the user has an active tile pick selection (independent of the current cursor hit). */
    hasSelectedObject(): boolean;
    /**
     * Gets if selection is enabled.
     */
    get enableSelection(): boolean;
    /**
     * Sets if selection is enabled.
     */
    set enableSelection(enable: boolean);
    /**
     * Focuses on a tile object and keeps the current camera view direction (same as {@link BaseViewer.flyToObject}).
     */
    flyToUserId(tilesetId: number, userId: number): void;
    getBoxByUserId(tilesetId: number, userId: number): THREE.Box3 | undefined;
    protected handleMouseMove(event: EventInfo): void;
    private update3dTiles;
    /**
     * BimTiles does not support external incoming matrix.
     * Don't support external incoming modelId.
     */
    loadModel(modelCfg: ModelConfig, onProgress?: ((event: ProgressEvent<EventTarget>) => void) | undefined): Promise<void>;
    setObjectHighlight(object: THREE.Object3D): void;
    setObjectHighlightedByUserIds(modelId: number, userIds: number[], highlight: boolean): void;
    setObjectOpacityByUserIds(modelId: number, userIds: number[], opacity: number): void;
    setOtherObjectOpacityByUserIds(modelId: number, userIds: number[], opacity: number): void;
    setObjectVisibleByUserIds(modelId: number, userIds: number[], visible: boolean): void;
    setOtherObjectVisibleByUserIds(modelId: number, userIds: number[], visible: boolean): void;
    setObjectHoveredByUserId(modelId: number, userId: number, hovered: boolean): void;
    /**
     * Gets the hovered object if any.
     */
    getHoveredObject(): TileObject | undefined;
    clearHovered(): void;
    /**
     * Checks if there is any visible object.
     */
    hasVisibleObject(): boolean;
    /**
     * Checks if there is any invisible object.
     */
    hasInvisibleObject(): boolean;
    /**
     * Isolates given object.
     * Which means, other objects will be hidden or transparent.
     */
    /**
     * Isolates given objects.
     * Which means, other objects will be hidden or transparent.
     */
    setModelClipPlanes(modelId: number, planes: THREE.Plane[]): void;
    setGlobalClipPlanes(planes: THREE.Plane[]): void;
    showVertexNormals(show: boolean, size?: number): void;
    getLights(): {
        sun: THREE.DirectionalLight;
        ambient: THREE.Object3D<THREE.Object3DEventMap> | undefined;
        hemisphere: THREE.Object3D<THREE.Object3DEventMap> | undefined;
    };
    debugLights(enable: boolean): void;
    /**
     * Picks objects by mouse position.
     * First get the object through the gpu, and then get the specific intersection point
     */
    pickObjects(mousePosition: THREE.Vector2, layerChannels?: number[]): THREE.Intersection<THREE.Object3D<THREE.Object3DEventMap>>[];
    /**
     * GPU pick on the BimTiles pick pass. Updates tile LOD only; does not draw the main scene to the canvas
     * (avoids bypassing EffectComposer and tinting the skybox / background).
     * @returns `{ tilesetId, userId }` when a tile was hit, otherwise `undefined`.
     */
    pickTileObject(mousePosition: THREE.Vector2): TileObject | undefined;
    /**
     * `errorTarget` refers to The target screenspace error in pixels to target when updating the geometry.
     * It represents the maximum acceptable error in pixels for the tiles' geometry.
     * When the actual screenspace error of a tile is below this target, the tile will not be rendered,
     * as it is considered too detailed for the current view.
     * So, a higher `errorTarget` value results in better performance, but less detail in the rendered scene.
     * @default 8
     */
    getErrorTarget(): number;
    /**
     * Sets errorTarget for all models.
     */
    setErrorTarget(errorTarget: number): void;
}
