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