Skip to content
Snippets Groups Projects
OrbitControls.js 24.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • Amira Abdel-Rahman's avatar
    Amira Abdel-Rahman committed
    				}
    
    				break;
    
    			case 2:
    
    				switch ( scope.touches.TWO ) {
    
    					case THREE.TOUCH.DOLLY_PAN:
    
    						if ( scope.enableZoom === false && scope.enablePan === false ) return;
    
    						handleTouchStartDollyPan( event );
    
    						state = STATE.TOUCH_DOLLY_PAN;
    
    						break;
    
    					case THREE.TOUCH.DOLLY_ROTATE:
    
    						if ( scope.enableZoom === false && scope.enableRotate === false ) return;
    
    						handleTouchStartDollyRotate( event );
    
    						state = STATE.TOUCH_DOLLY_ROTATE;
    
    						break;
    
    					default:
    
    						state = STATE.NONE;
    
    				}
    
    				break;
    
    			default:
    
    				state = STATE.NONE;
    
    		}
    
    		if ( state !== STATE.NONE ) {
    
    			scope.dispatchEvent( startEvent );
    
    		}
    
    	}
    
    	function onTouchMove( event ) {
    
    		if ( scope.enabled === false ) return;
    
    		event.preventDefault();
    		event.stopPropagation();
    
    		switch ( state ) {
    
    			case STATE.TOUCH_ROTATE:
    
    				if ( scope.enableRotate === false ) return;
    
    				handleTouchMoveRotate( event );
    
    				scope.update();
    
    				break;
    
    			case STATE.TOUCH_PAN:
    
    				if ( scope.enablePan === false ) return;
    
    				handleTouchMovePan( event );
    
    				scope.update();
    
    				break;
    
    			case STATE.TOUCH_DOLLY_PAN:
    
    				if ( scope.enableZoom === false && scope.enablePan === false ) return;
    
    				handleTouchMoveDollyPan( event );
    
    				scope.update();
    
    				break;
    
    			case STATE.TOUCH_DOLLY_ROTATE:
    
    				if ( scope.enableZoom === false && scope.enableRotate === false ) return;
    
    				handleTouchMoveDollyRotate( event );
    
    				scope.update();
    
    				break;
    
    			default:
    
    				state = STATE.NONE;
    
    		}
    
    	}
    
    	function onTouchEnd( event ) {
    
    		if ( scope.enabled === false ) return;
    
    		handleTouchEnd( event );
    
    		scope.dispatchEvent( endEvent );
    
    		state = STATE.NONE;
    
    	}
    
    	function onContextMenu( event ) {
    
    		if ( scope.enabled === false ) return;
    
    		event.preventDefault();
    
    	}
    
    	//
    
    	scope.domElement.addEventListener( 'contextmenu', onContextMenu, false );
    
    	scope.domElement.addEventListener( 'mousedown', onMouseDown, false );
    	scope.domElement.addEventListener( 'wheel', onMouseWheel, false );
    
    	scope.domElement.addEventListener( 'touchstart', onTouchStart, false );
    	scope.domElement.addEventListener( 'touchend', onTouchEnd, false );
    	scope.domElement.addEventListener( 'touchmove', onTouchMove, false );
    
    	scope.domElement.addEventListener( 'keydown', onKeyDown, false );
    
    	// make sure element can receive keys.
    
    	if ( scope.domElement.tabIndex === - 1 ) {
    
    		scope.domElement.tabIndex = 0;
    
    	}
    
    	// force an update at start
    
    	this.update();
    
    };
    
    THREE.OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype );
    THREE.OrbitControls.prototype.constructor = THREE.OrbitControls;
    
    
    // This set of controls performs orbiting, dollying (zooming), and panning.
    // Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default).
    // This is very similar to OrbitControls, another set of touch behavior
    //
    //    Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate
    //    Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish
    //    Pan - left mouse, or arrow keys / touch: one-finger move
    
    THREE.MapControls = function ( object, domElement ) {
    
    	THREE.OrbitControls.call( this, object, domElement );
    
    	this.mouseButtons.LEFT = THREE.MOUSE.PAN;
    	this.mouseButtons.RIGHT = THREE.MOUSE.ROTATE;
    
    	this.touches.ONE = THREE.TOUCH.PAN;
    	this.touches.TWO = THREE.TOUCH.DOLLY_ROTATE;
    
    };
    
    THREE.MapControls.prototype = Object.create( THREE.EventDispatcher.prototype );
    THREE.MapControls.prototype.constructor = THREE.MapControls;