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() 方式返回。 */ 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; /** 初次加载完成 */ loadedReady: Promise; /** 外接盒子的大小 */ 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): 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; }