1 line
4.1 KiB
JavaScript
1 line
4.1 KiB
JavaScript
"use strict";var e=require("animation-utilities"),t=e.MouseCoordinateWrangler,n=e.THREE,r={DOF_VALUES_CHANGED:"DOF_VALUES_CHANGED",DOF_SELECTION_CHANGED:"DOF_SELECTION_CHANGED",DOF_MANIPULATION_ENDED:"DOF_MANIPULATION_ENDED"},o={BODY:"BODY"},s=function(e,t,n,r){if(n!==o.BODY)throw new Error("DOFController: unsupported controller type: "+n);return new u(e,t,n,r)},i="topSection_r",l="middleSection_r",a="bottomSection_r",u=function(e,t,o,s){this.renderer=e,this.scene=e.scene,this.controllerType=o,this.robotInfo=s,this.renderer.setGrid(.1,4,new n.Color(.2,.2,.2)),this.dofValues={};for(var u=s.getDOFNames(),d=0;d<u.length;d++)this.dofValues[u[d]]=0;this.selectedDOFs=[],this.eventListeners={},this.eventListeners[r.DOF_VALUES_CHANGED]=[],this.eventListeners[r.DOF_SELECTION_CHANGED]=[],this.eventListeners[r.DOF_MANIPULATION_ENDED]=[],this.lockingMode=!1;var c=this,D=!1,v=null,E=!1,O=!1,f=!1,p=function(t){if(3===t.which)return!1;var n=!t.altKey&&!t.metaKey&&!t.ctrlKey;return n?e.scene._controls.enabled=!1:e.scene._controls.enabled=!0,n},F=function(e,t){e.preventDefault(),e.stopPropagation();var n;if(t){if(null!==c.getSelectedDOFs()&&c.getSelectedDOFs().length>0){n=c.getSelectedDOFs()[0],O=!0;var o=.5*e.movementX*Math.PI/180,s=c.dofValues[n]+o,u={};u[n]=s,e.shiftKey&&(n===l&&(u[i]=c.dofValues[i]-o),n===a&&(u[l]=c.dofValues[l]-o)),c.setDOFValues(u),c._fireEvent(r.DOF_VALUES_CHANGED,u)}}else n=h(e,v,c.scene.getScene(),c.scene.getCamera()),n&&(c.setSelectedDOFs([n]),c._fireEvent(r.DOF_SELECTION_CHANGED,c.getSelectedDOFs()))},_=function(e){return f?void(E&&p(e)&&F(e,!0)):(e.preventDefault(),void e.stopPropagation())},g=function(){f&&(f=!1,E&&(O&&(O=!1,c._fireEvent(r.DOF_MANIPULATION_ENDED)),null!==c.getSelectedDOFs()&&c.getSelectedDOFs().length>0&&(c.setSelectedDOFs([]),c._fireEvent(r.DOF_SELECTION_CHANGED,c.getSelectedDOFs()))))},m=function(e){f=!0,E&&p(e)&&F(e,!1)};this.detachFromContainer=function(e){(void 0===e||e===!0)&&c.renderer.detachFromContainer(),null!==v&&(v.removeEventListener("mousemove",_,D),v.removeEventListener("mouseup",g,D),v.removeEventListener("mouseleave",g,D),v.removeEventListener("mousedown",m,D),O&&(O=!1,c._fireEvent(r.DOF_MANIPULATION_ENDED)),null!==c.getSelectedDOFs()&&c.getSelectedDOFs().length>0&&(c.setSelectedDOFs([]),c._fireEvent(r.DOF_SELECTION_CHANGED,c.getSelectedDOFs())),E=!1,v=null)},this.attachToContainer=function(e,t){c.detachFromContainer(t),v=void 0!==e?e:null,null!==v&&((void 0===t||t===!0)&&c.renderer.attachToContainer(v),v.addEventListener("mousemove",_,D),v.addEventListener("mouseup",g,D),v.addEventListener("mouseleave",g,D),v.addEventListener("mousedown",m,D),E=!0)},this.dispose=function(e){c.detachFromContainer(!1),null!==c.renderer&&((void 0===e||e===!0)&&c.renderer.dispose(),c.renderer=null),c.scene=null,c.robotInfo=null,c.eventListeners=null},this.attachToContainer(t,!1)};u.prototype.getDOFValues=function(){return this.dofValues},u.prototype.setDOFValues=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)this.dofValues[t[n]]=e[t[n]];this.renderer.display(this.dofValues)},u.prototype.getSelectedDOFs=function(){return this.selectedDOFs},u.prototype.setSelectedDOFs=function(e){this.selectedDOFs=e},u.prototype.on=function(e,t){var n=this.eventListeners[e];if(void 0===n)throw new Error("DOFController: unsupported event type: "+e);n.push(t)},u.prototype.setLockingMode=function(e){this.lockingMode=e},u.prototype._fireEvent=function(e){var t=this.eventListeners[e];if(void 0===t)throw new Error("DOFController: unsupported event type: "+e);for(var n=[this],r=1;r<arguments.length;r++)n.push(arguments[r]);for(var o=0;o<t.length;o++)t[o].apply(null,n)};var d={};d[i]=["headMeshMesh","maskMeshMesh","screenMeshBillboardMesh"],d[l]=["torsoMeshMesh"],d[a]=["pelvisMeshMesh","lightringMeshMesh"];var c={};!function(){for(var e=Object.keys(d),t=0;t<e.length;t++)for(var n=d[e[t]],r=0;r<n.length;r++)c[n[r]]=e[t]}();var h=function(e,r,o,s){var i=t.getLocalCoordinatesNDCCentered(e,r),l=new n.Raycaster;l.linePrecision=.01,l.setFromCamera(i,s);var a=l.intersectObject(o,!0);if(a.length>0){var u=c[a[0].object.name];return u||null}return null};module.exports.EventType=r,module.exports.ControllerType=o,module.exports.createWithRenderer=s; |