UNPKG

awv3

Version:
1 lines 10.4 kB
"use strict";function _interopRequireWildcard(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t.default=e,t}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}exports.__esModule=!0;var _extends2=require("babel-runtime/helpers/extends"),_extends3=_interopRequireDefault(_extends2),_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"),_canvas=require("../core/canvas"),_dom=require("../core/dom"),_dom2=_interopRequireDefault(_dom),_interaction=require("../core/interaction"),_interaction2=_interopRequireDefault(_interaction),_stats=require("../misc/stats"),_stats2=_interopRequireDefault(_stats),_orbit=require("../controls/orbit"),_orbit2=_interopRequireDefault(_orbit),_perspective=require("../three/perspective"),_perspective2=_interopRequireDefault(_perspective),_elementResizeEvent=require("element-resize-event"),_elementResizeEvent2=_interopRequireDefault(_elementResizeEvent),View=function(){function e(){var t=this,i=arguments.length<=0||void 0===arguments[0]?_canvas.lastCreated:arguments[0],s=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];(0,_classCallCheck3.default)(this,e),this.id=(0,_helpers.guid)(),this.canvas=i,this.renderer=i.renderer,this.invalidateFrames=2,this.force=0,this.dirty=!0,this.bounds={box:new _three2.default.Box3,sphere:new _three2.default.Sphere},s=(0,_extends3.default)({dom:i.dom,renderAlways:!1,visible:!0,callback:void 0,callbackRender:void 0,callbackAfter:void 0,background:this.renderer.clearColor,opacity:0,defaultCursor:"auto"},s),this.dom=(0,_helpers.queryDom)(s.dom),this.renderAlways=s.renderAlways,this.visible=s.visible,this.callbackBefore=s.callback,this.callbackRender=s.callbackRender,this.callbackAfter=s.callbackAfter,this.background=s.background,this.opacity=s.opacity,this.defaultCursor=s.defaultCursor,s.dom.style.cssText+="-webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; -o-user-select: none; user-select: none; overlay: hidden",s.background!==this.renderer.clearColor&&(this.dom.style.border="2px solid #"+this.background.getHexString()),this.input=new _dom2.default(this,{wheel:function(e){t.controls.onMouseWheel(e),t.hud&&t.controlsHud&&t.controlsHud!==t.controls&&t.controlsHud.onMouseWheel(e)},mouseout:function(e){t.interaction.onMouseOut(e)},mousemove:function(e){t.interaction.onMouseMove(e),t.input.mouse.down&&t.controls.onMouseMove(e),t.input.mouse.down&&t.hud&&t.controlsHud&&t.controlsHud!==t.controls&&t.controlsHud.onMouseMove(e)},mousedown:function(e){t.interaction.onMouseDown(e),t.controls.onMouseDown(e),t.hud&&t.controlsHud&&t.controlsHud!==t.controls&&t.controlsHud.onMouseDown(e)},mouseup:function(e){t.interaction.onMouseUp(e),t.controls.onMouseUp(e),t.hud&&t.controlsHud&&t.controlsHud!==t.controls&&t.controlsHud.onMouseUp(e)},touchstart:function(e){t.interaction.onMouseDown(e),t.controls.onTouchStart(e),t.hud&&t.controlsHud&&t.controlsHud!==t.controls&&t.controlsHud.onTouchStart(e)},touchmove:function(e){t.interaction.onMouseMove(e),t.controls.onTouchMove(e),t.hud&&t.controlsHud&&t.controlsHud!==t.controls&&t.controlsHud.onTouchMove(e)},touchend:function(e){t.interaction.onMouseUp(e),t.controls.onTouchEnd(e),t.hud&&t.controlsHud&&t.controlsHud!==t.controls&&t.controlsHud.onTouchEnd(e)}}),this.scene=new _three2.default.Scene,this.scene.canvas=i,this.scene.view=this,this.ambient=new _three2.default.AmbientLight(s.ambientColor?s.ambientColor:16777215),this.ambient.intensity="undefined"!=typeof s.ambientIntensity?s.ambientIntensity:1,this.ambient.keep=!0,this.ambient.view=this,this.scene.add(this.ambient),this.camera=new _perspective2.default(s),this.controls=new _orbit2.default(this,(0,_extends3.default)({maxPolarAngle:Math.PI,minDistance:1,maxDistance:2e4},s)),this.hud=!1,this.sceneHud=new _three2.default.Scene,this.sceneHud.canvas=i,this.sceneHud.view=this,this.cameraHud=this.camera,this.controlsHud=this.controls,this.ambientHud=new _three2.default.AmbientLight(s.ambientColor?s.ambientColor:16777215),this.ambientHud.intensity="undefined"!=typeof s.ambientIntensity?s.ambientIntensity:1,this.ambientHud.keep=!0,this.ambientHud.view=this,this.sceneHud.add(this.ambientHud),this.interaction=new _interaction2.default(this),this.updateScopes(),this.canvas.views.push(this),this.renderer.resize(),(0,_elementResizeEvent2.default)(this.dom,function(){return t.invalidate(30)})}return e.prototype.destroy=function(){this.input.detach(),this.input.removeListeners(),this.input.removeInspectors(),this.scene.destroy({keep:!1}),this.dom.querySelector("object").remove(),this.render=function(){},this.clear=function(){},this.view=void 0,this.canvas=void 0,this.renderer=void 0,this.bound=void 0,this.input=void 0,this.scene=void 0,this.sceneHud=void 0,this.controls=void 0,this.controlsHud=void 0,this.interaction=void 0,this.camera=void 0,this.cameraHud=void 0,this.ambient=void 0,this.ambientHud=void 0,this.dom=void 0},e.prototype.setCursor=function(){var e=arguments.length<=0||void 0===arguments[0]?this.defaultCursor:arguments[0],t=arguments[1];return e!=this.cursor&&((0,_helpers.setPrefixedValue)(this.dom,"cursor",e,t),this.cursor=e),this},e.prototype.getPoint2=function(e){var t=arguments.length<=1||void 0===arguments[1]?this.camera:arguments[1],i=this.width/2,s=this.height/2,r=e.project(t);return r.x=r.x*i+i,r.y=-(r.y*s)+s,r},e.prototype.getPoint3=function(e){var t=arguments.length<=1||void 0===arguments[1]?this.camera:arguments[1],i=new _three2.default.Vector3(e.x/this.width*2-1,2*-(e.y/this.height)+1,1);return i.unproject(t),i},e.prototype.getViewLine3=function(e){var t=new _three2.default.Vector3(e.x/this.width*2-1,2*-(e.y/this.height)+1,0),i=new _three2.default.Vector3(e.x/this.width*2-1,2*-(e.y/this.height)+1,1);return t.unproject(this.camera),i.unproject(this.camera),new _three2.default.Line3(t,i)},e.prototype.updateOverlays=function(){},e.prototype.updateScopes=function(){for(var e=this.dom;e&&e!=this.canvas.dom;){var t=this.canvas.scopes.get(e);t?t.push(this):this.canvas.scopes.set(e,[this]),e=e.parentNode}},e.prototype.clear=function(e){return this.dirty=this.invalidateFrames>0&&this.measure(),this.visible&&(this.input.debounce&&this.input.update(),this.controls.update(e),this.hud&&this.controlsHud&&this.controlsHud!=this.controls&&this.controlsHud.update(e),this.interaction.update(),(this.dirty||this.renderAlways||this.controls.inMotion||this.controlsHud&&this.controlsHud.inMotion)&&this.dirty&&(this.renderer.dirty=!0,this.renderer.gl.setViewport(this.old[0],this.old[1],this.old[2],this.old[3]),this.renderer.gl.setScissor(this.old[0],this.old[1],this.old[2],this.old[3]),this.renderer.gl.setClearColor(this.renderer.clearColor,0),this.renderer.gl.clear())),this.invalidateFrames>0&&this.invalidateFrames--,this.dirty},e.prototype.render=function(e){(this.force>0||this.dirty||this.renderAlways||this.controls.inMotion||this.controlsHud&&this.controlsHud.inMotion||this.stats)&&(this.callbackBefore&&this.callbackBefore(),this.renderer.gl.setViewport(this.new[0],this.new[1],this.new[2],this.new[3]),this.renderer.gl.setScissor(this.new[0],this.new[1],this.new[2],this.new[3]),this.renderer.gl.setClearColor(this.background,this.opacity),this.renderer.gl.clear(),this.callbackRender?this.callbackRender():(this.renderer.gl.render(this.scene,this.camera),this.renderer.gl.clearDepth(),this.hud&&this.renderer.gl.render(this.sceneHud,this.cameraHud)),this.callbackAfter&&this.callbackAfter(),this.stats&&this.stats.update(),this.force>0&&this.force--)},e.prototype.invalidate=function(){var e=arguments.length<=0||void 0===arguments[0]?1:arguments[0];return this.force+=e,this.force>60&&(this.force=60),this.invalidateFrames+=e,this.invalidateFrames>60&&(this.invalidateFrames=60),this},e.prototype.measure=function(e){var t=!1,i=this.dom.getBoundingClientRect(),s={top:i.top,left:i.left,width:i.width,height:i.height};s.top-=this.renderer.offset.top,s.left-=this.renderer.offset.left,(e||s.width!=this.width||s.height!=this.height)&&(this.calibrate(s.width,s.height),this.invalidate(10),t=!0),(e||s.top!=this.top||s.left!=this.left)&&(this.invalidate(10),t=!0),this.old=[this.left*this.renderer.resolution,this.bottom*this.renderer.resolution,this.width*this.renderer.resolution,this.height*this.renderer.resolution],this.width=s.width,this.height=s.height,this.top=s.top,this.left=s.left,this.bottom=this.renderer.offset.height-s.height-s.top,this.new=[this.left*this.renderer.resolution,this.bottom*this.renderer.resolution,this.width*this.renderer.resolution,this.height*this.renderer.resolution];var r=!(this.height<=0||this.width<=0||this.top>=this.renderer.offset.height||this.left>=this.renderer.offset.width||this.top+this.height<=0||this.left+this.width<=0);return this.visible!=r&&(this.visible=r,this.visible&&this.invalidate(10),t=!0),t},e.prototype.calibrate=function(e,t){this.aspect=e/t,this.camera instanceof _three2.default.PerspectiveCamera?(this.camera.aspect=this.aspect,this.camera.updateProjectionMatrix(),this.camera.radius=(e+t)/4,this.hud&&this.cameraHud!=this.camera&&(this.cameraHud.aspect=this.aspect,this.cameraHud.updateProjectionMatrix(),this.cameraHud.radius=(e+t)/4)):this.camera instanceof _three2.default.OrthographicCamera&&(e=this.camera.size*this.aspect,t=this.camera.size,this.camera.left=e/-2,this.camera.right=e/2,this.camera.top=t/2,this.camera.bottom=t/-2,this.camera.updateProjectionMatrix(),this.hud&&this.cameraHud!=this.camera&&(this.cameraHud.left=e/-2,this.cameraHud.right=e/2,this.cameraHud.top=t/2,this.cameraHud.bottom=t/-2,this.cameraHud.updateProjectionMatrix()))},e.prototype.updateBounds=function(){var e=arguments.length<=0||void 0===arguments[0]?void 0:arguments[0];return this.bounds.box=e?this.bounds.box.union(e):(new _three2.default.Box3).setFromObject(this.scene),this.bounds.sphere=this.bounds.box.getBoundingSphere(),this},(0,_createClass3.default)(e,[{key:"showStats",set:function(e){this.stats&&(this.stats.remove(),this.stats=void 0),e&&(this.stats=new _stats2.default,this.dom.appendChild(this.stats.dom))}}]),e}();exports.default=View;