--- outline: [2, 3] --- # EventManager - 源文件:`packages/sdk/src/manager/EventManager.ts` - 文档位置:`packages/docs/api/manager/EventManager.md` ## 类:`EventManager` - 作用:事件管理器 继承自 Emittery,提供事件的订阅、取消订阅和触发功能 - 继承/实现:`extends Emittery` ### 构造函数 #### `new EventManager(viewer: Viewer)` - 作用:创建 EventManager 实例。 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `viewer` | `Viewer` | 是 | 关联的 Viewer 实例。 | - 出参:`EventManager` - 返回说明:返回当前类实例。 ### 属性 | 属性名 | 可见性 | 类型 | 作用 | | --- | --- | --- | --- | | `raycaster` | `public` | `Raycaster` | 射线选择相关 | | `mouse` | `public` | `Vector2` | 用于保存 `mouse` 对应的数据。 | | `camera` | `public` | `Camera \| null` | 用于保存 `camera` 对应的数据。 | | `scene` | `public` | `Scene \| null` | 用于保存 `scene` 对应的数据。 | | `filterList` | `public` | `Object3D[]` | 用于保存 `filterList` 的集合数据。 | | `onDownPosition` | `public` | `Vector2` | 鼠标位置跟踪 | | `onUpPosition` | `public` | `Vector2` | 用于保存 `onUpPosition` 对应的数据。 | | `selectionBox` | `public` | `SelectionBox \| null` | 框选相关 | | `selectionHelper` | `public` | `SelectionHelper \| null` | 用于保存 `selectionHelper` 对应的数据。 | | `boxSelectionEnabled` | `public` | `boolean` | 用于标记 `boxSelectionEnabled` 的启用状态。 | | `viewer` | `public` | `Viewer` | 用于保存 `viewer` 对应的数据。 | ### 访问器 #### `get enableClick(): boolean` - 作用:获取 enable Click。 - 入参:无 - 出参:`boolean` - 返回说明:返回布尔结果。 #### `set enableClick(value: boolean)` - 作用:设置 enable Click。 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `value` | `boolean` | 是 | 要写入的新值。 | - 出参:`void` - 返回说明:无返回值。 ### 方法 #### `disableRaycast(): void` - 作用:禁用射线选择功能 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `addToFilterList(object: Object3D): void` - 作用:添加对象到过滤列表(这些对象不会被射线选中) - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `object` | `Object3D` | 是 | - 要过滤的对象 | - 出参:`void` - 返回说明:无返回值。 #### `removeFromFilterList(object: Object3D): void` - 作用:从过滤列表中移除对象 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `object` | `Object3D` | 是 | - 要移除的对象 | - 出参:`void` - 返回说明:无返回值。 #### `clearFilterList(): void` - 作用:清空过滤列表 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `getMousePosition(dom: HTMLElement, x: number, y: number): [number, number]` - 作用:获取鼠标在视口中的位置 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `dom` | `HTMLElement` | 是 | 参数 `dom`,类型为 `HTMLElement`。 | | `x` | `number` | 是 | 参数 `x`,类型为 `number`。 | | `y` | `number` | 是 | 参数 `y`,类型为 `number`。 | - 出参:`[number, number]` - 返回说明:返回 `[number, number]`。 #### `handleClick(): void` - 作用:处理点击事件 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `onMouseDown(event: MouseEvent): void` - 作用:鼠标按下事件处理 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `event` | `MouseEvent` | 是 | 参数 `event`,类型为 `MouseEvent`。 | - 出参:`void` - 返回说明:无返回值。 #### `onMouseUp(event: MouseEvent): void` - 作用:鼠标释放事件处理 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `event` | `MouseEvent` | 是 | 参数 `event`,类型为 `MouseEvent`。 | - 出参:`void` - 返回说明:无返回值。 #### `enableBoxSelection(): void` - 作用:启用框选功能 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `disableBoxSelection(): void` - 作用:禁用框选功能 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `onBoxSelectionStart(event: PointerEvent): void` - 作用:框选开始事件处理 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `event` | `PointerEvent` | 是 | 参数 `event`,类型为 `PointerEvent`。 | - 出参:`void` - 返回说明:无返回值。 #### `onBoxSelectionMove(event: PointerEvent): void` - 作用:框选移动事件处理 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `event` | `PointerEvent` | 是 | 参数 `event`,类型为 `PointerEvent`。 | - 出参:`void` - 返回说明:无返回值。 #### `onBoxSelectionEnd(event: PointerEvent): void` - 作用:框选结束事件处理 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `event` | `PointerEvent` | 是 | 参数 `event`,类型为 `PointerEvent`。 | - 出参:`void` - 返回说明:无返回值。 ## 构造示例 - 当前 Demo 中没有直接展示 `EventManager` 的构造调用。 ## 函数示例 ### `EventManager.addToFilterList` - 来源:`packages/demo/src/components/Toolbar.vue` ```ts if (newValue) { // 透视选择激活时,将对象添加到过滤列表(不可被选中) viewer.events.addToFilterList(sampleObject) } else { // 透视选择关闭时,从过滤列表中移除(可被选中) viewer.events.removeFromFilterList(sampleObject) } } }, {immediate: true}) ``` ### `EventManager.removeFromFilterList` - 来源:`packages/demo/src/components/Toolbar.vue` ```ts viewer.events.addToFilterList(sampleObject) } else { // 透视选择关闭时,从过滤列表中移除(可被选中) viewer.events.removeFromFilterList(sampleObject) } } }, {immediate: true}) ``` ### `EventManager.enableBoxSelection` - 来源:`packages/demo/src/components/Toolbar.vue` ```ts if (eventManager.enableBoxSelection && eventManager.disableBoxSelection) { // 启用框选 eventManager.enableBoxSelection() // 添加事件监听器 eventManager.on(EventManagerEvents.BOX_SELECTION_MOVE, handleBoxSelectionMove) eventManager.on(EventManagerEvents.BOX_SELECTION_COMPLETE, handleBoxSelectionComplete) ```