copper3d / Modules / Controls/gestureGate / GestureAxes
Interface: GestureAxes
Controls/gestureGate.GestureAxes
Suppresses camera axes for the duration of a gesture that means something else -- scrubbing a slice plane, dragging an annotation anchor, painting on a mesh -- and puts back exactly what was there before.
Restore what was there, never true
This is the whole reason to have a helper rather than two assignments. The obvious hand-rolled version disables the axis on pointerdown and re-enables it on pointerup, and it is wrong on any view that was ALREADY locked: a 2D modality with rotation deliberately turned off silently becomes orbitable the first time the reader scrubs it, and nothing ever turns it back off.
Attach the listener in the CAPTURE phase
The gate cannot do this for you, and getting it wrong costs a whole gesture. Copper3dTrackballControls listens on the canvas in the bubble phase and latches its rotate state inside its own pointerdown handler (onMouseDown reads noRotate there and copies the pointer position). A listener that opens the gate in the bubble phase runs after that, so the first gesture both scrubs AND orbits:
el.addEventListener("pointerdown", onDown, true); // <- the `true`el.addEventListener("pointerdown", onDown, true); // <- the `true`Nesting
Gates on the same controls object refcount. The first one captures and suppresses; the last one released restores. Each releaser is idempotent, so calling it from both pointerup and pointercancel is safe.
Table of contents
Properties
Properties
pan
• Optional pan: boolean
Defined in
src/Controls/gestureGate.ts:47
rotate
• Optional rotate: boolean
Default true -- rotation is what a drag gesture collides with.
Defined in
src/Controls/gestureGate.ts:46
zoom
• Optional zoom: boolean