deep-engine-demo/packages/docs/api/manager/SelectionManager.md
2026-04-19 18:46:28 +08:00

279 lines
6.4 KiB
Markdown

---
outline: [2, 3]
---
# SelectionManager
- 源文件:`packages/sdk/src/manager/SelectionManager.ts`
- 文档位置:`packages/docs/api/manager/SelectionManager.md`
## 类:`SelectionManager`
- 作用:选择管理器 用于管理场景中物体的选择状态
- 继承/实现:`extends Emittery<SelectionManagerEventMap>`
### 构造函数
#### `new SelectionManager(viewer: Viewer)`
- 作用:构造函数
- 入参:
| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `viewer` | `Viewer` | 是 | - Viewer 实例 |
- 出参:`SelectionManager`
- 返回说明:返回当前类实例。
### 属性
| 属性名 | 可见性 | 类型 | 作用 |
| --- | --- | --- | --- |
| `selectedObject` | `public` | `Object3D \| null` | 当前被选中的场景对象。 |
| `scene` | `public` | `Scene` | 用于保存 `scene` 对应的数据。 |
| `eventManager` | `public` | `EventManager` | 用于统一管理 `eventManager` 相关能力。 |
| `viewer` | `public` | `Viewer` | 用于保存 `viewer` 对应的数据。 |
| `selectionBox` | `public` | `Box3Helper` | 用于显示选中包围盒的辅助对象。 |
| `box` | `public` | `Box3` | 复用的包围盒计算对象。 |
| `camera` | `public` | `Camera` | 用于保存 `camera` 对应的数据。 |
| `sceneHelpers` | `public` | `Scene` | 用于保存 `sceneHelpers` 对应的数据。 |
| `transformControls` | `public` | `TransformControls` | 用于保存 `transformControls` 对应的数据。 |
| `objectPositionOnDown` | `public` | `Vector3` | 用于保存 `objectPositionOnDown` 对应的数据。 |
| `objectRotationOnDown` | `public` | `Euler` | 用于保存 `objectRotationOnDown` 对应的数据。 |
| `objectScaleOnDown` | `public` | `Vector3` | 用于保存 `objectScaleOnDown` 对应的数据。 |
### 访问器
#### `get isControl(): boolean`
- 作用:获取 is Control。
- 入参:无
- 出参:`boolean`
- 返回说明:返回布尔结果。
#### `set isControl(value: boolean)`
- 作用:设置 is Control。
- 入参:
| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `value` | `boolean` | 是 | 要写入的新值。 |
- 出参:`void`
- 返回说明:无返回值。
### 方法
#### `init(): void`
- 作用:初始化选择管理器
- 入参:无
- 出参:`void`
- 返回说明:无返回值。
#### `initSelectionBox(): void`
- 作用:执行 init Selection Box 初始化逻辑。
- 入参:无
- 出参:`void`
- 返回说明:无返回值。
#### `initTransformControls(): void`
- 作用:执行 init Transform Controls 初始化逻辑。
- 入参:无
- 出参:`void`
- 返回说明:无返回值。
#### `startControl(): void`
- 作用:执行 start Control 相关逻辑。
- 入参:无
- 出参:`void`
- 返回说明:无返回值。
#### `endControl(): void`
- 作用:执行 end Control 相关逻辑。
- 入参:无
- 出参:`void`
- 返回说明:无返回值。
#### `setSelectedObject(object: Object3D | null | undefined): void`
- 作用:设置选择的物体
- 入参:
| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `object` | `Object3D \| null \| undefined` | 是 | - 要选择的物体 |
- 出参:`void`
- 返回说明:无返回值。
#### `clearSelection(): void`
- 作用:取消选择
- 入参:无
- 出参:`void`
- 返回说明:无返回值。
#### `selectObjectByUuid(uuid: string): void`
- 作用:通过 UUID 设置选择的模型
- 入参:
| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `uuid` | `string` | 是 | - 模型的 UUID |
- 出参:`void`
- 返回说明:无返回值。
#### `getSelectedObject(): Object3D<Object3DEventMap> | null`
- 作用:获取当前选中的物体
- 入参:无
- 出参:`Object3D<Object3DEventMap> \| null`
- 返回说明:当前选中的物体,如果没有选中则返回 null
#### `setTransformMode(mode: 'translate' | 'rotate' | 'scale'): void`
- 作用:设置控制模式
- 入参:
| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `mode` | `'translate' \| 'rotate' \| 'scale'` | 是 | 控制模式:'translate', 'rotate', 'scale' |
- 出参:`void`
- 返回说明:无返回值。
#### `getControlledObject(): Object3D<Object3DEventMap> | null`
- 作用:获取当前被控制的模型
- 入参:无
- 出参:`Object3D<Object3DEventMap> \| null`
- 返回说明:返回 `Object3D<Object3DEventMap> | null`
#### `connect(domElement: HTMLElement): void`
- 作用:连接到渲染器的 DOM 元素
- 入参:
| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `domElement` | `HTMLElement` | 是 | 渲染器的 DOM 元素 |
- 出参:`void`
- 返回说明:无返回值。
#### `setSpace(space: 'world' | 'local'): void`
- 作用:设置变换空间
- 入参:
| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `space` | `'world' \| 'local'` | 是 | 空间:'world' 或 'local' |
- 出参:`void`
- 返回说明:无返回值。
#### `setTranslationSnap(snap: number): void`
- 作用:设置平移捕捉
- 入参:
| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `snap` | `number` | 是 | 捕捉距离 |
- 出参:`void`
- 返回说明:无返回值。
#### `dispose(): void`
- 作用:销毁选择管理器
- 入参:无
- 出参:`void`
- 返回说明:无返回值。
## 构造示例
- 当前 Demo 中没有直接展示 `SelectionManager` 的构造调用。
## 函数示例
### `SelectionManager.setSelectedObject`
- 来源:`packages/demo/src/hooks/useDebug.ts`
```ts
// 派发树更新
bus.triggerSceneTreeUpdate()
// 选择对象
viewer!.selection!.setSelectedObject(box);
},
exportSceneJSON: () => {
viewer.downloadSceneJSON();
}
};
```
### `SelectionManager.selectObjectByUuid`
- 来源:`packages/demo/src/components/SceneTree.vue`
```ts
if (bus.viewer && bus.viewer.selection) {
bus.viewer.selection.selectObjectByUuid(option.uuid);
}
},
}
}
```
### `SelectionManager.setTransformMode`
- 来源:`packages/demo/src/hooks/useDebug.ts`
```ts
// 控制模式
controlFolder.add(controlParams, 'controlMode', ['translate', 'rotate', 'scale']).name('控制模式')
.onChange((value) => {
viewer.selection.setTransformMode(value as 'translate' | 'rotate' | 'scale');
});
```