import * as THREE from 'three'; import { Parameter, ParameterValue } from './parameter'; import { Model } from './model'; import { type ViewLayer } from './view-layer'; import { type ParameterTilesetValue } from './parameter'; import { type TextureOptions } from "../types/imageOptions"; import { type Works } from '../work'; import { type Camera } from '../core/camera'; import { type Intersection } from './intersection'; import { type BoundingVolume, type BoundingVolumeJson } from '../utils/volume'; import { BoundingMesh } from "../meshes/boundingMesh"; export interface ModelOptions { /** 模型是否感光 */ light?: boolean; /** 模型 3d-tile 参数 */ "3d-tiles"?: (Partial & { viewerRequestVolume?: BoundingVolume | BoundingVolumeJson; showLayers?: boolean | string[]; }) | ((viewLayer: ViewLayer, model: Model) => void | (Partial & { viewerRequestVolume?: BoundingVolume | BoundingVolumeJson; showLayers?: boolean | string[]; })); /** * 模型贴图的配置参数 * @description * 可以动态对配置在 `work` 数据中的模型贴图在 runtime 做 url 调整。 * 平衡加载时间和图片质量 */ textureOptions?: TextureOptions; /** 强制显示模型,不等待加载完 */ forceReplaceImmediately?: boolean; } export type Models = Model[] & { /** * @deprecated * use `modelScene.autoRefine` instead */ autoUpdate: boolean; /** * @deprecated * use `modelScene.boundingBox` instead */ bounding: THREE.Box3; /** * @deprecated * use `modelScene.loaded` instead */ loaded: boolean; /** * @deprecated * use `modelScene.refined` instead */ refined: boolean; /** * @deprecated * use `modelScene.refineProgress` instead */ refineProgress: [number, number]; /** * @deprecated * use `modelScene.parameter.cacheCameras` `modelScene.parameter.set('cacheCameras', cacheCameras)` instead */ cacheCameras: readonly (THREE.PerspectiveCamera | Camera)[]; /** * @deprecated * use `modelScene.intersectRaycaster` instead */ intersectRaycaster(raycaster: THREE.Raycaster): Intersection[]; /** * @deprecated * Use `.parameter.set` instead */ setMaterial(values: Partial): void; /** * @deprecated * Use `.parameter.get` instead */ getMaterial(): ParameterValue; /** * @deprecated * Use `.parameter.reset('brightness')` instead */ resetBrightness(): void; }; export interface ModelScene { dispatchEvent(event: { type: 'model.create'; model: Model; }): void; dispatchEvent(event: { type: 'model.dispose'; model: Model; }): void; dispatchEvent(event: { type: string; [attachment: string]: any; }): void; addEventListener(type: 'model.create', listener: (event: THREE.Event & { type: 'model.create'; model: Model; }) => void): void; addEventListener(type: 'model.dispose', listener: (event: THREE.Event & { type: 'model.dispose'; model: Model; }) => void): void; addEventListener(type: string, listener: (event: THREE.Event) => void): void; removeEventListener(type: 'model.create', listener: (event: THREE.Event & { type: 'model.create'; model: Model; }) => void): void; removeEventListener(type: 'model.dispose', listener: (event: THREE.Event & { type: 'model.dispose'; model: Model; }) => void): void; removeEventListener(type: string, listener: (event: THREE.Event) => void): void; } export declare class ModelScene extends THREE.Scene { fiveId: string; needsRender: boolean; /** 自动细化 */ autoRefine: boolean; /** 包围盒 */ boundingBox: THREE.Box3; /** 包围盒 Mesh */ boundingMesh: BoundingMesh; /** 加载完成 */ loaded: boolean; /** 细化完成 */ refined: boolean; /** 细化进度 */ refineProgress: [number, number]; /** 参数 */ parameter: Parameter; /** 模型列表 */ readonly models: Models; private readonly shownModels; private updateModelMap; constructor(options: { fiveId: string; }); setModels(works: Works, options: ModelOptions): Model[]; get empty(): boolean; /** * 计算模型射线碰撞检测 * @param raycaster - THREE 射线对象 * @param target - 返回碰撞点 * @returns 返回碰撞点 */ intersectRaycaster(raycaster: THREE.Raycaster, target?: Intersection[]): Intersection[]; update(renderer: THREE.WebGLRenderer, camera: Camera): boolean; /** * @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.reset('brightness')` instead */ resetBrightness(): void; dispose(): void; }