import * as THREE from "three";
import { type ViewLayer } from './view-layer';
import { type Work } from "../work";
import { type TextureOptions } from "../types/imageOptions";
import { type Intersection } from "./intersection";
import { type Camera } from "../core/camera";
import { Parameter, type ParameterValue } from './parameter';
import { type ModelScene } from './model-scene';
import { type Tile } from './tile3d/tile';
export interface Model {
    dispatchEvent(event: {
        type: 'error';
        error: Error;
    }): void;
    dispatchEvent(event: {
        type: 'load';
    }): void;
    dispatchEvent(event: {
        type: 'dispose';
    }): void;
    dispatchEvent(event: {
        type: 'changeShownFloor';
        floorIndex: number | null;
    }): void;
    dispatchEvent(event: {
        type: 'tileLoad';
        tile: Tile;
    }): void;
    dispatchEvent(event: {
        type: 'tileUnload';
        tile: Tile;
    }): void;
    dispatchEvent(event: {
        type: string;
        [attachment: string]: any;
    }): void;
    addEventListener(type: 'error', listener: (event: THREE.Event & {
        type: 'error';
        error: Error;
    }) => void): void;
    addEventListener(type: 'load', listener: (event: THREE.Event & {
        type: 'load';
    }) => void): void;
    addEventListener(type: 'dispose', listener: (event: THREE.Event & {
        type: 'dispose';
    }) => void): void;
    addEventListener(type: 'changeShownFloor', listener: (event: THREE.Event & {
        type: 'changeShownFloor';
        floorIndex: number | null;
    }) => void): void;
    addEventListener(type: 'tileLoad', listener: (event: THREE.Event & {
        type: 'tileLoad';
        tile: Tile;
    }) => void): void;
    addEventListener(type: 'tileUnload', listener: (event: THREE.Event & {
        type: 'tileUnload';
        tile: Tile;
    }) => void): void;
    addEventListener(type: string, listener: (event: THREE.Event) => void): void;
    removeEventListener(type: 'error', listener: (event: THREE.Event & {
        type: 'error';
        error: Error;
    }) => void): void;
    removeEventListener(type: 'load', listener: (event: THREE.Event & {
        type: 'load';
    }) => void): void;
    removeEventListener(type: 'dispose', listener: (event: THREE.Event & {
        type: 'dispose';
    }) => void): void;
    removeEventListener(type: 'changeShownFloor', listener: (event: THREE.Event & {
        type: 'changeShownFloor';
        floorIndex: number | null;
    }) => void): void;
    removeEventListener(type: 'tileLoad', listener: (event: THREE.Event & {
        type: 'tileLoad';
        tile: Tile;
    }) => void): void;
    removeEventListener(type: 'tileUnload', listener: (event: THREE.Event & {
        type: 'tileUnload';
        tile: Tile;
    }) => void): void;
    removeEventListener(type: string, listener: (event: THREE.Event) => void): void;
}
/**
 * Five 模型
 * @description
 * 通过 work 数据加载, 适配 at3d、pbm、dome、domez 格式的文件
 * 可以通过 jsonp 解析 base64 的 dataURL 内容，
 * 需要满足 your/path/filename.at3d.json_xxxxxx,
 * 通过 json_xxxxxx(<dataURL>) 方式返回。
 */
export declare class Model extends THREE.Object3D {
    fiveId: string;
    parent: ModelScene | null;
    needsRender: boolean;
    children: ViewLayer[];
    add: (...object: ViewLayer[]) => this;
    private disposed;
    parameter: Parameter;
    /** work */
    work: Work;
    /** 是否过期 */
    outdated: boolean;
    /** 是否自动细化 */
    autoRefine: boolean;
    /** 是否在加载元信息 */
    metaPending: boolean;
    /** 模型已经加载 */
    loaded: boolean;
    /** 模型是否已经细化 */
    refined: boolean;
    /** 模型细化进度 */
    refineProgress: [number, number];
    /** 初始化完成 */
    initReady: Promise<Model>;
    /** 初次加载完成 */
    loadedReady: Promise<Model>;
    /** 外接盒子的大小 */
    boundingBox: THREE.Box3;
    /** 所有楼层 */
    floorLength: number;
    constructor(fiveId: string, work: Work, options?: {
        light?: boolean;
        textureOptions?: TextureOptions;
    });
    /** 析构函数 一旦析构，则不能使用 */
    dispose(): void;
    /** 模型内容是否为空 */
    get empty(): boolean;
    /** 模型的不同图层 */
    get viewLayers(): ViewLayer[];
    /**
     * 获取模型边界线
     * @param sphere - 获取区域
     * @param threshold - 面片间夹角阈值
     * @returns 所有模型边界线
     */
    getEdgesBySphere(sphere: THREE.Sphere, threshold?: number): THREE.Line3[];
    /**
     * 计算模型射线碰撞检测
     * @param raycaster - THREE 射线对象
     * @param target - 返回碰撞
     * @returns 返回碰撞
     */
    intersectRaycaster(raycaster: THREE.Raycaster, target?: Intersection[]): Intersection[];
    update(renderer: THREE.WebGLRenderer, camera: Camera, modelScene: ModelScene): boolean;
    localToEnu(vector: THREE.Vector3): THREE.Vector3;
    enuToLocal(vector: THREE.Vector3): THREE.Vector3;
    worldToEnu(vector: THREE.Vector3): THREE.Vector3;
    enuToWorld(vector: THREE.Vector3): THREE.Vector3;
    /**
     * 当前显示的楼层
     */
    get shownFloor(): number | null;
    set shownFloor(floor: number | null);
    /**
     * 显示某楼层
     * @example
     * ```
     * model.show() //显示全部楼层
     * model.show(1) //显示第一楼层
     * ```
     */
    show(floor?: number | null): void;
    /**
     * @deprecated
     * Use `.boundingBox` instead
     */
    get bounding(): THREE.Box3;
    /**
     * @deprecated
     * Use `.parameter.set` instead
     */
    setMaterial(parameter: Partial<ParameterValue>): void;
    /**
     * @deprecated
     * Use `.parameter.get` instead
     */
    getMaterial(): ParameterValue;
    /**
     * @deprecated
     * Use `.parameter.shownFloorIndex` `.parameter.set('brightness', brightness)` instead
     */
    get shownFloorIndex(): ParameterValue['shownFloorIndex'];
    set shownFloorIndex(floorIndex: ParameterValue['shownFloorIndex']);
    /**
     * @deprecated
     * Use `.parameter.brightness` `.parameter.set('brightness', brightness)` instead
     */
    get brightness(): ParameterValue['brightness'];
    set brightness(brightness: ParameterValue['brightness']);
    /**
     * @deprecated
     * Use `.parameter.clippers` `.parameter.set('clippers', clippers)` instead
     */
    get clippers(): ParameterValue['clippers'];
    set clippers(clippers: ParameterValue['clippers']);
    /**
     * @deprecated
     * Use `.parameter.customShaders` `.parameter.set('customShaders', customShaders)` instead
     */
    get customShaders(): ParameterValue['customShaders'];
    set customShaders(customShaders: ParameterValue['customShaders']);
    /**
     * @deprecated
     * Use `.parameter.reset('brightness')` instead
     */
    resetBrightness(): void;
}
