corrade-http-templates – Rev 2

Subversion Repositories:
Rev:
THREE.OrbitControls=function(object,domElement){this.object=object;this.domElement=domElement!==undefined?domElement:document;this.enabled=true;this.target=new THREE.Vector3;this.center=this.target;this.noZoom=false;this.zoomSpeed=1;this.minDistance=0;this.maxDistance=Infinity;this.minZoom=0;this.maxZoom=Infinity;this.noRotate=false;this.rotateSpeed=1;this.noPan=false;this.keyPanSpeed=7;this.autoRotate=false;this.autoRotateSpeed=2;this.minPolarAngle=0;this.maxPolarAngle=Math.PI;this.minAzimuthAngle=-Infinity;this.maxAzimuthAngle=Infinity;this.noKeys=false;this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40};this.mouseButtons={ORBIT:THREE.MOUSE.LEFT,ZOOM:THREE.MOUSE.MIDDLE,PAN:THREE.MOUSE.RIGHT};var scope=this;var EPS=1e-6;var rotateStart=new THREE.Vector2;var rotateEnd=new THREE.Vector2;var rotateDelta=new THREE.Vector2;var panStart=new THREE.Vector2;var panEnd=new THREE.Vector2;var panDelta=new THREE.Vector2;var panOffset=new THREE.Vector3;var offset=new THREE.Vector3;var dollyStart=new THREE.Vector2;var dollyEnd=newONT> THREE.Vector2;var dollyDelta=new THREE.Vector2;var theta;var phi;var phiDelta=0;var thetaDelta=0;var scale=1;var pan=new THREE.Vector3;var lastPosition=new THREE.Vector3;var lastQuaternion=new THREE.Quaternion;var STATE={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY:4,TOUCH_PAN:5};var state=STATE.NONE;this.target0=this.target.clone();this.position0=this.object.position.clone();this.zoom0=this.object.zoom;var quat=(new THREE.Quaternion).setFromUnitVectors(object.up,new THREE.Vector3(0,1,0));var quatInverse=quat.clone().inverse();var changeEvent={type:"change"};var startEvent={type:"start"};var endEvent={type:"end"};this.rotateLeft=function(angle){if(angle===undefined){angle=getAutoRotationAngle()}thetaDelta-=angle};this.rotateUp=function(angle){if(angle===undefined){angle=getAutoRotationAngle()}phiDelta-=angle};this.panLeft=function(distance){var te=this.object.matrix.elements;panOffset.set(te[0],te[1],te[2]);panOffset.multiplyScalar(-distance);pan.add(panOffset)};this.panUp=function(distance){var te=this.object.matrix.elements;panOffset.set(te[4],te[5],te[6]);panOffset.multiplyScalar(distance);pan.add(panOffset)};this.pan=function(deltaX,deltaY){var element=scope.domElement===document?scope.domElement.body:scope.domElement;if(scope.object instanceof THREE.PerspectiveCamera){var position=scope.object.position;var offset=position.clone().sub(scope.target);var targetDistance=offset.length();targetDistance*=Math.tan(scope.object.fov/2*Math.PI/180);scope.panLeft(2*deltaX*targetDistance/element.clientHeight);scope.panUp(2*deltaY*targetDistance/element.clientHeight)}else if(scope.object instanceof THREE.OrthographicCamera){scope.panLeft(deltaX*(scope.object.right-scope.object.left)/element.clientWidth);scope.panUp(deltaY*(scope.object.top-scope.object.bottom)/element.clientHeight)}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.")}};this.dollyIn=function(dollyScale){if(dollyScale===undefined){dollyScale=getZoomScale()}if(scope.object instanceof THREE.PerspectiveCamera){scale/=dollyScale}else if(scope.object instanceof THREE.OrthographicCamera){scope.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom*dollyScale));scope.object.updateProjectionMatrix();scope.dispatchEvent(changeEvent)}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.")}};this.dollyOut=function(dollyScale){if(dollyScale===undefined){dollyScale=getZoomScale()}if(scope.object instanceof THREE.PerspectiveCamera){scale*=dollyScale}else if(scope.object instanceof THREE.OrthographicCamera){scope.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/dollyScale));scope.object.updateProjectionMatrix();scope.dispatchEvent(changeEvent)}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.")}};this.update=function(){var position=this.object.position;offset.copy(position).sub(this.target);offset.applyQuaternion(quat);theta=Math.atan2(offset.x,offset.z);phi=Math.atan2(Math.sqrt(offset.x*offset.x+offset.z*offset.z),offset.y);if(this.autoRotate&&state===STATE.NONE){this.rotateLeft(getAutoRotationAngle())}theta+=thetaDelta;phi+=phiDelta;theta=Math.max(this.minAzimuthAngle,Math.min(this.maxAzimuthAngle,theta));phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,phi));phi=Math.max(EPS,Math.min(Math.PI-EPS,phi));var radius=offset.length()*scale;radius=Math.max(this.minDistance,Math.min(this.maxDistance,radius));this.target.add(pan);offset.x=radius*Math.sin(phi)*Math.sin(theta);offset.y=radius*Math.cos(phi);offset.z=radius*Math.sin(phi)*Math.cos(theta);offset.applyQuaternion(quatInverse);position.copy(this.target).add(offset);this.object.lookAt(this.target);thetaDelta=0;phiDelta=0;scale=1;pan.set(0,0,0);if(lastPosition.distanceToSquared(this.object.position)>EPS||8*(1-lastQuaternion.dot(this.object.quaternion))>EPS){this.dispatchEvent(changeEvent);lastPosition.copy(this.object.position);lastQuaternion.copy(this.object.quaternion)}};this.reset=function(){state=STATE.NONE;this.target.copy(this.target0);this.object.position.copy(this.position0);this.object.zoom=this.zoom0;this.object.updateProjectionMatrix();this.dispatchEvent(changeEvent);this.update()};this.getPolarAngle=function(){return phi};this.getAzimuthalAngle=function(){return theta};function getAutoRotationAngle(){return 2*Math.PI/60/60*scope.autoRotateSpeed}function getZoomScale(){return Math.pow(.95,scope.zoomSpeed)}function onMouseDown(event){if(scope.enabled===false)return;event.preventDefault();if(event.button===scope.mouseButtons.ORBIT){if(scope.noRotate===true)return;state=STATE.ROTATE;rotateStart.set(event.clientX,event.clientY)}else if(event.button===scope.mouseButtons.ZOOM){if(scope.noZoom===true)return;state=STATE.DOLLY;dollyStart.set(event.clientX,event.clientY)}else if(event.button===scope.mouseButtons.PAN){if(scope.noPan===true)return;state=STATE.PAN;panStart.set(event.clientX,event.clientY)}if(state!==STATE.NONE){document.addEventListener("mousemove",onMouseMove,false);document.addEventListener("mouseup",onMouseUp,false);scope.dispatchEvent(startEvent)}}function onMouseMove(event){if(scope.enabled===false)return;event.preventDefault();var element=scope.domElement===document?scope.domElement.body:scope.domElement;if(state===STATE.ROTATE){if(scope.noRotate===true)return;rotateEnd.set(event.clientX,event.clientY);rotateDelta.subVectors(rotateEnd,rotateStart);scope.rotateLeft(2*Math.PI*rotateDelta.x/element.clientWidth*scope.rotateSpeed);scope.rotateUp(2*<B>Math.PI*rotateDelta.y/element.clientHeight*scope.rotateSpeed);rotateStart.copy(rotateEnd)}else if(state===STATE.DOLLY){if(scope.noZoom===true)return;dollyEnd.set(event.clientX,event.clientY);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){scope.dollyIn()}else if(dollyDelta.y<0){scope.dollyOut()}dollyStart.copy(dollyEnd)}else if(state===STATE.PAN){if(scope.noPan===true)return;panEnd.set(event.clientX,event.clientY);panDelta.subVectors(panEnd,panStart);scope.pan(panDelta.x,panDelta.y);panStart.copy(panEnd)}if(state!==STATE.NONE)scope.update()}function onMouseUp(){if(scope.enabled===false)return;document.removeEventListener("mousemove",onMouseMove,false);document.removeEventListener("mouseup",onMouseUp,false);scope.dispatchEvent(endEvent);state=STATE.NONE}function onMouseWheel(event){if(scope.enabled===false||scope.noZoom===true||state!==STATE.NONE)return;event.preventDefault();event.stopPropagation();var delta=0;if(event.wheelDelta!==undefined){delta=event.wheelDelta}else if(event.detail!==undefined){delta=-event.detail}if(delta>0){scope.dollyOut()}else if(delta<0){scope.dollyIn()}scope.update();scope.dispatchEvent(startEvent);scope.dispatchEvent(endEvent)}function onKeyDown(event){if(scope.enabled===false||scope.noKeys===true||scope.noPan===true)return;switch(event.keyCode){case scope.keys.UP:scope.pan(0,scope.keyPanSpeed);scope.update();break;case scope.keys.BOTTOM:scope.pan(0,-scope.keyPanSpeed);scope.update();break;case scope.keys.LEFT:scope.pan(scope.keyPanSpeed,0);scope.update();break;case scope.keys.RIGHT:scope.pan(-scope.keyPanSpeed,0);scope.update();break}}function touchstart(event){if(scope.enabled===false)return;switch(event.touches.length){case 1:if(scope.noRotate===true)return;state=STATE.TOUCH_ROTATE;rotateStart.set(event.touches[0].pageX,event.touches[0].pageY);break;case 2:if(scope.noZoom===true)return;state=STATE.TOUCH_DOLLY;var dx=event.touches[0].pageX-event.touches[1].pageX;var dy=event.touches[0].pageY-event.touches[1].pageY;var distance=Math.sqrt(dx*dx+dy*dy);dollyStart.set(0,distance);break;case 3:if(scope.noPan===true)return;state=STATE.TOUCH_PAN;panStart.set(event.touches[0].pageX,event.touches[0].pageY);break;default:state=STATE.NONE}if(state!==STATE.NONE)scope.dispatchEvent(startEvent)}function touchmove(event){if(scope.enabled===false)return;event.preventDefault();event.stopPropagation();var element=scope.domElement===document?scope.domElement.body:scope.domElement;switch(event.touches.length){case 1:if(scope.noRotate===true)return;if(state!==STATE.TOUCH_ROTATE)return;rotateEnd.set(event.touches[0].pageX,event.touches[0].pageY);rotateDelta.subVectors(rotateEnd,rotateStart);scope.rotateLeft(2*Math.PI*rotateDelta.x/element.clientWidth*scope.rotateSpeed);scope.rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight*scope.rotateSpeed);rotateStart.copy(rotateEnd);scope.update();break;case 2:if(scope.noZoom===true)return;if(state!==STATE.TOUCH_DOLLY)return;var dx=event.touches[0].pageX-event.touches[1].pageX;var dy=event.touches[0].pageY-event.touches[1].pageY;var distance=Math.sqrt(dx*dx+dy*dy);dollyEnd.set(0,distance);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){scope.dollyOut()}else if(dollyDelta.y<0){scope.dollyIn()}dollyStart.copy(dollyEnd);scope.update();break;case 3:if(scope.noPan===true)return;if(state!==STATE.TOUCH_PAN)return;panEnd.set(event.touches[0].pageX,event.touches[0].pageY);panDelta.subVectors(panEnd,panStart);scope.pan(panDelta.x,panDelta.y);panStart.copy(panEnd);scope.update();break;default:state=STATE.NONE}}function touchend(){if(scope.enabled===false)return;scope.dispatchEvent(endEvent);state=STATE.NONE}this.domElement.addEventListener("contextmenu",function(event){event.preventDefault()},false);this.domElement.addEventListener("mousedown",onMouseDown,false);this.domElement.addEventListener("mousewheel",onMouseWheel,false);this.domElement.addEventListener("DOMMouseScroll",onMouseWheel,false);this.domElement.addEventListener("touchstart",touchstart,false);this.domElement.addEventListener("touchend",touchend,false);this.domElement.addEventListener("touchmove",touchmove,false);window.addEventListener("keydown",onKeyDown,false);this.update()};THREE.OrbitControls.prototype=Object.create(THREE.EventDispatcher.prototype);THREE.OrbitControls.prototype.constructor=THREE.OrbitControls;

Generated by GNU Enscript 1.6.5.90.