awv3
Version:
AWV client CAD framework
1 lines • 11.2 kB
JavaScript
"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}exports.__esModule=!0;var _getIterator2=require("babel-runtime/core-js/get-iterator"),_getIterator3=_interopRequireDefault(_getIterator2),_toConsumableArray2=require("babel-runtime/helpers/toConsumableArray"),_toConsumableArray3=_interopRequireDefault(_toConsumableArray2),_extends2=require("babel-runtime/helpers/extends"),_extends3=_interopRequireDefault(_extends2),_classCallCheck2=require("babel-runtime/helpers/classCallCheck"),_classCallCheck3=_interopRequireDefault(_classCallCheck2),_three=require("three"),_three2=_interopRequireDefault(_three),_object2=require("../three/object3"),_object3=_interopRequireDefault(_object2),_orbit=require("../controls/orbit"),_orbit2=_interopRequireDefault(_orbit),_perspective=require("../three/perspective"),_perspective2=_interopRequireDefault(_perspective),Selection=function(){function e(t,r){(0,_classCallCheck3.default)(this,e),this.options=(0,_extends3.default)({hover:e.hover,hoverMarker:e.hoverMarker,unhover:e.unhover,unhoverMarker:e.unhoverMarker,select:e.select,selectMarker:e.selectMarker,unselect:e.unselect,unselectMarker:e.unselectMarker},r),this.integration=t,this.view=this.integration.view,this.items=[],this.element=void 0}return e.prototype.toggle=function(){var e=arguments.length<=0||void 0===arguments[0]?this.element:arguments[0],t=arguments[1];e.active?this.deactivate(e,t):this.activate(e)},e.prototype.deactivate=function(){var e=arguments.length<=0||void 0===arguments[0]?this.element:arguments[0],t=!(arguments.length<=1||void 0===arguments[1])&&arguments[1];this.removeAll(t),e.active=!1,this.shiftHandler&&document.removeEventListener("keydown",this.shiftHandler),this.shiftHandler=void 0,this.view.scene.removeInteraction(),this.view.interaction.filter=void 0,this.view.setCursor(),this.element=void 0},e.prototype.activate=function(){var e,t=this,r=arguments.length<=0||void 0===arguments[0]?this.element:arguments[0];this.element&&this.element!==r&&this.deactivate(this.element),this.element=r,r.active=!0,this.view.interaction.filter=[this.view.scene],this.items=r.items.map(function(e){return t.add(t.view.scene.getObjectById(e))});var i=["Scene"];Array.isArray(r.types)?i=[].concat((0,_toConsumableArray3.default)(i),(0,_toConsumableArray3.default)(r.types)):"function"==typeof r.types&&(i=function(e){return"Scene"===e.type||r.types(e)}),this.view.scene.createInteraction({faces:!0,recursive:!0,first:!0,types:i}).on((e={},e[_object3.default.Events.Interaction.Hovered]=function(e){t.shiftHandler.handled||(t.view.setCursor("pointer"),t.options.hover&&t.options.hover(e,e.material.__selected),t.options.hoverMarker&&t.options.hoverMarker(e,e.material.__selected))},e[_object3.default.Events.Interaction.Unhovered]=function(e){t.shiftHandler.handled||(t.options.unhover&&t.options.unhover(e,e.material.__selected),t.options.unhoverMarker&&t.options.unhoverMarker(e,e.material.__selected))},e[_object3.default.Events.Interaction.Clicked]=function(e){if(!t.shiftHandler.handled){var i=t.items.findIndex(function(t){return t.id===e.id});i==-1&&1===r.limit&&t.items.length>=1?t.switch(t.items[0],e):i==-1?t.add(e):t.remove(e)}},e[_object3.default.Events.Interaction.Missed]=function(){return t.removeAll()},e));var a=[];this.shiftHandler=function(e){t.shiftHandler.handled||16!==e.keyCode||!function(){t.shiftHandler.handled=!0,t.view.input.debounce=!1,t.view.controls.enabled=!1,t.view.interaction.enabled=!1;var e=[];t.view.scene.traverseMaterials(function(t,r){"Mesh"===r.type&&(t.__originalOpacity||(t.__originalOpacity=t.opacity),t.animate({opacity:.1}).start(1e3));var i=_object3.default.RenderOrder.MeshesFirst[r.type];if(void 0!==i&&(r.renderOrder=i),r.visible&&r.interactive&&t.meta){r.updateMatrixWorld(!0);var a=t.meta.box.clone();a.applyMatrix4(r.matrixWorld),a.parent=t,e.push(a)}});var r=t.view.camera.near,i=t.view.camera.far;t.view.hud=!0,t.view.controlsHud=void 0,t.view.cameraHud=new _perspective2.default({near:r,far:i,fov:t.view.camera.fov}),t.view.measure(!0);var n=(t.view.scene.updateBounds().bounds,new _three2.default.PlaneGeometry(1,1)),o=new _three2.default.Mesh(n,new _three2.default.MeshBasicMaterial({transparent:!0,opacity:.05,color:new _three2.default.Color(0)}));o.renderOrder=-1,t.view.sceneHud.add(o);var s=void 0,l=void 0,u=void 0,c=void 0,d=void 0,h=void 0,m=void 0,v=void 0,f=void 0,_=void 0,p=void 0,w=function(w){switch(w.type){case"mousedown":t.removeAll(),s=t.view.getPoint3({x:w.offsetX,y:w.offsetY}),l=t.view.getPoint3({x:w.offsetX,y:w.offsetY},t.view.cameraHud),o.position.copy(l);break;case"mousemove":if(!l)return;var y=t.view.getPoint3({x:w.offsetX,y:w.offsetY},t.view.cameraHud).sub(l),k=Math.abs(y.x),b=Math.abs(y.y),M=b/2,x=k/2,g=y.x/2,C=y.y/2;n.vertices[0].set(-x+g,M+C,0),n.vertices[1].set(k-x+g,M+C,0),n.vertices[2].set(-x+g,-(b-M)+C,0),n.vertices[3].set(k-x+g,-(b-M)+C,0),n.verticesNeedUpdate=!0;var I=t.view.getPoint3({x:w.offsetX,y:w.offsetY}),A=t.view.camera.position,H=t.view.camera.getWorldDirection().normalize();_=new _three2.default.Line3(A,I),p=new _three2.default.Line3(A,s),v=H.clone().multiplyScalar(r+600).add(A);var E=new _three2.default.Plane(H);E.translate(v),f=H.clone().multiplyScalar(i-1e3).add(A);var j=new _three2.default.Plane(H);if(j.translate(f),u=E.intersectLine(_),c=E.intersectLine(p),d=j.intersectLine(_),h=j.intersectLine(p),!(u&&c&&d&&h))return;m=(new _three2.default.Box3).setFromPoints([u,c,d,h]);for(var P=[],q=e,L=Array.isArray(q),z=0,q=L?q:(0,_getIterator3.default)(q);;){var B;if(L){if(z>=q.length)break;B=q[z++]}else{if(z=q.next(),z.done)break;B=z.value}var O=B;m.containsBox(O)&&P.push(O.parent)}for(var R=a,D=Array.isArray(R),S=0,R=D?R:(0,_getIterator3.default)(R);;){var V;if(D){if(S>=R.length)break;V=R[S++]}else{if(S=R.next(),S.done)break;V=S.value}var F=V;P.indexOf(F)===-1&&t.remove(F)}a=P;for(var G=a,X=Array.isArray(G),Y=0,G=X?G:(0,_getIterator3.default)(G);;){var W;if(X){if(Y>=G.length)break;W=G[Y++]}else{if(Y=G.next(),Y.done)break;W=Y.value}var T=W;!T.__selected&&t.add(T)}t.view.invalidate();break;case"mouseup":s=void 0,o&&o.destroy()}};t.view.input.on(["mousedown","mousemove","mouseup"],w),t.tempHandler=function(){t.shiftHandler.handled=!1,o&&o.destroy(),t.view.input.removeListener(["mousedown","mousemove","mouseup"],w),document.removeEventListener("keyup",t.tempHandler),t.view.input.debounce=!0,t.view.controls.enabled=!0,t.view.interaction.enabled=!0,t.view.scene.setRenderOrder(),t.view.scene.traverseMaterials(function(e,t){"Mesh"===t.type&&e.animate({opacity:e.__originalOpacity}).start(1e3)})},document.addEventListener("keyup",t.tempHandler)}()},this.shiftHandler.handled=!1,document.addEventListener("keydown",this.shiftHandler)},e.prototype.add=function(e){return e.material.__selected=!0,this.options.select&&this.options.select(e),this.options.selectMarker&&this.options.selectMarker(e),this.items.push(e),this.element.items.push(e.id),this.element.onChange({element:this.element,objects:this.items}),e},e.prototype.remove=function(e){var t=this.items.findIndex(function(t){return t.id===e.id});t!=-1&&(e.material.__selected=void 0,this.options.unhover&&this.options.unhover(e,!1),this.options.unhoverMarker&&this.options.unhoverMarker(e,!1),this.options.unselect&&this.options.unselect(e),this.options.unselectMarker&&this.options.unselectMarker(e),this.items.splice(t,1),this.element.items.splice(t,1),this.element.onChange({element:this.element,objects:this.items}))},e.prototype.removeAll=function(){for(var e=!(arguments.length<=0||void 0===arguments[0])&&arguments[0],t=this.items,r=Array.isArray(t),i=0,t=r?t:(0,_getIterator3.default)(t);;){var a;if(r){if(i>=t.length)break;a=t[i++]}else{if(i=t.next(),i.done)break;a=i.value}var n=a;n.material.__selected=void 0,this.options.unhover&&this.options.unhover(n,!1),this.options.unhoverMarker&&this.options.unhoverMarker(n,!1),this.options.unselect&&this.options.unselect(n),this.options.unselectMarker&&this.options.unselectMarker(n)}this.items=[],e||(this.element.items=[],this.element.onChange({element:this.element,objects:this.items}))},e.prototype.switch=function(e,t){this.remove(e),this.add(t)},e.hover=function(e,t){e.material.__originalColor||(e.material.__originalColor=e.material.color.clone(),e.material.__originalOpacity=e.material.opacity),!t&&e.material.animate({color:new _three2.default.Color(2676639),opacity:1}).start(0)},e.hoverMarker=function(e,t){e.material.__marker&&e.material.__marker.animate({scale:new _three2.default.Euler(1.25,1.25,1.25)}).start(250)},e.unhover=function(e,t){!t&&e.material.animate({color:e.material.__originalColor,opacity:e.material.__originalOpacity}).start(1e3)},e.unhoverMarker=function(e,t){e.material.__marker&&e.material.__marker.animate({scale:new _three2.default.Euler(1.2,1.2,1.2)}).start(250)},e.select=function(e){e.material.__originalColor||(e.material.__originalColor=e.material.color.clone(),e.material.__originalOpacity=e.material.opacity),e.material.animate({color:new _three2.default.Color(12727145)}).start(1e3)},e.selectMarker=function(e){var t=e.meta.box,r=new _three2.default.LineBasicMaterial({color:new _three2.default.Color(2676639)});e.material.__marker&&e.material.__marker.destroy();var i=t.size(),a=new _three2.default.BoxGeometry(i.x||2,i.y||2,i.z||2),n=new _three2.default.Mesh(a,new _three2.default.MeshBasicMaterial);e.material.__marker=new _three2.default.BoxHelper(n),e.material.__marker.material=new _three2.default.LineBasicMaterial({color:0,transparent:!0,opacity:.1}),e.material.__marker.interactive=!1;var o=function(t,i){var a=arguments.length<=2||void 0===arguments[2]?2:arguments[2];t=e.object.worldToLocal(t.clone());var n=new Float32Array([t.x,t.y,t.z,t.x+a,t.y,t.z,t.x,t.y,t.z,t.x,t.y+a,t.z,t.x,t.y,t.z,t.x,t.y,t.z+a]),o=new _three2.default.BufferGeometry;o.addAttribute("position",new _three2.default.BufferAttribute(n,3));var s=new _three2.default.LineSegments(o,r).centerGeometry(t);s.geometry.applyMatrix((new _three2.default.Matrix4).makeRotationFromEuler(i)),s.position.set(0,0,0),e.material.__marker.add(s)};o(t.min,new _three2.default.Euler(0,0,0)),o(t.max,new _three2.default.Euler(-Math.PI/2,-Math.PI/2,Math.PI/2)),o(new _three2.default.Vector3(t.min.x,t.min.y,t.max.z),new _three2.default.Euler(0,Math.PI/2,0)),o(new _three2.default.Vector3(t.max.x,t.min.y,t.min.z),new _three2.default.Euler(0,-Math.PI/2,0)),o(new _three2.default.Vector3(t.min.x,t.max.y,t.min.z),new _three2.default.Euler(Math.PI/2,0,0)),o(new _three2.default.Vector3(t.max.x,t.min.y,t.max.z),new _three2.default.Euler((-Math.PI),0,Math.PI)),o(new _three2.default.Vector3(t.min.x,t.max.y,t.max.z),new _three2.default.Euler((-Math.PI),0,0)),o(new _three2.default.Vector3(t.max.x,t.max.y,t.min.z),new _three2.default.Euler(0,0,Math.PI)),e.material.__marker.position.copy(e.object.worldToLocal(t.center())),e.object.add(e.material.__marker);var s=this.view.interaction.isHit(e.object)?1.25:1.2;e.material.__marker.animate({scale:new _three2.default.Euler(s,s,s)}).from({scale:new _three2.default.Euler(.1,.1,.1)}).start(250)},e.unselect=function(e){},e.unselectMarker=function(e){e.material.__marker&&e.material.__marker.destroy(),e.material.__marker=void 0},e}();exports.default=Selection;