--- outline: [2, 3] --- # SelectionManager - 源文件:`packages/sdk/src/manager/SelectionManager.ts` - 文档位置:`packages/docs/api/manager/SelectionManager.md` ## 类:`SelectionManager` - 作用:选择管理器 用于管理场景中物体的选择状态 - 继承/实现:`extends Emittery` ### 构造函数 #### `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 | null` - 作用:获取当前选中的物体 - 入参:无 - 出参:`Object3D \| null` - 返回说明:当前选中的物体,如果没有选中则返回 null #### `setTransformMode(mode: 'translate' | 'rotate' | 'scale'): void` - 作用:设置控制模式 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `mode` | `'translate' \| 'rotate' \| 'scale'` | 是 | 控制模式:'translate', 'rotate', 'scale' | - 出参:`void` - 返回说明:无返回值。 #### `getControlledObject(): Object3D | null` - 作用:获取当前被控制的模型 - 入参:无 - 出参:`Object3D \| null` - 返回说明:返回 `Object3D | 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'); }); ```