UNPKG

awv3

Version:
1 lines 19.9 kB
"use strict";function _interopRequireWildcard(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e["default"]=t,e}function _interopRequireDefault(t){return t&&t.__esModule?t:{"default":t}}exports.__esModule=!0;var _promise=require("babel-runtime/core-js/promise"),_promise2=_interopRequireDefault(_promise),_classCallCheck2=require("babel-runtime/helpers/classCallCheck"),_classCallCheck3=_interopRequireDefault(_classCallCheck2),_createClass2=require("babel-runtime/helpers/createClass"),_createClass3=_interopRequireDefault(_createClass2),_three=require("three"),_three2=_interopRequireDefault(_three),_error=require("../core/error"),Error=_interopRequireWildcard(_error),_helpers=require("../core/helpers"),Helpers=_interopRequireWildcard(_helpers),_canvas=require("../core/canvas"),_easing2=require("../animation/easing"),Orbit=function(){function t(){var e=arguments.length<=0||void 0===arguments[0]?Error.log("View undefined"):arguments[0],i=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];(0,_classCallCheck3["default"])(this,t),this.view=e,this.canvas=e.canvas,this.dom=e.dom,this.camera=i.camera||e.camera,this.easing=_easing2.exponential.out,this.duration=1e3,this._zoomed=!1,this._autoZoom={start:0,end:0,time:0,length:0,ease:this.easing,duration:this.duration},this._autoFocus={start:new _three2["default"].Vector3,end:new _three2["default"].Vector3,time:0,ease:this.easing,duration:this.duration},this._autoTheta={start:0,end:0,time:0,ease:this.easing,duration:this.duration},this._autoPhi={start:0,end:0,time:0,ease:this.easing,duration:this.duration},this._autoFov={start:0,end:0,time:0,ease:this.easing,duration:this.duration},this.enabled=i.enabled||!0,this.zoomTarget=i.zoomTarget||new _three2["default"].Vector3,this.dynamicDampingFactor=i.dynamicDampingFactor||.3,this.dynamicDampingFactorAuto=i.dynamicDampingFactorAuto||.17,this.noZoom=i.noZoom||!1,this.zoomSpeed=i.zoomSpeed||2,this.zoomMode=i.zoomMode||t.ZoomMode.Center,this.minDistance=i.minDistance||0,this.maxDistance=i.maxDistance||1/0,this.noRotate=i.noRotate||!1,this.rotateSpeed=i.rotateSpeed||.5,this.noPan=i.noPan||!1,this.panMode=i.panMode||t.PanMode.Both,this.minPolarAngle=i.minPolarAngle||0,this.maxPolarAngle=i.maxPolarAngle||Math.PI,this.interactionStopsAutomation=i.interactionStopsAutomation||!0,this.inMotion=!1,this.interaction=!1,this.automation=!1,this.target=new _three2["default"].Vector3,this.phi=0,this.theta=0,this.distance=0,this._rotateStart=new _three2["default"].Vector2,this._rotateEnd=new _three2["default"].Vector2,this._rotateDelta=new _three2["default"].Vector2,this._panStart=new _three2["default"].Vector2,this._panEnd=new _three2["default"].Vector2,this._panDelta=new _three2["default"].Vector2,this._panOffset=new _three2["default"].Vector3,this._wheelStart=new _three2["default"].Vector2,this._wheelEnd=new _three2["default"].Vector2,this._wheelDelta=new _three2["default"].Vector2,this._polarStart=new _three2["default"].Vector2,this._polarEnd=new _three2["default"].Vector2,this._mousePosition=new _three2["default"].Vector2,this._panning=new _three2["default"].Vector3,this._eye=new _three2["default"].Vector3,this._phiDelta=0,this._thetaDelta=0,this._scale=1,this._state=t.State.none,this._quat=(new _three2["default"].Quaternion).setFromUnitVectors(this.camera.up,new _three2["default"].Vector3(0,1,0)),this._quatInverse=this._quat.clone().inverse(),this._touchZoomDistanceEnd,this._touchZoomDistanceStart,this._aDelta=new _three2["default"].Vector2,this._lastState=[],this._idleCallbacks=[],this._activeCallbacks=[]}return t.prototype.clone=function(){var e=new t(this.view);return e.enabled=this.enabled,e.inMotion=this.inMotion,e.interaction=this.interaction,e.automation=this.automation,e.target=this.target.clone(),e.zoomTarget=this.zoomTarget.clone(),e.dynamicDampingFactor=this.dynamicDampingFactor,e.dynamicDampingFactorAuto=this.dynamicDampingFactorAuto,e.noZoom=this.noZoom,e.zoomSpeed=this.zoomSpeed,e.zoomMode=this.zoomMode,e.minDistance=this.minDistance,e.maxDistance=this.maxDistance,e.noRotate=this.noRotate,e.rotateSpeed=this.rotateSpeed,e.noPan=this.noPan,e.panMode=this.panMode,e.minPolarAngle=this.minPolarAngle,e.maxPolarAngle=this.maxPolarAngle,e.phi=this.phi,e.theta=this.theta,e.distance=this.distance,e},t.prototype.easing=function(t){return this.easing=t,this},t.prototype.duration=function(t){return this.duration=t,this},t.prototype.zoom=function(){var t=arguments.length<=0||void 0===arguments[0]?{value:4*this.view.scene.getRadius(),easing:this.easing,duration:this.duration}:arguments[0];return"number"==typeof t&&(t={value:t,easing:this.easing,duration:this.duration}),t instanceof _three2["default"].Object3D&&(t={value:4*t.getRadius(),easing:this.easing,duration:this.duration}),t.value=t.value||4*this.view.scene.getRadius(),t.duration=t.duration||this.duration,t.easing=t.easing||this.easing,this.automation=!0,this._wheelStart.y=0,this._wheelEnd.y=0,this._autoZoom.ease=t.easing,this._autoZoom.duration=t.duration,this._autoZoom.time=this.canvas.renderer.time,this.camera.fov?(this._autoZoom.length=this._eye.copy(this.camera.position).sub(this.target).length(),this._autoZoom.start=1,this._autoZoom.end=t.value/this._autoZoom.length):this.camera.top&&(this._autoZoom.start=this.camera.size,this._autoZoom.end=t.value),this},t.prototype.focus=function(){var t=arguments.length<=0||void 0===arguments[0]?{value:this.view.scene.getCenter(),easing:this.easing,duration:this.duration}:arguments[0];return t instanceof _three2["default"].Vector3&&(t={value:t,easing:this.easing,duration:this.duration}),t instanceof _three2["default"].Object3D&&(t={value:t.getCenter(),easing:this.easing,duration:this.duration}),this.automation=!0,this._autoFocus.ease=t.easing||this.easing,this._autoFocus.duration=t.duration||this.duration,this._autoFocus.time=this.canvas.renderer.time,this._autoFocus.start.copy(this.target),this._autoFocus.end.copy(t.value||this.view.scene.getCenter()),this},t.prototype.rotateTheta=function(){var t=arguments.length<=0||void 0===arguments[0]?{value:0,easing:this.easing,duration:this.duration}:arguments[0];"number"==typeof t&&(t={value:t,easing:this.easing,duration:this.duration});var e=t.value||0,i=this.theta;i<0&&(i+=2*Math.PI),e<0&&(e+=2*Math.PI);var a=Math.abs(e-i);return 2*Math.PI-a<a&&(e<i?e+=2*Math.PI:i+=2*Math.PI),this.automation=!0,this._autoTheta.ease=t.easing||this.easing,this._autoTheta.duration=t.duration||this.duration,this._autoTheta.time=this.canvas.renderer.time,this._autoTheta.start=i,this._autoTheta.end=e,this._autoTheta.old=void 0,this},t.prototype.rotatePhi=function(){var t=arguments.length<=0||void 0===arguments[0]?{value:0,easing:this.easing,duration:this.duration}:arguments[0];"number"==typeof t&&(t={value:t,easing:this.easing,duration:this.duration});var e=t.value||0,i=this.phi;i<0&&(i+=2*Math.PI),e<0&&(e+=2*Math.PI);var a=Math.abs(e-i);return 2*Math.PI-a<a&&(e<i?e+=2*Math.PI:i+=2*Math.PI),this.automation=!0,this._autoPhi.ease=t.easing||this.easing,this._autoPhi.duration=t.duration||this.duration,this._autoPhi.time=this.canvas.renderer.time,this._autoPhi.start=i,this._autoPhi.end=e,this._autoPhi.old=void 0,this},t.prototype.rotate=function(t,e){return this.rotateTheta(t).rotatePhi(e)},t.prototype.fov=function(){var t=arguments.length<=0||void 0===arguments[0]?{value:0,easing:this.easing,duration:this.duration}:arguments[0];return"number"==typeof t&&(t={value:t,easing:this.easing,duration:this.duration}),t.angle=t.angle||0,this.camera.fov&&(this.automation=!0,this._autoFov.ease=t.easing||this.easing,this._autoFov.duration=t.duration||this.duration,this._autoFov.time=this.canvas.renderer.time,this._autoFov.start=this.camera.fov,this._autoFov.end=t.value||this.camera.fov),this},t.prototype._automate=function(t,e){var i=!1;if(!!this._autoFocus.time>0){var a=e?1:Math.min(1.1,(t-this._autoFocus.time)/this._autoFocus.duration),s=this._autoFocus.start.clone().add(this._autoFocus.end.clone().sub(this._autoFocus.start).multiplyScalar(this._autoFocus.ease(a)));this.target.copy(s),a>=1&&(this._autoFocus.time=0),i=!0}if(!!this._autoTheta.time>0){var o=e?1:Math.min(1.1,(t-this._autoTheta.time)/this._autoTheta.duration),h=this._autoTheta.start+(this._autoTheta.end-this._autoTheta.start)*this._autoTheta.ease(o);if(i=!0,this._autoTheta.old){var n=this._autoTheta.old;this._autoTheta.old=h,this._thetaDelta=h-n}else this._autoTheta.old=h,this._thetaDelta=h-this._autoTheta.start;o>=1&&(this._autoTheta.time=0)}if(!!this._autoPhi.time>0){var r=e?1:Math.min(1.05,(t-this._autoPhi.time)/this._autoPhi.duration),u=this._autoPhi.start+(this._autoPhi.end-this._autoPhi.start)*this._autoPhi.ease(r);if(i=!0,this._autoPhi.old){var c=this._autoPhi.old;this._autoPhi.old=u,this._phiDelta=u-c}else this._autoPhi.old=u,this._phiDelta=u-this._autoPhi.start;r>=1&&(this._autoPhi.time=0)}if(!!this._autoZoom.time>0){var l=e?1:Math.min(1.05,(t-this._autoZoom.time)/this._autoZoom.duration),_=this._autoZoom.start+(this._autoZoom.end-this._autoZoom.start)*this._autoZoom.ease(l);if(this.camera.fov)this._scale=_;else if(this.camera.top){var m=_*this.view.aspect;this.camera.size=_,this.camera.left=m/-2,this.camera.right=m/2,this.camera.top=this.camera.size/2,this.camera.bottom=this.camera.size/-2,this.camera.updateProjectionMatrix()}l>=1&&(this._autoZoom.time=0),i=!0}else this._autoZoom.length=0;if(!!this._autoFov.time>0){var p=e?1:Math.min(1.05,(t-this._autoFov.time)/this._autoFov.duration),d=this._autoFov.start+(this._autoFov.end-this._autoFov.start)*this._autoFov.ease(p);this.camera.fov=d,this.camera.updateProjectionMatrix(),p>=1&&(this._autoFov.time=0),i=!0}return i},t.prototype.now=function(){var t=this.canvas.renderer.time;return!!this._autoFocus.time>0&&(this._autoFocus.duration=1),!!this._autoTheta.time>0&&(this._autoTheta.duration=1),!!this._autoPhi.time>0&&(this._autoPhi.duration=1),!!this._autoZoom.time>0&&(this._autoZoom.duration=1),!!this._autoFov.time>0&&(this._autoFov.duration=1),this.update(t+1,!0),this},t.prototype.panLeft=function(e){if(this.panMode===t.PanMode.Horizontal||this.panMode===t.PanMode.Both){var i=this.camera.matrix.elements;this._panOffset.set(i[0],i[1],i[2]),this._panOffset.multiplyScalar(-e),this._panning.add(this._panOffset)}},t.prototype.panUp=function(e){if(this.panMode===t.PanMode.Vertical||this.panMode===t.PanMode.Both){var i=this.camera.matrix.elements;this._panOffset.set(i[4],i[5],i[6]),this._panOffset.multiplyScalar(e),this._panning.add(this._panOffset)}},t.prototype.panPixels=function(t,e){if(this.camera.fov){var i=this.camera.position,a=i.clone().sub(this.target),s=a.length();s*=Math.tan(this.camera.fov/2*Math.PI/180),this.panLeft(t*s/(this.view.height||1)),this.panUp(e*s/(this.view.height||1))}else this.camera.top?(this.panLeft(t*(this.camera.right-this.camera.left)/(this.view.width||1)),this.panUp(e*(this.camera.top-this.camera.bottom)/(this.view.height||1))):console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.")},t.prototype._rotate=function(){if(!this.noRotate){var t=this._rotateEnd.clone().sub(this._rotateStart).multiplyScalar(this.dynamicDampingFactor);if(t.length()>.01)return this._rotateStart.add(t),this.dynamicDampingFactor<1?this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart):this._rotateDelta=t,this._thetaDelta-=2*Math.PI*this._rotateDelta.x/(this.view.width||1)*this.rotateSpeed,this._phiDelta-=2*Math.PI*this._rotateDelta.y/(this.view.height||1)*this.rotateSpeed,!0}return!1},t.prototype._zoom=function(e){if(!this.noZoom){var i=this._wheelEnd.clone().sub(this._wheelStart).multiplyScalar(this.dynamicDampingFactor);if(i.length()>1e-5){this._wheelStart.add(i),this._wheelDelta.subVectors(this._wheelEnd,this._wheelStart);var a=1+this._wheelDelta.y*this.zoomSpeed;if(1!==a&&a>0){var s=this.camera.size||this.camera.position.distanceTo(this.target);if(a>1&&s>this.maxDistance)return!1;if(e||(e=this.zoomMode===t.ZoomMode.Target&&this.zoomTarget?this.zoomTarget.clone():this.zoomMode===t.ZoomMode.Mouse?this._mousePosition.clone():this.view.bounds.sphere.center.clone()),this.camera.fov)this._scale=a;else if(this.camera.top){var o=new _three2["default"].Vector3(0,e.x*(this.camera.size*(1-a)*this.view.aspect/2),e.y*(this.camera.size*(1-a)/2));this.target.add(o),this.camera.size*=a;var h=this.camera.size*this.view.aspect,n=this.camera.size;this.camera.left=h/-2,this.camera.right=h/2,this.camera.top=n/2,this.camera.bottom=n/-2,this.camera.updateProjectionMatrix()}}return!0}if(this._state===t.State.TouchZoomPan){var a=this._touchZoomDistanceStart/this._touchZoomDistanceEnd;if(0!=a&&!isNaN(a))if(this._touchZoomDistanceStart=this._touchZoomDistanceEnd,this.camera.fov)this._scale=a;else if(this.camera.top){this.camera.size*=a;var h=this.camera.size*this.view.aspect,n=this.camera.size;this.camera.left=h/-2,this.camera.right=h/2,this.camera.top=n/2,this.camera.bottom=n/-2,this.camera.updateProjectionMatrix()}return!0}}return!1},t.prototype._pan=function(){if(this.noPan===!1){var t=this._panEnd.clone().sub(this._panStart).multiplyScalar(this.dynamicDampingFactor);if(t.length()>.01)return this._panStart.add(t),this._panDelta.subVectors(this._panEnd,this._panStart),this.panPixels(this._panDelta.x,this._panDelta.y),!0}return!1},t.prototype.stop=function(){return this.automation=!1,this._autoZoom.time=0,this._autoZoom.length=0,this._autoFocus.time=0,this._autoTheta.time=0,this._autoPhi.time=0,this._autoFov.time=0,this._wheelStart.y=0,this._wheelEnd.y=0,this._panStart.set(0,0),this._panEnd.set(0,0),this.emptyIdleCallbacks(),this},t.prototype.store=function(t){return this._lastState=[this.camera.fov,this.target.clone(),this.target.distanceTo(this.camera.position),this.theta,this.phi],t&&t.fov(lastState[0]).focus(lastState[1]).zoom(lastState[2]).rotate(lastState[3],lastState[4]).now(),this},t.prototype.back=function(){return this._lastState.length>0&&(this.automation=!0,this.fov(lastState[0]).focus(lastState[1]).zoom(lastState[2]).rotate(lastState[3],lastState[4])),this},t.prototype.polar=function(t,e){return this.automation=!0,this._polarStart.set(this.minPolarAngle,this.maxPolarAngle),this._polarEnd.set(t,e),this},t.prototype.pan=function(t,e){return this.automation=!0,this._panStart.set(0,0),this._panEnd.set(t,e),this},t.prototype.waitIdle=function(){var t=this;return new _promise2["default"](function(e){return t._idleCallbacks.push(function(){return e(t)})})},t.prototype.wait=function(){return this.waitIdle()},t.prototype.waitActive=function(){var t=this;return new _promise2["default"](function(e){return t._activeCallbacks.push(function(){return e(t)})})},t.prototype.emptyIdleCallbacks=function(){if(this._idleCallbacks.length>0)for(var t=0,e=this._idleCallbacks.length;t<e;t++)this._idleCallbacks.shift()()},t.prototype.emptyActiveCallbacks=function(){if(this._activeCallbacks.length>0)for(var t=0,e=this._activeCallbacks.length;t<e;t++)this._activeCallbacks.shift()()},t.prototype.update=function(e,i){if(!this.enabled||this.automation||this.interaction){var a=this.inMotion,s=this.camera.position;i&&this.view.invalidate(),this.inMotion=!1,this.distance=this._eye.copy(s).sub(this.target).length();var o=this._automate(e,i),h=this._rotate(),n=this._zoom(),r=this._pan();if(h||n||r||o||i){this.inMotion=!0,this._eye.applyQuaternion(this._quat),this.theta=Math.atan2(this._eye.x,this._eye.z),this.phi=Math.atan2(Math.sqrt(this._eye.x*this._eye.x+this._eye.z*this._eye.z),this._eye.y),this.theta+=this._thetaDelta,this.phi+=this._phiDelta,this.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this.phi)),this.phi=Math.max(t.Eps,Math.min(this.maxPolarAngle-t.Eps,this.phi));var u=(this._autoZoom.length?this._autoZoom.length:this.distance)*this._scale;u=Math.max(this.minDistance,Math.min(this.maxDistance,u)),this.target.add(this._panning),this._eye.x=u*Math.sin(this.phi)*Math.sin(this.theta),this._eye.y=u*Math.cos(this.phi),this._eye.z=u*Math.sin(this.phi)*Math.cos(this.theta),this._eye.applyQuaternion(this._quatInverse),this.camera.position.copy(this.target).add(this._eye),this.camera.lookAt(this.target),this._thetaDelta=0,this._phiDelta=0,this._scale=1,this._panning.set(0,0,0),0==a&&this.emptyActiveCallbacks()}else this.interaction=!1,this.automation=!1,this.emptyIdleCallbacks();return this}},t.prototype.onMouseDown=function(e){if(this.enabled!==!1)if(this.automation=this.interaction=!0,this.interactionStopsAutomation&&this.stop(),0===e.button&&this.noRotate||2===e.button){if(this.noPan===!0)return;this._state=t.State.Pan,this._panStart.set(e.clientX,e.clientY),this._panEnd.copy(this._panStart)}else if(0===e.button){if(this.noRotate===!0)return;this._state=t.State.Rotate,this._rotateStart.set(e.clientX,e.clientY),this._rotateEnd.copy(this._rotateStart)}},t.prototype.onMouseMove=function(e){this.enabled&&(this.automation=this.interaction=!0,this._state===t.State.Rotate?this._rotateEnd.set(e.clientX,e.clientY):this._state===t.State.Pan&&this._panEnd.set(e.clientX,e.clientY))},t.prototype.onMouseUp=function(e){this.interaction=!1,this._state=t.State.None},t.prototype.onMouseWheel=function(t){this.enabled!==!1&&this.noZoom!==!0&&(this.automation=this.interaction=!0,this.interactionStopsAutomation&&this.stop(),this._autoZoom.start=this._autoZoom.end=0,this._wheelStart.y+=.01*t.delta,this._mousePosition.x=t.offsetX/this.view.width*2-1,this._mousePosition.y=2*-(t.offsetY/this.view.height)+1)},t.prototype.onTouchStart=function(e){if(this.enabled!==!1)if(this.automation=this.interaction=!0,this.interactionStopsAutomation&&this.stop(),1==e.touches.length&&this.noRotate||2==e.touches.length){if(this._state=t.State.TouchZoomPan,2==e.touches.length&&this.noZoom!==!0){var i=e.touches[0].pageX-e.touches[1].pageX,a=e.touches[0].pageY-e.touches[1].pageY;this._touchZoomDistanceEnd=this._touchZoomDistanceStart=Math.sqrt(i*i+a*a),i=(e.touches[0].pageX+e.touches[1].pageX)/2,a=(e.touches[0].pageY+e.touches[1].pageY)/2,this._panStart.set(i,a),this._panEnd.copy(this._panStart)}else 1==e.touches.length&&this.noPan!==!0&&(this._touchZoomDistanceStart=this._touchZoomDistanceEnd=0,this._panStart.set(e.touches[0].pageX,e.touches[0].pageY));this._panEnd.copy(this._panStart)}else if(1==e.touches.length){if(this.noRotate===!0)return;this._state=t.State.TouchRotate,this._rotateStart.set(e.touches[0].pageX,e.touches[0].pageY),this._rotateEnd.copy(this._rotateStart)}else this._state=t.State.None},t.prototype.onTouchMove=function(e){if(this.enabled!==!1)if(this.automation=this.interaction=!0,1==e.touches.length&&this.noRotate||2==e.touches.length){if(this._state!=t.State.TouchZoomPan)return;if(2==e.touches.length){var i=e.touches[0].pageX-e.touches[1].pageX,a=e.touches[0].pageY-e.touches[1].pageY;this._touchZoomDistanceEnd=Math.sqrt(i*i+a*a),i=(e.touches[0].pageX+e.touches[1].pageX)/2,a=(e.touches[0].pageY+e.touches[1].pageY)/2,this._panEnd.set(i,a)}else 1==e.touches.length&&(this._touchZoomDistanceStart=this._touchZoomDistanceEnd=0,this._panEnd.set(e.touches[0].pageX,e.touches[0].pageY))}else if(1==e.touches.length){if(this._state!=t.State.TouchRotate)return;this._rotateEnd.set(e.touches[0].pageX,e.touches[0].pageY)}else this._state=t.State.None},t.prototype.onTouchEnd=function(e){if(this.interaction=!1,this.enabled!==!1){switch(e.touches.length){case 2:this._touchZoomDistanceStart=this._touchZoomDistanceEnd=0}this._state=t.State.None}},(0,_createClass3["default"])(t,[{key:"up",set:function(t){this.camera.up.copy(t),this.camera.updateProjectionMatrix(),this._quat=(new _three2["default"].Quaternion).setFromUnitVectors(this.camera.up,new _three2["default"].Vector3(0,1,0)),this._quatInverse=this._quat.clone().inverse(),this.view.invalidate()},get:function(){return this.camera.up.clone()}}]),t}();exports["default"]=Orbit,Orbit.PanMode={Horizontal:1,Vertical:2,Both:3},Orbit.ZoomMode={Center:0,Mouse:1,Target:2},Orbit.Eps=1e-6,Orbit.State={None:-1,Rotate:0,Zoom:1,Pan:2,TouchRotate:3,TouchZoomPan:4};