import "@babylonjs/loaders/glTF"; import "@babylonjs/core/Helpers/sceneHelpers"; import "@babylonjs/core/Debug/debugLayer"; import "@babylonjs/inspector"; import * as BABYLON from '@babylonjs/core'; import { AnonymousObj, IViewPort, CameraTransform, FlyViewPort, Pump, ActionCb, DeviceState, BuildingInfo, CoverPOI, CoverFire, CoverPathLine, HeatMapSetting, CoverPoint, IDict, PumpContainer, SectionBody, SectionBodyStyle, GroundHideOption, VideoFusionOption, EquWarningIdentifierType } from './Types'; import * as TYPES from './Types'; import { DebugWatcher } from './DebugWatcher'; import { UvAnimationMgr } from './UvAnimationMgr'; import { CameraControl } from './CameraControl'; import { LabelMgr } from "./LabelMgr"; import { ComponentMgr } from './ComponentMgr'; import { MaterialMgr } from './MaterialMgr'; import * as Constants from './Constants'; import { HeatMap } from './HeatMap'; import { ClippingMgr } from './ClippingMgr'; import { VideoFusionMgr } from './VideoFusionMgr'; import { WorkerPrefebMgr } from './WorkerPrefebMgr'; declare class Viewer { ContainerId: string; DebugWatcher: DebugWatcher; UvAnimationMgr: UvAnimationMgr; CameraControl: CameraControl; LabelMgr: LabelMgr; ComponentMgr: ComponentMgr; MaterialMgr: MaterialMgr; HeatMap: HeatMap; ClippingMgr: ClippingMgr; VideoFusionMgr: VideoFusionMgr; WorkerPrefebMgr: WorkerPrefebMgr; onComponentHover: BABYLON.Observable; onComponentOut: BABYLON.Observable; onComponentClick: BABYLON.Observable; onComponentSingleClick: BABYLON.Observable; onComponentDoubleClick: BABYLON.Observable; onDetachPump: BABYLON.Observable; onWindowResize: BABYLON.Observable; onModelLoad: BABYLON.Observable; private _onJsonLoadBefore; Canvas: HTMLCanvasElement; Engine: BABYLON.Engine; Scene: BABYLON.Scene; Highlight: BABYLON.HighlightLayer; Glow: BABYLON.GlowLayer; GlowMeshes: BABYLON.Mesh[]; Gizmos: BABYLON.GizmoManager; Pipeline: BABYLON.PostProcessRenderPipeline; private _loadingVp; private _remoteApi; private _highlightOption; get HighlightOption(): TYPES.HighlightOption; set HighlightOption(value: TYPES.HighlightOption); onHighlightOptionChanged: BABYLON.Observable; private _glowOption; get GlowOption(): TYPES.GlowOption; set GlowOption(value: TYPES.GlowOption); onGlowOptionChanged: BABYLON.Observable; _enterprise: 'None' | 'ShuiWu' | 'MianNing' | 'LuoShan'; constructor(containerId: string); private preInit; private getPlugins; private init; getSceneBounding(): BABYLON.BoundingBox; private _skySphereSize; private genSkyBox; save(obj?: AnonymousObj | null): Promise; private loadJson; private getJsonObj; private mergeJson; private parseJson; pumpContainer: PumpContainer; currPump: BABYLON.Nullable; /** * 加载泵站 * @param pumpName 泵站 例如:前海雨污 */ loadPump(pumpName: string, onPrimaryModelLoadCb: () => void, onModelLoadCb?: () => void, onSecondaryModelsProgress?: (progress: IDict) => void): Promise; /** * 加载冕宁 */ loadMianNing(onPrimaryModelLoadCb: () => void, onModelLoadCb?: () => void, onSecondaryModelsProgress?: (progress: IDict) => void): Promise; /** * 加载罗山 */ loadLuoShan(onPrimaryModelLoadCb: () => void, onModelLoadCb?: () => void, onSecondaryModelsProgress?: (progress: IDict) => void): Promise; /** * 测试 罗山-写实风 */ loadLuoShanSolid(onPrimaryModelLoadCb: () => void, onModelLoadCb?: () => void, onSecondaryModelsProgress?: (progress: IDict) => void): Promise; /** * 卸载 */ detachPump(): void; private _onGlbAppend; private loadPrimaryModels; private loadSecondaryModels; /** * 重置 */ reset(): void; /** * 加载时的镜头 * @param vp */ setLoadingViewPort(vp: IViewPort): void; /** * 设置默认灯光 */ setDefaultLight(turnOn: boolean, shadow: boolean, intensity?: number): void; /** * 获取地面隐藏选项 */ getGroundHideOption(): GroundHideOption; /** * 设置地面隐藏选项 */ setGroundHideOption(option: GroundHideOption): void; /** * 设置地面的可见性 * @param visibility 可见性 */ setGroundVisibility(visibility: boolean): void; /** * 设置描边选项 */ setHighLightOption(opt: TYPES.HighlightOption): void; /** * 设置物体描边 * @param mesh 三维物体 */ setObjectHighLight(mesh: BABYLON.Mesh, color: string): void; /** * 移除掉所有描边物体 */ removeAllHighLightMeshes(clearFlag?: boolean): void; /** * 移除物体描边 * @param mesh 三维物体 */ removeObjectHighLight(mesh: BABYLON.Mesh): void; /** * 设置发光 */ setGlowOption(opt: TYPES.GlowOption): void; /** * 设置物体高亮 * @param mesh 三维物体 */ setObjectGlow(mesh: BABYLON.Mesh): void; /** * 移除物体高亮 * @param mesh */ removeObjectGlow(mesh: BABYLON.Mesh): void; /** * 移除所有物体的高亮 */ removeAllGlowMeshes(): void; /** * 切换自由镜头 */ switchFree(): void; /** * 切换预览镜头 */ switchPreview(): void; /** * 切换第一人称 * @param transform 位置 目标 旋转 */ switchFirstPerson(transform?: CameraTransform): void; /** * 切换第三人称控制器 * @param characterTransform 人物的位置 目标 旋转 * @param contorlTransform 控制器的位置 目标 旋转 */ switchThirdPerson(characterTransform?: CameraTransform): void; /** * 切换飞行模式 */ switchFly(): void; /** * 开始飞行 * @param vps */ beginFly(vps: FlyViewPort[], cb?: () => void): void; /** * 获取镜头 * @returns 相机角度 */ getViewPort(): IViewPort; /** * 设置场景镜头 * @param vp 相机角度 * @param animation 是否带动画 */ setViewPort(vp: IViewPort, animation?: boolean): void; /** * 获取镜头 * @returns 相机角度 */ getCameraInfo(): IViewPort; /** * 设置场景镜头 * @param vp 相机角度 * @param animation 是否带动画 */ setCameraInfo(vp: IViewPort, animation?: boolean): void; private runDeviceAnimations; /** * 建筑拆解 * @param name 建筑名 */ buildingExplode(name: string, cb?: () => void): void; /** * 建筑还原 * @param name 建筑名 */ buildingRestore(name: string, cb?: () => void): void; /** * 是否启用墙体透明 */ setWallTransparentEnabled(enable: boolean): void; /** * 获取墙体透明参数 * @returns 是否启用 距离 不透明度 和退出建筑时恢复建筑的距离 */ getWallTransparentOptions(): { enable: boolean; distance: number; opacity: number; exitRestoreDistance: number; }; /** * 设置墙体透明参数 * @param opts 距离/不透明度/退出建筑时 恢复建筑的距离 */ setWallTransparentOptions(opts: { distance: number; opacity: number; exitRestoreDistance?: number; }): void; /** * 开启或关闭天空 */ setSkyVisibility(visibility: boolean): void; /** * 设置电子围栏的显示隐藏 * @param visibility 是否可见 * @returns */ setFenceVisibility(visibility: boolean): void; /** * 设置物体显示状态 * @param name 模型名 * @param enable 是否启用 */ setObjectEnableState(name: string, enable: boolean): void; /** * 获取建筑和楼层 */ getBuildingLevels(): TYPES.Building[]; /** * 拿到场景boundingbox * @returns boundingbox */ getWorldBounding(): BABYLON.BoundingBox; /** * 根据模型缩放到合适视角 * @param obj 模型名 mesh 或者 transformNode */ zoomObjectToFit(obj: String | BABYLON.AbstractMesh | BABYLON.TransformNode): void; setGizmoMesh(mesh: BABYLON.Nullable): void; clearGizmoMeshes(mesh?: BABYLON.AbstractMesh): void; /** * 是否启用位置Gizmo * @param enable 是否启用 */ setPositionGizmoEnable(enable: boolean): void; /** * 设置面板Gizmo */ /** * 获取建筑下面所有的设备 */ getBuildingEqus(): TYPES.DisplayBuildingEquipment[]; /** * 设置设备状态 * @param equName 模型名 * @param state 设备状态 */ setEquState(equName: string, state: DeviceState): void; /** * 设置设备运行颜色 */ setEquRunColor(equName: string, color: string): void; /** * 设备停止颜色 */ setEquStopColor(equName: string, color: string): void; /** * 设置设备警告参数 */ setEquWarning(equName: string, color: string, speed: number): void; /** * 获取报警标识设置 */ getEquWarningIdentifierTypes(): EquWarningIdentifierType[]; /** * 设置警告标识 */ setEquWarningIdentifierType(setting: EquWarningIdentifierType): void; /** * 设置设备闪烁提醒 * @param modelName 模型名 */ setEquPrompt(modelName: string): void; /** * 是否启用管道工艺 */ setPipeTechEnable(enable: boolean): void; /** * 设置管道工艺速度 */ setPipeTechSpeed(speed: number, uvScale: number): void; /** * 获取所有建筑 */ getBuildingInfos(): BuildingInfo[]; /** * 设置建筑消失动画的参数 * @param buildingName 建筑名 * @param second 秒数 */ setBuildingDisappearAnimation(buildingName: string, second: number): void; /** * 播放建筑消失动画 * @param buildingName 建筑名 * @param loop 是否循环 */ playBuildingDisappearAnimation(buildingName: string, loop?: boolean): void; /** * 停止建筑消失动画 * @param buildingName 建筑名 * @param restore 是否恢复到第一帧的状态 */ stopBuildingDisappearAnimation(buildingName: string, restore?: boolean): void; /** * 添加poi */ addPOI(name: string, cb?: () => void): void; /** * 获取poi */ getPOIs(): CoverPOI[]; /** * 生成poi */ reGenPOI(poi: CoverPOI, cb?: () => void): void; /** * 移除poi */ removePOI(name: string): void; /** * 移除所有poi */ removeAllPOI(): void; /** * 设置poi可见性 */ setPOIVisibility(visibility: boolean): void; /** * 缩放poi到合适的视角 */ zoomPOIToFit(name: string): void; /** * 重命名poi */ renamePOI(name: string, poi: CoverPOI, cb?: () => void): void; /** * 获取火 */ getFires(): CoverFire[]; /** * 重新生成火 */ reGenFire(fire: CoverFire, cb?: () => void): void; /** * 新增火 */ addFire(name: string, type: 'fire' | 'fire2', cb?: () => void): void; /** * 移除火 */ removeFire(name: string): void; /** * 移除所有火 */ removeAllFire(): void; /** * 设置火的可见性 */ setFireVisibility(visibility: boolean): void; /** * 重命名火 */ renameFire(name: string, fire: CoverFire, cb?: () => void): void; /** * 拉近火到合适的视角 */ zoomFireToFit(name: string): void; /** * 获取所有路径线 */ getPathLines(): CoverPathLine[]; /** * 添加路径线 */ addNewPathLine(name: string): void; /** * 重新生成路径线 */ regenPathLine(pathLine: CoverPathLine): void; /** * 编辑路径线 */ editPathLine(pathLine: CoverPathLine, cb?: () => void): void; /** * 退出路径线编辑 */ exitPathLineEdit(): void; /** * 设置路径线锚点的直径 */ setPathLineAnchorDiameter(diameter: number): void; /** * 重命名路径线 */ renamePathLine(pathLine: CoverPathLine, destName: string): void; /** * 获取热力图的设置 */ getHeatMapSetting(): HeatMapSetting; /** * 应用热力图的设置 */ applyHeatMapSetting(setting: HeatMapSetting): void; /** * 根据屏幕坐标拾取三维物体 */ screenPick(x: number, y: number): BABYLON.PickingInfo; /** * 开启拾取点 */ enablePickingPoint(enable: boolean): void; /** * 设置拾取点的回调 添加/修改/删除 */ setPickingPointModifiedCb(onModified: (action: string, cover: CoverPoint) => void): void; /** * 设置拾取点的退出回调 */ setPickingPointCancelCb(onCancel: () => void): void; /** * 更新拾取点 */ updatePickingPoint: (point: CoverPoint) => void; /** * 获取所有拾取的点 */ getPickingPoints(): CoverPoint[]; /** * 删除坐标点 */ removePickingPoint(point: CoverPoint): void; /** * 删除所有坐标点 */ removeAllPickingPoint(): void; /** * 设置预览相机的平移按键 * @param button 左键或者右键 * @returns */ setPreviewControlPanningButton(button: 'left' | 'right'): void; /** * 聚焦设备(只针对默认的预览镜头) * @param ids 设备id * @param animation 是否带动画 */ zoomEquToFitByIds(ids: string[], animation?: boolean): void; /** * 是否启用剖切 */ setClipEnabled(enable: boolean): void; /** * 执行剖切 * @param section */ execClip(section: SectionBody): void; /** * 获取剖切的一些默认样式 */ getSectionBodyStyle(): SectionBodyStyle; /** * 设置剖切的一些默认样式 */ setSectionBodyStyle(style: SectionBodyStyle): void; /** * 获取可剖切的建筑和设备 */ getClipObjects(): string[]; /** * 获取所有剖切体 */ getSectionBody(): TYPES.IList; /** * 根据剖切体缩放到合适视角 */ zoomSectionBodyToFit(section: SectionBody): void; /** * 删除剖切体 */ removeSectionBody(section: SectionBody): void; /** * 设置剖切体编辑方式 * @param section 剖切体 * @param mode 编辑模式 */ setSectionBodyGizmos(section: BABYLON.Nullable, mode: TYPES.EditMode): void; /** * 获取视频融合数据 */ getVideoFusions(): TYPES.IList; /** * 更新视频融合 */ updateVideoFusion(opt: VideoFusionOption): void; /** * 新增视频融合 */ addVideoFusion(opt: VideoFusionOption): void; /** * 删除视频融合 */ removeVideoFusion(opt: VideoFusionOption): void; /** * 设置建筑或者设备选中 */ setComponentSelect(type: TYPES.ComponentType, name: string): void; /** * 设置建筑或者设备不选中 */ setComponentUnSelect(type: TYPES.ComponentType, name?: string): void; /** * 设置漫游路径 */ setRoamingPath(points: TYPES.Point3D[]): void; /** * 获得路径漫游限制 */ getRoamingSetting(): any; /** * 设置路径漫游限制 */ setRoamingSetting(limit: TYPES.RoamingSetting): void; /** * 显示或隐藏漫游路径 */ setRoamingPathVisibility(visibility: boolean): void; /** * 重新开始路径漫游 */ restartRoaming(loop?: boolean): void; /** * 开始路径漫游 */ startRoaming(loop?: boolean, speed?: number): void; /** * 暂停路径漫游 */ pauseRoaming(): void; /** * 停止漫游 */ stopRoaming(): void; /** * 获取标高 */ getLevelInfos(): TYPES.LevelInfo[]; /** * 设置是否启用工人遮挡外观 */ setWorkerOccludedEnabled(enable: boolean): void; /** * 获取所有的工人 */ getWorkers(): TYPES.WorkerInfo[]; /** * 放置工人 */ placeWorker(x: number, y: number, z: number, id?: string): TYPES.WorkerInfo; /** * 聚焦工人 */ focusWorker(id: string): void; /** * 根据id移除工人 */ removeWorkerById(id: string): void; /** * 移除所有工人 */ removeAllWorker(): void; /** * 设置工人被遮挡后的外观 */ setWorkerOccludedAppearance(colorHex: string, thickness: number): void; /** * 世界坐标转成屏幕坐标 */ worldToScreen(point: TYPES.Point3D): BABYLON.Vector3; /** * 加载泵站数据 */ getPumps(): Promise; /** * 保存泵站 */ savePumps(): Promise; } export { Viewer, Constants, BABYLON };