📄 threejs/Addons/Controls/TransformControls

File: TransformControls.md | Updated: 11/15/2025


title: TransformControls category: Addons layout: docs

TransformControls

This class can be used to transform objects in 3D space by adapting a similar interaction model of DCC tools like Blender. Unlike other controls, it is not intended to transform the scene's camera.

TransformControls expects that its attached 3D object is part of the scene graph.

Import

TransformControls is an addon, and must be imported explicitly, see Installation#Addons.

import { TransformControls } from 'three/addons/controls/TransformControls.js';

Constructor

new TransformControls( camera : Camera, domElement : HTMLElement )

Constructs a new controls instance.

camera | The camera of the rendered scene.
---|---
domElement | The HTML element used for event listeners. Default is null.

Properties

.axis : string

The current transformation axis.

.camera : Camera

The camera of the rendered scene.

.dragging : boolean (readonly)

Whether dragging is currently performed or not.

Default is false.

.maxX : number

The maximum allowed X position during translation.

Default is Infinity.

.maxY : number

The maximum allowed Y position during translation.

Default is Infinity.

.maxZ : number

The maximum allowed Z position during translation.

Default is Infinity.

.minX : number

The minimum allowed X position during translation.

Default is -Infinity.

.minY : number

The minimum allowed y position during translation.

Default is -Infinity.

.minZ : number

The minimum allowed z position during translation.

Default is -Infinity.

.mode : 'translate' | 'rotate' | 'scale'

The current transformation axis.

Default is 'translate'.

.rotationSnap : number

By default, 3D objects are continuously rotated. If you set this property to a numeric value (radians), you can define in which steps the 3D object should be rotated.

Default is null.

.scaleSnap : number

By default, 3D objects are continuously scaled. If you set this property to a numeric value, you can define in which steps the 3D object should be scaled.

Default is null.

.showX : boolean

Whether the x-axis helper should be visible or not.

Default is true.

.showY : boolean

Whether the y-axis helper should be visible or not.

Default is true.

.showZ : boolean

Whether the z-axis helper should be visible or not.

Default is true.

.size : number

The size of the helper UI (axes/planes).

Default is 1.

.space : 'world' | 'local'

Defines in which coordinate space transformations should be performed.

Default is 'world'.

.translationSnap : number

By default, 3D objects are continuously translated. If you set this property to a numeric value (world units), you can define in which steps the 3D object should be translated.

Default is null.

Methods

.attach( object : Object3D ) : TransformControls

Sets the 3D object that should be transformed and ensures the controls UI is visible.

object | The 3D object that should be transformed.
---|---

Returns: A reference to this controls.

.detach() : TransformControls

Removes the current 3D object from the controls and makes the helper UI invisible.

Returns: A reference to this controls.

.getHelper() : TransformControlsRoot

Returns the visual representation of the controls. Add the helper to your scene to visually transform the attached 3D object.

Returns: The helper.

.getMode() : 'translate' | 'rotate' | 'scale'

Returns the transformation mode.

Returns: The transformation mode.

.getRaycaster() : Raycaster

Returns the raycaster that is used for user interaction. This object is shared between all instances of TransformControls.

Returns: The internal raycaster.

.reset()

Resets the object's position, rotation and scale to when the current transform began.

.setColors( xAxis : number | Color | string, yAxis : number | Color | string, zAxis : number | Color | string, active : number | Color | string )

Sets the colors of the control's gizmo.

xAxis | The x-axis color.
---|---
yAxis | The y-axis color.
zAxis | The z-axis color.
active | The color for active elements.

.setMode( mode : 'translate' | 'rotate' | 'scale' )

Sets the given transformation mode.

mode | The transformation mode to set.
---|---

.setRotationSnap( rotationSnap : number )

Sets the rotation snap.

rotationSnap | The rotation snap to set.
---|---

.setScaleSnap( scaleSnap : number )

Sets the scale snap.

scaleSnap | The scale snap to set.
---|---

.setSize( size : number )

Sets the size of the helper UI.

size | The size to set.
---|---

.setSpace( space : 'world' | 'local' )

Sets the coordinate space in which transformations are applied.

space | The space to set.
---|---

.setTranslationSnap( translationSnap : number )

Sets the translation snap.

translationSnap | The translation snap to set.
---|---

Events

.change

Fires if any type of change (object or property change) is performed. Property changes are separate events you can add event listeners to. The event type is "propertyname-changed".

Type:
  • Object

.mouseDown

Fires if a pointer (mouse/touch) becomes active.

Type:
  • Object

.mouseUp

Fires if a pointer (mouse/touch) is no longer active.

Type:
  • Object

.objectChange

Fires if the controlled 3D object is changed.

Type:
  • Object

Source

examples/jsm/controls/TransformControls.js