271 lines
6.5 KiB
Markdown
271 lines
6.5 KiB
Markdown
---
|
||
outline: [2, 3]
|
||
---
|
||
|
||
# EventManager
|
||
|
||
- 源文件:`packages/sdk/src/manager/EventManager.ts`
|
||
- 文档位置:`packages/docs/api/manager/EventManager.md`
|
||
|
||
## 类:`EventManager`
|
||
|
||
- 作用:事件管理器 继承自 Emittery,提供事件的订阅、取消订阅和触发功能
|
||
- 继承/实现:`extends Emittery<EventManagerEventMap>`
|
||
|
||
### 构造函数
|
||
|
||
#### `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)
|
||
```
|