/** * 事件中心 * 职责:集中管理 Cesium 的 ScreenSpaceEventHandler,支持创建、注销输入动作、销毁与相机旋转开关 */ export class EventHub { /** * 构造函数 * @param {Cesium.Viewer} viewer Cesium Viewer 实例 */ constructor(viewer) { this.viewer = viewer; this.handlers = new Map() } /** * 获取指定名称的事件处理器,不存在则创建 * @param {string} name 处理器名称 * @returns {Cesium.ScreenSpaceEventHandler} 处理器实例 */ get (name) { if (!this.handlers.has(name)) { this.handlers.set(name, new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas)) } return this.handlers.get(name) } /** * 注销指定处理器上的某类输入动作 * @param {string} name 处理器名称 * @param {Cesium.ScreenSpaceEventType} type 输入事件类型 */ off (name, type) { const h = this.get(name); h.removeInputAction(type) } /** * 销毁处理器并从内部缓存移除 * @param {string} name 处理器名称 */ destroy (name) { const h = this.handlers.get(name); if (h) { h.destroy(); this.handlers.delete(name) } } /** * 开关相机旋转能力(鼠标拖动旋转) * @param {boolean} flag true 启用,false 禁用 */ enableRotate (flag) { this.viewer.scene.screenSpaceCameraController.enableRotate = !!flag } }