babylonjs-editcontrol
Version:
A transform control for Babylonjs mesh
2 lines • 27.9 kB
JavaScript
!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("babylonjs"));else if("function"==typeof define&&define.amd)define(["babylonjs"],i);else{var s="object"==typeof exports?i(require("babylonjs")):i(t.BABYLON);for(var h in s)("object"==typeof exports?exports:t)[h]=s[h]}}(self,t=>(()=>{"use strict";var i={43(i){i.exports=t}},s={};function h(t){var e=s[t];if(void 0!==e)return e.exports;var n=s[t]={exports:{}};return i[t](n,n.exports,h),n.exports}var e={};return(()=>{var t=e;Object.defineProperty(t,"t",{value:!0}),t.EditControl=void 0;const i=h(43);var s;!function(t){t[t.TRANS=0]="TRANS",t[t.ROT=1]="ROT",t[t.SCALE=2]="SCALE"}(s||(s={}));class n{i(t){return null==t.rotationQuaternion||null==t.rotationQuaternion}constructor(t,s,h,e,n){this.h=!0,this.l=!1,this.o=!1,this.u=1,this.M=Math.PI/18,this._=.4,this.p=1,this.S=.02,this.A=new i.Color3(1,.34,.26),this.L=new i.Color3(0,.8,.16),this.v=new i.Color3(.21,.5,1),this.R=new i.Color3(.7,.7,.7),this.P=new i.Color3(1,1,0),this.T=.75,this.k=!1,this.C=new i.Matrix,this.B=new i.Vector3(0,0,0),this.j=2,this.V=new i.Vector3(0,0,0),this.O=new i.Vector3(0,0,0),this.G="",this.N=!1,this.q=null,this.H=null,this.U=null,this.D=!1,this.F=!1,this.W=!1,this.I=!1,this.J=new i.Vector3(0,0,0),this.K=new i.Vector3(0,0,0),this.$=!1,this.tt=new i.Vector3(0,0,0),this.it=.25,this.st=new i.Vector3(0,0,0),this.ht=new i.Vector3(0,0,0),this.et=new i.Vector3(0,0,0),this.nt=new i.Vector3(0,0,0),this.lt=0,this.rt=!1,this.ot=!1,this.ut=!1,this.ct=180,this.ft=new i.Vector3(this.u,this.u,this.u),this.dt=new i.Vector3(0,0,0),this.wt=new i.Vector3(0,0,0),this.Mt=new i.Vector3(0,0,0),this._t=new i.Matrix,this.St=t,this.At=s,this.Lt=h,null!=e&&(this.p=e),null!=n&&(this.S=n),this.bt=i.UtilityLayerRenderer.DefaultUtilityLayer,this.bt.onlyCheckPointerDownEvents=!1,this.Xt=this.bt.utilityLayerScene,this.Yt=new l(t,10),t.computeWorldMatrix(!0),this.Zt=this.vt(t),this.gt(t),this.k=this.Rt(t),this.k&&console.warn("we have lhs rhs issue "+this.k),this.Pt=new i.Mesh("",this.Xt),this.Pt.rotationQuaternion=i.Quaternion.Identity(),this.Pt.visibility=0,this.Pt.isPickable=!1,this.zt(this.Xt),this.Tt().parent=this.Pt,this.yt().parent=this.Pt,this.xt=t=>this.kt(t),this.Et=t=>this.Ct(t),this.Bt=t=>this.jt(t),h.addEventListener("pointerdown",this.xt,!1),h.addEventListener("pointerup",this.Et,!1),h.addEventListener("pointermove",this.Bt,!1),this.Vt=()=>this.Ot(),this.Xt.registerBeforeRender(this.Vt)}getRoot(){return this.Pt}Rt(t){let s=!1,h=t.parent;if(null==h)return!1;this.gt(h);let e=i.Vector3.Cross(this.ht,this.et);return s=i.Vector3.Dot(e,this.nt)<0,this.gt(t),s}Ot(){this.Pt.position=this.St.getAbsolutePivotPoint(),this.Gt(),this.Nt(),this.h?(this.Pt.getWorldMatrix().invertToRef(this.C),i.Vector3.TransformCoordinatesToRef(this.At.position,this.C,this.B),this.qt.lookAt(this.B,0,0,0,i.Space.LOCAL)):(this.At.position.subtractToRef(this.Pt.position,this.B),this.qt.lookAt(this.At.position,0,0,0,i.Space.WORLD)),this.ot?this.Ht():this.rt?this.Ut(this.Dt,this.Ft,this.Wt):this.ut&&this.Ut(this.It,this.Qt,this.Jt)}Gt(){if(this.h)if(null==this.St.parent)if(this.i(this.St)){let t=this.St.rotation;i.Quaternion.RotationYawPitchRollToRef(t.y,t.x,t.z,this.Pt.rotationQuaternion)}else this.Pt.rotationQuaternion.copyFrom(this.St.rotationQuaternion);else{if(this.Kt(this.St))return;this.St.getWorldMatrix().getRotationMatrixToRef(this._t),i.Quaternion.FromRotationMatrixToRef(this._t,this.Pt.rotationQuaternion)}}Kt(t){if(null==t.parent)return!1;for(;null!=t.parent;){if(t.parent.scaling.x!=t.parent.scaling.y||t.parent.scaling.y!=t.parent.scaling.z)return!0;t=t.parent}return!1}Nt(){this.Pt.position.subtractToRef(this.At.position,this.V),i.Vector3.FromArrayToRef(this.At.getWorldMatrix().asArray(),8,this.O);let t=i.Vector3.Dot(this.V,this.O)/this.O.length(),s=Math.abs(t/this.j);i.Vector3.FromFloatsToRef(s,s,s,this.Pt.scaling)}Ht(){let t=Math.atan(this.B.y/this.B.z);this.B.z>=0?this.$t.rotation.x=-t:this.$t.rotation.x=-t-Math.PI;let i=Math.atan(this.B.x/this.B.z);this.B.z>=0?this.ti.rotation.y=i:this.ti.rotation.y=i+Math.PI;let s=Math.atan(this.B.x/this.B.y);this.B.y>=0?this.ii.rotation.z=-s:this.ii.rotation.z=-s-Math.PI}Ut(t,i,s){let h=this.B;t.rotation.x=0,t.rotation.y=0,t.rotation.z=0,i.rotation.x=0,i.rotation.y=0,i.rotation.z=0,s.rotation.x=0,s.rotation.y=0,s.rotation.z=0,h.x<=0&&h.y>=0&&h.z>=0?(t.rotation.z=3.14,s.rotation.y=3.14):h.x<=0&&h.y>=0&&h.z<=0?(t.rotation.y=3.14,i.rotation.y=3.14,s.rotation.y=3.14):h.x>=0&&h.y>=0&&h.z<=0?(t.rotation.x=3.14,i.rotation.y=3.14):h.x>=0&&h.y<=0&&h.z>=0?(i.rotation.z=3.14,s.rotation.x=3.14):h.x<=0&&h.y<=0&&h.z>=0?(t.rotation.z=3.14,i.rotation.z=3.14,s.rotation.z=3.14):h.x<=0&&h.y<=0&&h.z<=0?(t.rotation.y=3.14,i.rotation.x=3.14,s.rotation.z=3.14):h.x>=0&&h.y<=0&&h.z<=0&&(t.rotation.x=3.14,i.rotation.x=3.14,s.rotation.x=3.14)}switchTo(t){t.computeWorldMatrix(!0),this.St=t,this.gt(t),this.Yt=new l(t,10),this.k=this.Rt(t),this.refreshBoundingInfo()}switchCamera(t){this.At=t}setUndoCount(t){this.Yt.setCapacity(t)}undo(){let t=this.Yt.undo();this.St.computeWorldMatrix(!0),this.gt(this.St),this.si(t),this.hi(t),this.ei(t)}redo(){let t=this.Yt.redo();this.St.computeWorldMatrix(!0),this.gt(this.St),this.si(t),this.hi(t),this.ei(t)}detach(){this.Lt.removeEventListener("pointerdown",this.xt,!1),this.Lt.removeEventListener("pointerup",this.Et,!1),this.Lt.removeEventListener("pointermove",this.Bt,!1),this.Xt.unregisterBeforeRender(this.Vt),this.removeAllActionListeners(),this.ni()}hide(){this.N=!0,this.rt?(this.G="T",this.disableTranslation()):this.ot?(this.G="R",this.disableRotation()):this.ut&&(this.G="S",this.disableScaling()),this.li()}li(){this.ri.visibility=0,this.ai.visibility=0,this.oi.visibility=0}ui(){this.ri.visibility=this.T,this.ai.visibility=this.T,this.oi.visibility=this.T}show(){this.N=!1,this.ui(),"T"==this.G?this.enableTranslation():"R"==this.G?this.enableRotation():"S"==this.G&&this.enableScaling()}isHidden(){return this.N}ni(){this.Pt.dispose(),this.ci(),this.Yt=null}addActionListener(t){this.q=t}removeActionListener(){this.q=null}addActionStartListener(t){this.H=t}removeActionStartListener(){this.H=null}addActionEndListener(t){this.U=t}removeActionEndListener(){this.U=null}removeAllActionListeners(){this.q=null,this.H=null,this.U=null}kt(t){if(t.preventDefault(),this.D=!0,0!=t.button)return;let i=this.Xt.getEngine(),s=i.isPointerLock?.5*this.Lt.width:this.Xt.pointerX,h=i.isPointerLock?.5*this.Lt.height:this.Xt.pointerY,e=this.Xt.pick(s,h,t=>{if(this.rt){if(t==this.fi||t==this.di||t==this.wi||t==this.Dt||t==this.Ft||t==this.Wt||t==this.Mi)return!0}else if(this.ot){if(t==this.$t||t==this.ti||t==this.ii||t==this._i)return!0}else if(this.ut&&(t==this.pi||t==this.Si||t==this.Ai||t==this.It||t==this.Qt||t==this.Jt||t==this.Li))return!0;return!1},!1,this.At);if(e.hit){this.bi=e.pickedMesh;let t=this.bi.getChildren();t.length>0?t[0].visibility=this.T:this.bi.visibility=this.T;let i=this.bi.name;"X"==i?this.Xi.visibility=1:"Y"==i?this.Yi.visibility=1:"Z"==i?this.Zi.visibility=1:"XZ"==i?(this.Xi.visibility=1,this.Zi.visibility=1):"ZY"==i?(this.Zi.visibility=1,this.Yi.visibility=1):"YX"==i?(this.Yi.visibility=1,this.Xi.visibility=1):"ALL"==i&&(this.Xi.visibility=1,this.Yi.visibility=1,this.Zi.visibility=1),this.gi(!0),this.mi=this.Ri(this.bi),null!=this.mi?this.Pi=this.zi():this.Pi=null,window.setTimeout((t,i)=>this.Ti(t,i),0,this.At,this.Lt)}}gi(t){this.W=t,t?(this.yi(),this.xi==s.ROT&&(this.lt=0),this.si(this.xi)):this.ei(this.xi)}isEditing(){return this.W}Ti(t,i){let s=t,h=i;this.Xt.getEngine().isPointerLock||s.detachControl(h)}isPointerOver(){return this.F}ki(){let t=this.Xt.getEngine(),i=t.isPointerLock?.5*this.Lt.width:this.Xt.pointerX,s=t.isPointerLock?.5*this.Lt.height:this.Xt.pointerY,h=this.Xt.pick(i,s,t=>{if(this.rt){if(t==this.fi||t==this.di||t==this.wi||t==this.Dt||t==this.Ft||t==this.Wt||t==this.Mi)return!0}else if(this.ot){if(t==this.$t||t==this.ti||t==this.ii||t==this._i)return!0}else if(this.ut&&(t==this.pi||t==this.Si||t==this.Ai||t==this.It||t==this.Qt||t==this.Jt||t==this.Li))return!0;return!1},!1,this.At);if(h.hit){if(h.pickedMesh!=this.Ei){if(this.F=!0,this.Ci(),this.Ei=h.pickedMesh,this.ot)this.Bi=this.Ei.getChildren()[0].color,this.Ei.getChildren()[0].color=this.P;else{let t=this.Ei.getChildren();t.length>0?(this.ji=t[0].material,t[0].material=this.Vi):(this.ji=this.Ei.material,this.Ei.material=this.Vi)}"X"==this.Ei.name?this.ri.color=this.P:"Y"==this.Ei.name?this.ai.color=this.P:"Z"==this.Ei.name&&(this.oi.color=this.P)}}else this.F=!1,null!=this.Ei&&(this.Oi(this.Ei),this.Ei=null)}Ci(){null!=this.Ei&&(this.Ei.visibility=0,this.Oi(this.Ei))}Oi(t){switch(t.name){case"X":this.ri.color=this.A;break;case"Y":this.ai.color=this.L;break;case"Z":this.oi.color=this.v}if(this.ot)t.getChildren()[0].color=this.Bi;else{let i=t.getChildren();i.length>0?i[0].material=this.ji:t.material=this.ji}}Ct(t){if(this.D=!1,this.W){this.Xt.getEngine().isPointerLock||this.At.attachControl(!0),this.gi(!1),this.Gi(),null!=this.Ei&&(this.Oi(this.Ei),this.Ei=null),this.Yt.add(this.xi)}}yi(){this.rt?this.xi=s.TRANS:this.ot?this.xi=s.ROT:this.ut&&(this.xi=s.SCALE)}hi(t){null!=this.q&&this.q(t)}si(t){null!=this.H&&this.H(t)}ei(t){null!=this.U&&this.U(t)}jt(t){if(!this.D)return void this.ki();if(!this.W)return;if(null==this.Pi)return;let i=this.zi();if(null!=i){if(this.ot)this.Ni(this.St,this.bi,i,this.Pi);else{let t=i.subtract(this.Pi);if(0==t.x&&0==t.y&&0==t.z)return;this.rt?this.qi(t):this.ut&&this.h&&this.Hi(t)}this.Pi=i,this.hi(this.xi)}}Ri(t){let s=t.name;if(this.rt||this.ut){if("XZ"==s)return this.Ui;if("ZY"==s)return this.Di;if("YX"==s)return this.Fi;if("ALL"==s)return this.qt;{this.Pt.getWorldMatrix().invertToRef(this.C),i.Vector3.TransformCoordinatesToRef(this.At.position,this.C,this.B);let t=this.B;if("X"===s)return Math.abs(t.y)>Math.abs(t.z)?this.Ui:this.Fi;if("Z"===s)return Math.abs(t.y)>Math.abs(t.x)?this.Ui:this.Di;if("Y"===s)return Math.abs(t.z)>Math.abs(t.x)?this.Fi:this.Di}}else{if(!this.ot)return null;{this.I=!1,this.Pt.getWorldMatrix().invertToRef(this.C),i.Vector3.TransformCoordinatesToRef(this.At.position,this.C,this.B);let t=this.B;switch(s){case"X":return Math.abs(t.x)<.2?(this.I=!0,this.qt):this.Di;case"Y":return Math.abs(t.y)<.2?(this.I=!0,this.qt):this.Ui;case"Z":return Math.abs(t.z)<.2?(this.I=!0,this.qt):this.Fi;default:return this.qt}}}}qi(t){null!=this.St.parent&&this.Kt(this.St)?this.gt(this.Pt):this.gt(this.St);let s=this.bi.name;this.J.x=0,this.J.y=0,this.J.z=0,"X"!=s&&"XZ"!=s&&"YX"!=s&&"ALL"!=s||(this.h?this.J.x=i.Vector3.Dot(t,this.ht)/this.ht.length():this.J.x=t.x),"Y"!=s&&"ZY"!=s&&"YX"!=s&&"ALL"!=s||(this.h?this.J.y=i.Vector3.Dot(t,this.et)/this.et.length():this.J.y=t.y),"Z"!=s&&"XZ"!=s&&"ZY"!=s&&"ALL"!=s||(this.h?this.J.z=i.Vector3.Dot(t,this.nt)/this.nt.length():this.J.z=t.z),this.Wi(this.St,this.J,this.h),this.Ii&&(this.St.position.x=Math.max(this.St.position.x,this.Ii.x),this.St.position.y=Math.max(this.St.position.y,this.Ii.y),this.St.position.z=Math.max(this.St.position.z,this.Ii.z)),this.Qi&&(this.St.position.x=Math.min(this.St.position.x,this.Qi.x),this.St.position.y=Math.min(this.St.position.y,this.Qi.y),this.St.position.z=Math.min(this.St.position.z,this.Qi.z)),this.St.computeWorldMatrix(!0)}Wi(t,s,h){if(this.l){let t=!1;if(this.K.addInPlace(s),Math.abs(this.K.x)>this.ft.x&&(this.K.x>0?s.x=this.ft.x:s.x=-this.ft.x,t=!0),Math.abs(this.K.y)>this.ft.y&&(this.K.y>0?s.y=this.ft.y:s.y=-this.ft.y,t=!0),Math.abs(this.K.z)>this.ft.z&&(this.K.z>0?s.z=this.ft.z:s.z=-this.ft.z,t=!0),!t)return;Math.abs(s.x)!==this.ft.x&&(s.x=0),Math.abs(s.y)!==this.ft.y&&(s.y=0),Math.abs(s.z)!==this.ft.z&&(s.z=0),i.Vector3.FromFloatsToRef(0,0,0,this.K),t=!1}h?(this.ht.normalizeToRef(this.dt),this.et.normalizeToRef(this.wt),this.nt.normalizeToRef(this.Mt),this.St.translate(this.dt,s.x,i.Space.WORLD),this.St.translate(this.wt,s.y,i.Space.WORLD),this.St.translate(this.Mt,s.z,i.Space.WORLD)):null==this.St.parent?this.St.position.addInPlace(s):this.St.setAbsolutePosition(s.addInPlace(this.St.absolutePosition))}Hi(t){this.gt(this.St),this.st.x=0,this.st.y=0,this.st.z=0;let s=this.bi.name;"X"!=s&&"XZ"!=s&&"YX"!=s||(this.st.x=i.Vector3.Dot(t,this.ht)/this.ht.length(),this.St.scaling.x<0&&(this.st.x=-this.st.x)),"Y"!=s&&"ZY"!=s&&"YX"!=s||(this.st.y=i.Vector3.Dot(t,this.et)/this.et.length(),this.St.scaling.y<0&&(this.st.y=-this.st.y)),"Z"!=s&&"XZ"!=s&&"ZY"!=s||(this.st.z=i.Vector3.Dot(t,this.nt)/this.nt.length(),this.St.scaling.z<0&&(this.st.z=-this.st.z));let h=this.Zt;if(this.st.x=this.st.x/h.x,this.st.y=this.st.y/h.y,this.st.z=this.st.z/h.z,"ALL"==s){let s=i.Vector3.Dot(t,this.At.upVector);s/=Math.max(h.x,h.y,h.z),this.st.copyFromFloats(s,s,s)}else{let h=!1;if("XZ"==s?(h=!0,Math.abs(this.st.x)>Math.abs(this.st.z)?this.st.z=this.st.x:this.st.x=this.st.z):"ZY"==s?(h=!0,Math.abs(this.st.z)>Math.abs(this.st.y)?this.st.y=this.st.z:this.st.z=this.st.y):"YX"==s&&(h=!0,Math.abs(this.st.y)>Math.abs(this.st.x)?this.st.x=this.st.y:this.st.y=this.st.x),h){this.Pt.position.subtractToRef(this.At.position,this.V);let s=i.Vector3.Dot(t,this.V);this.st.x=Math.abs(this.st.x),this.st.y=Math.abs(this.st.y),this.st.z=Math.abs(this.st.z),s>0?(this.St.scaling.x>0&&(this.st.x=-this.st.x),this.St.scaling.y>0&&(this.st.y=-this.st.y),this.St.scaling.z>0&&(this.st.z=-this.st.z)):(this.St.scaling.x<0&&(this.st.x=-this.st.x),this.St.scaling.y<0&&(this.st.y=-this.st.y),this.St.scaling.z<0&&(this.st.z=-this.st.z))}}this.Ji(this.St,this.st),this.Ki&&(this.St.scaling.x=Math.max(this.St.scaling.x,this.Ki.x),this.St.scaling.y=Math.max(this.St.scaling.y,this.Ki.y),this.St.scaling.z=Math.max(this.St.scaling.z,this.Ki.z)),this.$i&&(this.St.scaling.x=Math.min(this.St.scaling.x,this.$i.x),this.St.scaling.y=Math.min(this.St.scaling.y,this.$i.y),this.St.scaling.z=Math.min(this.St.scaling.z,this.$i.z))}Ji(t,s){if(this.$){let t=!1;if(this.tt.addInPlace(s),Math.abs(this.tt.x)>this.it&&(s.x>0?s.x=this.it:s.x=-this.it,t=!0),Math.abs(this.tt.y)>this.it&&(s.y>0?s.y=this.it:s.y=-this.it,t=!0),Math.abs(this.tt.z)>this.it&&(s.z>0?s.z=this.it:s.z=-this.it,t=!0),!t)return;Math.abs(s.x)!==this.it&&0!==s.x&&(s.x=0),Math.abs(s.y)!==this.it&&0!==s.y&&(s.y=0),Math.abs(s.z)!==this.it&&0!==s.z&&(s.z=0),i.Vector3.FromFloatsToRef(0,0,0,this.tt),t=!1}t.scaling.addInPlace(s)}gt(t){let s=t.getWorldMatrix();i.Vector3.FromArrayToRef(s.m,0,this.ht),i.Vector3.FromArrayToRef(s.m,4,this.et),i.Vector3.FromArrayToRef(s.m,8,this.nt)}vt(t){if(t instanceof i.AbstractMesh){let i=t.getBoundingInfo().boundingBox,s=i.maximum.subtract(i.minimum);return 0==s.x&&(s.x=1),0==s.y&&(s.y=1),0==s.z&&(s.z=1),s}return new i.Vector3(1,1,1)}refreshBoundingInfo(){this.Zt=this.vt(this.St)}Ni(t,s,h,e){this.h&&null!=this.St.parent&&this.Kt(t)?this.gt(this.Pt):this.gt(t);let n,l=0;s==this.$t?n=this.h?this.ht:i.Axis.X:s==this.ti?n=this.h?this.et:i.Axis.Y:s==this.ii&&(n=this.h?this.nt:i.Axis.Z),this.Pt.position.subtractToRef(this.At.position,this.V),this.I?(l=this.ts(e,h,this.At.position,this.V,n),this.Xt.useRightHandedSystem&&(l=-l)):l=this.ss(e,h,t.getAbsolutePivotPoint(),this.V),this.k&&(l=-l),this.o&&(this.lt+=l,l=0,Math.abs(this.lt)>=this.M&&(l=this.lt>0?this.M:-this.M,this.lt=0)),0!==l&&(this.V.normalize(),s==this._i?t.rotate(this.V,-l,i.Space.WORLD):(i.Vector3.Dot(n,this.V)>=0&&(l=-l),t.rotate(n,l,i.Space.WORLD)),this.h&&(this.k&&(l=-l),null!=this.St.parent&&this.Kt(t)&&(s==this._i?this.Pt.rotate(this.V,-l,i.Space.WORLD):this.Pt.rotate(n,l,i.Space.WORLD))))}zi(){let t=this.Xt.getEngine(),i=t.isPointerLock?.5*this.Lt.width:this.Xt.pointerX,s=t.isPointerLock?.5*this.Lt.height:this.Xt.pointerY,h=this.Xt.pick(i,s,t=>t==this.mi,null,this.At);return h.hit?h.pickedPoint:null}Gi(){this.Xi.visibility=0,this.Yi.visibility=0,this.Zi.visibility=0}getRotationQuaternion(){return this.Pt.rotationQuaternion}getPosition(){return this.Pt.position}isTranslationEnabled(){return this.rt}enableTranslation(){this.N||(null==this.fi&&(this.hs(),this.es.parent=this.Pt),this.Ci(),this.rt||(this.ns(this.ls,this.T),this.rt=!0,this.disableRotation(),this.disableScaling()))}disableTranslation(){this.rt&&(this.ns(this.ls,0),this.rt=!1)}isRotationEnabled(){return this.ot}enableRotation(){this.N||(null==this.rs&&(this.us(),this.rs.parent=this.Pt),this.Ci(),this.ot||(this.ns(this.cs,this.T),this.ot=!0,this.disableTranslation(),this.disableScaling()))}disableRotation(){this.ot&&(this.ns(this.cs,0),this.ot=!1)}isScalingEnabled(){return this.ut}enableScaling(){this.N||(null==this.pi&&(this.fs(),this.ds.parent=this.Pt),this.Ci(),this.ut||(this.ns(this.ws,this.T),this.ut=!0,this.disableTranslation(),this.disableRotation()))}disableScaling(){this.ut&&(this.ns(this.ws,0),this.ut=!1)}setScaleBounds(t,i){this.Ki=t||null,this.$i=i||null,null!=this.Ki&&(0==this.Ki.x&&(this.Ki.x=1e-8),0==this.Ki.y&&(this.Ki.y=1e-8),0==this.Ki.z&&(this.Ki.z=1e-8))}removeScaleBounds(){this.Ki=null,this.$i=null}setTransBounds(t,i){this.Ii=t||null,this.Qi=i||null}removeTransBounds(){this.Ii=null,this.Qi=null}setRotBounds(t,i){this.Ms=t||null,this._s=i||null}removeRotBounds(){this.Ms=null,this._s=null}Tt(){let t=new i.Mesh("",this.Xt);this.Xi=i.MeshBuilder.CreateLines("",{points:[new i.Vector3(-100,0,0),new i.Vector3(100,0,0)]},this.Xt),this.Yi=i.MeshBuilder.CreateLines("",{points:[new i.Vector3(0,-100,0),new i.Vector3(0,100,0)]},this.Xt),this.Zi=i.MeshBuilder.CreateLines("",{points:[new i.Vector3(0,0,-100),new i.Vector3(0,0,100)]},this.Xt),this.Xi.isPickable=!1,this.Yi.isPickable=!1,this.Zi.isPickable=!1,this.Xi.parent=t,this.Yi.parent=t,this.Zi.parent=t,this.Xi.color=this.A,this.Yi.color=this.L,this.Zi.color=this.v,this.Gi();let s=this._*this.p*.75;return this.ri=i.MeshBuilder.CreateLines("",{points:[new i.Vector3(0,0,0),new i.Vector3(s,0,0)]},this.Xt),this.ai=i.MeshBuilder.CreateLines("",{points:[new i.Vector3(0,0,0),new i.Vector3(0,s,0)]},this.Xt),this.oi=i.MeshBuilder.CreateLines("",{points:[new i.Vector3(0,0,0),new i.Vector3(0,0,s)]},this.Xt),this.ri.isPickable=!1,this.ai.isPickable=!1,this.oi.isPickable=!1,this.ri.parent=t,this.ai.parent=t,this.oi.parent=t,this.ri.color=this.A,this.ai.color=this.L,this.oi.color=this.v,this.ri.renderingGroupId=1,this.ai.renderingGroupId=1,this.oi.renderingGroupId=1,t}yt(){this.qt=i.MeshBuilder.CreatePlane("",{size:5},this.Xt),this.Ui=i.MeshBuilder.CreatePlane("",{size:5},this.Xt),this.Di=i.MeshBuilder.CreatePlane("",{size:5},this.Xt),this.Fi=i.MeshBuilder.CreatePlane("",{size:5},this.Xt),this.qt.isPickable=!1,this.Ui.isPickable=!1,this.Di.isPickable=!1,this.Fi.isPickable=!1,this.qt.visibility=0,this.Ui.visibility=0,this.Di.visibility=0,this.Fi.visibility=0,this.qt.renderingGroupId=1,this.Ui.renderingGroupId=1,this.Di.renderingGroupId=1,this.Fi.renderingGroupId=1,this.qt.lookAt(this.At.position),this.Ui.rotate(i.Axis.X,1.57),this.Di.rotate(i.Axis.Y,1.57);let t=new i.Mesh("",this.Xt);return this.qt.parent=t,this.Ui.parent=t,this.Di.parent=t,this.Fi.parent=t,t}hs(){let t=2*this.S*this.p,s=this._*this.p;this.es=new i.Mesh("",this.Xt),this.ps(t,s,this.es,this.Xt),this.Ss(t,s,this.Xt)}ps(t,s,h,e){let n=this.As(t/2,s);n.name="X";let l=n.clone("Y"),r=n.clone("Z"),a=2*t,o=i.MeshBuilder.CreatePlane("XZ",{size:a},e),u=i.MeshBuilder.CreatePlane("ZY",{size:a},e),c=i.MeshBuilder.CreatePlane("YX",{size:a},e);o.rotation.x=1.57,u.rotation.y=-1.57,o.position.x=2*t,o.position.z=2*t,u.position.z=2*t,u.position.y=2*t,c.position.y=2*t,c.position.x=2*t,o.bakeCurrentTransformIntoVertices(),u.bakeCurrentTransformIntoVertices(),c.bakeCurrentTransformIntoVertices();let f=i.MeshBuilder.CreateBox("ALL",{size:2*t},e);n.parent=h,l.parent=h,r.parent=h,o.parent=h,u.parent=h,c.parent=h,f.parent=h,n.rotation.y=1.57,l.rotation.x-=1.57,this.fi=n,this.di=l,this.wi=r,this.Dt=o,this.Ft=u,this.Wt=c,this.Mi=f,this.Ls=[n,l,r,o,u,c,f],this.ns(this.Ls,0),this.bs(this.Ls)}Ss(t,s,h){let e=s/5,n=i.MeshBuilder.CreateCylinder("",{height:e,diameterTop:0,diameterBottom:t,tessellation:6,subdivisions:1},h),l=n.clone(""),r=n.clone(""),a=2*t,o=i.MeshBuilder.CreatePlane("XZ",{size:a},h),u=i.MeshBuilder.CreatePlane("ZY",{size:a},h),c=i.MeshBuilder.CreatePlane("YX",{size:a},h),f=i.MeshBuilder.CreateBox("ALL",{size:t},h);n.rotation.x=1.57,l.rotation.x=1.57,r.rotation.x=1.57,o.rotation.x=1.57,u.rotation.y=1.57,o.position.x=a,o.position.z=a,u.position.z=a,u.position.y=a,c.position.y=a,c.position.x=a,n.parent=this.fi,l.parent=this.di,r.parent=this.wi,o.parent=this.Dt,u.parent=this.Ft,c.parent=this.Wt,f.parent=this.Mi,n.position.z=s-e/2,l.position.z=s-e/2,r.position.z=s-e/2,n.material=this.Xs,l.material=this.Ys,r.material=this.Zs,o.material=this.Ys,u.material=this.Xs,c.material=this.Zs,f.material=this.vs,this.gs=n,this.Rs=l,this.Ps=r,this.zs=o,this.Ts=u,this.ys=c,this.xs=f,this.ls=[n,l,r,o,u,c,f],this.bs(this.ls),this.ks(this.ls)}setRotGuideFull(t){this.ct=t?360:180,null!=this.rs&&(this.rs.dispose(),this._i.dispose(),this.rs=null,this.enableRotation())}us(){let t=this._*this.p*2;this.rs=new i.Mesh("",this.Xt),this.Es(t,this.rs),this.Cs(t)}Es(t,i){let s=this.Bs(t/2,this.ct),h=this.Bs(t/2,this.ct),e=this.Bs(t/2,this.ct),n=this.Bs(t/1.75,360);s.name="X",h.name="Y",e.name="Z",n.name="ALL",s.rotation.z=1.57,e.rotation.x=-1.57,s.bakeCurrentTransformIntoVertices(),e.bakeCurrentTransformIntoVertices(),n.rotation.x=1.57,s.parent=i,h.parent=i,e.parent=i,n.parent=this.qt,this.$t=s,this.ti=h,this.ii=e,this._i=n,this.js=[s,h,e,n],this.ns(this.js,0),this.bs(this.js)}Cs(t){let s=this.Vs(t/2,this.ct,!1),h=s.clone(""),e=s.clone(""),n=this.Vs(t/1.75,360,!1),l=this.Vs(t/2,360,!1);s.parent=this.$t,h.parent=this.ti,e.parent=this.ii,s.rotation.z=1.57,e.rotation.x=-1.57,n.parent=this._i,l.parent=this._i,s.color=this.A,h.color=this.L,e.color=this.v,n.color=this.R,l.color=i.Color3.Gray(),this.Os=s,this.Gs=h,this.Ns=e,this.qs=n,this.Hs=l,this.cs=[s,h,e,n,l],this.bs(this.cs),this.ks(this.cs)}ns(t,i){t.map(t=>t.visibility=i)}bs(t){t.map(t=>{t.isPickable=!1})}ks(t){t.map(t=>t.renderingGroupId=2)}As(t,s){let h=[new i.Vector3(t,t,0),new i.Vector3(-t,t,0),new i.Vector3(-t,-t,0),new i.Vector3(t,-t,0),new i.Vector3(t,t,0)],e=[new i.Vector3(0,0,0),new i.Vector3(0,0,s)];return i.MeshBuilder.ExtrudeShape("",{shape:h,path:e,scale:1,rotation:0,cap:2},this.Xt)}Vs(t,s,h){null===s&&(s=360);let e,n,l=[],r=3.14/180,a=0;for(let h=0;h<=s;h+=5)e=t*Math.cos(h*r),n=90==h?t:270==h?-t:t*Math.sin(h*r),l[a]=new i.Vector3(e,0,n),a++;if(h){t-=.04;for(let h=0;h<=s;h+=5)e=t*Math.cos(h*r),n=90==h?t:270==h?-t:t*Math.sin(h*r),l[a]=new i.Vector3(e,0,n),a++}return i.MeshBuilder.CreateLines("",{points:l},this.Xt)}Bs(t,s){null===s&&(s=360);let h,e,n=[],l=3.14/180,r=0;for(let a=0;a<=s;a+=30)h=t*Math.cos(a*l),e=90==a?t:270==a?-t:t*Math.sin(a*l),n[r]=new i.Vector3(h,0,e),r++;return i.MeshBuilder.CreateTube("",{path:n,radius:this.S*this.p*2,tessellation:3,cap:i.Mesh.NO_CAP},this.Xt)}fs(){let t=2*this.S*this.p,s=this._*this.p;this.ds=new i.Mesh("",this.Xt),this.Us(t,s,this.ds),this.Ds(t,s)}Us(t,s,h){let e=this.As(t/2,s);e.name="X";let n=e.clone("Y"),l=e.clone("Z"),r=i.MeshBuilder.CreatePlane("XZ",{size:2*t},this.Xt),a=i.MeshBuilder.CreatePlane("ZY",{size:2*t},this.Xt),o=i.MeshBuilder.CreatePlane("YX",{size:2*t},this.Xt);r.rotation.x=1.57,a.rotation.y=-1.57,r.position.x=2*t,r.position.z=2*t,a.position.z=2*t,a.position.y=2*t,o.position.y=2*t,o.position.x=2*t,r.bakeCurrentTransformIntoVertices(),a.bakeCurrentTransformIntoVertices(),o.bakeCurrentTransformIntoVertices();let u=i.MeshBuilder.CreateBox("ALL",{size:2*t},this.Xt);e.parent=h,n.parent=h,l.parent=h,u.parent=h,r.parent=h,a.parent=h,o.parent=h,e.rotation.y=1.57,n.rotation.x-=1.57,this.pi=e,this.Si=n,this.Ai=l,this.It=r,this.Qt=a,this.Jt=o,this.Li=u,this.Fs=[e,n,l,r,a,o,u],this.ns(this.Fs,0),this.bs(this.Fs)}Ds(t,s){let h=i.MeshBuilder.CreateBox("",{size:t},this.Xt),e=h.clone(""),n=h.clone(""),l=2*t,r=i.MeshBuilder.CreatePlane("XZ",{size:l},this.Xt),a=i.MeshBuilder.CreatePlane("ZY",{size:l},this.Xt),o=i.MeshBuilder.CreatePlane("YX",{size:l},this.Xt),u=i.MeshBuilder.CreateBox("ALL",{size:t},this.Xt);r.rotation.x=1.57,a.rotation.y=-1.57,r.position.x=l,r.position.z=l,a.position.z=l,a.position.y=l,o.position.y=l,o.position.x=l,h.parent=this.pi,e.parent=this.Si,n.parent=this.Ai,r.parent=this.It,a.parent=this.Qt,o.parent=this.Jt,u.parent=this.Li,h.position.z=s-t/2,e.position.z=s-t/2,n.position.z=s-t/2,h.material=this.Xs,e.material=this.Ys,n.material=this.Zs,r.material=this.Ys,a.material=this.Xs,o.material=this.Zs,u.material=this.vs,this.Ws=h,this.Is=e,this.Qs=n,this.Js=r,this.Ks=a,this.$s=o,this.th=u,this.ws=[h,e,n,r,a,o,u],this.bs(this.ws),this.ks(this.ws)}setVisibility(t){this.T=t}setLocal(t){this.h!=t&&(this.h=t,t||(this.Pt.rotationQuaternion=i.Quaternion.Identity()))}isLocal(){return this.h}setTransSnap(t){this.l=t}isTransSnap(){return this.l}setRotSnap(t){this.o=t}isRotSnap(){return this.o}setScaleSnap(t){this.$=t}isScaleSnap(){return this.$}setTransSnapValue(t){this.ft.copyFromFloats(t,t,t),this.u=t}getTransSnapValue(){return this.u}setRotSnapValue(t){this.M=t}getRotSnapValue(){return this.M}setScaleSnapValue(t){this.it=t}getScaleSnapValue(){return this.it}ts(t,s,h,e,n){let l=i.Vector3.Dot(e,n);n.scaleToRef(l,this.dt),h.addToRef(this.dt,this.wt);let r=this.wt;this.At.getWorldMatrix().invertToRef(this._t),i.Vector3.TransformCoordinatesToRef(this.wt,this._t,this.wt);let a=0;r.x>=0&&r.y>=0?a=1:r.x<=0&&r.y>=0?a=2:r.x<=0&&r.y<=0?a=3:r.x>=0&&r.y<=0&&(a=4),i.Vector3.TransformCoordinatesToRef(t,this._t,this.dt),i.Vector3.TransformCoordinatesToRef(s,this._t,this.wt),this.wt.subtractInPlace(this.dt);let o=this.wt,u=o.length(),c="";o.x>=0&&o.y>=0?c=o.x>=o.y?"r":"u":o.x<=0&&o.y>=0?c=-o.x>=o.y?"l":"u":o.x<=0&&o.y<=0?c=-o.x>=-o.y?"l":"d":o.x>=0&&o.y<=0&&(c=o.x>=-o.y?"r":"d");let f=0;return"d"==c?f=1==a||4==a?1:-1:"u"==c?f=1==a||4==a?-1:1:"r"==c?f=2==a||1==a?1:-1:"l"==c&&(f=2==a||1==a?-1:1),f*u}ss(t,s,h,e){t.subtractToRef(h,this.dt),s.subtractToRef(h,this.wt),i.Vector3.CrossToRef(this.dt,this.wt,this.Mt);let n=Math.asin(this.Mt.length()/(this.dt.length()*this.wt.length()));return i.Vector3.Dot(this.Mt,e)>0&&(n*=-1),n}static ih(t,s){let h=new i.StandardMaterial("",s);return h.emissiveColor=t,h.diffuseColor=i.Color3.Black(),h.specularColor=i.Color3.Black(),h.backFaceCulling=!1,h}zt(t){this.Xs=n.ih(this.A,t),this.Ys=n.ih(this.L,t),this.Zs=n.ih(this.v,t),this.Vi=n.ih(this.P,t),this.vs=n.ih(this.R,t)}ci(){this.Xs.dispose(),this.Ys.dispose(),this.Zs.dispose(),this.Vi.dispose(),this.vs.dispose()}}t.EditControl=n;class l{constructor(t,i){this.lastMax=10,this.acts=new Array,this.last=-1,this.current=-1,this.mesh=t,this.lastMax=i-1,this.add()}setCapacity(t){0!=t?(this.lastMax=t-1,this.last=-1,this.current=-1,this.acts=new Array,this.add()):console.error("capacity should be more than zero")}add(t){void 0===t&&(t=null);let i=new r(this.mesh,t);this.current<this.last&&(this.acts.splice(this.current+1),this.last=this.current),this.last==this.lastMax?(this.acts.shift(),this.acts.push(i)):(this.acts.push(i),this.last++,this.current++)}undo(){if(this.current>0){let t=this.acts[this.current].getActionType();return this.current--,this.acts[this.current].perform(this.mesh),t}}redo(){if(this.current<this.last)return this.current++,this.acts[this.current].perform(this.mesh),this.acts[this.current].getActionType()}}class r{constructor(t,i){this.sh=t.position.clone(),null==t.rotationQuaternion?(this.hh=null,this.eh=t.rotation.clone()):(this.hh=t.rotationQuaternion.clone(),this.eh=null),this.nh=t.scaling.clone(),this.rh=i}getActionType(){return this.rh}perform(t){t.position.copyFrom(this.sh),null==t.rotationQuaternion?null!=this.eh?t.rotation.copyFrom(this.eh):t.rotation.copyFrom(this.hh.toEulerAngles()):null!=this.hh?t.rotationQuaternion.copyFrom(this.hh):t.rotationQuaternion.copyFrom(i.Quaternion.RotationYawPitchRoll(this.eh.y,this.eh.x,this.eh.z)),t.scaling.copyFrom(this.nh)}}})(),e})());
//# sourceMappingURL=EditControl.js.map