API Docs for: 1.0.2
Show:

File: GIScene\Control\Pan.js

/**
 * Pan Control. *experimental, not ready to use*
 * 
 * @namespace GIScene
 * @class Control.Pan 
 * @constructor
 * @extends GIScene.Control
 * @param {THREE.Camera} object The camera object to be used with this control
 * @param {DOMElement} [domElement] The DOM Element to which the mouse events will be added
 */

GIScene.Control.Pan = function( object, domElement ){
	
	//Make this a Control
	GIScene.Control.call(this);
	
	//Make this an EventDispatcher
	THREE.EventDispatcher.call( this );
	
	STATE = { NONE : -1, PAN : 0}; //mouse event.button = 0:left 1:click wheel 2: right 
	var _this = this;
	
	this.object = object;
	this.domElement = ( domElement !== undefined ) ? domElement : document;
	
	//API
	this.panSpeed = 0.825;
	
	//internals
	this.target = new THREE.Vector3();

	var lastPosition = new THREE.Vector3();

	var _keyPressed = false,
	_state = STATE.NONE,


	_eye = new THREE.Vector3(),

	// _rotateStart = new THREE.Vector3(),
	// _rotateEnd = new THREE.Vector3(),
// 
	// _zoomStart = new THREE.Vector2(),
	// _zoomEnd = new THREE.Vector2(),


	_panStart = new THREE.Vector2(),
	_panEnd = new THREE.Vector2();
	
	
	
	this.panCamera = function () {

		var mouseChange = _panEnd.clone().sub( _panStart );
		
		if ( mouseChange.lengthSq() ) {

			mouseChange.multiplyScalar( _eye.length() * _this.panSpeed );

			var pan = _eye.clone().cross( _this.object.up ).setLength( mouseChange.x );
			pan.add( _this.object.up.clone().setLength( mouseChange.y ) );


			_this.object.position.add( pan );
			_this.target.add( pan );

			//if ( _this.staticMoving ) {

				_panStart = _panEnd;

			// } else {
// 
				// _panStart.add( mouseChange.subVectors( _panEnd, _panStart ).multiplyScalar( _this.dynamicDampingFactor ) );
// 
			// }


		}

	};
	
	
	
	this.update = function () {
		_eye.copy( _this.object.position ).sub( _this.target );
		_this.panCamera();
		_this.object.position.Vectors( _this.target, _eye );
		_this.object.lookAt( _this.target );
	};
	

	mousedown = function (event) {
		_state = STATE.PAN;
	  	_panStart = _panEnd = new THREE.Vector2(event.clientX, event.clientY).multiplyScalar(1/500);  //_this.getMouseOnScreen( event.clientX, event.clientY );
	};
	
	mousemove = function (event) {
		if(_state == STATE.PAN){
			_panEnd = new THREE.Vector2(event.clientX, event.clientY).multiplyScalar(1/500); //_this.getMouseOnScreen( event.clientX, event.clientY );
		}
	};
	
	mouseup = function (event) {
		_state = STATE.NONE;
	}; 
	
	
	this.activate = function () {  
		if(this.isActive) return;
		
		this.domElement.addEventListener( 'mousedown', mousedown, false );
		this.domElement.addEventListener( 'mousemove', mousemove, false );
		this.domElement.addEventListener( 'mouseup', mouseup, false );
		
		//call super class method
		GIScene.Control.prototype.activate.call(this);
	};
	
	this.deactivate = function () {
		if(!this.isActive) return;
		
		this.domElement.removeEventListener( 'mousedown', mousedown, false );
		this.domElement.removeEventListener( 'mousemove', mousemove, false );
		this.domElement.removeEventListener( 'mouseup', mouseup, false );
		
		//call super class method
		GIScene.Control.prototype.deactivate.call(this);
	};
	
};