three-multi-select
A control for three.js, similar to THREE.OrbitControl, that supports multi select and transforming multiple objects at once.


Demo
Check the examples folder or visit one of the links below:
Docs
Auto-generated docs can be found here.
Instructions
Here's some boilerplate to setup the three-multi-select.
import { MultiSelect } from 'three-multi-select';
const scene = new THREE.Scene();
const group = new THREE.Group();
scene.add(group);
const camera = new THREE.PerspectiveCamera();
const renderer = new THREE.WebGLRenderer();
const controls = new OrbitControls(camera, renderer.domElement);
const multiSelect = new MultiSelect(
camera,
renderer.domElement,
group.children,
{
cameraControls: controls,
},
);
Objects are now selectable. But nothing will happen.
We can listen to select and deselect events like this:
multiSelect.addEventListener<'select', Mesh>('select', (event) => {
const { object } = event;
});
multiSelect.addEventListener<'deselect', Mesh>('deselect', (event) => {
const { object } = event;
});
Config
| recursive | boolean | false | If true, it also checks all descendants. Otherwise it only checks intersection with the object. |
| useTransformControls | boolean | true | Whether to use THREE's TransformControls. If true, one can transform all selected objects as a group. |
| transformControls | THREE.TransformControls or null | null | Provide a custom TransformControls. If empty, a new controller will be created. |
| cameraControls | GenericControls or null | null | Provide a reference to a camera controller. When using TransformControls, it will disable the cameraControls. N.B; The provided objet must expose an enabled property. |
| deselectOnRaycastMiss | boolean | false | If true, any raycast miss will result in a deselect. * Note that camera controls may interfere with this logic. |
Events
Generic events:
activate
deactivate
addEventListener
removeEventListener
removeAllEventListeners
dispose
Object events:
selectObject
deselectObject
deselectAllObjects