awv3
Version:
AWV client CAD framework
1 lines • 7.9 kB
JavaScript
"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}exports.__esModule=!0;var _extends2=require("babel-runtime/helpers/extends"),_extends3=_interopRequireDefault(_extends2),_keys=require("babel-runtime/core-js/object/keys"),_keys2=_interopRequireDefault(_keys),_getIterator2=require("babel-runtime/core-js/get-iterator"),_getIterator3=_interopRequireDefault(_getIterator2),_classCallCheck2=require("babel-runtime/helpers/classCallCheck"),_classCallCheck3=_interopRequireDefault(_classCallCheck2),_three=require("three"),_three2=_interopRequireDefault(_three),_raycaster=require("../three/raycaster"),_raycaster2=_interopRequireDefault(_raycaster),_object=require("../three/object3"),_object2=_interopRequireDefault(_object),Interaction=function(){function e(){var t=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,e),this.view=t,this.canvas=t.canvas,this.raycaster=new _raycaster2.default(this),this.enabled="undefined"==typeof i.enabled||i.enabled,this.targets=[],this.intersects=[],this.hits={},this.hitsArray=[],this.actions={},this.actionsArray=[],this.hovered={},this.filter=void 0,this.coordinates=new _three2.default.Vector3(0,0,0),this.click=new _three2.default.Vector3(0,0,0),this.delta=0}return e.prototype.update=function(){if(this.enabled)for(var e=this.targets,t=Array.isArray(e),i=0,e=t?e:(0,_getIterator3.default)(e);;){var r;if(t){if(i>=e.length)break;r=e[i++]}else{if(i=e.next(),i.done)break;r=i.value}var a=r;a.interaction&&a.interaction.enabled&&(this.view.invalidateFrames>0||this.view.renderAlways||this.view.controls.inMotion||this.view.controlsHud&&this.view.controlsHud.inMotion)&&a.emit(_object2.default.Events.Lifecycle.Rendered)}},e.prototype.onMouseMove=function(e){var t=this;if(this.enabled&&(this.coordinates.set(e.offsetX/this.view.width*2-1,2*-(e.offsetY/this.view.height)+1,1),this.delta=Math.max(this.delta,Math.abs(this.click.x-this.coordinates.x)+Math.abs(this.click.y-this.coordinates.y)),e.fake||!this.view.input.mouse.down||0!=this.actionsArray.length)){if(this.intersects=[],this.targets.length>0){if(this.raycaster.castObjects(this.coordinates,this.view.camera,this.targets,this.intersects,this.filter),this.intersects.length>0)for(var i={},r=this.intersects,a=Array.isArray(r),s=0,r=a?r:(0,_getIterator3.default)(r);;){var n;if(a){if(s>=r.length)break;n=r[s++]}else{if(s=r.next(),s.done)break;n=s.value}var o=n;if(o.id=o.receiver.id,o.receiver.interaction.recursive&&(o.id+="R"+o.object.id),o.receiver.interaction.faces&&o.face&&(o.id+="F"+o.face.materialIndex),o.first=o===this.intersects[0],o.time=this.canvas.renderer.time,o.face&&(o.object.userData.refs?o.meta=o.object.userData.refs[o.face.materialIndex]:o.object.userData.meta&&(o.meta=o.object.userData.meta)),o.object.material)if(o.face)o.object.material instanceof _three2.default.MultiMaterial?(o.materialIndex=o.face.materialIndex,o.multiMaterial=o.object.material.materials,o.material=o.object.material.materials[o.face.materialIndex]):o.material=o.object.material;else if("undefined"!=typeof o.index)if(o.object.material instanceof _three2.default.MultiMaterial&&o.object.geometry.groups)for(var c=o.object.geometry.groups,l=Array.isArray(c),h=0,c=l?c:(0,_getIterator3.default)(c);;){var d;if(l){if(h>=c.length)break;d=c[h++]}else{if(h=c.next(),h.done)break;d=h.value}var f=d;if(f.start<=o.index&&f.start+f.count>o.index){o.materialIndex=f.materialIndex,o.multiMaterial=o.object.material.materials,o.material=o.object.material.materials[f.materialIndex],o.meta=f.meta,o.id+="L"+f.materialIndex;break}}else o.material=o.object.material;i[o.id]||(o.receiver.interaction.first&&!o.first||this.hovered[o.id]||(this.hovered[o.id]=!0,o.receiver.emit(_object2.default.Events.Interaction.Hovered,o),this.view.invalidate()),this.hits[o.id]=o,i[o.id]=!0)}else 0==this.actionsArray.length&&this.view.setCursor();this.hitsArray=(0,_keys2.default)(this.hits).map(function(e){return t.hits[e]}).sort(function(e,t){return e.receiver.depthIndex-t.receiver.depthIndex}).filter(function(e){var i=e.receiver.interaction.first&&!e.first||e.time!=t.canvas.renderer.time;return i&&(t.hovered[e.id]&&!t.actions[e.id]&&(delete t.hovered[e.id],e.receiver.emit(_object2.default.Events.Interaction.Unhovered,e),t.view.invalidate()),delete t.hits[e.id]),!i})}if(this.delta>.01&&(0,_keys2.default)(this.actions).length>0)for(var u=this.actionsArray,v=Array.isArray(u),b=0,u=v?u:(0,_getIterator3.default)(u);;){var y;if(v){if(b>=u.length)break;y=u[b++]}else{if(b=u.next(),b.done)break;y=b.value}var m=y;if(!m.receiver.interaction.first||m.first){var _=this.coordinates.clone().unproject(this.view.camera).sub(this.view.camera.position).normalize();m.drag=this.view.camera.position.clone().add(_.multiplyScalar(m.distance)).add(m.offset),m.receiver.emit(_object2.default.Events.Interaction.Dragged,m),this.view.invalidate()}}}},e.prototype.onMouseOut=function(e){if(this.enabled)for(var t=this.hitsArray,i=Array.isArray(t),r=0,t=i?t:(0,_getIterator3.default)(t);;){var a;if(i){if(r>=t.length)break;a=t[r++]}else{if(r=t.next(),r.done)break;a=r.value}var s=a;this.hovered[s.id]&&!this.actions[s.id]&&(delete this.hovered[s.id],s.receiver.emit(_object2.default.Events.Interaction.Unhovered,s),this.view.invalidate()),delete this.hits[s.id]}},e.prototype.onMouseDown=function(e){if(this.enabled){this.delta=0,this.click.set(e.offsetX/this.view.width*2-1,2*-(e.offsetY/this.view.height)+1,1),this.onMouseMove((0,_extends3.default)({},e,{fake:!0})),this.actions={},this.actionsArray=[];for(var t=this.hitsArray,i=Array.isArray(t),r=0,t=i?t:(0,_getIterator3.default)(t);;){var a;if(i){if(r>=t.length)break;a=t[r++]}else{if(r=t.next(),r.done)break;a=r.value}var s=a;if(!s.receiver.interaction.first||s.first){var n=s.receiver.parent?s.receiver.parent.localToWorld(s.receiver.position.clone()):s.receiver.position.clone();s.offset=n.sub(s.point.clone()),this.actions[s.id]=s,this.actionsArray.push(s),s.receiver.emit(_object2.default.Events.Interaction.Picked,s)}}this.view.invalidate()}},e.prototype.onMouseUp=function(e){if(this.enabled){for(var t=this.actionsArray,i=Array.isArray(t),r=0,t=i?t:(0,_getIterator3.default)(t);;){var a;if(i){if(r>=t.length)break;a=t[r++]}else{if(r=t.next(),r.done)break;a=r.value}var s=a;this.hovered[s.id]&&!this.hits[s.id]&&(delete this.hovered[s.id],s.receiver.emit(_object2.default.Events.Interaction.Unhovered,s)),s.receiver.emit(_object2.default.Events.Interaction.Dropped,s),this.delta<.05&&s.receiver.emit(_object2.default.Events.Interaction.Clicked,s)}if(0==this.actionsArray.length&&this.delta<.05)for(var n=this.targets,o=Array.isArray(n),c=0,n=o?n:(0,_getIterator3.default)(n);;){var l;if(o){if(c>=n.length)break;l=n[c++]}else{if(c=n.next(),c.done)break;l=c.value}var h=l;h.emit(_object2.default.Events.Interaction.Missed)}this.view.invalidate(),this.actions={},this.actionsArray=[]}},e.prototype.removeTarget=function(e){var t=this,i=this.targets.indexOf(e);i>-1&&this.targets.splice(i,1),this.hitsArray.forEach(function(i){return i.receiver===e&&t.hitsArray.splice(t.hitsArray.indexOf(i),1)}),this.actionsArray.forEach(function(i){return i.receiver===e&&t.actionsArray.splice(t.actionsArray.indexOf(i),1)}),(0,_keys2.default)(this.hits).forEach(function(i){return t.hits[i].receiver===e&&delete t.hits[i]}),(0,_keys2.default)(this.actions).forEach(function(i){return t.actions[i].receiver===e&&delete t.actions[i]}),(0,_keys2.default)(this.hovered).forEach(function(i){return t.hovered[i].receiver===e&&delete t.hovered[i]})},e.prototype.getActions=function(){return this.actionsArray},e.prototype.isHit=function(e){return this.hitsArray.find(function(t){return t.object.id==e.id})},e.prototype.isAction=function(e){return this.actionsArray.find(function(t){return t.object.id==e.id})},e}();exports.default=Interaction;