Skip to content

Commit b59c2a0

Browse files
committed
Update OrbitControls from XRPackage
Add OrbitControls.js - commit 5837f95e53bacef1721b14353a5e48ec2436c18c from XRPackage
1 parent c19b7a4 commit b59c2a0

File tree

1 file changed

+91
-109
lines changed

1 file changed

+91
-109
lines changed

OrbitControls.js

Lines changed: 91 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,24 @@
77
* @author ScieCode / http://github.com/sciecode
88
*/
99

10+
import {
11+
EventDispatcher,
12+
MOUSE,
13+
Quaternion,
14+
Spherical,
15+
TOUCH,
16+
Vector2,
17+
Vector3
18+
} from "./three.js";
19+
1020
// This set of controls performs orbiting, dollying (zooming), and panning.
1121
// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default).
1222
//
1323
// Orbit - left mouse / touch: one-finger move
1424
// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish
1525
// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move
1626

17-
THREE.OrbitControls = function ( object, domElement ) {
27+
var OrbitControls = function ( object, domElement, document ) {
1828

1929
if ( domElement === undefined ) console.warn( 'THREE.OrbitControls: The second parameter "domElement" is now mandatory.' );
2030
if ( domElement === document ) console.error( 'THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.' );
@@ -26,7 +36,7 @@ THREE.OrbitControls = function ( object, domElement ) {
2636
this.enabled = true;
2737

2838
// "target" sets the location of focus, where the object orbits around
29-
this.target = new THREE.Vector3();
39+
this.target = new Vector3();
3040

3141
// How far you can dolly in and out ( PerspectiveCamera only )
3242
this.minDistance = 0;
@@ -78,10 +88,10 @@ THREE.OrbitControls = function ( object, domElement ) {
7888
this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };
7989

8090
// Mouse buttons
81-
this.mouseButtons = { LEFT: THREE.MOUSE.ROTATE, MIDDLE: THREE.MOUSE.DOLLY, RIGHT: THREE.MOUSE.PAN };
91+
this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };
8292

8393
// Touch fingers
84-
this.touches = { ONE: THREE.TOUCH.ROTATE, TWO: THREE.TOUCH.DOLLY_PAN };
94+
this.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };
8595

8696
// for reset
8797
this.target0 = this.target.clone();
@@ -130,14 +140,14 @@ THREE.OrbitControls = function ( object, domElement ) {
130140
// this method is exposed, but perhaps it would be better if we can make it private...
131141
this.update = function () {
132142

133-
var offset = new THREE.Vector3();
143+
var offset = new Vector3();
134144

135145
// so camera.up is the orbit axis
136-
var quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) );
146+
var quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );
137147
var quatInverse = quat.clone().inverse();
138148

139-
var lastPosition = new THREE.Vector3();
140-
var lastQuaternion = new THREE.Quaternion();
149+
var lastPosition = new Vector3();
150+
var lastQuaternion = new Quaternion();
141151

142152
return function update() {
143153

@@ -290,24 +300,24 @@ THREE.OrbitControls = function ( object, domElement ) {
290300
var EPS = 0.000001;
291301

292302
// current position in spherical coordinates
293-
var spherical = new THREE.Spherical();
294-
var sphericalDelta = new THREE.Spherical();
303+
var spherical = new Spherical();
304+
var sphericalDelta = new Spherical();
295305

296306
var scale = 1;
297-
var panOffset = new THREE.Vector3();
307+
var panOffset = new Vector3();
298308
var zoomChanged = false;
299309

300-
var rotateStart = new THREE.Vector2();
301-
var rotateEnd = new THREE.Vector2();
302-
var rotateDelta = new THREE.Vector2();
310+
var rotateStart = new Vector2();
311+
var rotateEnd = new Vector2();
312+
var rotateDelta = new Vector2();
303313

304-
var panStart = new THREE.Vector2();
305-
var panEnd = new THREE.Vector2();
306-
var panDelta = new THREE.Vector2();
314+
var panStart = new Vector2();
315+
var panEnd = new Vector2();
316+
var panDelta = new Vector2();
307317

308-
var dollyStart = new THREE.Vector2();
309-
var dollyEnd = new THREE.Vector2();
310-
var dollyDelta = new THREE.Vector2();
318+
var dollyStart = new Vector2();
319+
var dollyEnd = new Vector2();
320+
var dollyDelta = new Vector2();
311321

312322
function getAutoRotationAngle() {
313323

@@ -335,7 +345,7 @@ THREE.OrbitControls = function ( object, domElement ) {
335345

336346
var panLeft = function () {
337347

338-
var v = new THREE.Vector3();
348+
var v = new Vector3();
339349

340350
return function panLeft( distance, objectMatrix ) {
341351

@@ -350,7 +360,7 @@ THREE.OrbitControls = function ( object, domElement ) {
350360

351361
var panUp = function () {
352362

353-
var v = new THREE.Vector3();
363+
var v = new Vector3();
354364

355365
return function panUp( distance, objectMatrix ) {
356366

@@ -376,7 +386,7 @@ THREE.OrbitControls = function ( object, domElement ) {
376386
// deltaX and deltaY are in pixels; right and down are positive
377387
var pan = function () {
378388

379-
var offset = new THREE.Vector3();
389+
var offset = new Vector3();
380390

381391
return function pan( deltaX, deltaY ) {
382392

@@ -753,127 +763,97 @@ THREE.OrbitControls = function ( object, domElement ) {
753763
if ( scope.enabled === false ) return;
754764

755765
// Prevent the browser from scrolling.
756-
757766
event.preventDefault();
758767

759768
// Manually set the focus since calling preventDefault above
760769
// prevents the browser from setting it automatically.
761770

762771
scope.domElement.focus ? scope.domElement.focus() : window.focus();
763772

773+
var mouseAction;
774+
764775
switch ( event.button ) {
765776

766777
case 0:
767778

768-
switch ( scope.mouseButtons.LEFT ) {
769-
770-
case THREE.MOUSE.ROTATE:
771-
772-
if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
779+
mouseAction = scope.mouseButtons.LEFT;
780+
break;
773781

774-
if ( scope.enablePan === false ) return;
782+
case 1:
775783

776-
handleMouseDownPan( event );
784+
mouseAction = scope.mouseButtons.MIDDLE;
785+
break;
777786

778-
state = STATE.PAN;
787+
case 2:
779788

780-
} else {
789+
mouseAction = scope.mouseButtons.RIGHT;
790+
break;
781791

782-
if ( scope.enableRotate === false ) return;
792+
default:
783793

784-
handleMouseDownRotate( event );
794+
mouseAction = - 1;
785795

786-
state = STATE.ROTATE;
796+
}
787797

788-
}
798+
switch ( mouseAction ) {
789799

790-
break;
800+
case MOUSE.DOLLY:
791801

792-
case THREE.MOUSE.PAN:
802+
if ( scope.enableZoom === false ) return;
793803

794-
if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
804+
handleMouseDownDolly( event );
795805

796-
if ( scope.enableRotate === false ) return;
806+
state = STATE.DOLLY;
797807

798-
handleMouseDownRotate( event );
808+
break;
799809

800-
state = STATE.ROTATE;
810+
case MOUSE.ROTATE:
801811

802-
} else {
812+
if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
803813

804-
if ( scope.enablePan === false ) return;
814+
if ( scope.enablePan === false ) return;
805815

806-
handleMouseDownPan( event );
816+
handleMouseDownPan( event );
807817

808-
state = STATE.PAN;
818+
state = STATE.PAN;
809819

810-
}
820+
} else {
811821

812-
break;
822+
if ( scope.enableRotate === false ) return;
813823

814-
default:
824+
handleMouseDownRotate( event );
815825

816-
state = STATE.NONE;
826+
state = STATE.ROTATE;
817827

818828
}
819829

820830
break;
821831

832+
case MOUSE.PAN:
822833

823-
case 1:
834+
if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
824835

825-
switch ( scope.mouseButtons.MIDDLE ) {
836+
if ( scope.enableRotate === false ) return;
826837

827-
case THREE.MOUSE.DOLLY:
838+
handleMouseDownRotate( event );
828839

829-
if ( scope.enableZoom === false ) return;
840+
state = STATE.ROTATE;
830841

831-
handleMouseDownDolly( event );
842+
} else {
832843

833-
state = STATE.DOLLY;
844+
if ( scope.enablePan === false ) return;
834845

835-
break;
846+
handleMouseDownPan( event );
836847

837-
838-
default:
839-
840-
state = STATE.NONE;
848+
state = STATE.PAN;
841849

842850
}
843851

844852
break;
845853

846-
case 2:
847-
848-
switch ( scope.mouseButtons.RIGHT ) {
849-
850-
case THREE.MOUSE.ROTATE:
851-
852-
if ( scope.enableRotate === false ) return;
853-
854-
handleMouseDownRotate( event );
855-
856-
state = STATE.ROTATE;
857-
858-
break;
859-
860-
case THREE.MOUSE.PAN:
861-
862-
if ( scope.enablePan === false ) return;
863-
864-
handleMouseDownPan( event );
865-
866-
state = STATE.PAN;
867-
868-
break;
869-
870-
default:
871-
872-
state = STATE.NONE;
873-
874-
}
854+
default:
875855

876-
break;
856+
state = STATE.NONE;
877857

878858
}
879859

@@ -943,7 +923,7 @@ THREE.OrbitControls = function ( object, domElement ) {
943923

944924
if ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;
945925

946-
event.preventDefault();
926+
// event.preventDefault();
947927
event.stopPropagation();
948928

949929
scope.dispatchEvent( startEvent );
@@ -966,15 +946,15 @@ THREE.OrbitControls = function ( object, domElement ) {
966946

967947
if ( scope.enabled === false ) return;
968948

969-
event.preventDefault();
949+
event.preventDefault(); // prevent scrolling
970950

971951
switch ( event.touches.length ) {
972952

973953
case 1:
974954

975955
switch ( scope.touches.ONE ) {
976956

977-
case THREE.TOUCH.ROTATE:
957+
case TOUCH.ROTATE:
978958

979959
if ( scope.enableRotate === false ) return;
980960

@@ -984,7 +964,7 @@ THREE.OrbitControls = function ( object, domElement ) {
984964

985965
break;
986966

987-
case THREE.TOUCH.PAN:
967+
case TOUCH.PAN:
988968

989969
if ( scope.enablePan === false ) return;
990970

@@ -1006,7 +986,7 @@ THREE.OrbitControls = function ( object, domElement ) {
1006986

1007987
switch ( scope.touches.TWO ) {
1008988

1009-
case THREE.TOUCH.DOLLY_PAN:
989+
case TOUCH.DOLLY_PAN:
1010990

1011991
if ( scope.enableZoom === false && scope.enablePan === false ) return;
1012992

@@ -1016,7 +996,7 @@ THREE.OrbitControls = function ( object, domElement ) {
1016996

1017997
break;
1018998

1019-
case THREE.TOUCH.DOLLY_ROTATE:
999+
case TOUCH.DOLLY_ROTATE:
10201000

10211001
if ( scope.enableZoom === false && scope.enableRotate === false ) return;
10221002

@@ -1052,7 +1032,7 @@ THREE.OrbitControls = function ( object, domElement ) {
10521032

10531033
if ( scope.enabled === false ) return;
10541034

1055-
event.preventDefault();
1035+
event.preventDefault(); // prevent scrolling
10561036
event.stopPropagation();
10571037

10581038
switch ( state ) {
@@ -1152,8 +1132,8 @@ THREE.OrbitControls = function ( object, domElement ) {
11521132

11531133
};
11541134

1155-
THREE.OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype );
1156-
THREE.OrbitControls.prototype.constructor = THREE.OrbitControls;
1135+
OrbitControls.prototype = Object.create( EventDispatcher.prototype );
1136+
OrbitControls.prototype.constructor = OrbitControls;
11571137

11581138

11591139
// This set of controls performs orbiting, dollying (zooming), and panning.
@@ -1164,17 +1144,19 @@ THREE.OrbitControls.prototype.constructor = THREE.OrbitControls;
11641144
// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish
11651145
// Pan - left mouse, or arrow keys / touch: one-finger move
11661146

1167-
THREE.MapControls = function ( object, domElement ) {
1147+
var MapControls = function ( object, domElement ) {
11681148

1169-
THREE.OrbitControls.call( this, object, domElement );
1149+
OrbitControls.call( this, object, domElement );
11701150

1171-
this.mouseButtons.LEFT = THREE.MOUSE.PAN;
1172-
this.mouseButtons.RIGHT = THREE.MOUSE.ROTATE;
1151+
this.mouseButtons.LEFT = MOUSE.PAN;
1152+
this.mouseButtons.RIGHT = MOUSE.ROTATE;
11731153

1174-
this.touches.ONE = THREE.TOUCH.PAN;
1175-
this.touches.TWO = THREE.TOUCH.DOLLY_ROTATE;
1154+
this.touches.ONE = TOUCH.PAN;
1155+
this.touches.TWO = TOUCH.DOLLY_ROTATE;
11761156

11771157
};
11781158

1179-
THREE.MapControls.prototype = Object.create( THREE.EventDispatcher.prototype );
1180-
THREE.MapControls.prototype.constructor = THREE.MapControls;
1159+
MapControls.prototype = Object.create( EventDispatcher.prototype );
1160+
MapControls.prototype.constructor = MapControls;
1161+
1162+
export { OrbitControls, MapControls };

0 commit comments

Comments
 (0)