/*! For license information please see sculptgl.js.LICENSE.txt */ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.sculptgl=t():e.sculptgl=t()}(self,(function(){return(()=>{var __webpack_modules__={751:function(e,t,r){var i,n,a,s;function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e=r.nmd(e),s=function(){return function(e){function t(i){if(r[i])return r[i].exports;var n=r[i]={exports:{},id:i,loaded:!1};return e[i].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){function i(e){if(!e)throw new Error("SketchfabOAuth2 config is missing.");if(e.hasOwnProperty("hostname")||(e.hostname="sketchfab.com"),!e.hasOwnProperty("client_id"))throw new Error("client_id is missing. Please check the config of SketchfabOAuth2.");if(!e.hasOwnProperty("redirect_uri"))throw new Error("redirect_uri is missing. Please check the config of SketchfabOAuth2.");this.config=e}r(5);var n=r(2),a=r(6),s=a.buildQueryString,o=a.parseQueryString;i.prototype.connect=function(e){return new n(function(t,r){if(this.config.client_id)var i={response_type:"token",state:+new Date,client_id:this.config.client_id,redirect_uri:this.config.redirect_uri},n=Object.assign({},i,e),a="https://"+this.config.hostname+"/oauth2/authorize/?"+s(n),l=window.open(a,"loginWindow","width=640,height=400"),u=setInterval(function(){try{var e=l.location.href;if(void 0===e)return clearInterval(u),void r(new Error("Access denied (User closed popup)"));if(-1!==e.indexOf("?error=access_denied"))return clearInterval(u),void r(new Error("Access denied (User canceled)"));if(-1!==e.indexOf(this.config.redirect_uri)){clearInterval(u);var i,n=l.location.hash,a=RegExp("access_token=([^&]+)");return n.match(a)?(i=o(n.substring(1)),void t(i)):void r(new Error("Access denied (missing token)"))}}catch(e){}}.bind(this),1e3);else r(new Error("client_id is missing."))}.bind(this))},e.exports=i},function(e,t){function r(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function n(e){if(u===setTimeout)return setTimeout(e,0);if((u===r||!u)&&setTimeout)return u=setTimeout,setTimeout(e,0);try{return u(e,0)}catch(t){try{return u.call(null,e,0)}catch(t){return u.call(this,e,0)}}}function a(){_&&d&&(_=!1,d.length?f=d.concat(f):p=-1,f.length&&s())}function s(){if(!_){var e=n(a);_=!0;for(var t=f.length;t;){for(d=f,f=[];++p1)for(var r=1;r=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},r(3),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(t,function(){return this}())},function(e,t){"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(e,t){"use strict";if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var r=Object(e),i=1;ie.size)throw new RangeError("offset:"+t+", length:"+r+", size:"+e.size);return e.slice?e.slice(t,t+r):e.webkitSlice?e.webkitSlice(t,t+r):e.mozSlice?e.mozSlice(t,t+r):e.msSlice?e.msSlice(t,t+r):void 0}(e,t,r))}catch(e){n(e)}}}function _(){}function p(e){var r,i=this;i.init=function(e){r=new Blob([],{type:s}),e()},i.writeUint8Array=function(e,i){r=new Blob([r,t?e:e.buffer],{type:s}),i()},i.getData=function(t,i){var n=new FileReader;n.onload=function(e){t(e.target.result)},n.onerror=i,n.readAsText(r,e)}}function g(t){var r=this,i="",n="";r.init=function(e){i+="data:"+(t||"")+";base64,",e()},r.writeUint8Array=function(t,r){var a,s=n.length,o=n;for(n="",a=0;a<3*Math.floor((s+t.length)/3)-s;a++)o+=String.fromCharCode(t[a]);for(;a2?i+=e.btoa(o):n=o,r()},r.getData=function(t){t(i+e.btoa(n))}}function m(e){var r,i=this;i.init=function(t){r=new Blob([],{type:e}),t()},i.writeUint8Array=function(i,n){r=new Blob([r,t?i:i.buffer],{type:e}),n()},i.getData=function(e){e(r)}}function v(e,t,r,i,n,s,o,l,u,c){var h,d,f,_=0,p=t.sn;function g(){e.removeEventListener("message",m,!1),l(d,f)}function m(t){var r=t.data,n=r.data,a=r.error;if(a)return a.toString=function(){return"Error: "+this.message},void u(a);if(r.sn===p)switch("number"==typeof r.codecTime&&(e.codecTime+=r.codecTime),"number"==typeof r.crcTime&&(e.crcTime+=r.crcTime),r.type){case"append":n?(d+=n.length,i.writeUint8Array(n,(function(){v()}),c)):v();break;case"flush":f=r.crc,n?(d+=n.length,i.writeUint8Array(n,(function(){g()}),c)):g();break;case"progress":o&&o(h+r.loaded,s);break;case"importScripts":case"newTask":case"echo":break;default:console.warn("zip.js:launchWorkerProcess: unknown message: ",r)}}function v(){(h=_*a)127?n[r-128]:String.fromCharCode(r);return i}function M(e){return decodeURIComponent(escape(e))}function S(e){var t,r="";for(t=0;t>16,r=65535&e;try{return new Date(1980+((65024&t)>>9),((480&t)>>5)-1,31&t,(63488&r)>>11,(2016&r)>>5,2*(31&r),0)}catch(e){}}(e.lastModDateRaw),1!=(1&e.bitFlag)?((i||8!=(8&e.bitFlag))&&(e.crc32=t.view.getUint32(r+10,!0),e.compressedSize=t.view.getUint32(r+14,!0),e.uncompressedSize=t.view.getUint32(r+18,!0)),4294967295!==e.compressedSize&&4294967295!==e.uncompressedSize?(e.filenameLength=t.view.getUint16(r+22,!0),e.extraFieldLength=t.view.getUint16(r+24,!0)):n("File is using Zip64 (4gb+ file size).")):n("File contains encrypted entry.")}function E(e){return unescape(encodeURIComponent(e))}function A(e){var t,r=[];for(t=0;t>>8^r[255&(t^e[i])];this.crc=t},o.prototype.get=function(){return~this.crc},o.prototype.table=function(){var e,t,r,i=[];for(e=0;e<256;e++){for(r=e,t=0;t<8;t++)1&r?r=r>>>1^3988292384:r>>>=1;i[e]=r}return i}(),l.prototype.append=function(e,t){return e},l.prototype.flush=function(){},h.prototype=new c,h.prototype.constructor=h,d.prototype=new c,d.prototype.constructor=d,f.prototype=new c,f.prototype.constructor=f,_.prototype.getData=function(e){e(this.data)},p.prototype=new _,p.prototype.constructor=p,g.prototype=new _,g.prototype.constructor=g,m.prototype=new _,m.prototype.constructor=m;var w={deflater:["z-worker.js","deflate.js"],inflater:["z-worker.js","inflate.js"]};function R(t,r,i){if(null===e.zip.workerScripts||null===e.zip.workerScriptsPath){var n,a,s;if(e.zip.workerScripts){if(n=e.zip.workerScripts[t],!Array.isArray(n))return void i(new Error("zip.workerScripts."+t+" is not an array!"));a=n,s=document.createElement("a"),n=a.map((function(e){return s.href=e,s.href}))}else(n=w[t].slice(0))[0]=(e.zip.workerScriptsPath||"")+n[0];var o=new Worker(n[0]);o.codecTime=o.crcTime=0,o.postMessage({type:"importScripts",scripts:n.slice(1)}),o.addEventListener("message",(function e(t){var n=t.data;if(n.error)return o.terminate(),void i(n.error);"importScripts"===n.type&&(o.removeEventListener("message",e),o.removeEventListener("error",l),r(o))})),o.addEventListener("error",l)}else i(new Error("Either zip.workerScripts or zip.workerScriptsPath may be set, not both."));function l(e){o.terminate(),i(e)}}function x(e){console.error(e)}e.zip={Reader:c,Writer:_,BlobReader:f,Data64URIReader:d,TextReader:h,BlobWriter:m,Data64URIWriter:g,TextWriter:p,createReader:function(t,a,s){s=s||x,t.init((function(){!function(t,a,s){var o=0;function l(){}l.prototype.getData=function(i,a,l,c){var h=this;function d(e,t){c&&!function(e){var t=u(4);return t.view.setUint32(0,e),h.crc32==t.view.getUint32(0)}(t)?s("CRC failed."):i.getData((function(e){a(e)}))}function f(e){s(e||n)}function _(e){s(e||"Error while writing file data.")}t.readUint8Array(h.offset,30,(function(n){var a,p=u(n.length,n);1347093252==p.view.getUint32(0)?(k(h,p,4,!1,s),a=h.offset+30+h.filenameLength+h.extraFieldLength,i.init((function(){0===h.compressionMethod?b(h._worker,o++,t,i,a,h.compressedSize,c,d,l,f,_):function(t,r,i,n,a,s,o,l,u,c,h){var d=o?"output":"none";e.zip.useWebWorkers?v(t,{sn:r,codecClass:"Inflater",crcType:d},i,n,a,s,u,l,c,h):y(new e.zip.Inflater,i,n,a,s,d,u,l,c,h)}(h._worker,o++,t,i,a,h.compressedSize,c,d,l,f,_)}),_)):s(r)}),f)};var c={getEntries:function(e){var n=this._worker;!function(e){function n(r,n){t.readUint8Array(t.size-r,r,(function(t){for(var r=t.length-22;r>=0;r--)if(80===t[r]&&75===t[r+1]&&5===t[r+2]&&6===t[r+3])return void e(new DataView(t.buffer,r,22));n()}),(function(){s(i)}))}t.size<22?s(r):n(22,(function(){n(Math.min(65558,t.size),(function(){s(r)}))}))}((function(a){var o,c;o=a.getUint32(16,!0),c=a.getUint16(8,!0),o<0||o>=t.size?s(r):t.readUint8Array(o,t.size-o,(function(t){var i,a,o,h,d=0,f=[],_=u(t.length,t);for(i=0;i{"use strict";r.r(t),r(50);var i=r(928),n=r(297),a=r(522),s=r(839),o=r(781),l=r(89),u=r(52),c=r(663);function h(){var e=new c.WT(9);return c.WT!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}function d(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[4],e[4]=t[5],e[5]=t[6],e[6]=t[8],e[7]=t[9],e[8]=t[10],e}function f(e,t){if(e===t){var r=t[1],i=t[2],n=t[5];e[1]=t[3],e[2]=t[6],e[3]=r,e[5]=t[7],e[6]=i,e[7]=n}else e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8];return e}function _(e,t){var r=t[0],i=t[1],n=t[2],a=t[3],s=t[4],o=t[5],l=t[6],u=t[7],c=t[8],h=t[9],d=t[10],f=t[11],_=t[12],p=t[13],g=t[14],m=t[15],v=r*o-i*s,y=r*l-n*s,b=r*u-a*s,T=i*l-n*o,M=i*u-a*o,S=n*u-a*l,k=c*p-h*_,E=c*g-d*_,A=c*m-f*_,C=h*g-d*p,w=h*m-f*p,R=d*m-f*g,x=v*R-y*w+b*C+T*A-M*E+S*k;return x?(x=1/x,e[0]=(o*R-l*w+u*C)*x,e[1]=(l*A-s*R-u*E)*x,e[2]=(s*w-o*A+u*k)*x,e[3]=(n*w-i*R-a*C)*x,e[4]=(r*R-n*A+a*E)*x,e[5]=(i*A-r*w-a*k)*x,e[6]=(p*S-g*M+m*T)*x,e[7]=(g*b-_*S-m*y)*x,e[8]=(_*M-p*b+m*v)*x,e):null}function p(e,t){for(var r=0;rthis._size?(this._gl.bufferData(this._type,e,this._hint),this._size=e.length):this._gl.bufferSubData(this._type,0,e)}}])&&p(t.prototype,r),e}();function m(e,t){for(var r=0;r 0.0 ? length(vertex) * fov : -fov;\n float cur = (cross(xneg, xpos).y - cross(yneg, ypos).x) * str * 80.0 / depth;\n return mix(mix(color, color * 0.3, clamp(-cur * 15.0, 0.0, 1.0)), color * 2.0, clamp(cur * 25.0, 0.0, 1.0));\n#endif\n}\n",y,"#extension GL_OES_standard_derivatives : enable","bool isClipped(const in vec3 pos) {"," if (uClipEnabled == 0) return false;"," float side = dot(uClipPlaneN, pos - uClipPlaneO);"," return uClipInvert == 0 ? side > 0.0 : side < 0.0;","}","vec3 getNormal() {"," #ifndef GL_OES_standard_derivatives"," return normalize(gl_FrontFacing ? vNormal : -vNormal);"," #else"," return uFlat == 0 ? normalize(gl_FrontFacing ? vNormal : -vNormal) : -normalize(cross(dFdy(vVertex), dFdx(vVertex)));"," #endif","}","vec4 encodeFragColor(const in vec3 frag, const in float alpha) {"," if (isClipped(vVertex)) discard;"," vec3 col = computeCurvature(vVertex, vNormal, frag, uCurvature, uFov);"," if(uDarken == 1) col *= 0.3;"," col *= (0.3 + 0.7 * vMasking);"," if(uSym == 1 && abs(dot(uPlaneN, vVertex - uPlaneO)) < 0.15)"," col = min(col * 1.5, 1.0);"," return alpha != 1.0 ? vec4(col * alpha, alpha) : encodeRGBM(col);","}"].join("\n");var T,M,S,k,E,A,C,w,R=function(e){var t="",r=e.match(/^\s*(#extension).*/gm);if(r)for(var i={},n=0,a=r.length;n2)&&(o=0),A[0]=C[o][0],A[1]=C[o][1],A[2]=C[o][2];var l=a.computeLocalRadius()*a.getScale(),u=b.sectionCutOffset*l;i.fF(T,a.getCenter(),a.getMatrix()),i.od(M,T,A,u);var c=n.getCamera().getView();i.fF(S,M,c),d(E,c),i.Fv(k,i.kK(k,A,E)),e.uniform3fv(t.uClipPlaneO,S),e.uniform3fv(t.uClipPlaneN,k)}}),b.updateUniforms=(w=[0,0,0],function(e,t){var r=e.getGL(),n=b.darkenUnselected&&t.getIndexSelectMesh(e)<0,a=b.showSymmetryLine&&e.getID()===t.getMesh().getID()&&t.getSculptManager().getSymmetry(),s=this.uniforms;r.uniformMatrix4fv(s.uEM,!1,e.getEditMatrix()),r.uniformMatrix3fv(s.uEN,!1,e.getEN()),r.uniformMatrix4fv(s.uMV,!1,e.getMV()),r.uniformMatrix4fv(s.uMVP,!1,e.getMVP()),r.uniformMatrix3fv(s.uN,!1,e.getN()),r.uniform1i(s.uDarken,n?1:0),r.uniform1i(s.uFlat,e.getFlatShading()),r.uniform3fv(s.uPlaneO,i.fF(w,e.getSymmetryOrigin(),e.getMV())),r.uniform3fv(s.uPlaneN,i.Fv(w,i.kK(w,e.getSymmetryNormal(),e.getN()))),r.uniform1i(s.uSym,a?1:0),r.uniform1f(s.uAlpha,e.getOpacity()),b.updateClipUniforms(r,s,e,t),r.uniform1f(s.uCurvature,e.getCurvature());var o=t.getCamera();r.uniform1f(s.uFov,o.isOrthographic()?25*-Math.abs(o._trans[2]):o.getFov())}),b.draw=function(e,t){e.getGL().useProgram(this.program),this.bindAttributes(e),this.updateUniforms(e,t),this.drawBuffer(e)},b.drawBuffer=function(e){var t=e.getGL();e.isUsingDrawArrays()?t.drawArrays(e.getMode(),0,e.getCount()):(e.getIndexBuffer().bind(),t.drawElements(e.getMode(),e.getCount(),t.UNSIGNED_INT,0)),t.bindBuffer(t.ARRAY_BUFFER,null),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null),this.unbindAttributes()},b.setTextureParameters=function(e,t){e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),o.Z.isPowerOfTwo(t.width)&&o.Z.isPowerOfTwo(t.height)?(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR_MIPMAP_LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),e.generateMipmap(e.TEXTURE_2D)):(e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE))},b.onLoadTexture0=function(e,t,r){this.texture0=e.createTexture(),e.bindTexture(e.TEXTURE_2D,this.texture0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),b.setTextureParameters(e,t),e.bindTexture(e.TEXTURE_2D,null),r&&r.render()},b.getDummyTexture=function(e){return this._dummyTex||(this._dummyTex=e.createTexture(),e.bindTexture(e.TEXTURE_2D,this._dummyTex),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,new Uint8Array(4)),e.bindTexture(e.TEXTURE_2D,null)),this._dummyTex},b.getOrCreateTexture0=function(e,t,r){if(void 0!==this.texture0)return this.texture0;this.texture0=null;var i=new Image;return i.src=t,i.onload=this.onLoadTexture0.bind(this,e,i,r),!1},b.initAttributes=function(e){var t=this.program,r=this.attributes;r.aVertex=new v(e,t,"aVertex",3,e.FLOAT),r.aNormal=new v(e,t,"aNormal",3,e.FLOAT),r.aColor=new v(e,t,"aColor",3,e.FLOAT),r.aMaterial=new v(e,t,"aMaterial",3,e.FLOAT)},b.bindAttributes=function(e){var t=this.attributes,r=this.activeAttributes;r.vertex&&t.aVertex.bindToBuffer(e.getVertexBuffer()),r.normal&&t.aNormal.bindToBuffer(e.getNormalBuffer()),r.color&&t.aColor.bindToBuffer(e.getColorBuffer()),r.material&&t.aMaterial.bindToBuffer(e.getMaterialBuffer())},b.unbindAttributes=function(){var e=this.attributes,t=this.activeAttributes;t.vertex&&e.aVertex.unbind(),t.normal&&e.aNormal.unbind(),t.color&&e.aColor.unbind(),t.material&&e.aMaterial.unbind()},b.getCopy=function(){for(var e=Object.keys(b),t={},r=0,i=e.length;r= 0.0 ? uAlbedo : aColor;"," vRoughness = uRoughness >= 0.0 ? uRoughness : aMaterial.x;"," vMetallic = uMetallic >= 0.0 ? uMetallic : aMaterial.y;"," vMasking = aMaterial.z;"," vNormal = mix(aNormal, uEN * aNormal, vMasking);"," vNormal = normalize(uN * vNormal);"," vec4 vertex4 = vec4(aVertex, 1.0);"," vertex4 = mix(vertex4, uEM * vertex4, vMasking);"," vVertex = vec3(uMV * vertex4);"," gl_Position = uMVP * vertex4;","}"].join("\n"),D.fragment=["varying vec3 vVertex;","varying vec3 vNormal;","varying vec3 vAlbedo;","varying float vRoughness;","varying float vMetallic;","uniform float uAlpha;",x.strings.fragColorUniforms,x.strings.fragColorFunction,P,"","void main(void) {"," vec3 normal = getNormal();"," float roughness = max( 0.0001, vRoughness );"," vec3 linColor = sRGBToLinear(vAlbedo);"," vec3 albedo = linColor * (1.0 - vMetallic);"," vec3 specular = mix( vec3(0.04), linColor, vMetallic);",""," vec3 color = uExposure * computeIBL_UE4( normal, -normalize(vVertex), albedo, roughness, specular );"," gl_FragColor = encodeFragColor(color, uAlpha);","}"].join("\n"),D.onLoadEnvironment=function(e,t,r,i){if(!e.status||200===e.status||e.response&&e.response.byteLength){var n=e.width||Math.sqrt(e.response.byteLength/8),a=2*n;i.size=[n,a],i.texture=t.createTexture(),t.bindTexture(t.TEXTURE_2D,i.texture),e.response?t.texImage2D(t.TEXTURE_2D,0,t.RGBA,n,a,0,t.RGBA,t.UNSIGNED_BYTE,new Uint8Array(e.response)):t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT),t.bindTexture(t.TEXTURE_2D,null),r&&r.render()}},D.getOrCreateEnvironment=function(e,t,r){if(void 0!==r.texture)return r.texture;if(r.texture=null,r.path.endsWith("png")){var i=new Image;return i.src=r.path,i.onload=D.onLoadEnvironment.bind(this,i,e,t,r),null}var n=new XMLHttpRequest;return n.open("GET",r.path,!0),n.responseType="arraybuffer",n.onload=D.onLoadEnvironment.bind(this,n,e,t,r),n.send(null),null};var O=h();D.updateUniforms=function(e,t){var r=e.getGL(),i=this.uniforms;d(O,t.getCamera().getView()),r.uniformMatrix3fv(i.uIblTransform,!1,f(O,O)),r.uniform3fv(i.uAlbedo,e.getAlbedo()),r.uniform1f(i.uRoughness,e.getRoughness()),r.uniform1f(i.uMetallic,e.getMetallic()),r.uniform1f(i.uExposure,D.exposure);var n=D.environments[D.idEnv];r.uniform3fv(i.uSPH,n.sph),n.size&&r.uniform2fv(i.uEnvSize,n.size),r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,D.getOrCreateEnvironment(r,t,n)||this.getDummyTexture(r)),r.uniform1i(i.uTexture0,0),x.updateUniforms.call(this,e,t)};const L=D;var V=r(183),N=x.getCopy();N.vertexName=N.fragmentName="Matcap",N.textures={},N.createTexture=function(e,t,r){var i=e.createTexture();e.bindTexture(e.TEXTURE_2D,i),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),N.setTextureParameters(e,t),e.bindTexture(e.TEXTURE_2D,null),N.textures[r]=i},N.matcaps=[{path:"resources/matcaps/matcapFV.jpg",name:"matcap FV"},{path:"resources/matcaps/redClay.jpg",name:"Red clay"},{path:"resources/matcaps/skinHazardousarts.jpg",name:"Skin hazardousarts"},{path:"resources/matcaps/skinHazardousarts2.jpg",name:"Skin Hazardousarts2"},{path:"resources/matcaps/pearl.jpg",name:(0,V.Z)("matcapPearl")},{path:"resources/matcaps/clay.jpg",name:(0,V.Z)("matcapClay")},{path:"resources/matcaps/skin.jpg",name:(0,V.Z)("matcapSkin")},{path:"resources/matcaps/green.jpg",name:(0,V.Z)("matcapGreen")},{path:"resources/matcaps/white.jpg",name:(0,V.Z)("matcapWhite")}],N.uniforms={},N.attributes={},N.uniformNames=["uTexture0","uAlbedo"],Array.prototype.push.apply(N.uniformNames,x.uniformNames.commonUniforms),N.vertex=["attribute vec3 aVertex;","attribute vec3 aNormal;","attribute vec3 aColor;","attribute vec3 aMaterial;",x.strings.vertUniforms,"varying vec3 vVertex;","varying vec3 vNormal;","varying vec3 vColor;","varying float vMasking;","varying vec3 vVertexPres;","uniform vec3 uAlbedo;","void main() {"," vColor = uAlbedo.x >= 0.0 ? uAlbedo : aColor;"," vMasking = aMaterial.z;"," vNormal = mix(aNormal, uEN * aNormal, vMasking);"," vNormal = normalize(uN * vNormal);"," vec4 vertex4 = vec4(aVertex, 1.0);"," vertex4 = mix(vertex4, uEM * vertex4, vMasking);"," vVertex = vec3(uMV * vertex4);"," vVertexPres = vVertex / max(1.0, abs(uMV[3][2]));"," gl_Position = uMVP * vertex4;","}"].join("\n"),N.fragment=["uniform sampler2D uTexture0;","varying vec3 vVertex;","varying vec3 vVertexPres;","varying vec3 vNormal;","varying vec3 vColor;","uniform float uAlpha;",x.strings.fragColorUniforms,x.strings.fragColorFunction,"void main() {"," vec3 normal = getNormal();"," vec3 nm_z = normalize(vVertexPres);"," vec3 nm_x = vec3(-nm_z.z, 0.0, nm_z.x);"," vec3 nm_y = cross(nm_x, nm_z);"," vec2 texCoord = 0.5 + 0.5 * vec2(dot(normal, nm_x), dot(normal, nm_y));"," vec3 color = sRGBToLinear(texture2D(uTexture0, texCoord).rgb) * sRGBToLinear(vColor);"," gl_FragColor = encodeFragColor(color, uAlpha);","}"].join("\n"),N.updateUniforms=function(e,t){var r=e.getGL(),i=this.uniforms;r.activeTexture(r.TEXTURE0),e.setTexture0(N.textures[e.getMatcap()]),r.bindTexture(r.TEXTURE_2D,e.getTexture0()||this.getDummyTexture(r)),r.uniform1i(i.uTexture0,0),r.uniform3fv(i.uAlbedo,e.getAlbedo()),x.updateUniforms.call(this,e,t)};const B=N;var U=x.getCopy();U.vertexName=U.fragmentName="ShowNormal",U.uniforms={},U.attributes={},U.activeAttributes={vertex:!0,normal:!0,material:!0},U.uniformNames=[],Array.prototype.push.apply(U.uniformNames,x.uniformNames.commonUniforms),U.vertex=["attribute vec3 aVertex;","attribute vec3 aNormal;","attribute vec3 aMaterial;",x.strings.vertUniforms,"varying vec3 vVertex;","varying vec3 vNormal;","varying float vMasking;","void main() {"," vMasking = aMaterial.z;"," vNormal = mix(aNormal, uEN * aNormal, vMasking);"," vNormal = normalize(uN * vNormal);"," vec4 vertex4 = vec4(aVertex, 1.0);"," vertex4 = mix(vertex4, uEM *vertex4, vMasking);"," vVertex = vec3(uMV * vertex4);"," gl_Position = uMVP * vertex4;","}"].join("\n"),U.fragment=["varying vec3 vVertex;","varying vec3 vNormal;","uniform float uAlpha;",x.strings.fragColorUniforms,x.strings.fragColorFunction,"void main() {"," gl_FragColor = encodeFragColor(sRGBToLinear(getNormal() * 0.5 + 0.5), uAlpha);","}"].join("\n");const Z=U;var G=x.getCopy();G.vertexName=G.fragmentName="ShowUV",G.texPath="resources/uv.png",G.uniforms={},G.attributes={},G.uniformNames=["uTexture0","uAlbedo"],Array.prototype.push.apply(G.uniformNames,x.uniformNames.commonUniforms),G.vertex=["attribute vec3 aVertex;","attribute vec3 aNormal;","attribute vec3 aColor;","attribute vec2 aTexCoord;","attribute vec3 aMaterial;",x.strings.vertUniforms,"varying vec3 vVertex;","varying vec3 vNormal;","varying vec3 vColor;","varying vec2 vTexCoord;","varying float vMasking;","uniform vec3 uAlbedo;","void main() {"," vColor = uAlbedo.x >= 0.0 ? uAlbedo : aColor;"," vTexCoord = aTexCoord;"," vMasking = aMaterial.z;"," vNormal = mix(aNormal, uEN * aNormal, vMasking);"," vNormal = normalize(uN * vNormal);"," vec4 vertex4 = vec4(aVertex, 1.0);"," vertex4 = mix(vertex4, uEM *vertex4, vMasking);"," vVertex = vec3(uMV * vertex4);"," gl_Position = uMVP * vertex4;","}"].join("\n"),G.fragment=["uniform sampler2D uTexture0;","varying vec3 vVertex;","varying vec3 vNormal;","varying vec3 vColor;","varying vec2 vTexCoord;","uniform float uAlpha;",x.strings.fragColorUniforms,x.strings.fragColorFunction,"void main() {"," vec3 color = sRGBToLinear(texture2D(uTexture0, vTexCoord).rgb) * sRGBToLinear(vColor);"," gl_FragColor = encodeFragColor(color, uAlpha);","}"].join("\n"),G.draw=x.draw,G.drawBuffer=x.drawBuffer,G.getOrCreate=x.getOrCreate,G.initUniforms=x.initUniforms,G.initAttributes=function(e){x.initAttributes.call(this,e),G.attributes.aTexCoord=new v(e,G.program,"aTexCoord",2,e.FLOAT)},G.bindAttributes=function(e){x.bindAttributes.call(this,e),G.attributes.aTexCoord.bindToBuffer(e.getTexCoordBuffer())},G.updateUniforms=function(e,t){var r=e.getGL(),i=this.uniforms;r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,this.getOrCreateTexture0(r,G.texPath,t)||this.getDummyTexture(r)),r.uniform1i(i.uTexture0,0),r.uniform3fv(i.uAlbedo,e.getAlbedo()),x.updateUniforms.call(this,e,t)};const W=G;var j=x.getCopy();j.vertexName=j.fragmentName="Wireframe",j.uniforms={},j.attributes={},j.activeAttributes={vertex:!0,material:!0},j.uniformNames=["uMVP","uMV","uEM","uClipPlaneO","uClipPlaneN","uClipEnabled","uClipInvert"],j.vertex=["attribute vec3 aVertex;","attribute vec3 aMaterial;","uniform mat4 uMVP;","uniform mat4 uMV;","uniform mat4 uEM;","varying vec3 vVertex;","void main() {"," vec4 vertex4 = vec4(aVertex, 1.0);"," vec4 skinned = mix(vertex4, uEM * vertex4, aMaterial.z);"," vVertex = vec3(uMV * skinned);"," vec4 pos = uMVP * skinned;"," pos[3] += 0.0001;"," gl_Position = pos;","}"].join("\n"),j.fragment=["uniform vec3 uClipPlaneN;","uniform vec3 uClipPlaneO;","uniform int uClipEnabled;","uniform int uClipInvert;","varying vec3 vVertex;","void main() {"," if (uClipEnabled == 1) {"," float side = dot(uClipPlaneN, vVertex - uClipPlaneO);"," if ((uClipInvert == 0 && side > 0.0) || (uClipInvert == 1 && side < 0.0)) discard;"," }"," gl_FragColor = vec4(0.0, 0.0, 0.0, 0.4);","}"].join("\n"),j.getOrCreate=x.getOrCreate,j.draw=function(e,t){var r=e.getGL();r.useProgram(this.program),this.bindAttributes(e),this.updateUniforms(e,t),e.getWireframeBuffer().bind(),r.drawElements(r.LINES,2*e.getRenderNbEdges(),r.UNSIGNED_INT,0)},j.updateUniforms=function(e,t){var r=e.getGL();r.uniformMatrix4fv(this.uniforms.uMVP,!1,e.getMVP()),r.uniformMatrix4fv(this.uniforms.uMV,!1,e.getMV()),r.uniformMatrix4fv(this.uniforms.uEM,!1,e.getEditMatrix()),x.updateClipUniforms(r,this.uniforms,e,t)};const z=j;var X=x.getCopy();X.vertexName=X.fragmentName="FlatColor",X.uniforms={},X.attributes={},X.activeAttributes={vertex:!0,material:!0},X.uniformNames=["uColor"],Array.prototype.push.apply(X.uniformNames,x.uniformNames.commonUniforms),X.vertex=["attribute vec3 aVertex;","attribute vec3 aMaterial;",x.strings.vertUniforms,"varying vec3 vVertex;","void main() {"," vec4 vertex4 = vec4(aVertex, 1.0);"," vec4 skinned = mix(vertex4, uEM * vertex4, aMaterial.z);"," vVertex = vec3(uMV * skinned);"," gl_Position = uMVP * skinned;","}"].join("\n"),X.fragment=["uniform vec3 uColor;","uniform vec3 uClipPlaneN;","uniform vec3 uClipPlaneO;","uniform int uClipEnabled;","uniform int uClipInvert;","varying vec3 vVertex;","void main() {"," if (uClipEnabled == 1) {"," float side = dot(uClipPlaneN, vVertex - uClipPlaneO);"," if ((uClipInvert == 0 && side > 0.0) || (uClipInvert == 1 && side < 0.0)) discard;"," }"," gl_FragColor = vec4(uColor, 1.0);","}"].join("\n"),X.updateUniforms=function(e,t){e.getGL().uniform3fv(this.uniforms.uColor,e.getFlatColor()),x.updateUniforms.call(this,e,t)};const K=X;var H=x.getCopy();H.vertexName=H.fragmentName="ShowSelection",H.uniforms={},H.attributes={},H.activeAttributes={vertex:!0},H.uniformNames=["uMVP","uColor"],H.vertex=["attribute vec3 aVertex;","uniform mat4 uMVP;","void main() {"," gl_Position = uMVP * vec4(aVertex, 1.0);","}"].join("\n"),H.fragment=["uniform vec3 uColor;","void main() {"," gl_FragColor = vec4(uColor, 1.0);","}"].join("\n"),H.draw=function(e,t,r){var i=e.getGL();i.useProgram(this.program),i.uniform3fv(this.uniforms.uColor,e.getColor()),t&&(i.uniformMatrix4fv(this.uniforms.uMVP,!1,e.getCircleMVP()),H.attributes.aVertex.bindToBuffer(e.getCircleBuffer()),i.drawArrays(i.LINE_LOOP,0,e.getCircleBuffer()._size/3)),i.uniformMatrix4fv(this.uniforms.uMVP,!1,e.getDotMVP()),H.attributes.aVertex.bindToBuffer(e.getDotBuffer()),i.drawArrays(i.TRIANGLE_FAN,0,e.getDotBuffer()._size/3),r&&(i.uniformMatrix4fv(this.uniforms.uMVP,!1,e.getDotSymmetryMVP()),i.drawArrays(i.TRIANGLE_FAN,0,e.getDotBuffer()._size/3))};const Y=H;var q=x.getCopy();q.vertexName=q.fragmentName="Background",q.uniforms={},q.attributes={},q.uniformNames=["uTexture0","uBackgroundType","uIblTransform","uSPH","uBlur","uEnvSize"],q.vertex=["attribute vec2 aVertex;","attribute vec2 aTexCoord;","varying vec2 vTexCoord;","void main() {"," vTexCoord = aTexCoord;"," gl_Position = vec4(aVertex, 1.0, 1.0);","}"].join("\n"),q.fragment=["varying vec2 vTexCoord;",x.strings.colorSpaceGLSL,P,"uniform int uBackgroundType;\nuniform float uBlur;\n\nvoid main() {\n vec3 color;\n if (uBackgroundType == 0) {\n color = sRGBToLinear(texture2D(uTexture0, vTexCoord).rgb);\n } else {\n vec3 dir = uIblTransform * vec3(vTexCoord.xy * 2.0 - 1.0, -1.0);\n dir = normalize(dir);\n if (uBackgroundType == 1) {\n color = texturePanoramaLod(dir, uBlur * uBlur);\n } else {\n color = sphericalHarmonics(dir);\n }\n }\n gl_FragColor = encodeRGBM(color);\n}\n"].join("\n"),q.draw=function(e){var t=e.getGL();t.useProgram(this.program),this.bindAttributes(e),this.updateUniforms(e),t.drawArrays(t.TRIANGLE_STRIP,0,4)},q.initAttributes=function(e){var t=q.program,r=q.attributes;r.aVertex=new v(e,t,"aVertex",2,e.FLOAT),r.aTexCoord=new v(e,t,"aTexCoord",2,e.FLOAT)},q.bindAttributes=function(e){var t=q.attributes;t.aVertex.bindToBuffer(e.getVertexBuffer()),t.aTexCoord.bindToBuffer(e.getTexCoordBuffer())};var J=h();q.updateUniforms=function(e){var t,r=this.uniforms,i=e._main,n=L.environments[L.idEnv],a=e.getGL();a.uniform1i(r.uBackgroundType,e.getType()),t=0===e.getType()?e.getTexture():L.getOrCreateEnvironment(a,i,n)||e.getTexture(),a.activeTexture(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,t),a.uniform1i(r.uTexture0,0),d(J,i.getCamera().getView()),a.uniformMatrix3fv(r.uIblTransform,!1,f(J,J)),a.uniform3fv(r.uSPH,n.sph),n.size&&a.uniform2fv(r.uEnvSize,n.size),a.uniform1f(r.uBlur,e.getBlur())};const Q=q;var $=x.getCopy();$.vertexName=$.fragmentName="Merge",$.FILMIC=(0,u.Z)().filmic,$.uniforms={},$.attributes={},$.uniformNames=["uTexture0","uTexture1","uFilmic"],$.vertex=["attribute vec2 aVertex;","varying vec2 vTexCoord;","void main() {"," vTexCoord = aVertex * 0.5 + 0.5;"," gl_Position = vec4(aVertex, 0.5, 1.0);","}"].join("\n"),$.fragment=["uniform sampler2D uTexture0;","uniform sampler2D uTexture1;","uniform int uFilmic;","varying vec2 vTexCoord;",x.strings.colorSpaceGLSL,"void main() {"," vec4 transparent = texture2D(uTexture1, vTexCoord);"," vec3 color = decodeRGBM(texture2D(uTexture0, vTexCoord))*(1.0-transparent.a) + transparent.rgb;"," if(uFilmic == 1){"," vec3 x = max(vec3(0.0), color - vec3(0.004));"," gl_FragColor = vec4((x*(6.2*x+0.5))/(x*(6.2*x+1.7)+0.06), 1.0);"," }else{"," gl_FragColor = vec4(linearTosRGB(color), 1.0);"," }","}"].join("\n"),$.draw=function(e,t){var r=e.getGL();r.useProgram(this.program),$.attributes.aVertex.bindToBuffer(e.getVertexBuffer()),r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,t._rttOpaque.getTexture()),r.uniform1i(this.uniforms.uTexture0,0),r.activeTexture(r.TEXTURE1),r.bindTexture(r.TEXTURE_2D,t._rttTransparent.getTexture()),r.uniform1i(this.uniforms.uTexture1,1),r.uniform1i(this.uniforms.uFilmic,$.FILMIC),r.drawArrays(r.TRIANGLES,0,3)},$.initAttributes=function(e){$.attributes.aVertex=new v(e,$.program,"aVertex",2,e.FLOAT)};const ee=$;var te=x.getCopy();te.vertexName=te.fragmentName="Fxaa",te.FILMIC=(0,u.Z)().filmic,te.uniforms={},te.attributes={},te.uniformNames=["uTexture0","uInvSize"],te.vertex=["attribute vec2 aVertex;","uniform vec2 uInvSize;","varying vec2 vUVNW;","varying vec2 vUVNE;","varying vec2 vUVSW;","varying vec2 vUVSE;","varying vec2 vUVM;","void main() {"," vUVM = aVertex * 0.5 + 0.5;"," vUVNW = vUVM + vec2(-1.0, -1.0) * uInvSize;"," vUVNE = vUVM + vec2(1.0, -1.0) * uInvSize;"," vUVSW = vUVM + vec2(-1.0, 1.0) * uInvSize;"," vUVSE = vUVM + vec2(1.0, 1.0) * uInvSize;"," gl_Position = vec4(aVertex, 0.5, 1.0);","}"].join("\n"),te.fragment=["uniform sampler2D uTexture0;","uniform vec2 uInvSize;","varying vec2 vUVNW;","varying vec2 vUVNE;","varying vec2 vUVSW;","varying vec2 vUVSE;","varying vec2 vUVM;","// https://github.com/mattdesl/glsl-fxaa\n#define FXAA_REDUCE_MIN (1.0/ 128.0)\n#define FXAA_REDUCE_MUL (1.0 / 8.0)\n#define FXAA_SPAN_MAX 8.0\n\nvec3 fxaa(const in sampler2D tex, const in vec2 uvNW, const in vec2 uvNE, const in vec2 uvSW, const in vec2 uvSE, const in vec2 uvM, const in vec2 invRes) {\n const vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(texture2D(tex, uvNW).xyz, luma);\n float lumaNE = dot(texture2D(tex, uvNE).xyz, luma);\n float lumaSW = dot(texture2D(tex, uvSW).xyz, luma);\n float lumaSE = dot(texture2D(tex, uvSE).xyz, luma);\n float lumaM = dot(texture2D(tex, uvM).xyz, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n vec2 dir = vec2(-((lumaNW + lumaNE) - (lumaSW + lumaSE)), ((lumaNW + lumaSW) - (lumaNE + lumaSE)));\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX), max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) * invRes;\n \n vec3 rgbA = 0.5 * ( texture2D(tex, uvM + dir * (1.0 / 3.0 - 0.5)).xyz + texture2D(tex, uvM + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * ( texture2D(tex, uvM - dir * 0.5).xyz + texture2D(tex, uvM + dir * 0.5).xyz);\n \n float lumaB = dot(rgbB, luma);\n if((lumaB < lumaMin) || (lumaB > lumaMax))\n return rgbA;\n return rgbB;\n}",x.strings.colorSpaceGLSL,"void main() {"," gl_FragColor = vec4(fxaa(uTexture0, vUVNW, vUVNE, vUVSW, vUVSE, vUVM, uInvSize), 1.0);","}"].join("\n"),te.draw=function(e,t){var r=e.getGL();r.useProgram(this.program),te.attributes.aVertex.bindToBuffer(e.getVertexBuffer()),r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,t._rttMerge.getTexture()),r.uniform1i(this.uniforms.uTexture0,0),r.uniform2fv(this.uniforms.uInvSize,e.getInverseSize()),r.drawArrays(r.TRIANGLES,0,3)},te.initAttributes=function(e){te.attributes.aVertex=new v(e,te.program,"aVertex",2,e.FLOAT)};const re=te;var ie=x.getCopy();ie.vertexName=ie.fragmentName="SobelContour",ie.color=(0,u.Z)().outlinecolor,ie.uniforms={},ie.attributes={},ie.uniformNames=["uTexture0","uColor","uInvSize"],ie.vertex=["attribute vec2 aVertex;","varying vec2 vTexCoord;","void main() {"," vTexCoord = aVertex * 0.5 + 0.5;"," gl_Position = vec4(aVertex, 0.0, 1.0);","}"].join("\n"),ie.fragment=["#extension GL_OES_standard_derivatives : enable","uniform sampler2D uTexture0;","uniform vec4 uColor;","varying vec2 vTexCoord;","uniform vec2 uInvSize;","\nfloat outlineDistance( const in vec2 uv, const in sampler2D tex, const in vec2 invSize ) {\n float fac0 = 2.0;\n float fac1 = 1.0;\n float ox = invSize.x;\n float oy = invSize.y;\n vec4 texel0 = texture2D(tex, uv + vec2(ox, oy));\n vec4 texel1 = texture2D(tex, uv + vec2(ox, 0.0));\n vec4 texel2 = texture2D(tex, uv + vec2(ox, -oy));\n vec4 texel3 = texture2D(tex, uv + vec2(0.0, -oy));\n vec4 texel4 = texture2D(tex, uv + vec2(-ox, -oy));\n vec4 texel5 = texture2D(tex, uv + vec2(-ox, 0.0));\n vec4 texel6 = texture2D(tex, uv + vec2(-ox, oy));\n vec4 texel7 = texture2D(tex, uv + vec2(0.0, oy));\n vec4 rowx = -fac0 * texel5 + fac0 * texel1 + -fac1 * texel6 + fac1 * texel0 + -fac1 * texel4 + fac1 * texel2;\n vec4 rowy = -fac0 * texel3 + fac0 * texel7 + -fac1 * texel4 + fac1 * texel6 + -fac1 * texel2 + fac1 * texel0;\n return dot(rowy, rowy) + dot(rowx, rowx);\n}\n",x.strings.colorSpaceGLSL,"void main() {"," float mag = outlineDistance(vTexCoord, uTexture0, uInvSize);"," if (mag < 1.5) discard;"," gl_FragColor = vec4(sRGBToLinear(uColor.rgb) * uColor.a, uColor.a);","}"].join("\n"),ie.draw=function(e){var t=e.getGL();t.useProgram(this.program),ie.attributes.aVertex.bindToBuffer(e.getVertexBuffer()),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,e.getTexture()),t.uniform1i(this.uniforms.uTexture0,0),t.uniform4fv(this.uniforms.uColor,ie.color),t.uniform2fv(this.uniforms.uInvSize,e.getInverseSize()),t.drawArrays(t.TRIANGLES,0,3)},ie.initAttributes=function(e){ie.attributes.aVertex=new v(e,ie.program,"aVertex",2,e.FLOAT)};const ne=ie;var ae=x.getCopy();ae.CHANNEL_VALUE=0,ae.vertexName=ae.fragmentName="PaintUV",ae.uniforms={},ae.attributes={},ae.uniformNames=["uChannelPaint"],ae.activeAttributes={color:!0,material:!0},ae.vertex=["attribute vec2 aTexCoord;","attribute vec3 aColor;","attribute vec3 aMaterial;","varying vec3 vColor;","varying vec2 vMaterial;","void main() {"," vColor = aColor;"," vMaterial = aMaterial.xy;"," gl_Position = vec4((aTexCoord * 2.0 - 1.0) * vec2(1.0, -1.0), 0.5, 1.0);","}"].join("\n"),ae.fragment=["varying vec3 vColor;","varying vec2 vMaterial;","uniform int uChannelPaint;","void main() {"," gl_FragColor = vec4(uChannelPaint == 0 ? vColor : uChannelPaint == 1 ? vMaterial.xxx : vMaterial.yyy, 1.0);","}"].join("\n"),ae.initAttributes=function(e){x.initAttributes.call(this,e),ae.attributes.aTexCoord=new v(e,ae.program,"aTexCoord",2,e.FLOAT)},ae.bindAttributes=function(e){x.bindAttributes.call(this,e),ae.attributes.aTexCoord.bindToBuffer(e.getTexCoordBuffer())},ae.updateUniforms=function(e){e.getGL().uniform1i(this.uniforms.uChannelPaint,ae.CHANNEL_VALUE)};const se=ae;var oe=x.getCopy();oe.vertexName=oe.fragmentName="Blur",oe.INPUT_TEXTURE=null,oe.uniforms={},oe.attributes={},oe.uniformNames=["uTexture0","uInvSize"],oe.vertex=["attribute vec2 aVertex;","varying vec2 vTexCoord;","void main() {"," vTexCoord = aVertex * 0.5 + 0.5;"," gl_Position = vec4(aVertex, 0.5, 1.0);","}"].join("\n"),oe.fragment=["uniform sampler2D uTexture0;","varying vec2 vTexCoord;","uniform vec2 uInvSize;",x.strings.colorSpaceGLSL,"void main() {"," const int KER_SIZE = 8;"," vec4 avg = texture2D(uTexture0, vTexCoord);"," if (avg.a < 0.1) {"," for (int i = -KER_SIZE; i <= KER_SIZE; ++i) {"," for (int j = -KER_SIZE; j <= KER_SIZE; ++j) {"," if (i == 0 && j == 0) continue;"," vec4 fetch = texture2D(uTexture0, vTexCoord + vec2(i, j) * uInvSize);"," avg.rgb += sRGBToLinear(fetch.rgb) * fetch.a;"," avg.a += fetch.a;"," }"," }"," avg.rgb = avg.a == 0.0 ? vec3(0.0) : linearTosRGB(avg.rgb / avg.a);"," }"," gl_FragColor = vec4(avg.rgb, 1.0);","}"].join("\n"),oe.draw=function(e){var t=e.getGL();t.useProgram(this.program),oe.attributes.aVertex.bindToBuffer(e.getVertexBuffer()),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,oe.INPUT_TEXTURE.getTexture()),t.uniform1i(this.uniforms.uTexture0,0),t.uniform2fv(this.uniforms.uInvSize,oe.INPUT_TEXTURE.getInverseSize()),t.drawArrays(t.TRIANGLES,0,3)},oe.initAttributes=function(e){oe.attributes.aVertex=new v(e,oe.program,"aVertex",2,e.FLOAT)};const le=oe;var ue=x.getCopy();ue.vertexName=ue.fragmentName="ComparisonImage",ue.uniforms={},ue.attributes={},ue.uniformNames=["uMVP","uTexture","uOpacity","uBorderColor","uIsBorder"],ue.vertex=["attribute vec3 aPosition;","attribute vec2 aTexCoord;","uniform mat4 uMVP;","varying vec2 vTexCoord;","void main() {"," gl_Position = uMVP * vec4(aPosition, 1.0);"," vTexCoord = aTexCoord;","}"].join("\n"),ue.fragment=["#ifdef GL_FRAGMENT_PRECISION_HIGH"," precision highp float;","#else"," precision mediump float;","#endif","uniform sampler2D uTexture;","uniform float uOpacity;","uniform vec3 uBorderColor;","uniform int uIsBorder;","varying vec2 vTexCoord;","void main() {"," if (uIsBorder == 1) {"," gl_FragColor = vec4(uBorderColor, 1.0);"," } else {"," vec4 color = texture2D(uTexture, vTexCoord);"," gl_FragColor = vec4(color.rgb, color.a * uOpacity);"," }","}"].join("\n"),ue.initAttributes=function(e){var t=ue.program;if(t){var r=ue.attributes;r.aPosition=new v(e,t,"aPosition",3,e.FLOAT),r.aTexCoord=new v(e,t,"aTexCoord",2,e.FLOAT)}else console.error("ShaderComparisonImage: program not initialized")},ue.initUniforms=function(e){x.initUniforms.call(this,e)},ue.bindAttributes=function(e){};const ce=ue;var he=[];he[s.Z.Shader.PBR]=L,he[s.Z.Shader.MATCAP]=B,he[s.Z.Shader.NORMAL]=Z,he[s.Z.Shader.UV]=W,he[s.Z.Shader.WIREFRAME]=z,he[s.Z.Shader.FLAT]=K,he[s.Z.Shader.SELECTION]=Y,he[s.Z.Shader.BACKGROUND]=Q,he[s.Z.Shader.MERGE]=ee,he[s.Z.Shader.FXAA]=re,he[s.Z.Shader.CONTOUR]=ne,he[s.Z.Shader.PAINTUV]=se,he[s.Z.Shader.BLUR]=le,he[s.Z.Shader.COMPARISON_IMAGE]=ce;const de=he;function fe(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=2*Math.PI,n=r?1:0,a=r?t+2:t,s=new Float32Array(3*a),o=n;o=2){t[f]=m/T,t[f+1]=v/T,t[f+2]=y/T;continue}m=v=y=0}for(b=h;b0&&void 0!==arguments[0]?arguments[0]:-1/0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1/0,r=this.getMesh(),i=r.getMaterials(),n=r.getNbVertices(),a=new Uint32Array(o.Z.getMemory(4*n),0,n),s=0,l=0;le&&u0)){var R=h[k]-d,x=h[k+1]-f,P=h[k+2]-_,D=Math.sqrt(R*R+x*x+P*P)/c;if(!(D>=1)){var I=D*D;I=3*I*I-4*I*D+1,I*=w*a*u[k+2]*s.getAlpha(E,A,C),l[k]-=v*I,l[k+1]-=y*I,l[k+2]-=b*I}}}}}])&&Se(t.prototype,r),o}(Te);function we(e){return(we="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Re(e,t){for(var r=0;r=1)){var E=o[b],A=o[b+1],C=o[b+2],w=k*k;w=3*w*w-4*w*k+1,w*=l[b+2]*h*a.getAlpha(E,A,C),o[b]=E+p*w,o[b+1]=A+g*w,o[b+2]=C+m*w}}}}])&&Re(t.prototype,r),l}(Te);function Fe(e){return(Fe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Oe(e,t){for(var r=0;r=1)){var M=T*T;M=3*M*M-4*M*T+1,M*=h;var S=s[m],k=s[m+1],E=s[m+2],A=u[m],C=u[m+1],w=u[m+2];M/=Math.sqrt(A*A+C*C+w*w),M*=o[m+2]*n.getAlpha(S,k,E),s[m]=S+A*M,s[m+1]=k+C*M,s[m+2]=E+w*M}}}}])&&Oe(t.prototype,r),o}(Te);function Ue(e,t,r){return e[0]=t,e[1]=r,e}function Ze(e,t,r,i){return e[0]=t[0]+r[0]*i,e[1]=t[1]+r[1]*i,e}function Ge(e,t){var r=t[0],i=t[1],n=r*r+i*i;return n>0&&(n=1/Math.sqrt(n)),e[0]=t[0]*n,e[1]=t[1]*n,e}function We(e,t){return e[0]*t[0]+e[1]*t[1]}var je,ze=function(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e},Xe=function(e,t){var r=t[0]-e[0],i=t[1]-e[1];return Math.hypot(r,i)};function Ke(){var e=new c.WT(4);return c.WT!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function He(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e}function Ye(e,t,r){r*=.5;var i=Math.sin(r);return e[0]=i*t[0],e[1]=i*t[1],e[2]=i*t[2],e[3]=Math.cos(r),e}function qe(e,t,r){r*=.5;var i=t[0],n=t[1],a=t[2],s=t[3],o=Math.sin(r),l=Math.cos(r);return e[0]=i*l+s*o,e[1]=n*l+a*o,e[2]=a*l-n*o,e[3]=s*l-i*o,e}function Je(e,t,r){r*=.5;var i=t[0],n=t[1],a=t[2],s=t[3],o=Math.sin(r),l=Math.cos(r);return e[0]=i*l-a*o,e[1]=n*l+s*o,e[2]=a*l+i*o,e[3]=s*l-n*o,e}je=new c.WT(2),c.WT!=Float32Array&&(je[0]=0,je[1]=0),function(){var e=new c.WT(4);c.WT!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0)}();var Qe=function(e,t,r,i){var n=new c.WT(4);return n[0]=e,n[1]=t,n[2]=r,n[3]=i,n},$e=function(e,t,r){var i=t[0],n=t[1],a=t[2],s=t[3],o=r[0],l=r[1],u=r[2],c=r[3];return e[0]=i*c+s*o+n*u-a*l,e[1]=n*c+s*l+a*o-i*u,e[2]=a*c+s*u+i*l-n*o,e[3]=s*c-i*o-n*l-a*u,e},et=function(e,t){var r=t[0],i=t[1],n=t[2],a=t[3],s=r*r+i*i+n*n+a*a;return s>0&&(s=1/Math.sqrt(s)),e[0]=r*s,e[1]=i*s,e[2]=n*s,e[3]=a*s,e},tt=(i.Ue(),i.al(1,0,0),i.al(0,1,0),Ke(),Ke(),h(),r(165));function rt(e){return(rt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function it(e,t){for(var r=0;r=1)){var A=o[T],C=o[T+1],w=o[T+2],R=E*E;R=3*R*R-4*R*E+1,R*=l[T+2]*a.getAlpha(A,C,w);var x=Math.pow(R,5)*v;R*=m,o[T]=A+M*R+_*x,o[T+1]=C+S*R+p*x,o[T+2]=w+k*R+g*x}}}}])&&Tt(t.prototype,r),o}(Te);function At(e){return(At="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ct(e,t){for(var r=0;r1&&(x=1);var P=Math.pow(1-x,b),D=1-(P*=i*u[S+2]*a.getAlpha(k,E,A));this._writeAlbedo&&(l[S]=l[S]*D+_*P,l[S+1]=l[S+1]*D+p*P,l[S+2]=l[S+2]*D+g*P),this._writeRoughness&&(u[S]=u[S]*D+h*P),this._writeMetalness&&(u[S+1]=u[S+1]*D+d*P)}}},{key:"paintAll",value:function(){var e=this.getMesh(),t=this.getUnmaskedVertices();if(0!==t.length){this.pushState(!0),this._main.getStateManager().pushVertices(t);for(var r=e.getColors(),i=e.getMaterials(),n=this._color,a=this._material[0],s=this._material[1],o=n[0],l=n[1],u=n[2],c=0,h=t.length;c0;){var s=i[--n],o=s._iFaces.length;if(o>e.MAX_FACES&&s._depth0&&a.push(s)}var u=a.length;for(r=0;rs&&(s=m),po&&(o=v),gl&&(l=y)}this.expandsAabbLoose(i,n,a,s,o,l)}},{key:"constructChildren",value:function(t){for(var r=this._aabbSplit,i=r[0],n=r[1],a=r[2],s=r[3],o=r[4],l=r[5],u=.5*(s-i),c=.5*(o-n),h=.5*(l-a),d=.5*(s+i),f=.5*(o+n),_=.5*(l+a),p=new e(this),g=new e(this),m=new e(this),v=new e(this),y=new e(this),b=new e(this),T=new e(this),M=new e(this),S=p._iFaces,k=g._iFaces,E=m._iFaces,A=v._iFaces,C=y._iFaces,w=b._iFaces,R=T._iFaces,x=M._iFaces,P=t.getFaceCenters(),D=this._iFaces,I=D.length,F=0;Fd?N>f?B>_?R.push(O):w.push(O):B>_?E.push(O):k.push(O):N>f?B>_?x.push(O):C.push(O):B>_?A.push(O):S.push(O)}p.setAabbSplit(i,n,a,d,f,_),g.setAabbSplit(i+u,n,a,d+u,f,_),m.setAabbSplit(d,f-c,_,s,o-c,l),v.setAabbSplit(i,n,a+h,d,f,_+h),y.setAabbSplit(i,n+c,a,d,f+c,_),b.setAabbSplit(d,f,_-h,s,o,l-h),T.setAabbSplit(d,f,_,s,o,l),M.setAabbSplit(d-u,f,_,s-u,o,l),this._children.length=0,this._children.push(p,g,m,v,y,b,T,M),D.length=0}},{key:"setAabbSplit",value:function(e,t,r,i,n,a){var s=this._aabbSplit;s[0]=e,s[1]=t,s[2]=r,s[3]=i,s[4]=n,s[5]=a}},{key:"setAabbLoose",value:function(e,t,r,i,n,a){var s=this._aabbLoose;s[0]=e,s[1]=t,s[2]=r,s[3]=i,s[4]=n,s[5]=a}},{key:"collectIntersectRay",value:function(t,r,i,n){var a=t[0],s=t[1],o=t[2],l=1/r[0],u=1/r[1],c=1/r[2],h=0,d=e.STACK;d[0]=this;for(var f=1;f>0;){var _=d[--f],p=_._aabbLoose,g=(p[0]-a)*l,m=(p[3]-a)*l,v=(p[1]-s)*u,y=(p[4]-s)*u,b=(p[2]-o)*c,T=(p[5]-o)*c,M=Math.max(Math.min(g,m),Math.min(v,y),Math.min(b,T)),S=Math.min(Math.max(g,m),Math.max(v,y),Math.max(b,T));if(!(S<0||M>S)){var k=_._children;if(8===k.length){for(var E=0;E<8;++E)d[f+E]=k[E];f+=8}else{n&&n.push(_);var A=_._iFaces;i.set(A,h),h+=A.length}}}return new Uint32Array(i.subarray(0,h))}},{key:"collectIntersectSphere",value:function(t,r,i,n){var a=t[0],s=t[1],o=t[2],l=0,u=e.STACK;u[0]=this;for(var c=1;c>0;){var h,d,f,_=u[--c],p=_._aabbLoose;if(!((h=p[0]>a?p[0]-a:p[3]s?p[1]-s:p[4]o?p[2]-o:p[5]r)){var g=_._children;if(8===g.length){for(var m=0;m<8;++m)u[c+m]=g[m];c+=8}else{n&&n.push(_);var v=_._iFaces;i.set(v,l),l+=v.length}}}return new Uint32Array(i.subarray(0,l))}},{key:"addFace",value:function(t,r,i,n,a,s,o,l,u,c){var h=e.STACK;h[0]=this;for(var d=1;d>0;){var f=h[--d],_=f._aabbSplit;if(!(l<=_[0]||u<=_[1]||c<=_[2]||l>_[3]||u>_[4]||c>_[5])){var p=f._aabbLoose;rp[3]&&(p[3]=a),s>p[4]&&(p[4]=s),o>p[5]&&(p[5]=o);var g=f._children;if(8!==g.length)return f._iFaces.push(t),f;for(var m=0;m<8;++m)h[d+m]=g[m];d+=8}}}},{key:"pruneIfPossible",value:function(){for(var e=this;e._parent;){var t=e._parent,r=t._children;if(0===r.length)return;for(var i=0;i<8;++i){var n=r[i];if(n._iFaces.length>0||8===n._children.length)return}r.length=0,e=t}}},{key:"expandsAabbLoose",value:function(e,t,r,i,n,a){for(var s=this;s;){var o=s._aabbLoose,l=!1;eo[3]&&(o[3]=i,l=!0),n>o[4]&&(o[4]=n,l=!0),a>o[5]&&(o[5]=a,l=!0),s=l?s._parent:null}}}])&&zt(t.prototype,r),e}();Xt.FLAG=0,Xt.MAX_DEPTH=8,Xt.MAX_FACES=100,function(){for(var e=1+7*Xt.MAX_DEPTH,t=Xt.STACK=new Array(e),r=0;rM?y>E?y:E:M>E?M:E,B=bS?b>A?b:A:S>A?S:A,Z=Tk?T>C?T:C:k>C?k:C;if(v){var W=n[m],j=n[m+1],z=n[m+2];WN&&(N=W),jU&&(U=j),zG&&(G=z),F+=(R=A-j)*I-(x=C-z)*D,O+=x*P-(w=E-W)*I,L+=w*D-R*P}t[h]=F,t[h+1]=O,t[h+2]=L,r[f]=V,r[f+1]=B,r[f+2]=Z,r[f+3]=N,r[f+4]=U,r[f+5]=G,i[h]=.5*(V+N),i[h+1]=.5*(B+U),i[h+2]=.5*(Z+G)}}},{key:"expandsFaces",value:function(e,t){var r=++o.Z.TAG_FLAG,i=e.length,n=this.getVerticesRingFaceStartCount(),a=this.getVerticesRingFace(),s=a instanceof Array?a:null,l=this.getFacesTagFlags(),u=this.getFaces(),c=i,h=new Uint32Array(o.Z.getMemory(4*this.getNbFaces()),0,this.getNbFaces());h.set(e);var d=0;for(d=0;d_&&(y=f+(s===p?0:2),(v=i[_])<=h?(t[y]=r,i[_]=++r):t[y]=v-1),s>p&&(y=f+(s===_?0:1),(v=i[p])<=h?(t[y]=r,i[p]=++r):t[y]=v-1),s>g&&(y=f+(s===_?2:1),(v=i[g])<=h?(t[y]=r,i[g]=++r):t[y]=v-1),t[f+3]=o.Z.TRI_INDEX):(s>_&&s!==g&&(y=f+(s===p?0:3),(v=i[_])<=h?(t[y]=r,i[_]=++r):t[y]=v-1),s>p&&s!==m&&(y=f+(s===_?0:1),(v=i[p])<=h?(t[y]=r,i[p]=++r):t[y]=v-1),s>g&&s!==_&&(y=f+(s===p?1:2),(v=i[g])<=h?(t[y]=r,i[g]=++r):t[y]=v-1),s>m&&s!==p&&(y=f+(s===_?3:2),(v=i[m])<=h?(t[y]=r,i[m]=++r):t[y]=v-1))}for(var b=this._meshData._edges=new Uint8ClampedArray(r),T=0,M=this.getNbFaces();T=n&&(t[s]=r[s]);var a=this.getNbVertices(),s=0,l=0,u=0,c=0,h=new Int32Array(a),d=new Float32Array(o.Z.getMemory(4*a*2),0,2*a),f=[],_=0,p=0;for(s=0;s0)h[u]=--_,f.push([g]),++p;else{var m=f[-c-1],v=m.length;for(l=0;l=0)){var T=f[-c-1],M=T.length,S=a+_;for(b[2*s]=S,b[2*s+1]=M,_+=M,l=0;l0)){var C=t[s],w=f[-c-1],R=w.length;for(l=0;la&&(a=c),hs&&(s=h),do&&(o=d)}return[r,i,n,a,s,o]}},{key:"computeOctree",value:function(){var e=this.computeAabb(),t=e[0],r=e[1],i=e[2],n=e[3],a=e[4],s=e[5],o=n-t,l=a-r,u=s-i,c=.2*Math.sqrt(o*o+l*l+u*u),h=1e-16;n-t_[3]||g>_[4]||m>_[5]){l[s++]=e[u];var v=f._iFaces;if(v.length>0){var y=v[v.length-1],b=i[c];v[b]=y,i[y]=b,v.pop()}}else f.expandsAabbLoose(r[h],r[h+1],r[h+2],r[h+3],r[h+4],r[h+5])}return new Uint32Array(l.subarray(0,s))}},{key:"updateOctreeAdd",value:function(e){for(var t=this.getFaceCenters(),r=this.getFaceBoxes(),i=this._meshData._facePosInLeaf,n=this._meshData._faceLeaf,a=e.length,s=this._meshData._octree,o=s._aabbSplit,l=o[0],u=o[1],c=o[2],h=o[3],d=o[4],f=o[5],_=0;_h||bd||Tf||MKt.MAX_FACES&&i._depth=0;){var A=[],C=E>=a?u[E-a]:E,w=f[2*C],R=w+f[2*C+1];for(e=w;e32&&(g[D]=m++),m-g[I]>32&&(g[I]=m++),m-g[F]>32&&(g[F]=m++),L&&(y[b++]=O,A.push(O),--p[O],m-g[O]>32&&(g[O]=m++))}}E=-1;var V=-1,N=A.length;for(e=0;eV&&(V=Z,E=B)}}if(-1===E){for(;b>0;){var W=y[--b];if(p[W]>0){E=W;break}}if(-1===E)for(;v0){E=v-1;break}}}i.set(M.subarray(0,4*n)),t&&r.set(S.subarray(0,4*n))}},{key:"optimizePreTransform",value:function(){var e=this.getVertices(),t=this.getColors(),r=this.getMaterials(),i=this.getNbVertices(),n=this.getFaces(),a=4*this.getNbFaces(),s=new Float32Array(3*i),l=new Float32Array(3*i),u=new Float32Array(3*i),c=new Uint32Array(i),h=0,d=0;for(d=0;d0&&this.setNbVertices(h),this.hasUV()){var v=this.getFacesTexCoord();for(d=0;d0&&(k[w]=C-m,k[w+1]=E[A+1]),S[w]=M[A],S[w+1]=M[A+1])}for(d=i;d1&&(k=1);var E=Math.pow(1-k,f);E*=_*a.getAlpha(v,y,b),l[m+2]=Math.min(Math.max(l[m+2]+E,0),1)}}},{key:"updateAndRenderMask",value:function(){var e=this.getMesh();e.updateDuplicateColorsAndMaterials(),e.updateDrawArrays(),this.updateRender()}},{key:"blur",value:function(){var e=this.getMesh(),t=this.getMaskedVertices();if(0!==t.length){t=e.expandsVertices(t,1),this.pushState(),this._main.getStateManager().pushVertices(t);var r=e.getMaterials(),i=t.length,n=new Float32Array(3*i);this.laplacianSmooth(t,n,r);for(var a=0;a.5?Math.min(s+.1,1):Math.max(s-1,0)}this.updateAndRenderMask()}}},{key:"clear",value:function(){var e=this.getMesh(),t=this.getMaskedVertices();if(0!==t.length){this.pushState(),this._main.getStateManager().pushVertices(t);for(var r=e.getMaterials(),i=0,n=t.length;i=r||s[p]>=1,T=a[3*g+2]>=r||s[g]>=1,M=a[3*m+2]>=r||s[m]>=1,S=!!y&&(a[3*v+2]>=r||s[v]>=1);c[f+=4*u]=m,c[f+1]=g,c[f+2]=p,c[f+3]=v,T&&(b&&(c[f=4*h++]=c[f+3]=g,c[f+1]=c[f+2]=p),M&&(c[f=4*h++]=c[f+3]=m,c[f+1]=c[f+2]=g)),y?S&&(b&&(c[f=4*h++]=c[f+3]=p,c[f+1]=c[f+2]=v),M&&(c[f=4*h++]=c[f+3]=v,c[f+1]=c[f+2]=m)):b&&M&&(c[f=4*h++]=c[f+3]=p,c[f+1]=c[f+2]=m)}}var k=new Uint32Array(c.subarray(0,4*h));return this.remapAndMirrorIndices(k,u,t),this._thickness>0&&this.invertFaces(k),k}},{key:"extractVertices",value:function(e){var t=this.getMesh(),r=t.getVertices(),n=t.getNormals(),a=t.getMatrix(),s=_(h(),a),o=e.length,l=new Float32Array(2*o*3),u=[0,0,0],c=[0,0,0],d=3*o,f=this._thickness,p=.01;f<0&&(p=-p);for(var g=0;gu&&(h.set(i,u),d.set(n,u),f.set(a,u));var _=new Uint32Array(4*e.getNbFaces()+r.length);return _.set(e.getFaces()),r.length>0&&_.set(r,4*e.getNbFaces()),Mr(e,h,_,d,f)}(e);if(t===e){var r=3*e.getNbVertices(),i=4*e.getNbFaces(),n=new Uint32Array(e.getFaces().subarray(0,i)),a=new Float32Array(e.getVertices().subarray(0,r)),s=new Float32Array(e.getColors().subarray(0,r)),l=new Float32Array(e.getMaterials().subarray(0,r));t=Mr(e,a,n,s,l)}return t}};var kr={BLOCK:!1},Er=function(){for(var e=new Uint32Array(24),t=0,r=0;r<8;++r)for(var i=1;i<=4;i<<=1){var n=r^i;r<=n&&(e[t++]=r,e[t++]=n)}return e}(),Ar=function(e){for(var t=new Uint32Array(256),r=0;r<256;++r){for(var i=0,n=0;n<24;n+=2)i|=!!(r&1<>1):0;t[r]=i}return t}(Er),Cr=function(e,t,r,i,n,a){for(var s=e.colorField,o=e.materialField,l=e.distanceField,u=0,c=0,h=0,d=0,f=0,_=0,p=0,g=0,m=0,v=r[0],y=r[0]*r[1],b=0;b<2;++b)for(var T=0;T<2;++T)for(var M=0;M<2;++M){var S=i+M+T*v+b*y,k=3*S,E=l[S];t[m]=E,g|=E<0?1<0&&(p=1/p),n.push(u*p,c*p,h*p),a.push(d*p,f*p,_*p)),g},wr=[0,0,0],Rr=function(e,t,r,i,n){wr[0]=wr[1]=wr[2]=0;for(var a=0,s=0;s<12;++s)if(e&1<0?1<0&&(p=1/p),n[0]=u*p,n[1]=c*p,n[2]=h*p,a[0]=d*p,a[1]=f*p,a[2]=_*p),g};Dr.computeSurface=function(e){var t=e.dims,r=new Map,i=[],n=[],a=[],s=[],l=0,u=new Int32Array(3),c=new Float32Array(8),h=new Array(12),d=new Float32Array(3),f=new Float32Array(3),_=new Float32Array(3);for(u[2]=0;u[2]1e-6&&(S=T/M);for(var k=0;k<3;++k)d[k]=u[k]+y[k]+S*(b[k]-y[k]);var E=d[0]+"+"+d[1]+"+"+d[2],A=r.get(E);A>=0?h[m]=A:(h[m]=i.length/3,r.set(E,h[m]),i.push(d[0],d[1],d[2]),n.push(f[0],f[1],f[2]),a.push(_[0],_[1],_[2]))}for(var C=Fr[p],w=0;wV?F>U?F:U:V>U?V:U,J=ON?O>Z?O:Z:N>Z?N:Z,$=LB?L>G?L:G:B>G?B:G,te=S[0]=V-F,re=S[1]=N-O,ie=S[2]=B-L,ne=k[0]=U-F,ae=k[1]=Z-O,se=k[2]=G-L,oe=te*te+re*re+ie*ie,le=te*ne+re*ae+ie*se,ue=ne*ne+ae*ae+se*se,ce=Math.floor((Y-s)*a),he=Math.floor((J-o)*a),de=Math.floor(($-l)*a),fe=Math.ceil((q-s)*a),_e=Math.ceil((Q-o)*a),pe=Math.ceil((ee-l)*a),ge=de;ge<=pe;++ge)for(var me=he;me<=_e;++me)for(var ve=ce;ve<=fe;++ve){var ye=s+ve*i,be=o+me*i,Te=l+ge*i,Me=ve+me*u+ge*c;E[0]=ye,E[1]=be,E[2]=Te;var Se=tt.Z.distance2PointTriangleEdges(E,S,k,b,oe,le,ue,A);if((Se=Math.sqrt(Se))i))for(var Ee=0;Ee<3;++Ee){var Ae=A[Ee]-E[Ee];if(!(Ae<0||Ae>i)){var Ce=3*Me+Ee;if(1!==d[Ce]){var we=tt.Z.intersectionRayTriangleEdges(E,C[Ee],S,k,b);we<0||we>i||(d[Ce]=1)}}}}},Zr=function(e,t,r,i,n){var a=new sr(e.getGL());return a.setID(e.getID()),a.setFaces(t),a.setVertices(r),i&&a.setColors(i),n&&a.setMaterials(n),a.setRenderData(e.getRenderData()),a.init(),a.initRender(),a};Br.remesh=function(e,t,r){console.time("remesh total"),console.time("1. prepareMeshes");var n=function(e){for(var t=[1/0,1/0,1/0,-1/0,-1/0,-1/0],r=[0,0,0],n=0,a=e.length;nt[3]&&(t[3]=f),_>t[4]&&(t[4]=_),p>t[5]&&(t[5]=p)}}return t}(e=e.slice());console.timeEnd("1. prepareMeshes"),console.time("2. voxelization");for(var a,u=function(e){for(var t=Math.max(e[3]-e[0],e[4]-e[1],e[5]-e[2])/Br.RESOLUTION,r=1.51*t,i=1.51*t,n=[e[0]-r,e[1]-r,e[2]-r],a=[e[3]+i,e[4]+i,e[5]+i],s=Math.ceil((a[0]-n[0])/t),l=Math.ceil((a[1]-n[1])/t),u=Math.ceil((a[2]-n[2])/t),c=s*l*u,h=o.Z.getMemory(31*c),d=new Float32Array(h,0,c),f=new Float32Array(h,4*c,3*c),_=new Float32Array(h,16*c,3*c),p=new Uint8Array(h,28*c,3*c),g=0;g0;){var g=u[--c];if(s[g]=o||p<0||1!==l[p]&&s[p]!==1/0&&0===a[3*(m>=0?g:p)+d[_]]&&(l[p]=1,u[c++]=p)}else for(_=0;_=o||p<0||1!==l[p]&&(l[p]=1,u[c++]=p)}for(var v=0;v0&&void 0!==arguments[0]?arguments[0]:-.5,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-.5,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:0,l=arguments.length>8&&void 0!==arguments[8]?arguments[8]:1,u=new Float32Array(4);u[0]=0,u[1]=1,u[2]=2,u[3]=3;var c=new Float32Array(12);return c[0]=e,c[1]=t,c[2]=r,c[3]=e+i,c[4]=t+n,c[5]=r+a,c[6]=e+i+s,c[7]=t+n+o,c[8]=r+a+l,c[9]=e+s,c[10]=t+o,c[11]=r+l,{faces:u,vertices:c}},zr=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=new Float32Array(24);t[1]=t[2]=t[4]=t[6]=t[7]=t[9]=t[10]=t[11]=t[14]=t[18]=t[21]=t[23]=.5*-e,t[0]=t[3]=t[5]=t[8]=t[12]=t[13]=t[15]=t[16]=t[17]=t[19]=t[20]=t[22]=.5*e;var r=new Float32Array(28);r[0]=r[6]=r[8]=r[10]=r[11]=r[13]=r[16]=r[23]=r[25]=.5,r[1]=r[3]=1,r[2]=r[4]=r[9]=r[12]=r[14]=r[15]=r[18]=.25,r[5]=r[7]=r[21]=r[24]=r[26]=r[27]=.75,r[17]=r[19]=r[20]=r[22]=0;var i=new Uint32Array(24),n=new Uint32Array(24);return i[0]=i[8]=i[21]=n[0]=0,i[1]=i[11]=i[12]=n[1]=1,i[2]=i[15]=i[16]=n[2]=n[15]=n[16]=2,i[3]=i[19]=i[22]=n[3]=n[19]=n[22]=3,i[4]=i[9]=i[20]=n[4]=n[9]=4,i[7]=i[10]=i[13]=n[5]=n[18]=n[23]=5,i[6]=i[14]=i[17]=n[6]=n[14]=n[17]=6,i[5]=i[18]=i[23]=n[7]=n[10]=7,n[8]=8,n[11]=9,n[12]=10,n[13]=11,n[20]=12,n[21]=13,{vertices:t,uv:r,faces:i,facesUV:n}},Xr=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:.5,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.5,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:64,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:64,a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],s=!(arguments.length>6&&void 0!==arguments[6])||arguments[6],l=a&&0===e,u=s&&0===t,c=.5*r,h=(n+1)*i,d=n*i;a&&(h+=1,d+=i),s&&(h+=1,d+=i),(l||u)&&(h-=i,d-=i);var f,_=new Float32Array(3*h),p=new Uint32Array(4*d),g=0,m=0,v=0,y=0,b=l?1:0,T=u?n-1:n;for(v=b;v<=T;v++){var M=v/n,S=M*(t-e)+e;for(y=0;y0&&void 0!==arguments[0]?arguments[0]:.5,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.1,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2*Math.PI,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:32,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:128,a=2*Math.PI-r<.01,s=i*n,l=s;a||(s+=2,l+=i);var u=a?n:n-1,c=new Float32Array(3*s),h=new Uint32Array(4*l),d=0,f=0,_=0,p=0;for(_=0;_0&&void 0!==arguments[0]?arguments[0]:-.5,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-.5,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:0,l=arguments.length>8&&void 0!==arguments[8]?arguments[8]:1,u=arguments.length>9&&void 0!==arguments[9]?arguments[9]:20,c=arguments.length>10&&void 0!==arguments[10]?arguments[10]:u;u+=2,c+=2;var h=new Float32Array(2*(u+c)*3),d=0,f=0,_=i/(u-1),p=n/(u-1),g=a/(u-1),m=e+i+s,v=t+n+o,y=r+a+l;for(d=0;d1&&void 0!==arguments[1]?arguments[1]:.5,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.2,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:4,s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1,o=Yr(null,Xr(t,t,r,a,s)),l=Yr(null,Xr(0,t*i,r*n,a,s));l.getMatrix()[13]=.5*r;var u={vertices:null,faces:null};return Gr.mergeArrays([o,l],u),Yr(e,u)},Wr.createLine2D=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,a=Yr(e,{vertices:new Float32Array([t,r,0,i,n,0])});return e&&(a.setMode(e.LINES),a.setUseDrawArrays(!0),a.setAlreadyDrawArrays()),a};const Jr=Wr;function Qr(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:-1;return{_finalMatrix:l.Ue(),_baseMatrix:l.Ue(),_color:i.Ue(),_colorSelect:i.al(1,1,0),_drawGeo:null,_pickGeo:null,_isSelected:!1,_type:e,_nbAxis:t,_lastInter:[0,0,0],updateMatrix:function(){l.JG(this._drawGeo.getMatrix(),this._finalMatrix),l.JG(this._pickGeo.getMatrix(),this._finalMatrix)},updateFinalMatrix:function(e){l.dC(this._finalMatrix,e,this._baseMatrix)}}},oi=1024,li=2048,ui=4096,ci=8192,hi=15360;const di=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._main=t,this._gl=t._gl,this._activatedType=e.TRANS_XYZ|e.ROT_XYZ|e.PLANE_XYZ|e.SCALE_XYZW|e.ROT_W,this._transX=si(e.TRANS_X,0),this._transY=si(e.TRANS_Y,1),this._transZ=si(e.TRANS_Z,2),this._planeX=si(e.PLANE_X,0),this._planeY=si(e.PLANE_Y,1),this._planeZ=si(e.PLANE_Z,2),this._scaleX=si(e.SCALE_X,0),this._scaleY=si(e.SCALE_Y,1),this._scaleZ=si(e.SCALE_Z,2),this._scaleW=si(e.SCALE_W),this._rotX=si(e.ROT_X,0),this._rotY=si(e.ROT_Y,1),this._rotZ=si(e.ROT_Z,2),this._rotW=si(e.ROT_W),this._lineHelper=Jr.createLine2D(this._gl),this._lineHelper.setShaderType(s.Z.Shader.FLAT),this._lastDistToEye=0,this._isEditing=!1,this._selected=null,this._pickables=[],this._editLineOrigin=[0,0,0],this._editLineDirection=[0,0,0],this._editOffset=[0,0,0],this._editLocal=[],this._editTrans=l.Ue(),this._editScaleRot=[],this._editLocalInv=[],this._editTransInv=l.Ue(),this._editScaleRotInv=[],this._initTranslate(),this._initRotate(),this._initScale(),this._initPickables()}var t,r,n;return t=e,n=[{key:"TRANS_X",get:function(){return 1}},{key:"TRANS_Y",get:function(){return 2}},{key:"TRANS_Z",get:function(){return 4}},{key:"ROT_X",get:function(){return 8}},{key:"ROT_Y",get:function(){return 16}},{key:"ROT_Z",get:function(){return 32}},{key:"ROT_W",get:function(){return 64}},{key:"PLANE_X",get:function(){return 128}},{key:"PLANE_Y",get:function(){return 256}},{key:"PLANE_Z",get:function(){return 512}},{key:"SCALE_X",get:function(){return oi}},{key:"SCALE_Y",get:function(){return li}},{key:"SCALE_Z",get:function(){return ui}},{key:"SCALE_W",get:function(){return ci}},{key:"TRANS_XYZ",get:function(){return 7}},{key:"ROT_XYZ",get:function(){return 56}},{key:"PLANE_XYZ",get:function(){return 896}},{key:"SCALE_XYZW",get:function(){return hi}}],(r=[{key:"setActivatedType",value:function(e){this._activatedType=e,this._initPickables()}},{key:"_initPickables",value:function(){var e=this._pickables;e.length=0;var t=this._activatedType;1&t&&e.push(this._transX._pickGeo),2&t&&e.push(this._transY._pickGeo),4&t&&e.push(this._transZ._pickGeo),128&t&&e.push(this._planeX._pickGeo),256&t&&e.push(this._planeY._pickGeo),512&t&&e.push(this._planeZ._pickGeo),8&t&&e.push(this._rotX._pickGeo),16&t&&e.push(this._rotY._pickGeo),32&t&&e.push(this._rotZ._pickGeo),t&oi&&e.push(this._scaleX._pickGeo),t&li&&e.push(this._scaleY._pickGeo),t&ui&&e.push(this._scaleZ._pickGeo),t&ci&&e.push(this._scaleW._pickGeo)}},{key:"_createArrow",value:function(e,t,r){var n=e._baseMatrix;l.U1(n,n,.5*Math.PI,t),l.Iu(n,n,[0,1.25,0]),i.JG(e._color,r),e._pickGeo=Jr.createArrow(this._gl,.1,2.5,6*.4),e._pickGeo._gizmo=e,e._drawGeo=Jr.createArrow(this._gl,ni,2.5,6,.25),e._drawGeo.setShaderType(s.Z.Shader.FLAT)}},{key:"_createPlane",value:function(e,t,r,n,a,o,l,u){i.JG(e._color,t),e._pickGeo=Jr.createPlane(this._gl,0,0,0,r,n,a,o,l,u),e._pickGeo._gizmo=e,e._drawGeo=Jr.createPlane(this._gl,0,0,0,r,n,a,o,l,u),e._drawGeo.setShaderType(s.Z.Shader.FLAT)}},{key:"_initTranslate",value:function(){var e=[0,0,0];this._createArrow(this._transX,i.t8(e,0,0,-1),$r),this._createArrow(this._transY,i.t8(e,0,1,0),ei),this._createArrow(this._transZ,i.t8(e,1,0,0),ti);var t=.5;this._createPlane(this._planeX,$r,0,t,0,0,0,t),this._createPlane(this._planeY,ei,t,0,0,0,0,t),this._createPlane(this._planeZ,ti,t,0,0,0,t,0)}},{key:"_createCircle",value:function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1.5,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1;i.JG(e._color,r),e._pickGeo=Jr.createTorus(this._gl,n,.1*a,t,6,64),e._pickGeo._gizmo=e,e._drawGeo=Jr.createTorus(this._gl,n,ni*a,t,6,64),e._drawGeo.setShaderType(s.Z.Shader.FLAT)}},{key:"_initRotate",value:function(){this._createCircle(this._rotX,Math.PI,$r),this._createCircle(this._rotY,Math.PI,ei),this._createCircle(this._rotZ,Math.PI,ti),this._createCircle(this._rotW,2*Math.PI,ri)}},{key:"_createCube",value:function(e,t,r){var n=e._baseMatrix;l.U1(n,n,.5*Math.PI,t),l.Iu(n,n,[0,1.5,0]),i.JG(e._color,r),e._pickGeo=Jr.createCube(this._gl,.42),e._pickGeo._gizmo=e,e._drawGeo=Jr.createCube(this._gl,.35),e._drawGeo.setShaderType(s.Z.Shader.FLAT)}},{key:"_initScale",value:function(){var e=[0,0,0];this._createCube(this._scaleX,i.t8(e,0,0,-1),$r),this._createCube(this._scaleY,i.t8(e,0,1,0),ei),this._createCube(this._scaleZ,i.t8(e,1,0,0),ti),this._createCircle(this._scaleW,2*Math.PI,ii,1.9500000000000002,2)}},{key:"_updateArcRotation",value:function(e){ai[0]=e[2],ai[1]=0,ai[2]=-e[0],ai[3]=1+e[1],et(ai,ai),l.en(this._rotW._baseMatrix,ai),l.en(this._scaleW._baseMatrix,ai),function(e,t,r){r*=.5;var i=t[0],n=t[1],a=t[2],s=t[3],o=Math.sin(r),l=Math.cos(r);e[0]=i*l+n*o,e[1]=n*l-i*o,e[2]=a*l+s*o,e[3]=s*l-a*o}(ai,He(ai),.5*Math.PI),Je(ai,ai,Math.atan2(-e[1],-e[2])),l.en(this._rotX._baseMatrix,ai),Je(ai,He(ai),Math.atan2(-e[0],-e[2])),l.en(this._rotY._baseMatrix,ai),qe(ai,He(ai),.5*Math.PI),Je(ai,ai,Math.atan2(-e[0],e[1])),l.en(this._rotZ._baseMatrix,ai)}},{key:"_computeCenterGizmo",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[0,0,0],t=this._main.getSelectedMeshes(),r=[0,0,0],n=[0,0,0],a=0;a0&&(this._main.getStateManager().getCurrentState().squash=!0);var r=this.getUnmaskedVertices();this._main.getStateManager().pushVertices(r),this.applyEditMatrix(r),0!==r.length&&this.updateMeshBuffers()}this._forceToolMesh=null}}},{key:"applyEditMatrix",value:function(e){for(var t=this.getMesh(),r=t.getEditMatrix(),n=t.getMaterials(),a=t.getVertices(),s=[0,0,0],o=0,u=e.length;oT.radius+o)){var E=this._distanceToFeature(g,m,v,t[b],T.positions);Eo)){var A=c*(1-y/o);i[p]+=n[p]*A,i[p+1]+=n[p+1]*A,i[p+2]+=n[p+2]*A,f.push(_)}}if(f.length){var C=new Uint32Array(f),w=r.getFacesFromVertices?r.getFacesFromVertices(C):null,R=this._main.getStateManager&&this._main.getStateManager();R&&R.pushVertices&&R.pushVertices(C),R&&R.pushFaces&&w&&R.pushFaces(w),r.updateGeometry(w||void 0,C),r.updateGeometryBuffers&&r.updateGeometryBuffers(),this._debugLog("applySolidFeature:done",{featureId:e.id,type:e.type,affected:f.length,influence:o,amount:c}),this._main.render()}else this._debugLog("applySolidFeature:noAffected",{feature:e,influence:o})}else this._debugLog("applySolidFeature:noGeometry",{})}else this._debugLog("applySolidFeature:noMesh",{meshId:t[0].meshId})}else this._debugLog("applySolidFeature:missingSources",{feature:e})}},{key:"_getFeaturesByIds",value:function(e){for(var t=[],r=this._features,i=0,n=r.length;io&&(o=d)}return{center:[i,n,a],radius:o,positions:r}}},{key:"_distanceToFeature",value:function(e,t,r,i,n){if(!n||0===n.length)return 1/0;if(1===n.length){var a=e-n[0][0],s=t-n[0][1],o=r-n[0][2];return Math.sqrt(a*a+s*s+o*o)}for(var l=1/0,u=n.length,c=i.closed?u:u-1,h=0;h0?(l*a+u*s+c*o)/h:0;d=Math.max(0,Math.min(1,d));var f=e-(i[0]+a*d),_=t-(i[1]+s*d),p=r-(i[2]+o*d);return Math.sqrt(f*f+_*_+p*p)}},{key:"_estimateMeshRadius",value:function(e){var t=e.getVertices(),r=e.getNbVertices?e.getNbVertices():t.length/3;if(!t||0===r)return 1;for(var i=1/0,n=1/0,a=1/0,s=-1/0,o=-1/0,l=-1/0,u=0;us&&(s=h),d>o&&(o=d),f>l&&(l=f)}var _=s-i,p=o-n,g=l-a;return.5*Math.sqrt(_*_+p*p+g*g)}},{key:"_debugLog",value:function(e,t){"undefined"!=typeof window&&void 0===window.DEBUG_PADS_TRIMS&&(window.DEBUG_PADS_TRIMS=!0),"undefined"!=typeof console&&console.log("[Pen]",e,t)}}])&&Ei(t.prototype,r),s}(Te);Ri.MODE_POINTS=0,Ri.MODE_STROKE=1,Ri.COLOR_DEFAULT=[.2,.8,.2],Ri.COLOR_SELECTED=[1,.8,.2],Ri.POINT_SIZE=6,Ri.POINT_SIZE_ACTIVE=8;const xi=Ri;var Pi=[];Pi[s.Z.Tools.BRUSH]=Ie,Pi[s.Z.Tools.INFLATE]=Be,Pi[s.Z.Tools.TWIST]=ot,Pi[s.Z.Tools.SMOOTH]=ft,Pi[s.Z.Tools.FLATTEN]=Ce,Pi[s.Z.Tools.PINCH]=yt,Pi[s.Z.Tools.CREASE]=Et,Pi[s.Z.Tools.DRAG]=Pt,Pi[s.Z.Tools.PAINT]=Nt,Pi[s.Z.Tools.MOVE]=jt,Pi[s.Z.Tools.MASKING]=dr,Pi[s.Z.Tools.LOCALSCALE]=vr,Pi[s.Z.Tools.TRANSFORM]=vi,Pi[s.Z.Tools.PEN]=xi,Pi[s.Z.Tools.BRUSH].uiName="sculptBrush",Pi[s.Z.Tools.INFLATE].uiName="sculptInflate",Pi[s.Z.Tools.TWIST].uiName="sculptTwist",Pi[s.Z.Tools.SMOOTH].uiName="sculptSmooth",Pi[s.Z.Tools.FLATTEN].uiName="sculptFlatten",Pi[s.Z.Tools.PINCH].uiName="sculptPinch",Pi[s.Z.Tools.CREASE].uiName="sculptCrease",Pi[s.Z.Tools.DRAG].uiName="sculptDrag",Pi[s.Z.Tools.PAINT].uiName="sculptPaint",Pi[s.Z.Tools.MOVE].uiName="sculptMove",Pi[s.Z.Tools.MASKING].uiName="sculptMasking",Pi[s.Z.Tools.LOCALSCALE].uiName="sculptLocalScale",Pi[s.Z.Tools.TRANSFORM].uiName="sculptTransform",Pi[s.Z.Tools.PEN].uiName="sculptPen";const Di=Pi;function Ii(e,t){for(var r=0;r=3||Li.LINEAR){if(-1!==p)return g;h[i]=g+1,l[m]=.5*(n[d]+n[f]),l[m+1]=.5*(n[d+1]+n[f+1]),l[m+2]=.5*(n[d+2]+n[f+2]),u[m]=.5*(a[d]+a[f]),u[m+1]=.5*(a[d+1]+a[f+1]),u[m+2]=.5*(a[d+2]+a[f+2]),c[m]=.5*(s[d]+s[f]),c[m+1]=.5*(s[d+1]+s[f+1]),c[m+2]=.5*(s[d+2]+s[f+2])}else-1===p?(h[i]=g+1,l[m]=.125*n[_]+.375*(n[d]+n[f]),l[m+1]=.125*n[_+1]+.375*(n[d+1]+n[f+1]),l[m+2]=.125*n[_+2]+.375*(n[d+2]+n[f+2]),u[m]=.125*a[_]+.375*(a[d]+a[f]),u[m+1]=.125*a[_+1]+.375*(a[d+1]+a[f+1]),u[m+2]=.125*a[_+2]+.375*(a[d+2]+a[f+2]),c[m]=.125*s[_]+.375*(s[d]+s[f]),c[m+1]=.125*s[_+1]+.375*(s[d+1]+s[f+1]),c[m+2]=.125*s[_+2]+.375*(s[d+2]+s[f+2])):(l[m]+=.125*n[_],l[m+1]+=.125*n[_+1],l[m+2]+=.125*n[_+2],u[m]+=.125*a[_],u[m+1]+=.125*a[_+1],u[m+2]+=.125*a[_+2],c[m]+=.125*s[_],c[m+1]+=.125*s[_+1],c[m+2]+=.125*s[_+2]);return g}},{key:"computeQuadEdgeVertex",value:function(e,t,r,i,n){var a=this._vAr,s=this._cAr,o=this._mAr,l=this._eAr,u=this._vArOut,c=this._cArOut,h=this._mArOut,d=this._tagEdges,f=3*e,_=3*t,p=3*r,g=3*i,m=d[n]-1,v=-1===m?this._nbVertices++:m,y=3*v,b=l[n];if(1===b||b>=3||Li.LINEAR){if(-1!==m)return v;d[n]=v+1,u[y]=.5*(a[f]+a[_]),u[y+1]=.5*(a[f+1]+a[_+1]),u[y+2]=.5*(a[f+2]+a[_+2]),c[y]=.5*(s[f]+s[_]),c[y+1]=.5*(s[f+1]+s[_+1]),c[y+2]=.5*(s[f+2]+s[_+2]),h[y]=.5*(o[f]+o[_]),h[y+1]=.5*(o[f+1]+o[_+1]),h[y+2]=.5*(o[f+2]+o[_+2])}else-1===m?(d[n]=v+1,u[y]=.0625*(a[p]+a[g])+.375*(a[f]+a[_]),u[y+1]=.0625*(a[p+1]+a[g+1])+.375*(a[f+1]+a[_+1]),u[y+2]=.0625*(a[p+2]+a[g+2])+.375*(a[f+2]+a[_+2]),c[y]=.0625*(s[p]+s[g])+.375*(s[f]+s[_]),c[y+1]=.0625*(s[p+1]+s[g+1])+.375*(s[f+1]+s[_+1]),c[y+2]=.0625*(s[p+2]+s[g+2])+.375*(s[f+2]+s[_+2]),h[y]=.0625*(o[p]+o[g])+.375*(o[f]+o[_]),h[y+1]=.0625*(o[p+1]+o[g+1])+.375*(o[f+1]+o[_+1]),h[y+2]=.0625*(o[p+2]+o[g+2])+.375*(o[f+2]+o[_+2])):(u[y]+=.0625*(a[p]+a[g]),u[y+1]+=.0625*(a[p+1]+a[g+1]),u[y+2]+=.0625*(a[p+2]+a[g+2]),c[y]+=.0625*(s[p]+s[g]),c[y+1]+=.0625*(s[p+1]+s[g+1]),c[y+2]+=.0625*(s[p+2]+s[g+2]),h[y]+=.0625*(o[p]+o[g]),h[y+1]+=.0625*(o[p+1]+o[g+1]),h[y+2]+=.0625*(o[p+2]+o[g+2]));return v}},{key:"computeFaceVertex",value:function(e,t,r,i){var n=3*e,a=3*t,s=3*r,o=3*i,l=this._vAr,u=this._cAr,c=this._mAr,h=this._vArOut,d=this._cArOut,f=this._mArOut,_=this._nbVertices++,p=3*_;return h[p]=.25*(l[n]+l[a]+l[s]+l[o]),h[p+1]=.25*(l[n+1]+l[a+1]+l[s+1]+l[o+1]),h[p+2]=.25*(l[n+2]+l[a+2]+l[s+2]+l[o+2]),d[p]=.25*(u[n]+u[a]+u[s]+u[o]),d[p+1]=.25*(u[n+1]+u[a+1]+u[s+1]+u[o+1]),d[p+2]=.25*(u[n+2]+u[a+2]+u[s+2]+u[o+2]),f[p]=.25*(c[n]+c[a]+c[s]+c[o]),f[p+1]=.25*(c[n+1]+c[a+1]+c[s+1]+c[o+1]),f[p+2]=.25*(c[n+2]+c[a+2]+c[s+2]+c[o+2]),_}}])&&Oi(t.prototype,r),e}(),Ni=function(e,t,r,i){var n=e.getNbVertices();r.set(e.getColors().subarray(0,3*n)),i.set(e.getMaterials().subarray(0,3*n));for(var a=e.getVertices(),s=e.getFaces(),l=e.getEdges(),u=e.getFaceEdges(),c=e.getVerticesOnEdge(),h=e.getVerticesRingVertStartCount(),d=e.getVerticesRingVert(),f=e.getVerticesRingFaceStartCount(),_=e.getVerticesRingFace(),p=e.hasOnlyTriangles(),g=0;g0&&(n[2*h]=_+f)}c.set(u),c.set(u.subarray(2*d),2*(d+f));var p=f+e.getNbTexCoords(),g=e.getFaceEdges(),m=new Uint32Array(r.length),v=new Uint32Array(r.length);for(d=a.length,h=0;hM?T:M,A=T=l&&(p+=u),g>=l&&(g+=u),m>=l&&(m+=u),v!==o.Z.TRI_INDEX&&v>=l&&(v+=u);var y=s[_],b=r[y]-1;b<0?b=c[2*(-b-1)]:c[2*b]>0&&(r[y]=-b);var T=r[y=s[_+1]]-1;T<0?T=c[2*(-T-1)]:c[2*T]>0&&(r[y]=-T);var M=r[y=s[_+2]]-1;if(M<0?M=c[2*(-M-1)]:c[2*M]>0&&(r[y]=-M),_*=4,v!==o.Z.TRI_INDEX){var S=r[y=s[4*d+3]]-1;S<0?S=c[2*(-S-1)]:c[2*S]>0&&(r[y]=-S),a[_+1]=a[_+4]=b,a[_+6]=a[_+9]=T,a[_+11]=a[_+14]=M,a[_+3]=a[_+12]=S,a[_+2]=a[_+7]=a[_+8]=a[_+13]=n[_+2],a[_]=p,a[_+5]=g,a[_+10]=m,a[_+15]=v;var k=2*n[_+2];h[k]=.25*(h[2*p]+h[2*g]+h[2*m]+h[2*v]),h[k+1]=.25*(h[2*p+1]+h[2*g+1]+h[2*m+1]+h[2*v+1])}else a[_]=a[_+5]=a[_+8]=b,a[_+1]=a[_+10]=a[_+12]=T,a[_+2]=a[_+6]=a[_+14]=M,a[_+3]=a[_+7]=a[_+11]=a[_+15]=o.Z.TRI_INDEX,a[_+4]=p,a[_+9]=g,a[_+13]=m}t.setFacesTexCoord(a)}(e,t,r)}(e,t,i),t.allocateArrays()},Li.partialSubdivision=function(e,t,r,i){Ni(e,t,r,i),Bi(e,t,r,i)};const Ui=Li;var Zi={importOBJ:function(e,t){for(var r=[],i=[],n=[],a=[],s=[],l=[],u=[],c=[],h=[],d=0,f=0,_=0,p=0,g=e.split("\n"),m=[],v=1/255,y=g.length,b=0;b0&&h.push(L,V,N,O?B:o.Z.TRI_INDEX)}}else if("#"===S){if("M"!==T[1])continue;if(T.startsWith("#MRGB "))for(var j=(m=T.split(/\s+/))[1],z=2,X=j.length;z>16)*v,(K>>8&255)*v,(255&K)*v)}else if(T.startsWith("#MAT "))for(var H=(m=T.split(/\s+/))[1],Y=0,q=H.length;Y>16)*v,(J>>8&255)*v,(255&J)*v)}}else T.startsWith("o ")&&(r.length>0&&(Zi.initMeshOBJ(r[r.length-1],i,c,n,s,u,h,a,l),d=_,f=p),r.push(new sr(t)))}}return 0===r.length&&(r[0]=new sr(t)),Zi.initMeshOBJ(r[r.length-1],i,c,n,s,u,h,a,l),r},initMeshOBJ:function(e,t,r,i,n,a,s,o,l){e.setVertices(new Float32Array(t)),e.setFaces(new Uint32Array(r)),o.length===t.length?e.setColors(new Float32Array(o)):i.length===t.length&&e.setColors(new Float32Array(i)),l.length===t.length?e.setMaterials(new Float32Array(l)):n.length===t.length&&e.setMaterials(new Float32Array(n)),a.length>0&&s.length===r.length&&e.initTexCoordsDataFromOBJData(a,s),t.length=r.length=0,o.length=i.length=0,l.length=n.length=0,a.length=s.length=0}};const Gi=Zi;var Wi={VERSION:3,exportSGL:function(e,t){var r,i=e.length,n=4*(9+31*i),a=0;for(a=0;a0&&o.set(r.getColors().subarray(0,3*h),u),u+=3*d;var f=r.getMaterials()?h:0;l[u++]=f,f>0&&o.set(r.getMaterials().subarray(0,3*h),u),u+=3*f;var _=r.getNbFaces();l[u++]=_,l.set(r.getFaces().subarray(0,4*_),u),u+=4*_;var p=r.hasUV(),g=r.getNbTexCoords();l[u++]=p?g:0,p&&(o.set(r.getTexCoords().subarray(0,2*g),u),u+=2*g),l[u++]=p?_:0,p&&(l.set(r.getFacesTexCoord().subarray(0,4*_),u),u+=4*_)}var m=new DataView(s,0,4*u);return new Blob([m])}};const ji=Wi;var zi={},Xi=function(e){for(var t=new Uint32Array(e),r=t.length/4,i=0;iji.VERSION)return[];if(o>=2){r._showGrid=n[s++],x.showSymmetryLine=n[s++],r._showContour=n[s++];var l=r.getCamera();l.setProjectionType(n[s++]),l.setMode(n[s++]),l.setFov(i[s++]),l.setUsePivot(n[s++])}for(var u=n[s++],c=new Array(u),h=0;h=2){var f=d.getRenderData();f._shaderType=n[s++],f._matcap=n[s++],f._showWireframe=n[s++],f._flatShading=n[s++],f._alpha=i[s++]}d.getCenter().set(i.subarray(s,s+3)),s+=3,d.getMatrix().set(i.subarray(s,s+16)),s+=16,s++;var _=n[s++];d.setVertices(i.subarray(s,s+3*_)),s+=3*_,(_=n[s++])>0&&d.setColors(i.subarray(s,s+3*_)),s+=3*_,(_=n[s++])>0&&d.setMaterials(i.subarray(s,s+3*_)),s+=3*_,_=n[s++],o<=2?d.setFaces(Xi(a.subarray(s,s+4*_))):d.setFaces(n.subarray(s,s+4*_)),s+=4*_;var p=null;(_=n[s++])&&(p=i.subarray(s,s+2*_)),s+=2*_;var g=null;(_=n[s++])&&(g=o<=2?Xi(a.subarray(s,s+4*_)):n.subarray(s,s+4*_)),s+=4*_,p&&g&&d.initTexCoordsDataFromOBJData(p,g)}return c};const Ki=zi;var Hi={},Yi=function(e){switch(e){case"uchar":case"char":case"int8":case"uint8":return 1;case"ushort":case"short":case"int16":case"uint16":return 2;case"uint":case"int":case"float":case"int32":case"uint32":case"float32":return 4;case"double":case"float64":return 8;default:return 0}},qi=function(e,t){var r=t?1/255:1;switch(e){case"char":case"uchar":case"short":case"ushort":case"int":case"uint":case"int8":case"uint8":case"int16":case"uint16":case"int32":case"uint32":return function(e){return parseInt(e,10)*r};case"float":case"double":case"float32":case"float64":return parseFloat;default:return function(e){return e}}},Ji=function(e,t,r){var i=r?1/255:1,n=t.offsetOctet;switch(t.type){case"int8":case"char":return function(t){return e.getInt8(t+n)*i};case"uint8":case"uchar":return function(t){return e.getUint8(t+n)*i};case"int16":case"short":return function(t){return e.getInt16(t+n,!0)*i};case"uint16":case"ushort":return function(t){return e.getUint16(t+n,!0)*i};case"int32":case"int":return function(t){return e.getInt32(t+n,!0)*i};case"uint32":case"uint":return function(t){return e.getUint32(t+n,!0)*i};case"float32":case"float":return function(t){return e.getFloat32(t+n,!0)};case"float64":case"double":return function(t){return e.getFloat64(t+n,!0)}}},Qi=function(e,t){var r=e.properties,i=e.objProperties={};e.offsetOctet=0;for(var n=0,a=r.length;n>5&31)*f,m=(_>>10&31)*f):v&&(p=(_>>10&31)*f,g=(_>>5&31)*f,m=(31&_)*f),o[u]=o[u+3]=o[u+6]=p,o[u+1]=o[u+4]=o[u+7]=g,o[u+2]=o[u+5]=o[u+8]=m}return[new Float32Array(s.buffer),o]}};const sn=an,on={importOBJ:Gi.importOBJ,importSGL:Ki.importSGL,importPLY:nn.importPLY,importSTL:sn.importSTL};var ln=r(88),un=r.n(ln);function cn(e,t){for(var r=0;r1&&void 0!==arguments[1])||arguments[1],r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i="s 0\n",n=[1,1],a=0,s=e.length;a>8}return new Blob([d])};const An=kn;var Cn=r(751),wn=r.n(Cn);function Rn(e){return(Rn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var xn={exportSketchfab:function(e,t){if(window.sketchfabOAuth2Config){var r=new XMLHttpRequest;return new(wn())(window.sketchfabOAuth2Config).connect().then((function(i){!function(e,t,r,i){e.open("POST","https://api.sketchfab.com/v2/models",!0),e.onprogress=function(e){if(e.lengthComputable&&e.total){var t=Math.round(100*e.loaded/e.total);i.setVisibility("Sketchfab upload: "+t+"%")}};var n=function(){i.setMessage("")};e.onerror=n,e.onabort=n,e.onload=function(){n();var t=JSON.parse(e.responseText),i=t.uid;i?(window.prompt((0,V.Z)("sketchfabUploadProcessing"),"https://sketchfab.com/models/"+i),function e(){var t=new XMLHttpRequest,n="https://api.sketchfab.com/v2/models/"+i+"/status";"object"===Rn(r)&&r.hasOwnProperty("token_type")&&"Bearer"===r.token_type?(t.open("GET",n,!0),t.setRequestHeader("Authorization","Bearer "+r.access_token)):t.open("GET",n+"?token="+r,!0),t.onload=function(){var r=JSON.parse(t.responseText);"FAILED"===r.processing?window.alert((0,V.Z)("sketchfabUploadError",r.warning.generic.join("\n"))):"SUCCEEDED"===r.processing?window.prompt((0,V.Z)("sketchfabUploadSuccess"),"https://sketchfab.com/models/"+i):window.setTimeout(e,5e3)},t.send()}()):window.alert((0,V.Z)("sketchfabUploadError",t.detail))},i.setMessage("Creating zip..."),mn.zip.useWebWorkers=!0,mn.zip.workerScriptsPath="worker/",mn.zip.createWriter(new mn.zip.BlobWriter("application/zip"),(function(n){var a=Sn.exportBinaryPLY(t.getMeshes(),{swapXY:!0});n.add("yourMesh.ply",new mn.zip.BlobReader(a),(function(){n.close(xn.exportFileSketchfab.bind(this,r,e,i))}))}),onerror)}(r,e,i,t)})).catch((function(e){console.error(e)})),r}},exportFileSketchfab:function(e,t,r,i){if(!t.isAborted){var n=new FormData;n.append("modelFile",i,"sculptglModel.zip"),n.append("name","My model"),n.append("tags","sculptgl"),"object"===Rn(e)&&e.hasOwnProperty("token_type")&&"Bearer"===e.token_type?t.setRequestHeader("Authorization","Bearer "+e.access_token):n.append("token",e),r.setMessage("Sketchfab upload..."),t.send(n)}}};const Pn=xn;var Dn={exportSculpteo:function(e,t){var r=new XMLHttpRequest;r.open("POST","uploadSculpteo.php",!0),r.onprogress=function(e){if(e.lengthComputable&&e.total){var r=Math.round(100*e.loaded/e.total);t.setMessage("Sculpteo upload: "+r+"%")}};var i=function(){t.setMessage("")};r.onerror=i,r.onabort=i,r.onload=function(){if(i(),200===this.status){var e=r.responseText.match(/\/print\/(.+?)(?=")/);e&&window.open("https://www.sculpteo.com/en"+e[0],"_blank")}};var n=e.getMeshes(),a=e.computeBoundingBoxMeshes(n),s=e.computeRadiusFromBoundingBox(a),o=Sn.exportBinaryPLY(n,{swapXY:!0});return t.setMessage("Creating zip..."),mn.zip.useWebWorkers=!0,mn.zip.workerScriptsPath="worker/",mn.zip.createWriter(new mn.zip.BlobWriter("application/zip"),(function(e){e.add("yourMesh.ply",new mn.zip.BlobReader(o),(function(){e.close(Dn.exportFileSculpteo.bind(this,s,r,t))}))}),onerror),r},exportFileSculpteo:function(e,t,r,i){if(!t.isAborted){var n=new FormData;n.append("file",i),n.append("name","fromSculptgl"),n.append("scale",4/e),r.setMessage("Sculpteo upload..."),t.send(n)}}};const In=Dn;var Fn={exportMaterialise:function(e,t){var r=new XMLHttpRequest;r.open("POST","https://i.materialise.com/web-api/tool/20cc0fd6-3cef-4111-a201-0b87026d892c/model",!0),r.onprogress=function(e){if(e.lengthComputable&&e.total){var r=Math.round(100*e.loaded/e.total);t.setMessage("Materialise upload: "+r+"%")}};var i=function(){t.setMessage("")};r.onerror=i,r.onabort=i,r.onload=function(){if(i(),200===r.status){var e=JSON.parse(r.responseText);window.open("https://i.materialise.com/en/3dprint#modelId="+e.modelID,"_blank")}};var n=e.getMeshes(),a=e.computeBoundingBoxMeshes(n),s=e.computeRadiusFromBoundingBox(a),o=An.exportBinarySTL(n,{colorMagic:!0,swapXY:!0});return t.setMessage("Creating zip..."),mn.zip.useWebWorkers=!0,mn.zip.workerScriptsPath="worker/",mn.zip.createWriter(new mn.zip.BlobWriter("application/zip"),(function(e){e.add("yourMesh.stl",new mn.zip.BlobReader(o),(function(){e.close(Fn.exportFileMaterialise.bind(this,s,r,t))}))}),onerror),r},exportFileMaterialise:function(e,t,r,i){if(!t.isAborted){var n=new FormData;n.append("file",i,"yourMesh.zip"),r.setMessage("Materialise upload..."),t.send(n)}}};const On=Fn;var Ln={};Ln.exportOBJ=bn.exportOBJ,Ln.exportSGL=ji.exportSGL,Ln.exportAsciiPLY=Sn.exportAsciiPLY,Ln.exportBinaryPLY=Sn.exportBinaryPLY,Ln.exportAsciiSTL=An.exportAsciiSTL,Ln.exportBinarySTL=An.exportBinarySTL,Ln.exportSketchfab=Pn.exportSketchfab,Ln.exportSculpteo=In.exportSculpteo,Ln.exportMaterialise=On.exportMaterialise;const Vn=Ln;var Nn={_gl:null,_checkRTT:{},_webGLExtensions:{}};Nn.HALF_FLOAT=Nn.HALF_FLOAT_OES=36193,Nn.checkRTTSupport=function(e,t){var r=Nn._gl;if(void 0===r)return!1;var i=e+","+t;if(void 0!==Nn._checkRTT[i])return Nn._checkRTT[i];var n=r.createTexture();r.bindTexture(r.TEXTURE_2D,n),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,2,2,0,r.RGBA,e,null),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,t),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,t);var a=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,a),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,n,0);var s=Nn._checkRTT[i]=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.deleteTexture(n),r.deleteFramebuffer(a),r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),s},Nn.hasRTTLinearHalfFloat=function(){return Nn._webGLExtensions.OES_texture_half_float_linear&&Nn.checkRTTSupport(Nn.HALF_FLOAT,Nn._gl.LINEAR)},Nn.hasRTTLinearFloat=function(){return Nn._webGLExtensions.OES_texture_float_linear&&Nn.checkRTTSupport(Nn._gl.FLOAT,Nn._gl.LINEAR)},Nn.hasRTTHalfFloat=function(){return Nn._webGLExtensions.OES_texture_half_float&&Nn.checkRTTSupport(Nn.HALF_FLOAT,Nn._gl.NEAREST)},Nn.hasRTTFloat=function(){return Nn._webGLExtensions.OES_texture_float&&Nn.checkRTTSupport(Nn._gl.FLOAT,Nn._gl.NEAREST)},Nn.getWebGLExtension=function(e){return Nn._webGLExtensions[e]},Nn.getWebGLExtensions=function(){return Nn._webGLExtensions},Nn.initWebGLExtensions=function(e){Nn._gl=e;for(var t=e.getSupportedExtensions(),r=Nn._webGLExtensions,i=0,n=t.length;i1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.createRenderbuffer(),n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];Un(this,e),this._gl=t,this._texture=t.createTexture(),this._depth=i,this._framebuffer=t.createFramebuffer(),this._shaderType=r,this._invSize=new Float32Array(2),this._vertexBuffer=null,n&&Bn.hasRTTHalfFloat()?this._type=Bn.HALF_FLOAT_OES:n&&Bn.hasRTTFloat()?this._type=t.FLOAT:this._type=t.UNSIGNED_BYTE,this.setWrapRepeat(!1),this.setFilterNearest(!1),this.init()}var t,r;return t=e,(r=[{key:"getGL",value:function(){return this._gl}},{key:"getVertexBuffer",value:function(){return this._vertexBuffer}},{key:"getFramebuffer",value:function(){return this._framebuffer}},{key:"getTexture",value:function(){return this._texture}},{key:"getDepth",value:function(){return this._depth}},{key:"getInverseSize",value:function(){return this._invSize}},{key:"init",value:function(){var e=this._gl;Gn||(Gn=new g(e,e.ARRAY_BUFFER,e.STATIC_DRAW)).update(new Float32Array([-1,-1,4,-1,-1,4])),this._vertexBuffer=Gn}},{key:"setWrapRepeat",value:function(e){this._wrapRepeat=e}},{key:"setFilterNearest",value:function(e){this._filterNearest=e}},{key:"onResize",value:function(e,t){var r=this._gl;this._invSize[0]=1/e,this._invSize[1]=1/t,r.bindTexture(r.TEXTURE_2D,this._texture),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,e,t,0,r.RGBA,this._type,null);var i=this._filterNearest?r.NEAREST:r.LINEAR;r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,i),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,i);var n=this._wrapRepeat?r.REPEAT:r.CLAMP_TO_EDGE;r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,n),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,n),this._depth&&(r.bindRenderbuffer(r.RENDERBUFFER,this._depth),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,e,t)),r.bindFramebuffer(r.FRAMEBUFFER,this._framebuffer),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,this._texture,0),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_STENCIL_ATTACHMENT,r.RENDERBUFFER,this._depth),r.bindTexture(r.TEXTURE_2D,null)}},{key:"release",value:function(){this._texture&&this._gl.deleteTexture(this._texture),this.getVertexBuffer().release()}},{key:"render",value:function(e){de[this._shaderType].getOrCreate(this._gl).draw(this,e)}}])&&Zn(t.prototype,r),e}();function jn(e,t){for(var r=0;r0&&(console.log("[GuiFiles] Adding comparison image:",e.target.files[0].name),t._main.addComparisonImage(e.target.files[0]),e.target.value="")}),!1)}e?(console.log("[GuiFiles] Found comparison image input, clicking..."),e.value="",e.click()):console.error("[GuiFiles] Failed to create comparison image input element!")}},{key:"onTextureSize",value:function(e){this._texSize=1<0&&(e.set(a.subarray(0,3*l)),t.set(s.subarray(0,3*l)),r.set(o.subarray(0,3*l)));for(var u=l;u0;){var d=c[--h],f=a[2*d],_=f+a[2*d+1],p=0,g=++i;for(p=f;p<_;++p){var m=s[p];if(n[m]=g,1===r[m])return o.Z.TAG_FLAG=i,!1;r[m]=-1,n[m]=g}for(g=++i,p=f;p<_;++p){var v=s[p];if(0!==t[v]&&!l[v])return o.Z.TAG_FLAG=i,!1;for(var y=a[2*v],b=y+a[2*v+1],T=y;T=g-1)&&(n[M]=g,0===r[M])){for(var S=a[2*M],k=S+a[2*M+1],E=0,A=S;A=o.Z.TRI_INDEX-1?(d[E+2]=T,d[E]=o.Z.TRI_INDEX-1):d[E]===o.Z.TRI_INDEX?d[E+1]=T:(d[E+1]=d[E+2],d[E+2]=T):d[E+1]===S?d[E]=T:(d[E]=d[E+1],d[E+2]===S?d[E+1]=T:(d[E+1]=d[E+2],d[E+2]=T))}}else{if(v+y+b===-3){i[c++]=l;continue}1===v?s[n[f+1]]=_+1:1===y?s[n[f+2]]=p+1:1===b&&(s[n[f]]=g+1)}}for(u/=4,l=0;l=w||d[C+1]>=o.Z.TRI_INDEX||d[C+2]>=o.Z.TRI_INDEX)return!1}else{var R=4*A;d[C]=s[n[R]]-1,d[C+1]=s[n[R+1]]-1,d[C+2]=s[n[R+2]]-1}}return t.setFaces(d),!0}(e,t,i,n)&&(function(e,t,r){var i=0,n=new Uint32Array(e.getNbVertices());t.setVerticesMapping(n);var a=t.getFaces(),s=new Int32Array(e.getNbVertices()),l=0,u=4*t.getNbFaces();for(l=0;l=0){var C=4*A;g=d[C+1],m=d[C+2],v=d[C],y=o.Z.TRI_INDEX,b=o.Z.TRI_INDEX}else{b=-A-1;for(var w=4*l,R=n[a[w]],x=n[a[w+1]],P=n[a[w+2]],D=n[a[w+3]],I=_[2*b],F=I+4,O=I;O=h);++c);if(c===h){var d=t.getFaces(),f=d.length;for(c=0;c=0){var b,T,M=4*v;0===m?(b=n[M+1],T=n[M]):1===m?(b=n[M+2],T=n[M+1]):(b=n[M],T=n[M+2]);for(var S=s[2*g],k=S+s[2*g+1],E=S;E "+4*e;console.time(t);var r=this.getCurrentMesh(),i=new $n(r);return r.setVerticesMapping(void 0),Ui.fullSubdivision(r,i),i.initTopology(),this.pushMesh(i),this.initRender(),console.timeEnd(t),i}},{key:"computeReverse",value:function(){if(0!==this._sel)return this.getCurrentMesh();var e=this.getCurrentMesh(),t=new $n(e);return ra.computeReverse(e,t)?(t.initTopology(),this.unshiftMesh(t),this.initRender(),t):void 0}},{key:"lowerLevel",value:function(){return 0===this._sel?this._meshes[0]:(this._meshes[this._sel-1].lowerAnalysis(this.getCurrentMesh()),this.setSelection(this._sel-1),this.updateResolution(),this.getCurrentMesh())}},{key:"higherLevel",value:function(){return this._sel===this._meshes.length-1||(this._meshes[this._sel+1].higherSynthesis(this.getCurrentMesh()),this.setSelection(this._sel+1),this.updateResolution()),this.getCurrentMesh()}},{key:"updateResolution",value:function(){this.updateGeometry(),this.updateDuplicateColorsAndMaterials(),this.updateBuffers();var e=this._meshes[this.getLowIndexRender()];this._indexBuffer.update(e.getTriangles()),this._wireframeBuffer.update(e.getWireframe())}},{key:"selectResolution",value:function(e){for(;this._sel>e;)this.lowerLevel();for(;this._sel=0;){var t=this._meshes[e];if(!0===t.getEvenMapping())return e===this._sel?e:e+1;if(t.getNbTriangles()<5e5)return e;--e}return 0}},{key:"_renderLow",value:function(e){var t=this.getRenderData(),r=this._sel,i=this.getIndexBuffer();this.setSelection(this.getLowIndexRender()),t._indexBuffer=this._indexBuffer,aa(la(o.prototype),"render",this).call(this,e),t._indexBuffer=i,this.setSelection(r)}},{key:"_renderWireframeLow",value:function(e){var t=this.getRenderData(),r=this._sel,i=this.getWireframeBuffer();this.setSelection(this.getLowIndexRender()),t._wireframeBuffer=this._wireframeBuffer,aa(la(o.prototype),"renderWireframe",this).call(this,e),t._wireframeBuffer=i,this.setSelection(r)}},{key:"_canUseLowRender",value:function(e){return!(this.isUsingTexCoords()||this.isUsingDrawArrays()||o.RENDER_HINT===o.PICKING||o.RENDER_HINT===o.NONE||e.getMesh()===this&&o.RENDER_HINT!==o.CAMERA||this.getLowIndexRender()===this._sel)}},{key:"render",value:function(e){return this._canUseLowRender(e)?this._renderLow(e):aa(la(o.prototype),"render",this).call(this,e)}},{key:"renderWireframe",value:function(e){return this._canUseLowRender(e)?this._renderWireframeLow(e):aa(la(o.prototype),"renderWireframe",this).call(this,e)}}])&&na(t.prototype,r),i&&na(t,i),o}(Qt);ua.RENDER_HINT=0;const ca=ua;var ha,da,fa,_a,pa,ga={_mesh:null,_linear:!1,_verticesMap:new Map,_states:null,_center:[0,0,0],_radius2:0,_edgeMax2:0},ma=function(e,t,r,i,n){var a=ga._mesh,s=a.getVerticesRingVert(),l=a.getVerticesRingFace(),u=a.getFacePosInLeaf(),c=a.getFaceLeaf(),h=a.getFacesStateFlags(),d=a.getFaces(),f=4*e;d[f]=t,d[f+1]=n,d[f+2]=i,d[f+3]=o.Z.TRI_INDEX;var _=c[e],p=_._iFaces;s[n].push(i),s[i].push(n);var g=a.getNbTriangles();l[n].push(e,g),d[f=4*g]=n,d[f+1]=r,d[f+2]=i,d[f+3]=o.Z.TRI_INDEX,h[g]=o.Z.STATE_FLAG,c[g]=_,u[g]=p.length,l[i].push(g),o.Z.replaceElement(l[r],e,g),p.push(g),a.addNbFace(1)},va=function(e){for(var t=ga._mesh,r=t.getVerticesRingVert(),i=t.getFaces(),n=e.length,a=new Uint32Array(o.Z.getMemory(8*n),0,2*n),s=0,l=ga._verticesMap,u=0;u=1?0:Math.acos(W));K*=Math.sqrt(j*j+z*z+X*X),(G=B*B+U*U+Z*Z)>0&&(K/=Math.sqrt(G)),j*(R-L)+z*(x-V)+X*(P-N)<0&&(K=-K),a[T]=.5*(A+I)+B*K,a[T+1]=.5*(C+F)+U*K,a[T+2]=.5*(w+O)+Z*K}g[b]=o.Z.STATE_FLAG,f[b]=[t,r,i],_[b]=[e,M],o.Z.replaceElement(f[t],r,b),o.Z.replaceElement(f[r],t,b),n.addNbVertice(1),n.addNbFace(1)},ba=(ha=[0,0,0],da=[0,0,0],fa=[0,0,0],_a=tt.Z.triangleInsideSphere,pa=tt.Z.pointInsideTriangle,function(e,t){var r=ga._mesh,n=r.getVertices(),a=r.getFaces(),s=4*e,o=3*a[s],l=3*a[s+1],u=3*a[s+2];if(ha[0]=n[o],ha[1]=n[o+1],ha[2]=n[o+2],da[0]=n[l],da[1]=n[l+1],da[2]=n[l+2],fa[0]=n[u],fa[1]=n[u+1],fa[2]=n[u+2],t&&!_a(ga._center,ga._radius2,ha,da,fa)&&!pa(ga._center,ha,da,fa))return 0;var c=r.getMaterials(),h=c[o+2],d=c[l+2],f=c[u+2],_=i.nI(ha,da),p=i.nI(da,fa),g=i.nI(ha,fa);return _>p&&_>g?.5*(h+d)*_>ga._edgeMax2?1:0:p>g?.5*(d+f)*p>ga._edgeMax2?2:0:.5*(h+f)*g>ga._edgeMax2?3:0}),Ta=function(e){var t=ga._mesh,r=t.getNbVertices(),i=t.getNbTriangles();ga._verticesMap=new Map;var n=function(e){for(var t=e.length,r=o.Z.getMemory(5*t),i=new Uint32Array(r,0,t),n=new Uint8Array(r,4*t,t),a=0,s=0;s5&&(a=t.expandsFaces(a,3),(s=new Uint8Array(a.length)).set(n[1])),ga._states.pushVertices(t.getVerticesFromFaces(a)),ga._states.pushFaces(a),t.reAllocateArrays(s.length),function(e,t){for(var r=ga._mesh.getFaces(),i=e.length,n=0;n0;)t.reAllocateArrays(c.length),c=va(c);for(u=t.getNbTriangles()-y,h=p,(p=new Uint32Array(g+u)).set(h),l=0;l=3)return o.Z.removeElement(b,t),o.Z.removeElement(T,e),k.push(t),E.push(e),f[A=4*e]===i?f[A]=a:f[A+1]===i?f[A+1]=a:f[A+2]=a,f[A=4*t]===r?f[A]=n:f[A+1]===r?f[A+1]=n:f[A+2]=n,l.computeRingVertices(r),l.computeRingVertices(i),l.computeRingVertices(n),void l.computeRingVertices(a);var C=3*i,w=c[A=3*r]+c[C],R=c[A+1]+c[C+1],x=c[A+2]+c[C+2],P=w*w+R*R+x*x;0===P?w=1:(w*=P=1/Math.sqrt(P),R*=P,x*=P),c[A]=w,c[A+1]=R,c[A+2]=x,h[A]=.5*(h[A]+h[C]),h[A+1]=.5*(h[A+1]+h[C+1]),h[A+2]=.5*(h[A+2]+h[C+2]),d[A]=.5*(d[A]+d[C]),d[A+1]=.5*(d[A+1]+d[C+1]),d[A+2]=.5*(d[A+2]+d[C+2]),o.Z.removeElement(b,e),o.Z.removeElement(b,t),o.Z.removeElement(T,e),o.Z.removeElement(T,t),o.Z.removeElement(k,e),o.Z.removeElement(E,t);var D=T.length,I=0;for(I=0;I=0;--t)Ea(e[t]);var r=Sa._iVertsToDelete;for(o.Z.tidy(r),t=r.length-1;t>=0;--t)Aa(r[t])}(),function(e,t){var r=Sa._mesh,i=r.getFacesTagFlags(),n=r.getNbTriangles(),a=r.getFacesFromVertices(e),s=t,l=t.length;(t=new Uint32Array(l+a.length)).set(s),t.set(a,l);var u=++o.Z.TAG_FLAG;l=t.length;for(var c=new Uint32Array(o.Z.getMemory(4*l),0,l),h=0,d=0;d=n||i[f]!==u&&(i[f]=u,c[h++]=f)}return new Uint32Array(c.subarray(0,h))}(function(){for(var e=Sa._mesh,t=e.getVerticesTagFlags(),r=e.getNbVertices(),i=++o.Z.TAG_FLAG,n=Sa._iVertsDecimated,a=n.length,s=new Uint32Array(o.Z.getMemory(4*a),0,a),l=0,u=0;u=r||t[c]!==i&&(t[c]=i,s[l++]=c)}return new Uint32Array(s.subarray(0,l))}(),m)}};const Pa=xa;function Da(e){return(Da="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ia(e,t){for(var r=0;r=t)return e.subarray(0,2*t);var r=new e.constructor(2*t);return r.set(e),r}},{key:"reAllocateArrays",value:function(e){var t=this._meshData,r=this._facesStateFlags.length,i=this.getNbTriangles(),n=i+e;(r4*n)&&(this._facesStateFlags=this.resizeArray(this._facesStateFlags,n),this.getShowWireframe()&&(this._wireframe=this.resizeArray(this._wireframe,6*n)),t._facesABCD=this.resizeArray(t._facesABCD,4*n),t._trianglesABC=this.resizeArray(t._trianglesABC,3*n),t._faceBoxes=this.resizeArray(t._faceBoxes,6*n),t._faceNormalsXYZ=this.resizeArray(t._faceNormalsXYZ,3*n),t._faceCentersXYZ=this.resizeArray(t._faceCentersXYZ,3*n),t._facesTagFlags=this.resizeArray(t._facesTagFlags,n),t._facePosInLeaf=this.resizeArray(t._facePosInLeaf,n)),((r=t._verticesXYZ.length/3)<(n=this.getNbVertices()+e)||r>4*n)&&(t._verticesXYZ=this.resizeArray(t._verticesXYZ,3*n),t._normalsXYZ=this.resizeArray(t._normalsXYZ,3*n),t._colorsRGB=this.resizeArray(t._colorsRGB,3*n),t._materialsPBR=this.resizeArray(t._materialsPBR,3*n),t._vertOnEdge=this.resizeArray(t._vertOnEdge,n),t._vertTagFlags=this.resizeArray(t._vertTagFlags,n),t._vertSculptFlags=this.resizeArray(t._vertSculptFlags,n),t._vertStateFlags=this.resizeArray(t._vertStateFlags,n)),this.isUsingDrawArrays()&&((r=t._verticesXYZ.length/9)<(n=i+10*e)||r>4*n)&&(t._verticesXYZ=this.resizeArray(t._verticesXYZ,9*n),t._normalsXYZ=this.resizeArray(t._normalsXYZ,9*n),t._colorsRGB=this.resizeArray(t._colorsRGB,9*n),t._materialsPBR=this.resizeArray(t._materialsPBR,9*n))}},{key:"initTopology",value:function(){var e=this.getVerticesRingVert(),t=this.getVerticesRingFace(),r=0,i=this.getNbVertices();for(e.length=t.length=i,r=0;r4e5&&!window.confirm((0,V.Z)("multiresWarnBigMesh",4*r.getNbFaces()))||(t!==r&&(e.replaceMesh(t,r),e.getStateManager().pushStateAddRemove(r,t,!0)),e.getStateManager().pushState(new Za(e,r,Za.SUBDIVISION)),r.addLevel(),e.setMesh(r),e.render()):window.alert((0,V.Z)("multiresSelectHighest"))}}},{key:"reverse",value:function(){var e=this._main,t=e.getMesh();if(t){var r=this.convertToMultimesh(t);if(0===r._sel){var i=new Za(e,r,Za.REVERSION);r.computeReverse()?(t!==r&&(e.replaceMesh(t,r),e.getStateManager().pushStateAddRemove(r,t,!0)),e.getStateManager().pushState(i),e.setMesh(r),e.render()):window.alert((0,V.Z)("multiresNotReversible"))}else window.alert((0,V.Z)("multiresSelectLowest"))}}},{key:"deleteLower",value:function(){var e=this._main,t=e._mesh;this.isMultimesh(t)&&0!==t._sel?(e.getStateManager().pushState(new Za(e,t,Za.DELETE_LOWER)),t.deleteLower(),this.updateMeshResolution()):window.alert((0,V.Z)("multiresNoLower"))}},{key:"deleteHigher",value:function(){var e=this._main,t=e.getMesh();this.isMultimesh(t)&&t._sel!==t._meshes.length-1?(e.getStateManager().pushState(new Za(e,t,Za.DELETE_HIGHER)),t.deleteHigher(),this.updateMeshResolution()):window.alert((0,V.Z)("multiresNoHigher"))}},{key:"onResolutionChanged",value:function(e){var t=e-1,r=this._main,i=r.getMesh();if(i){var n=this.isMultimesh(i),a=n&&i._meshes.length-1===t;this._ctrlReverse.setEnable(!n||0===t),this._ctrlSubdivide.setEnable(!n||a),this._ctrlDelLower.setEnable(n&&0!==t),this._ctrlDelHigher.setEnable(n&&!a),n&&i._sel!==t&&(r.getStateManager().pushState(new Za(r,i,Za.SELECTION)),i.selectResolution(t),this._ctrlGui.updateMeshInfo(),r.render())}}},{key:"updateMeshResolution",value:function(){var e=this._main.getMesh();if(!e||!this.isMultimesh(e))return this._ctrlResolution.setMax(1),void this._ctrlResolution.setValue(0);this._ctrlResolution.setMax(e._meshes.length),this._ctrlResolution.setValue(e._sel+1)}},{key:"updateMesh",value:function(){if(this._main.getMesh()){this._menu.setVisibility(!0),this.updateMeshResolution();var e=this._main.getMesh().isDynamic;this.updateDynamicVisibility(e),this._ctrlDynamic.setValue(e,!0)}else this._menu.setVisibility(!1)}}])&&Ga(t.prototype,r),e}();function ja(e,t){for(var r=0;r=1),this._ctrlMerge.setVisibility(t>1);var r=this._main.getMesh();this._ctrlOffSym.setValue(r?r.getSymmetryOffset():0)}},{key:"merge",value:function(){var e=this._main,t=e.getSelectedMeshes();if(!(t.length<2)){var r=Gr.mergeMeshes(t,e.getMesh()||t[0]);e.removeMeshes(t),e.getStateManager().pushStateAddRemove(r,t.slice()),e.getMeshes().push(r),e.setMesh(r)}}},{key:"toggleShowHide",value:function(e){this._ctrlIsolate.setValue(!this._ctrlIsolate.getValue(),!!e)}},{key:"showHide",value:function(e){e?this.isolate():this.showAll(),this.updateMesh()}},{key:"setMeshesVisible",value:function(e,t){for(var r=0;r=e)){u[p]=t[_].slice(),c[p]=r[_].slice();var g=3*_;h[p*=3]=i[g],h[p+1]=i[g+1],h[p+2]=i[g+2],d[p]=n[g],d[p+1]=n[g+1],d[p+2]=n[g+2],f[p]=a[g],f[p+1]=a[g+1],f[p+2]=a[g+2]}}}},{key:"pullFaces",value:function(){for(var e=this._nbFacesState,t=this._fArState,r=this._idFaceState,i=r.length,n=this._mesh.getFaces(),a=0;a=e)){var o=4*a;n[s*=4]=t[o],n[s+1]=t[o+1],n[s+2]=t[o+2],n[s+3]=t[o+3]}}}}])&&ys(t.prototype,r),e}();function Ts(e,t){for(var r=0;r=t;)r.shift(),--this._curUndoIndex;for(;r.length>t;)r.pop(),i.shift()}},{key:"pushState",value:function(t){++o.Z.STATE_FLAG;var r=this._undos;-1===this._curUndoIndex?r.length=0:r.length>=e.STACK_LENGTH&&(r.shift(),--this._curUndoIndex),this._redos.length=0,++this._curUndoIndex,r.length>0&&(r.length=this._curUndoIndex),r.push(t)}},{key:"getCurrentState",value:function(){return this._undos[this._curUndoIndex]}},{key:"pushVertices",value:function(e){e&&e.length>0&&this.getCurrentState().pushVertices(e)}},{key:"pushFaces",value:function(e){e&&e.length>0&&this.getCurrentState().pushFaces(e)}},{key:"undo",value:function(){if(this._undos.length&&!(this._curUndoIndex<0)){var e=this.getCurrentState(),t=e.createRedo();t.squash=e.squash,this._redos.push(t),e.undo(),this._curUndoIndex--,!0===e.squash&&this.undo()}}},{key:"redo",value:function(){this._redos.length&&(this._redos[this._redos.length-1].redo(),this._curUndoIndex++,this._redos.pop(),this._redos.length&&!0===this._redos[this._redos.length-1].squash&&this.redo())}},{key:"reset",value:function(){this._undos.length=0,this._redos.length=0,this._curUndoIndex=-1}},{key:"cleanNoop",value:function(){for(;this._curUndoIndex>=0&&this.getCurrentState().isNoop();)this._undos.length--,this._curUndoIndex--,this._redos.length=0}}])&&Ss(t.prototype,r),e}();ks.STACK_LENGTH=15;const Es=ks;function As(e,t){for(var r=0;r=0?this._prevToolIndex:s.Z.Tools.BRUSH;this._ctrlGui._ctrlSculpting&&this._ctrlGui._ctrlSculpting._ctrlSculpt?this._ctrlGui._ctrlSculpting._ctrlSculpt.setValue(t):this._sculptManager.setToolIndex(t),this._prevToolIndex=-1}this.updatePenControls(),this.updateFeatureList(),this._main.renderSelectOverRtt()}},{key:"onModeChange",value:function(e){this._tool._mode=0|e,this._main.render()}},{key:"onCloseLoop",value:function(e){this._tool.setCloseLoop(e)}},{key:"onSpacingChange",value:function(e){this._tool._spacing=e/1e3}},{key:"createNewSet",value:function(){this.onEnable(!0),this._tool.startNewFeature(),this.updateFeatureList()}},{key:"finishSet",value:function(){this._tool.finishActiveFeature(),this.updateFeatureList(),this._main.renderSelectOverRtt()}},{key:"updateFeatureList",value:function(){var e=this._tool.getFeatures(),t=this._tool.getSelectedFeatureIds();if(this._ctrlCloseLoop&&this._ctrlCloseLoop.setValue(this._tool._closeLoop,!0),e.length){this._featureListEmpty&&this._featureListEmpty.setVisibility(!1);for(var r=0,i=e.length;r=0?"rgba(255, 200, 50, 0.2)":"")}for(var u=e.length;u=0?"rgba(255, 200, 50, 0.2)":"",d.onclick=function(e){return function(t){var i=!!(t.shiftKey||t.ctrlKey||t.metaKey);r._penTool.selectFeature(e,i),r._expandedSourceId=r._expandedSourceId===e?null:e,r.updateLists()}}(s.id)),l.setVisibility(!0);var f=this._expandedSourceId===s.id,_=u.domButton||u.domContainer;_&&(_.textContent=" + "+(0,V.Z)("padsTrimsCreatePad"),_.dataset.featureId=s.id,_.onclick=function(e){return function(){r._penTool.selectFeature(e,!1),r._penTool.createSolidFeature("Pad",[e],{height:r._padHeight,depth:r._trimDepth,direction:r._padDirection}),r.updateLists()}}(s.id)),u.setVisibility(f);var p=c.domButton||c.domContainer;p&&(p.textContent=" + "+(0,V.Z)("padsTrimsCreateTrim"),p.dataset.featureId=s.id,p.onclick=function(e){return function(){r._penTool.selectFeature(e,!1),r._penTool.createSolidFeature("Trim",[e],{height:r._padHeight,depth:r._trimDepth,direction:r._trimDirection}),r.updateLists()}}(s.id)),c.setVisibility(f)}for(var g=3*e.length;g.99?this.resetViewBack():this.resetViewFront()}},{key:"toggleViewTop",value:function(){var e=this._quatRot[0]*Math.SQRT1_2+this._quatRot[3]*Math.SQRT1_2;e*e>.99?this.resetViewBottom():this.resetViewTop()}},{key:"toggleViewLeft",value:function(){var e=-this._quatRot[1]*Math.SQRT1_2+this._quatRot[3]*Math.SQRT1_2;e*e>.99?this.resetViewRight():this.resetViewLeft()}},{key:"computeWorldToScreenMatrix",value:function(e){return e=e||l.Ue(),l.dC(e,l.dC(e,this._viewport,this._proj),this._view)}},{key:"unproject",value:function(e,t,r){var n=[0,0,0];return l.U_(Xs,this.computeWorldToScreenMatrix(Xs)),i.fF(n,i.t8(n,e,this._height-t,r),Xs)}},{key:"project",value:function(e){var t=[0,0,0];return i.fF(t,e,this.computeWorldToScreenMatrix(Xs)),t[1]=this._height-t[1],t}},{key:"onResize",value:function(e,t){this._width=e,this._height=t;var r=this._viewport;l.yR(r),l.bA(r,r,i.t8(Gs,.5*e,.5*t,.5)),l.Iu(r,r,i.t8(Gs,1,1,1)),this.updateProjection()}},{key:"snapClosestRotation",value:function(){for(var e=this._quatRot,t=1/0,r=0,i=Ys.length,n=0;n=1&&this.clearTimerN(i)}.bind(this),16.6)}}},{key:"_translateDelta",value:function(e,t){var r=this._trans;i.od(r,r,e,t),this.setTrans(r),this._main.render()}},{key:"translateDelay",value:function(e,t){var r=this._translateDelta.bind(this,e);this.delay(r,t,"translate")}},{key:"_rotDelta",value:function(e,t){if(this._mode===s.Z.CameraMode.ORBIT){var r=this._rotX+e[0]*t,i=this._rotY+e[1]*t;this.setOrbit(r,i)}else $e(this._quatRot,Ye(zs,e,e[3]*t),this._quatRot);this.updateView(),this._main.render()}},{key:"rotateDelay",value:function(e,t){var r=this._rotDelta.bind(this,e);this.delay(r,t,"rotate")}},{key:"_quatDelta",value:function(e,t){He(zs),function(e,t,r,i){var n,a,s,o,l,u=t[0],h=t[1],d=t[2],f=t[3],_=r[0],p=r[1],g=r[2],m=r[3];(a=u*_+h*p+d*g+f*m)<0&&(a=-a,_=-_,p=-p,g=-g,m=-m),1-a>c.Ib?(n=Math.acos(a),s=Math.sin(n),o=Math.sin((1-i)*n)/s,l=Math.sin(i*n)/s):(o=1-i,l=i),e[0]=o*u+l*_,e[1]=o*h+l*p,e[2]=o*d+l*g,e[3]=o*f+l*m}(zs,zs,e,t);var r=this._quatRot;if($e(this._quatRot,this._quatRot,zs),this._mode===s.Z.CameraMode.ORBIT){var i=r[0],n=r[1],a=r[2],o=r[3];this._rotY=Math.atan2(2*(o*n+a*i),1-2*(n*n+a*a)),this._rotX=Math.atan2(2*(o*i+n*a),1-2*(a*a+i*i))}this.updateView(),this._main.render()}},{key:"quatDelay",value:function(e,t){var r=[0,0,0,0];!function(e,t){e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3]}(r,this._quatRot),$e(r,r,e),et(r,r);var i=this._quatDelta.bind(this,r);this.delay(i,t,"quat")}},{key:"_centerDelta",value:function(e,t){i.od(this._center,this._center,e,t),this.updateView(),this._main.render()}},{key:"centerDelay",value:function(e,t){var r=[0,0,0];i.lu(r,e,this._center);var n=this._centerDelta.bind(this,r);this.delay(n,t,"center")}},{key:"_offsetDelta",value:function(e,t){i.od(this._offset,this._offset,e,t),this.updateView(),this._main.render()}},{key:"offsetDelay",value:function(e,t){var r=[0,0,0];i.lu(r,e,this._offset);var n=this._offsetDelta.bind(this,r);this.delay(n,t,"offset")}},{key:"computeFrustumFit",value:function(){var e,t=this._near;if(this._projectionType===s.Z.Projection.ORTHOGRAPHIC)return e=Math.min(this._width,this._height)/t*.5,Math.sqrt(1+e*e)/e;var r=this._proj,i=t*(r[8]-1)/r[0],n=t*(1+r[8])/r[0],a=t*(1+r[9])/r[5],o=t*(r[9]-1)/r[5],l=Math.abs(n-i),u=Math.abs(a-o);return e=Math.min(u,l)/t*.5,this._fov/45*Math.sqrt(1+e*e)/e}}])&&Ns(t.prototype,r),e}();function Js(e,t){for(var r=0;re||s>e){var o=Math.min(e/a,e/s);a=Math.floor(a*o),s=Math.floor(s*o),console.log("[ComparisonImage] Resizing image to:",a,"x",s,"(scale:",o,")"),i.width=a,i.height=s,n.drawImage(r,0,0,a,s),t._aspectRatio=a/s,console.log("[ComparisonImage] Aspect ratio:",t._aspectRatio),t._createTexture(i)}else t._aspectRatio=r.width/r.height,console.log("[ComparisonImage] Using original size, aspect ratio:",t._aspectRatio),t._createTexture(r);t._width>0&&(t._height=t._width/t._aspectRatio,console.log("[ComparisonImage] Updating matrix with size:",t._width,"x",t._height),t._updateMatrix()),console.log("[ComparisonImage] Image loaded successfully, triggering render"),t._main.render()},r.onerror=function(){console.error("[ComparisonImage] Image.onerror: Failed to load image"),alert("Failed to load image. Please try a different file.")}},r.onerror=function(){console.error("[ComparisonImage] FileReader.onerror: Failed to read file"),alert("Failed to read file. Please try again.")},console.log("[ComparisonImage] Starting FileReader.readAsDataURL..."),r.readAsDataURL(e)}else console.error("[ComparisonImage] No image file provided")}},{key:"_createTexture",value:function(e){console.log("[ComparisonImage] _createTexture called, image type:",e instanceof HTMLCanvasElement?"Canvas":"Image");var t=this._gl;if(t)if(this.deleteTexture(),console.log("[ComparisonImage] Creating WebGL texture..."),this._texture=t.createTexture(),this._texture){t.bindTexture(t.TEXTURE_2D,this._texture);try{e instanceof HTMLCanvasElement?(console.log("[ComparisonImage] Loading texture from canvas, size:",e.width,"x",e.height),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,e)):(console.log("[ComparisonImage] Loading texture from image, size:",e.width,"x",e.height),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,e)),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.bindTexture(t.TEXTURE_2D,null);var r=t.getError();r!==t.NO_ERROR?console.error("[ComparisonImage] WebGL error after texture creation:",r):console.log("[ComparisonImage] Texture created successfully")}catch(e){console.error("[ComparisonImage] Error creating texture:",e),t.bindTexture(t.TEXTURE_2D,null)}}else console.error("[ComparisonImage] Failed to create WebGL texture");else console.error("[ComparisonImage] No WebGL context for texture creation")}},{key:"updateMatrices",value:function(e){if(e){var t=this._transformData._matrix,r=this._transformData._center;t&&16===t.length||(console.warn("[ComparisonImage] updateMatrices: Invalid transform matrix, initializing..."),this._updateMatrix()),l.dC(this._transformData._lastComputedMV,e.getView(),t),l.dC(this._transformData._lastComputedMVP,e.getProjection(),this._transformData._lastComputedMV);var i=this._transformData._lastComputedMVP;this._transformData._lastComputedDepth=i[2]*r[0]+i[6]*r[1]+i[10]*r[2]+i[14],console.log("[ComparisonImage] updateMatrices: Matrices updated, depth:",this._transformData._lastComputedDepth)}else console.warn("[ComparisonImage] updateMatrices: No camera provided")}},{key:"setPosition",value:function(e,t,r){i.t8(this._transformData._center,e,t,r),this._updateMatrix()}},{key:"getPosition",value:function(){return this._transformData._center.slice()}},{key:"setSize",value:function(e,t){this._width=Math.max(.1,e),this._height=t||this._width/this._aspectRatio,this._updateMatrix()}},{key:"setSizeMaintainAspect",value:function(e,t,r){if(r){var i,n=e/this._width,a=t/this._height;i=Math.abs(n-1)>Math.abs(a-1)?n:Math.abs(a-1)>Math.abs(n-1)?a:n,this._width=Math.max(.1,this._width*i),this._height=Math.max(.1,this._width/this._aspectRatio)}else this._width=Math.max(.1,e),this._height=Math.max(.1,t||this._width/this._aspectRatio);this._updateMatrix()}},{key:"getSize",value:function(){return{width:this._width,height:this._height}}},{key:"getAspectRatio",value:function(){return this._aspectRatio}},{key:"_updateMatrix",value:function(){var e=this._transformData._matrix,t=this._transformData._center;if(e&&t){var r=[t[0],t[1],t[2]];l.yR(e),l.Iu(e,e,r),l.bA(e,e,[this._width,this._height,1])}else console.error("ComparisonImage: Transform data not initialized")}},{key:"getDepth",value:function(){return this._transformData._lastComputedDepth}},{key:"getID",value:function(){return this._id}},{key:"getMatrix",value:function(){return this._transformData._matrix}},{key:"getCenter",value:function(){return this._transformData._center}},{key:"intersectRay",value:function(e,t){var r=l.Ue();l.U_(r,this._transformData._matrix);var n=i.Ue(),a=i.Ue();i.fF(n,e,r),i.fF(a,t,r);var s=i.Ue();if(i.lu(s,a,n),Math.abs(s[2])<1e-6)return null;var o=-n[2]/s[2];if(o<0||o>1)return null;var u=i.Ue();if(i.od(u,n,s,o),Math.abs(u[0])<=.5&&Math.abs(u[1])<=.5){var c=i.Ue();return i.fF(c,u,this._transformData._matrix),c}return null}},{key:"setOpacity",value:function(e){this._opacity=Math.max(0,Math.min(1,e))}},{key:"getOpacity",value:function(){return this._opacity}},{key:"setUseDepth",value:function(e){this._useDepth=e}},{key:"getUseDepth",value:function(){return this._useDepth}},{key:"isSelected",value:function(){return this._isSelected}},{key:"setSelected",value:function(e){this._isSelected=e}},{key:"render",value:function(){if(this._texture){if(!this._transformData._lastComputedMVP||16!==this._transformData._lastComputedMVP.length){if(console.warn("[ComparisonImage] render: Matrices not initialized, attempting to update..."),!this._main||!this._main.getCamera)return void console.warn("[ComparisonImage] render: No main or getCamera, skipping render");var e=this._main.getCamera();if(!e)return void console.warn("[ComparisonImage] render: No camera available, skipping render");if(this.updateMatrices(e),!this._transformData._lastComputedMVP||16!==this._transformData._lastComputedMVP.length)return void console.warn("[ComparisonImage] render: Still no valid matrices after update, skipping render")}var t=this._gl;if(t){var r=de[s.Z.Shader.COMPARISON_IMAGE];if(r)try{var i=r.getOrCreate(t);if(!i||!i.program)return void console.error("[ComparisonImage] render: Shader program not available");var n=t.getError();n!==t.NO_ERROR&&console.warn("[ComparisonImage] render: WebGL error before render:",n);var a=t.isEnabled(t.DEPTH_TEST),o=t.isEnabled(t.BLEND),l=t.getParameter(t.DEPTH_FUNC),u=t.getParameter(t.BLEND_SRC_ALPHA),c=t.getParameter(t.BLEND_DST_ALPHA);t.useProgram(i.program),this._useDepth?(t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL)):t.disable(t.DEPTH_TEST),t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this._texture),i.uniforms&&void 0!==i.uniforms.uTexture&&t.uniform1i(i.uniforms.uTexture,0),i.uniforms&&void 0!==i.uniforms.uMVP&&t.uniformMatrix4fv(i.uniforms.uMVP,!1,this._transformData._lastComputedMVP),i.uniforms&&void 0!==i.uniforms.uOpacity&&t.uniform1f(i.uniforms.uOpacity,this._opacity),i.uniforms&&void 0!==i.uniforms.uIsBorder&&t.uniform1i(i.uniforms.uIsBorder,0),i.attributes&&i.attributes.aPosition&&i.attributes.aPosition.bindToBuffer(this._vertexBuffer),i.attributes&&i.attributes.aTexCoord&&i.attributes.aTexCoord.bindToBuffer(this._texCoordBuffer),this._indexBuffer.bind(),t.drawElements(t.TRIANGLES,6,t.UNSIGNED_INT,0),this._isSelected&&this.renderBorder(t,i),i.attributes&&i.attributes.aPosition&&i.attributes.aPosition.unbind(),i.attributes&&i.attributes.aTexCoord&&i.attributes.aTexCoord.unbind(),t.bindBuffer(t.ARRAY_BUFFER,null),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null),o?t.enable(t.BLEND):t.disable(t.BLEND),t.blendFunc(u,c),a?t.enable(t.DEPTH_TEST):t.disable(t.DEPTH_TEST),t.depthFunc(l),(n=t.getError())!==t.NO_ERROR&&console.error("ComparisonImage: WebGL error after render:",n)}catch(e){console.error("ComparisonImage: Error during render:",e)}else console.error("[ComparisonImage] render: Shader not found in ShaderLib")}else console.error("[ComparisonImage] render: No WebGL context")}}},{key:"deleteTexture",value:function(){this._texture&&(this._gl.deleteTexture(this._texture),this._texture=null)}},{key:"renderBorder",value:function(e,t){var r=e.isEnabled(e.DEPTH_TEST),i=e.isEnabled(e.BLEND);e.disable(e.DEPTH_TEST),e.enable(e.BLEND),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA),e.lineWidth(3),t.uniforms&&void 0!==t.uniforms.uBorderColor&&e.uniform3f(t.uniforms.uBorderColor,1,1,0),t.uniforms&&void 0!==t.uniforms.uIsBorder&&e.uniform1i(t.uniforms.uIsBorder,1),t.uniforms&&void 0!==t.uniforms.uOpacity&&e.uniform1f(t.uniforms.uOpacity,1),t.attributes&&t.attributes.aPosition&&t.attributes.aPosition.bindToBuffer(this._vertexBuffer),this._borderIndexBuffer.bind(),e.drawElements(e.LINES,8,e.UNSIGNED_INT,0),e.lineWidth(1),r&&e.enable(e.DEPTH_TEST),i||e.disable(e.BLEND),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)}},{key:"release",value:function(){this.deleteTexture(),this._vertexBuffer.release(),this._texCoordBuffer.release(),this._indexBuffer.release(),this._borderIndexBuffer.release()}}])&&$s(t.prototype,r),e}();eo.ID=0;const to=eo;function ro(e,t){for(var r=0;r=1?3:e,this._lastNbPointers=e,this.onDeviceDown(t)}},{key:"onPanEnd",value:function(e){"mouse"!==e.pointerType&&(this.onDeviceUp(),window.setTimeout(function(){e.pointers.length||(this._lastNbPointers=0)}.bind(this),60))}},{key:"onDoubleTap",value:function(e){if(!this._focusGui){var t=this._eventProxy;t.pageX=e.center.x,t.pageY=e.center.y,this.setMousePosition(t);var r=this._picking,n=r.intersectionMouseMeshes(),a=this._camera,s=[0,0,0];if(!n)return this.resetCameraMeshes();i.fF(s,r.getIntersectionPoint(),r.getMesh().getMatrix());var o=a._trans[2];a.isOrthographic()||(o=Math.min(o,i.TK(s,a.computePosition()))),a.setAndFocusOnPivot(s,o),this.render()}}},{key:"onDoubleTap2Fingers",value:function(){this._focusGui||this.resetCameraMeshes()}},{key:"onPinchStart",value:function(e){this._focusGui=!1,this._lastScale=e.scale}},{key:"onPinchInOut",value:function(e){var t=25*(e.scale-this._lastScale);this._lastScale=e.scale,this.onDeviceWheel(t)}},{key:"resetCameraMeshes",value:function(e){if(e||(e=this._meshes),e.length>0){var t=[0,0,0],r=this.computeBoundingBoxMeshes(e),n=.8*this.computeRadiusFromBoundingBox(r);n*=this._camera.computeFrustumFit(),i.t8(t,.5*(r[0]+r[3]),.5*(r[1]+r[4]),.5*(r[2]+r[5])),this._camera.setAndFocusOnPivot(t,n)}else this._camera.resetView();this.render()}},{key:"getFileType",value:function(e){var t=e.toLowerCase();return t.endsWith(".obj")?"obj":t.endsWith(".sgl")?"sgl":t.endsWith(".stl")?"stl":t.endsWith(".ply")?"ply":void 0}},{key:"loadFiles",value:function(e){e.stopPropagation(),e.preventDefault();for(var t=e.dataTransfer?e.dataTransfer.files:e.target.files,r=0,i=t.length;r0?1:-1)}},{key:"onDeviceUp",value:function(){if(this._transformingComparisonImage)return this._transformingComparisonImage=!1,this._transformStartX=null,this._transformStartY=null,this._transformStartPos=null,this._transformStartSize=null,void this.render();this.setCanvasCursor("default"),ca.RENDER_HINT=ca.NONE,this._sculptManager.end(),this._action===s.Z.Action.MASK_EDIT&&this._mesh&&(this._lastMouseX===this._maskX&&this._lastMouseY===this._maskY?this.getSculptManager().getTool(s.Z.Tools.MASKING).invert():this.getSculptManager().getTool(s.Z.Tools.MASKING).clear()),this._action=s.Z.Action.NOTHING,this.render(),this._stateManager.cleanNoop()}},{key:"onDeviceWheel",value:function(e){e>0&&!this._isWheelingIn&&(this._isWheelingIn=!0,this._camera.start(this._mouseX,this._mouseY)),this._camera.zoom(.02*e),ca.RENDER_HINT=ca.CAMERA,this.render(),this._timerEndWheel&&window.clearTimeout(this._timerEndWheel),this._timerEndWheel=window.setTimeout(this._endWheel.bind(this),300)}},{key:"_endWheel",value:function(){ca.RENDER_HINT=ca.NONE,this._isWheelingIn=!1,this.render()}},{key:"setMousePosition",value:function(e){this._mouseX=this._pixelRatio*(e.pageX-this._canvasOffsetLeft),this._mouseY=this._pixelRatio*(e.pageY-this._canvasOffsetTop)}},{key:"onDeviceDown",value:function(e){if(!this._focusGui){this.setMousePosition(e);var t=this._mouseX,r=this._mouseY,i=e.which;if(1===i&&!e.shiftKey&&!e.ctrlKey&&!e.altKey){var n=this.pickComparisonImage(t,r);if(n)return this.setSelectedComparisonImage(n),this._transformingComparisonImage=!0,this._transformStartX=t,this._transformStartY=r,this._transformStartPos=n.getPosition().slice(),this._transformStartSize=n.getSize(),void(this._action=s.Z.Action.NOTHING)}var a=!1;1===i&&(a=this._sculptManager.start(e.shiftKey)),1===i&&a&&this.setCanvasCursor("none"),3===i&&e.ctrlKey?this._action=s.Z.Action.CAMERA_ZOOM:2===i?this._action=s.Z.Action.CAMERA_PAN:!a&&e.ctrlKey?(this._maskX=t,this._maskY=r,this._action=s.Z.Action.MASK_EDIT):a&&3!==i||!e.altKey?this._action=3===i||1===i&&!a?s.Z.Action.CAMERA_ROTATE:s.Z.Action.SCULPT_EDIT:this._action=s.Z.Action.CAMERA_PAN_ZOOM_ALT,this._action!==s.Z.Action.CAMERA_ROTATE&&this._action!==s.Z.Action.CAMERA_ZOOM||this._camera.start(t,r),this._lastMouseX=t,this._lastMouseY=r}}},{key:"getSpeedFactor",value:function(){return this._cameraSpeed/(this._canvasHeight*this.getPixelRatio())}},{key:"onDeviceMove",value:function(e){if(!this._focusGui){this.setMousePosition(e);var t=this._mouseX,r=this._mouseY,n=this._action,a=this.getSpeedFactor();if(this._transformingComparisonImage&&this._selectedComparisonImage){var o=this._selectedComparisonImage,l=this._picking,u=l.unproject(t,r,0),c=l.unproject(t,r,.1),h=l.unproject(this._transformStartX,this._transformStartY,0),d=l.unproject(this._transformStartX,this._transformStartY,.1),f=o.intersectRay(h,d),_=o.intersectRay(u,c);if(f&&_){if(e.shiftKey){var p=i.TK(h,f),g=i.TK(u,_);if(p>.001){var m=g/p,v=this._transformStartSize.width*m,y=this._transformStartSize.height*m,b=!e.ctrlKey&&!e.metaKey;o.setSizeMaintainAspect(v,y,b),o.setPosition(this._transformStartPos[0],this._transformStartPos[1],this._transformStartPos[2])}}else{var T=i.Ue();i.lu(T,_,f);var M=i.Ue();i.IH(M,this._transformStartPos,T),o.setPosition(M[0],M[1],M[2])}this.render()}return this._lastMouseX=t,void(this._lastMouseY=r)}n===s.Z.Action.CAMERA_ZOOM||n===s.Z.Action.CAMERA_PAN_ZOOM_ALT&&!e.altKey?(ca.RENDER_HINT=ca.CAMERA,this._camera.zoom((t-this._lastMouseX+r-this._lastMouseY)*a),this.render()):n===s.Z.Action.CAMERA_PAN_ZOOM_ALT||n===s.Z.Action.CAMERA_PAN?(ca.RENDER_HINT=ca.CAMERA,this._camera.translate((t-this._lastMouseX)*a,(r-this._lastMouseY)*a),this.render()):n===s.Z.Action.CAMERA_ROTATE?(ca.RENDER_HINT=ca.CAMERA,e.shiftKey||this._camera.rotate(t,r),this.render()):(ca.RENDER_HINT=ca.PICKING,this._sculptManager.preUpdate(),n===s.Z.Action.SCULPT_EDIT&&(ca.RENDER_HINT=ca.SCULPT,this._sculptManager.update(this),this.getMesh().isDynamic&&this._gui.updateMeshInfo())),this._lastMouseX=t,this._lastMouseY=r,this.renderSelectOverRtt()}}}])&&no(t.prototype,r),h}(function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._gl=null,this._cameraSpeed=.25,this._pixelRatio=1,this._viewport=document.getElementById("viewport"),this._canvas=document.getElementById("canvas"),this._canvasWidth=0,this._canvasHeight=0,this._canvasOffsetLeft=0,this._canvasOffsetTop=0,this._stateManager=new Es(this),this._sculptManager=null,this._camera=new qs(this),this._picking=new Qa.Z(this),this._pickingSym=new Qa.Z(this,!0),this._meshPreview=null,this._torusLength=.5,this._torusWidth=.1,this._torusRadius=2*Math.PI,this._torusRadial=32,this._torusTubular=128;var t=(0,u.Z)();this._showContour=t.outline,this._showGrid=t.grid,this._grid=null,this._background=null,this._meshes=[],this._selectMeshes=[],this._mesh=null,this._comparisonImages=[],this._selectedComparisonImage=null,this._rttContour=null,this._rttMerge=null,this._rttOpaque=null,this._rttTransparent=null,this._focusGui=!1,this._gui=new Vs(this),this._preventRender=!1,this._drawFullScene=!1,this._autoMatrix=t.scalecenter,this._vertexSRGB=!0}var t,r;return t=e,(r=[{key:"start",value:function(){if(this.initWebGL(),this._gl){this._sculptManager=new Fi(this),this._background=new Qs(this._gl,this),console.log("[Scene] Setting up comparison image file input listener...");var e=document.getElementById("comparisonimageopen");e||(console.warn("[Scene] comparisonimageopen input not found, creating it..."),(e=document.createElement("input")).type="file",e.id="comparisonimageopen",e.accept="image/*",e.style.display="none",document.body.appendChild(e)),e?(console.log("[Scene] Found comparison image input, adding event listener"),e.addEventListener("change",function(e){console.log("[Scene] Comparison image file selected:",e.target.files.length,"file(s)"),e.target.files.length>0&&(console.log("[Scene] Adding comparison image:",e.target.files[0].name),this.addComparisonImage(e.target.files[0]),e.target.value="")}.bind(this),!1)):console.error("[Scene] Failed to create comparison image input element!"),this._rttContour=new Wn(this._gl,s.Z.Shader.CONTOUR,null),this._rttMerge=new Wn(this._gl,s.Z.Shader.MERGE,null),this._rttOpaque=new Wn(this._gl,s.Z.Shader.FXAA),this._rttTransparent=new Wn(this._gl,null,this._rttOpaque.getDepth(),!0),this._grid=Jr.createGrid(this._gl),this.initGrid(),this.loadTextures(),this._gui.initGui(),this.onCanvasResize();var t=(0,u.Z)();t.modelurl?this.addModelURL(t.modelurl):t.nosphere||this.addSphere()}}},{key:"addModelURL",value:function(e){var t=this.getFileType(e);if(t){var r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="obj"===t?"text":"arraybuffer",r.onload=function(){200===r.status&&this.loadScene(r.response,t)}.bind(this),r.send(null)}}},{key:"getBackground",value:function(){return this._background}},{key:"getViewport",value:function(){return this._viewport}},{key:"getCanvas",value:function(){return this._canvas}},{key:"getPixelRatio",value:function(){return this._pixelRatio}},{key:"getCanvasWidth",value:function(){return this._canvasWidth}},{key:"getCanvasHeight",value:function(){return this._canvasHeight}},{key:"getCamera",value:function(){return this._camera}},{key:"getGui",value:function(){return this._gui}},{key:"getMeshes",value:function(){return this._meshes}},{key:"getMesh",value:function(){return this._mesh}},{key:"getSelectedMeshes",value:function(){return this._selectMeshes}},{key:"getComparisonImages",value:function(){return this._comparisonImages}},{key:"getSelectedComparisonImage",value:function(){return this._selectedComparisonImage}},{key:"addComparisonImage",value:function(e){console.log("[Scene] addComparisonImage called with file:",e?e.name:"null");var t=this._gl;if(!t)return console.error("[Scene] WebGL not initialized"),null;if(this._comparisonImages.length>=10)return console.warn("[Scene] Maximum comparison images reached"),alert("Maximum of 10 comparison images allowed. Please remove some before adding more."),null;console.log("[Scene] Creating new ComparisonImage instance...");var r=new to(t,this);return console.log("[Scene] ComparisonImage created, loading image..."),r.loadImage(e),console.log("[Scene] Setting initial position and size (defaultSize:",10,")"),r.setPosition(0,0,0),r.setSize(10,10/r._aspectRatio),console.log("[Scene] Adding comparison image to array, current count:",this._comparisonImages.length),this._comparisonImages.push(r),this._selectedComparisonImage=r,console.log("[Scene] Initializing matrices for comparison image..."),r.updateMatrices(this._camera),console.log("[Scene] Comparison image added, triggering render..."),this.render(),r}},{key:"removeComparisonImage",value:function(e){var t=this._comparisonImages.indexOf(e);-1!==t&&(e.release(),this._comparisonImages.splice(t,1),this._selectedComparisonImage===e&&(this._selectedComparisonImage=null),this.render())}},{key:"setSelectedComparisonImage",value:function(e){this._selectedComparisonImage&&this._selectedComparisonImage.setSelected(!1),this._selectedComparisonImage=e,e&&e.setSelected(!0),this._gui&&this._gui._ctrlComparisonImage&&this._gui._ctrlComparisonImage.updateVisibility(),this.render()}},{key:"pickComparisonImage",value:function(e,t){for(var r=this._picking,n=r.unproject(e,t,0),a=r.unproject(e,t,.1),s=this._comparisonImages,o=null,l=1/0,u=0;u=0?this._selectMeshes.length>1&&(this._selectMeshes.splice(r,1),e=this._selectMeshes[0]):this._selectMeshes.push(e)}else this._selectMeshes.length=0,this._selectMeshes.push(e);else this._selectMeshes.length=0;return this._mesh=e,this.getGui().updateMesh(),this.render(),e}},{key:"renderSelectOverRtt",value:function(){this._requestRender()&&(this._drawFullScene=!1)}},{key:"_requestRender",value:function(){return!0!==this._preventRender&&(window.requestAnimationFrame(this.applyRender.bind(this)),this._preventRender=!0,!0)}},{key:"render",value:function(){this._drawFullScene=!0,this._requestRender()}},{key:"applyRender",value:function(){this._preventRender=!1,this.updateMatricesAndSort();var e=this._gl;e&&(this._drawFullScene&&this._drawScene(),e.disable(e.DEPTH_TEST),e.bindFramebuffer(e.FRAMEBUFFER,this._rttMerge.getFramebuffer()),this._rttMerge.render(this),e.bindFramebuffer(e.FRAMEBUFFER,null),this._rttOpaque.render(this),e.enable(e.DEPTH_TEST),this._sculptManager.postRender())}},{key:"_drawScene",value:function(){var e=this._gl,t=0,r=this._meshes,i=r.length;e.disable(e.DEPTH_TEST);var n=this._selectMeshes.length>0&&this._showContour&&de[s.Z.Shader.CONTOUR].color[3]>0;if(n){e.bindFramebuffer(e.FRAMEBUFFER,this._rttContour.getFramebuffer()),e.clear(e.COLOR_BUFFER_BIT);for(var a=0,o=this._selectMeshes,l=o.length;a0&&t.optimizeNearFar(this.computeBoundingBoxScene());for(var r=0,i=e.length;rt[3]&&(t[3]=n[3]),n[4]>t[4]&&(t[4]=n[4]),n[5]>t[5]&&(t[5]=n[5])}return t}},{key:"computeBoundingBoxScene",value:function(){var e=this._meshes.slice();return e.push(this._grid),this._sculptManager.addSculptToScene(e),this.computeBoundingBoxMeshes(e)}},{key:"normalizeAndCenterMeshes",value:function(e){var t=this.computeBoundingBoxMeshes(e),r=o.Z.SCALE/i.TK([t[0],t[1],t[2]],[t[3],t[4],t[5]]),n=l.Ue();l.bA(n,n,[r,r,r]),l.Iu(n,n,[.5*-(t[0]+t[3]),.5*-(t[1]+t[4]),.5*-(t[2]+t[5])]);for(var a=0,s=e.length;a=0&&(this._meshes[r]=t),this._mesh===e&&this.setMesh(t)}},{key:"duplicateSelection",value:function(){for(var e=this._selectMeshes.slice(),t=null,r=0;r=t.status}function n(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(r){var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var s="object"==("undefined"==typeof window?"undefined":a(window))&&window.window===window?window:"object"==("undefined"==typeof self?"undefined":a(self))&&self.self===self?self:"object"==(void 0===r.g?"undefined":a(r.g))&&r.g.global===r.g?r.g:void 0,o=s.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),l=s.saveAs||("object"!=("undefined"==typeof window?"undefined":a(window))||window!==s?function(){}:"download"in HTMLAnchorElement.prototype&&!o?function(e,r,a){var o=s.URL||s.webkitURL,l=document.createElement("a");r=r||e.name||"download",l.download=r,l.rel="noopener","string"==typeof e?(l.href=e,l.origin===location.origin?n(l):i(l.href)?t(e,r,a):n(l,l.target="_blank")):(l.href=o.createObjectURL(e),setTimeout((function(){o.revokeObjectURL(l.href)}),4e4),setTimeout((function(){n(l)}),0))}:"msSaveOrOpenBlob"in navigator?function(e,r,s){if(r=r||e.name||"download","string"!=typeof e)navigator.msSaveOrOpenBlob(function(e,t){return void 0===t?t={autoBom:!1}:"object"!=a(t)&&(console.warn("Deprecated: Expected third argument to be a object"),t={autoBom:!t}),t.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["\ufeff",e],{type:e.type}):e}(e,s),r);else if(i(e))t(e,r,s);else{var o=document.createElement("a");o.href=e,o.target="_blank",setTimeout((function(){n(o)}))}}:function(e,r,i,n){if((n=n||open("","_blank"))&&(n.document.title=n.document.body.innerText="downloading..."),"string"==typeof e)return t(e,r,i);var a="application/octet-stream"===e.type,l=/constructor/i.test(s.HTMLElement)||s.safari,u=/CriOS\/[\d]+/.test(navigator.userAgent);if((u||a&&l||o)&&"undefined"!=typeof FileReader){var c=new FileReader;c.onloadend=function(){var e=c.result;e=u?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),n?n.location.href=e:location=e,n=null},c.readAsDataURL(e)}else{var h=s.URL||s.webkitURL,d=h.createObjectURL(e);n?n.location=d:location.href=d,n=null,setTimeout((function(){h.revokeObjectURL(d)}),4e4)}});s.saveAs=l.saveAs=l,e.exports=l})?i.apply(t,[]):i)||(e.exports=n)},663:(e,t,r)=>{"use strict";r.d(t,{Ib:()=>i,WT:()=>n});var i=1e-6,n="undefined"!=typeof Float32Array?Float32Array:Array;Math.random,Math.PI,Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)})},89:(e,t,r)=>{"use strict";r.d(t,{Ue:()=>n,JG:()=>a,yR:()=>s,U_:()=>o,Iu:()=>l,bA:()=>u,U1:()=>c,lM:()=>h,uD:()=>d,jI:()=>f,en:()=>_,G3:()=>p,M5:()=>g,zB:()=>m,dC:()=>v});var i=r(663);function n(){var e=new i.WT(16);return i.WT!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function a(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function s(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function o(e,t){var r=t[0],i=t[1],n=t[2],a=t[3],s=t[4],o=t[5],l=t[6],u=t[7],c=t[8],h=t[9],d=t[10],f=t[11],_=t[12],p=t[13],g=t[14],m=t[15],v=r*o-i*s,y=r*l-n*s,b=r*u-a*s,T=i*l-n*o,M=i*u-a*o,S=n*u-a*l,k=c*p-h*_,E=c*g-d*_,A=c*m-f*_,C=h*g-d*p,w=h*m-f*p,R=d*m-f*g,x=v*R-y*w+b*C+T*A-M*E+S*k;return x?(x=1/x,e[0]=(o*R-l*w+u*C)*x,e[1]=(n*w-i*R-a*C)*x,e[2]=(p*S-g*M+m*T)*x,e[3]=(d*M-h*S-f*T)*x,e[4]=(l*A-s*R-u*E)*x,e[5]=(r*R-n*A+a*E)*x,e[6]=(g*b-_*S-m*y)*x,e[7]=(c*S-d*b+f*y)*x,e[8]=(s*w-o*A+u*k)*x,e[9]=(i*A-r*w-a*k)*x,e[10]=(_*M-p*b+m*v)*x,e[11]=(h*b-c*M-f*v)*x,e[12]=(o*E-s*C-l*k)*x,e[13]=(r*C-i*E+n*k)*x,e[14]=(p*y-_*T-g*v)*x,e[15]=(c*T-h*y+d*v)*x,e):null}function l(e,t,r){var i,n,a,s,o,l,u,c,h,d,f,_,p=r[0],g=r[1],m=r[2];return t===e?(e[12]=t[0]*p+t[4]*g+t[8]*m+t[12],e[13]=t[1]*p+t[5]*g+t[9]*m+t[13],e[14]=t[2]*p+t[6]*g+t[10]*m+t[14],e[15]=t[3]*p+t[7]*g+t[11]*m+t[15]):(i=t[0],n=t[1],a=t[2],s=t[3],o=t[4],l=t[5],u=t[6],c=t[7],h=t[8],d=t[9],f=t[10],_=t[11],e[0]=i,e[1]=n,e[2]=a,e[3]=s,e[4]=o,e[5]=l,e[6]=u,e[7]=c,e[8]=h,e[9]=d,e[10]=f,e[11]=_,e[12]=i*p+o*g+h*m+t[12],e[13]=n*p+l*g+d*m+t[13],e[14]=a*p+u*g+f*m+t[14],e[15]=s*p+c*g+_*m+t[15]),e}function u(e,t,r){var i=r[0],n=r[1],a=r[2];return e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e[3]=t[3]*i,e[4]=t[4]*n,e[5]=t[5]*n,e[6]=t[6]*n,e[7]=t[7]*n,e[8]=t[8]*a,e[9]=t[9]*a,e[10]=t[10]*a,e[11]=t[11]*a,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function c(e,t,r,n){var a,s,o,l,u,c,h,d,f,_,p,g,m,v,y,b,T,M,S,k,E,A,C,w,R=n[0],x=n[1],P=n[2],D=Math.hypot(R,x,P);return D{"use strict";r.d(t,{Ue:()=>n,al:()=>a,JG:()=>s,t8:()=>o,IH:()=>l,bA:()=>u,od:()=>c,tk:()=>h,Fv:()=>d,AK:()=>f,kC:()=>_,fF:()=>p,kK:()=>g,VC:()=>m,lu:()=>v,TK:()=>y,nI:()=>b,Zh:()=>T,x9:()=>M});var i=r(663);function n(){var e=new i.WT(3);return i.WT!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function a(e,t,r){var n=new i.WT(3);return n[0]=e,n[1]=t,n[2]=r,n}function s(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function o(e,t,r,i){return e[0]=t,e[1]=r,e[2]=i,e}function l(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e}function u(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e}function c(e,t,r,i){return e[0]=t[0]+r[0]*i,e[1]=t[1]+r[1]*i,e[2]=t[2]+r[2]*i,e}function h(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function d(e,t){var r=t[0],i=t[1],n=t[2],a=r*r+i*i+n*n;return a>0&&(a=1/Math.sqrt(a)),e[0]=t[0]*a,e[1]=t[1]*a,e[2]=t[2]*a,e}function f(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function _(e,t,r){var i=t[0],n=t[1],a=t[2],s=r[0],o=r[1],l=r[2];return e[0]=n*l-a*o,e[1]=a*s-i*l,e[2]=i*o-n*s,e}function p(e,t,r){var i=t[0],n=t[1],a=t[2],s=r[3]*i+r[7]*n+r[11]*a+r[15];return s=s||1,e[0]=(r[0]*i+r[4]*n+r[8]*a+r[12])/s,e[1]=(r[1]*i+r[5]*n+r[9]*a+r[13])/s,e[2]=(r[2]*i+r[6]*n+r[10]*a+r[14])/s,e}function g(e,t,r){var i=t[0],n=t[1],a=t[2];return e[0]=i*r[0]+n*r[3]+a*r[6],e[1]=i*r[1]+n*r[4]+a*r[7],e[2]=i*r[2]+n*r[5]+a*r[8],e}function m(e,t,r){var i=r[0],n=r[1],a=r[2],s=r[3],o=t[0],l=t[1],u=t[2],c=n*u-a*l,h=a*o-i*u,d=i*l-n*o,f=n*d-a*h,_=a*c-i*d,p=i*h-n*c,g=2*s;return c*=g,h*=g,d*=g,f*=2,_*=2,p*=2,e[0]=o+c+f,e[1]=l+h+_,e[2]=u+d+p,e}var v=function(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e},y=function(e,t){var r=t[0]-e[0],i=t[1]-e[1],n=t[2]-e[2];return Math.hypot(r,i,n)},b=function(e,t){var r=t[0]-e[0],i=t[1]-e[1],n=t[2]-e[2];return r*r+i*i+n*n},T=function(e){var t=e[0],r=e[1],i=e[2];return Math.hypot(t,r,i)},M=function(e){var t=e[0],r=e[1],i=e[2];return t*t+r*r+i*i};n()},297:(e,t,r)=>{var i;function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(a,s,o,l){"use strict";var u,c=["","webkit","Moz","MS","ms","o"],h=s.createElement("div"),d=Math.round,f=Math.abs,_=Date.now;function p(e,t,r){return setTimeout(M(e,r),t)}function g(e,t,r){return!!Array.isArray(e)&&(m(e,r[t],r),!0)}function m(e,t,r){var i;if(e)if(e.forEach)e.forEach(t,r);else if(e.length!==l)for(i=0;i\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",n=a.console&&(a.console.warn||a.console.log);return n&&n.call(a.console,i,r),e.apply(this,arguments)}}u="function"!=typeof Object.assign?function(e){if(e===l||null===e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),r=1;r-1}function R(e){return e.trim().split(/\s+/g)}function x(e,t,r){if(e.indexOf&&!r)return e.indexOf(t);for(var i=0;ir[t]})):i.sort()),i}function I(e,t){for(var r,i,n=t[0].toUpperCase()+t.slice(1),a=0;a1&&!r.firstMultiple?r.firstMultiple=z(t):1===n&&(r.firstMultiple=!1);var a=r.firstInput,s=r.firstMultiple,o=s?s.center:a.center,u=t.center=X(i);t.timeStamp=_(),t.deltaTime=t.timeStamp-a.timeStamp,t.angle=q(o,u),t.distance=Y(o,u),function(e,t){var r=t.center,i=e.offsetDelta||{},n=e.prevDelta||{},a=e.prevInput||{};1!==t.eventType&&4!==a.eventType||(n=e.prevDelta={x:a.deltaX||0,y:a.deltaY||0},i=e.offsetDelta={x:r.x,y:r.y}),t.deltaX=n.x+(r.x-i.x),t.deltaY=n.y+(r.y-i.y)}(r,t),t.offsetDirection=H(t.deltaX,t.deltaY);var c,h,d=K(t.deltaTime,t.deltaX,t.deltaY);t.overallVelocityX=d.x,t.overallVelocityY=d.y,t.overallVelocity=f(d.x)>f(d.y)?d.x:d.y,t.scale=s?(c=s.pointers,Y((h=i)[0],h[1],G)/Y(c[0],c[1],G)):1,t.rotation=s?function(e,t){return q(t[1],t[0],G)+q(e[1],e[0],G)}(s.pointers,i):0,t.maxPointers=r.prevInput?t.pointers.length>r.prevInput.maxPointers?t.pointers.length:r.prevInput.maxPointers:t.pointers.length,function(e,t){var r,i,n,a,s=e.lastInterval||t,o=t.timeStamp-s.timeStamp;if(8!=t.eventType&&(o>25||s.velocity===l)){var u=t.deltaX-s.deltaX,c=t.deltaY-s.deltaY,h=K(o,u,c);i=h.x,n=h.y,r=f(h.x)>f(h.y)?h.x:h.y,a=H(u,c),e.lastInterval=t}else r=s.velocity,i=s.velocityX,n=s.velocityY,a=s.direction;t.velocity=r,t.velocityX=i,t.velocityY=n,t.direction=a}(r,t);var p=e.element;C(t.srcEvent.target,p)&&(p=t.srcEvent.target),t.target=p}(e,r),e.emit("hammer.input",r),e.recognize(r),e.session.prevInput=r}function z(e){for(var t=[],r=0;r=f(t)?e<0?2:4:t<0?8:16}function Y(e,t,r){r||(r=Z);var i=t[r[0]]-e[r[0]],n=t[r[1]]-e[r[1]];return Math.sqrt(i*i+n*n)}function q(e,t,r){r||(r=Z);var i=t[r[0]]-e[r[0]],n=t[r[1]]-e[r[1]];return 180*Math.atan2(n,i)/Math.PI}W.prototype={handler:function(){},init:function(){this.evEl&&E(this.element,this.evEl,this.domHandler),this.evTarget&&E(this.target,this.evTarget,this.domHandler),this.evWin&&E(O(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&A(this.element,this.evEl,this.domHandler),this.evTarget&&A(this.target,this.evTarget,this.domHandler),this.evWin&&A(O(this.element),this.evWin,this.domHandler)}};var J={mousedown:1,mousemove:2,mouseup:4},Q="mousedown",$="mousemove mouseup";function ee(){this.evEl=Q,this.evWin=$,this.pressed=!1,W.apply(this,arguments)}T(ee,W,{handler:function(e){var t=J[e.type];1&t&&0===e.button&&(this.pressed=!0),2&t&&1!==e.which&&(t=4),this.pressed&&(4&t&&(this.pressed=!1),this.callback(this.manager,t,{pointers:[e],changedPointers:[e],pointerType:U,srcEvent:e}))}});var te={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},re={2:B,3:"pen",4:U,5:"kinect"},ie="pointerdown",ne="pointermove pointerup pointercancel";function ae(){this.evEl=ie,this.evWin=ne,W.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}a.MSPointerEvent&&!a.PointerEvent&&(ie="MSPointerDown",ne="MSPointerMove MSPointerUp MSPointerCancel"),T(ae,W,{handler:function(e){var t=this.store,r=!1,i=e.type.toLowerCase().replace("ms",""),n=te[i],a=re[e.pointerType]||e.pointerType,s=a==B,o=x(t,e.pointerId,"pointerId");1&n&&(0===e.button||s)?o<0&&(t.push(e),o=t.length-1):12&n&&(r=!0),o<0||(t[o]=e,this.callback(this.manager,n,{pointers:t,changedPointers:[e],pointerType:a,srcEvent:e}),r&&t.splice(o,1))}});var se={touchstart:1,touchmove:2,touchend:4,touchcancel:8},oe="touchstart",le="touchstart touchmove touchend touchcancel";function ue(){this.evTarget=oe,this.evWin=le,this.started=!1,W.apply(this,arguments)}function ce(e,t){var r=P(e.touches),i=P(e.changedTouches);return 12&t&&(r=D(r.concat(i),"identifier",!0)),[r,i]}T(ue,W,{handler:function(e){var t=se[e.type];if(1===t&&(this.started=!0),this.started){var r=ce.call(this,e,t);12&t&&r[0].length-r[1].length==0&&(this.started=!1),this.callback(this.manager,t,{pointers:r[0],changedPointers:r[1],pointerType:B,srcEvent:e})}}});var he={touchstart:1,touchmove:2,touchend:4,touchcancel:8},de="touchstart touchmove touchend touchcancel";function fe(){this.evTarget=de,this.targetIds={},W.apply(this,arguments)}function _e(e,t){var r=P(e.touches),i=this.targetIds;if(3&t&&1===r.length)return i[r[0].identifier]=!0,[r,r];var n,a,s=P(e.changedTouches),o=[],l=this.target;if(a=r.filter((function(e){return C(e.target,l)})),1===t)for(n=0;n-1&&i.splice(e,1)}),2500)}}function ve(e){for(var t=e.srcEvent.clientX,r=e.srcEvent.clientY,i=0;i-1&&this.requireFail.splice(t,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(e){return!!this.simultaneous[e.id]},emit:function(e){var t=this,r=this.state;function i(r){t.manager.emit(r,e)}r<8&&i(t.options.event+Pe(r)),i(t.options.event),e.additionalEvent&&i(e.additionalEvent),r>=8&&i(t.options.event+Pe(r))},tryEmit:function(e){if(this.canEmit())return this.emit(e);this.state=Re},canEmit:function(){for(var e=0;et.threshold&&n&t.direction},attrTest:function(e){return Fe.prototype.attrTest.call(this,e)&&(2&this.state||!(2&this.state)&&this.directionTest(e))},emit:function(e){this.pX=e.deltaX,this.pY=e.deltaY;var t=De(e.direction);t&&(e.additionalEvent=this.options.event+t),this._super.emit.call(this,e)}}),T(Le,Fe,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[ke]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},emit:function(e){if(1!==e.scale){var t=e.scale<1?"in":"out";e.additionalEvent=this.options.event+t}this._super.emit.call(this,e)}}),T(Ve,xe,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[Me]},process:function(e){var t=this.options,r=e.pointers.length===t.pointers,i=e.distancet.time;if(this._input=e,!i||!r||12&e.eventType&&!n)this.reset();else if(1&e.eventType)this.reset(),this._timer=p((function(){this.state=8,this.tryEmit()}),t.time,this);else if(4&e.eventType)return 8;return Re},reset:function(){clearTimeout(this._timer)},emit:function(e){8===this.state&&(e&&4&e.eventType?this.manager.emit(this.options.event+"up",e):(this._input.timeStamp=_(),this.manager.emit(this.options.event,this._input)))}}),T(Ne,Fe,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[ke]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)}}),T(Be,Fe,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:30,pointers:1},getTouchAction:function(){return Oe.prototype.getTouchAction.call(this)},attrTest:function(e){var t,r=this.options.direction;return 30&r?t=e.overallVelocity:6&r?t=e.overallVelocityX:24&r&&(t=e.overallVelocityY),this._super.attrTest.call(this,e)&&r&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers==this.options.pointers&&f(t)>this.options.velocity&&4&e.eventType},emit:function(e){var t=De(e.offsetDirection);t&&this.manager.emit(this.options.event+t,e),this.manager.emit(this.options.event,e)}}),T(Ue,xe,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[Se]},process:function(e){var t=this.options,r=e.pointers.length===t.pointers,i=e.distance{var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__,factory;function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}module=__webpack_require__.nmd(module),window,factory=function(){return function(e){var t={};function r(i){if(t[i])return t[i].exports;var n=t[i]={i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"===_typeof(e)&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(i,n,function(t){return e[t]}.bind(null,n));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s="./src/yagui.js")}({"./src/GuiMain.js":function srcGuiMainJs(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var containers_Sidebar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! containers/Sidebar */ \"./src/containers/Sidebar.js\");\n/* harmony import */ var containers_Topbar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! containers/Topbar */ \"./src/containers/Topbar.js\");\n\n\n\nclass GuiMain {\n\n constructor(viewport, callbackResize) {\n this.domMain = document.createElement('div');\n this.viewport = viewport;\n\n this.callbackResize = callbackResize;\n if (this.viewport) {\n this.viewport.style.width = document.documentElement.clientWidth + 'px';\n this.viewport.style.height = document.documentElement.clientHeight + 'px';\n }\n this.cbResize_ = this._onWindowResize.bind(this);\n\n document.body.appendChild(this.domMain);\n this.leftSidebar = undefined;\n this.rightSidebar = undefined;\n this.topbar = undefined;\n\n window.addEventListener('resize', this._onWindowResize.bind(this), false);\n }\n\n _onWindowResize() {\n if (this.viewport) {\n this.viewport.style.width = document.documentElement.clientWidth + 'px';\n this.viewport.style.height = document.documentElement.clientHeight + 'px';\n this.viewport.style.left = '0px';\n this.viewport.style.top = '0px';\n if (this.leftSidebar)\n this.leftSidebar._updateViewportPosition(this.viewport);\n if (this.rightSidebar)\n this.rightSidebar._updateViewportPosition(this.viewport);\n if (this.topbar)\n this.topbar._updateViewportPosition(this.viewport);\n }\n this._updateSidebarsPosition();\n if (this.callbackResize)\n this.callbackResize();\n }\n\n _updateSidebarsPosition() {\n if (!this.topbar) return;\n var off = this.topbar.domTopbar.offsetHeight;\n if (this.leftSidebar)\n this.leftSidebar._setTop(off);\n if (this.rightSidebar)\n this.rightSidebar._setTop(off);\n }\n\n addLeftSidebar() {\n this.leftSidebar = new containers_Sidebar__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.cbResize_);\n var domSide = this.leftSidebar.domSidebar;\n this.domMain.appendChild(domSide);\n this.domMain.appendChild(this.leftSidebar.domResize);\n\n this._updateSidebarsPosition();\n this.leftSidebar._updateViewportPosition(this.viewport);\n return this.leftSidebar;\n }\n\n addRightSidebar() {\n this.rightSidebar = new containers_Sidebar__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.cbResize_);\n var domSide = this.rightSidebar.domSidebar;\n this.domMain.appendChild(domSide);\n this.domMain.appendChild(this.rightSidebar.domResize);\n\n this.rightSidebar._onTheRight();\n this._updateSidebarsPosition();\n this.rightSidebar._updateViewportPosition(this.viewport);\n return this.rightSidebar;\n }\n\n addTopbar() {\n this.topbar = new containers_Topbar__WEBPACK_IMPORTED_MODULE_1__[\"default\"](this.cbResize_);\n this.domMain.appendChild(this.topbar.domTopbar);\n\n this._updateSidebarsPosition();\n this.topbar._updateViewportPosition(this.viewport);\n return this.topbar;\n }\n\n setVisibility(visible) {\n this.domMain.hidden = !visible;\n this._onWindowResize();\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (GuiMain);\n\n\n//# sourceURL=webpack://yagui/./src/GuiMain.js?")},"./src/containers/BaseContainer.js":function srcContainersBaseContainerJs(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var widgets_Button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! widgets/Button */ "./src/widgets/Button.js");\n/* harmony import */ var widgets_Checkbox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! widgets/Checkbox */ "./src/widgets/Checkbox.js");\n/* harmony import */ var widgets_Color__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! widgets/Color */ "./src/widgets/Color.js");\n/* harmony import */ var widgets_Combobox__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! widgets/Combobox */ "./src/widgets/Combobox.js");\n/* harmony import */ var widgets_Slider__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! widgets/Slider */ "./src/widgets/Slider.js");\n/* harmony import */ var widgets_Title__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! widgets/Title */ "./src/widgets/Title.js");\n\n\n\n\n\n\n\n// label : 36%\n// slider : bar 52% + margin 2% + input 10%\n// combobox : 64%\n// color : 64%\nclass BaseContainer {\n\n constructor() {}\n\n _addLine(name) {\n var domLine = document.createElement(\'li\');\n domLine.innerHTML = name || \'\';\n this.domUl.appendChild(domLine);\n return domLine;\n }\n\n _createLabel(name) {\n var domLabel = document.createElement(\'label\');\n domLabel.className = \'gui-label-side\';\n domLabel.innerHTML = name || \'\';\n return domLabel;\n }\n\n _setDomContainer(container) {\n this.domContainer = container;\n }\n\n addTitle(name) {\n var widget = new widgets_Title__WEBPACK_IMPORTED_MODULE_5__["default"](name);\n this.domUl.appendChild(widget.domText);\n return widget;\n }\n\n addCheckbox(name, valOrObject, callbackOrKey) {\n var widget = new widgets_Checkbox__WEBPACK_IMPORTED_MODULE_1__["default"](valOrObject, callbackOrKey);\n var domLine = this._addLine();\n domLine.className += \' gui-pointerOnHover gui-glowOnHover\';\n var domLabel = this._createLabel(name);\n domLabel.style.overflow = \'visible\';\n domLabel.className += \' gui-pointerOnHover\';\n domLine.appendChild(domLabel);\n domLine.appendChild(widget.domCheckbox);\n domLine.appendChild(widget.domLabelCheckbox);\n domLine.addEventListener(\'mousedown\', widget._onMouseDown.bind(widget));\n widget._setDomContainer(domLine);\n return widget;\n }\n\n addCombobox(name, valOrObject, callbackOrKey, options) {\n var widget = new widgets_Combobox__WEBPACK_IMPORTED_MODULE_3__["default"](valOrObject, callbackOrKey, options);\n var domLine = this._addLine();\n if (name) domLine.appendChild(this._createLabel(name));\n else widget.domSelect.style.width = \'100%\';\n domLine.appendChild(widget.domSelect);\n widget._setDomContainer(domLine);\n return widget;\n }\n\n addSlider(name, valOrObject, callbackOrKey, min, max, step) {\n var widget = new widgets_Slider__WEBPACK_IMPORTED_MODULE_4__["default"](valOrObject, callbackOrKey, min, max, step);\n var domLine = this._addLine();\n if (name) domLine.appendChild(this._createLabel(name));\n domLine.appendChild(widget.domInputText);\n domLine.appendChild(widget.domSlider);\n widget._setDomContainer(domLine);\n return widget;\n }\n\n addColor(name, valOrObject, callbackOrKey) {\n var widget = new widgets_Color__WEBPACK_IMPORTED_MODULE_2__["default"](valOrObject, callbackOrKey);\n var domLine = this._addLine();\n if (name) domLine.appendChild(this._createLabel(name));\n else widget.domColor.style.width = \'100%\';\n domLine.appendChild(widget.domColor);\n widget._setDomContainer(domLine);\n return widget;\n }\n\n addButton(name, callbackOrObject, key) {\n var widget = new widgets_Button__WEBPACK_IMPORTED_MODULE_0__["default"](name, callbackOrObject, key);\n var domLine = this._addLine();\n domLine.appendChild(widget.domButton);\n widget._setDomContainer(domLine);\n return widget;\n }\n\n addDualButton(name1, name2, callbackOrObject1, callbackOrObject2, key1, key2) {\n var widget1 = new widgets_Button__WEBPACK_IMPORTED_MODULE_0__["default"](name1, callbackOrObject1, key1);\n var widget2 = new widgets_Button__WEBPACK_IMPORTED_MODULE_0__["default"](name2, callbackOrObject2, key2);\n var domLine = this._addLine();\n domLine.appendChild(widget2.domButton);\n domLine.appendChild(widget1.domButton);\n var style1 = widget1.domButton.style;\n var style2 = widget2.domButton.style;\n style1.width = style2.width = \'49%\';\n style1.marginRight = style2.marginLeft = \'1%\';\n widget1._setDomContainer(domLine);\n widget2._setDomContainer(domLine);\n return [widget1, widget2];\n }\n\n setVisibility(visible) {\n if (!this.domContainer) return;\n this.domContainer.hidden = !visible;\n }\n}\n\n/* harmony default export */ __webpack_exports__["default"] = (BaseContainer);\n\n\n//# sourceURL=webpack://yagui/./src/containers/BaseContainer.js?')},"./src/containers/Folder.js":function srcContainersFolderJs(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var containers_BaseContainer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! containers/BaseContainer */ \"./src/containers/BaseContainer.js\");\n\n\nclass Folder extends containers_BaseContainer__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n\n constructor(name) {\n super();\n\n this.domUl = document.createElement('ul');\n this.domUl.setAttribute('opened', true);\n\n var domTitle = document.createElement('label');\n domTitle.innerHTML = name || '';\n\n domTitle.addEventListener('mousedown', this._onMouseDown.bind(this));\n\n this.domUl.appendChild(domTitle);\n this.isOpen = true;\n }\n\n _onMouseDown() {\n this.isOpen = !this.isOpen;\n this.domUl.setAttribute('opened', this.isOpen);\n }\n\n open() {\n this.isOpen = true;\n this.domUl.setAttribute('opened', true);\n }\n\n close() {\n this.isOpen = false;\n this.domUl.setAttribute('opened', false);\n }\n\n setVisibility(visible) {\n if (!visible) this.domUl.setAttribute('opened', false);\n else if (this.isOpen) this.domUl.setAttribute('opened', true);\n this.domUl.style.height = visible ? 'auto' : '0px';\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Folder);\n\n\n//# sourceURL=webpack://yagui/./src/containers/Folder.js?")},"./src/containers/Menu.js":function srcContainersMenuJs(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var containers_BaseContainer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! containers/BaseContainer */ "./src/containers/BaseContainer.js");\n/* harmony import */ var widgets_MenuButton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! widgets/MenuButton */ "./src/widgets/MenuButton.js");\n\n\n\nclass Menu extends containers_BaseContainer__WEBPACK_IMPORTED_MODULE_0__["default"] {\n\n constructor() {\n super();\n\n this.domUl = document.createElement(\'ul\');\n }\n\n addButton(name, callbackOrObject, shortcutOrKey, shortcut) {\n var widget = new widgets_MenuButton__WEBPACK_IMPORTED_MODULE_1__["default"](callbackOrObject, shortcutOrKey, shortcut);\n var domLine = this._addLine(name);\n domLine.appendChild(widget.domSpan);\n widget._setDomContainer(domLine);\n return widget;\n }\n\n addSlider(name, valOrObject, callbackOrKey, min, max, step) {\n var wid = super.addSlider(name, valOrObject, callbackOrKey, min, max, step);\n // label 36% + slider ?% + 2% + input 18%\n wid.domInputText.style.width = \'18%\';\n wid.domSlider.style.width = name ? \'44%\' : \'80%\';\n return wid;\n }\n}\n\n/* harmony default export */ __webpack_exports__["default"] = (Menu);\n\n\n//# sourceURL=webpack://yagui/./src/containers/Menu.js?')},"./src/containers/Sidebar.js":function srcContainersSidebarJs(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var containers_Folder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! containers/Folder */ \"./src/containers/Folder.js\");\n\n\nclass Sidebar {\n\n constructor(callbackResize) {\n this.domSidebar = document.createElement('div');\n this.domSidebar.className = 'gui-sidebar';\n\n this.domResize = document.createElement('div');\n this.domResize.className = 'gui-resize';\n\n this.isDragging = false;\n this.mouseX = 0;\n this.domResize.addEventListener('mousedown', this._onMouseDown.bind(this));\n window.addEventListener('mousemove', this._onMouseMove.bind(this));\n window.addEventListener('mouseup', this._onMouseUp.bind(this));\n\n this.callbackResize = callbackResize;\n this.isOnTheRight = false;\n }\n\n _setTop(nb) {\n this.domSidebar.style.top = this.domResize.style.top = nb + 'px';\n }\n\n _onTheRight() {\n this.isOnTheRight = true;\n this.domSidebar.style.right = 0;\n this.domSidebar.style.borderRight = 0;\n this.domSidebar.style.borderLeft = 'double';\n this.domSidebar.style.borderColor = 'rgba(255,255,255,0.3)';\n this.domResize.style.left = 'auto';\n this.domResize.style.right = this.domSidebar.offsetWidth + 'px';\n this.domResize.style.marginRight = '-3px';\n }\n\n _onMouseDown(ev) {\n this.isDragging = true;\n this.mouseX = ev.clientX;\n }\n\n _updateViewportPosition(viewport) {\n var w = this.domSidebar.hidden ? 0 : this.domSidebar.offsetWidth;\n if (this.isOnTheRight) {\n viewport.style.width = (viewport.clientWidth - w) + 'px';\n } else {\n viewport.style.left = (this.domSidebar.offsetLeft + w) + 'px';\n viewport.style.width = (viewport.clientWidth - w) + 'px';\n }\n }\n\n _onMouseMove(ev) {\n if (this.isDragging === false) return;\n var mouseX = ev.clientX;\n var delta = mouseX - this.mouseX;\n if (this.isOnTheRight) delta = -delta;\n var widthBar = Math.max(50, this.domSidebar.offsetWidth + delta);\n\n var val = widthBar + 'px';\n this.domSidebar.style.width = val;\n if (this.isOnTheRight) this.domResize.style.right = this.domSidebar.offsetWidth + 'px';\n else this.domResize.style.left = val;\n\n this.mouseX = mouseX;\n this.callbackResize();\n }\n\n _onMouseUp() {\n this.isDragging = false;\n }\n\n addMenu(name) {\n var folder = new containers_Folder__WEBPACK_IMPORTED_MODULE_0__[\"default\"](name);\n this.domSidebar.appendChild(folder.domUl);\n return folder;\n }\n\n setVisibility(visible) {\n this.domSidebar.hidden = !visible;\n this.domResize.hidden = !visible;\n this.callbackResize();\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Sidebar);\n\n\n//# sourceURL=webpack://yagui/./src/containers/Sidebar.js?")},"./src/containers/Topbar.js":function srcContainersTopbarJs(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var containers_Menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! containers/Menu */ "./src/containers/Menu.js");\n/* harmony import */ var utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! utils/EditStyle */ "./src/utils/EditStyle.js");\n\n\n\nclass Topbar {\n\n constructor(callbackResize) {\n this.domTopbar = document.createElement(\'div\');\n this.domTopbar.className = \'gui-topbar\';\n\n this.domUl = document.createElement(\'ul\');\n this.domTopbar.appendChild(this.domUl);\n\n this.callbackResize = callbackResize;\n this.uiExtra = {};\n }\n\n _updateViewportPosition(viewport) {\n var h = this.domTopbar.hidden ? 0 : this.domTopbar.offsetHeight;\n viewport.style.top = h + \'px\';\n viewport.style.height = (viewport.clientHeight - h) + \'px\';\n }\n\n _onChangeColor(callback, color) {\n callback(color);\n this.uiExtra.overallColor.setValue(utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__["default"]._curWidgetColor, true);\n this.uiExtra.widgetColor.setValue(utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__["default"]._curWidgetColor, true);\n this.uiExtra.backColor.setValue(utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__["default"]._curBackgroundColor, true);\n this.uiExtra.textColor.setValue(utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__["default"]._curTextColor, true);\n }\n\n addMenu(name) {\n var menu = new containers_Menu__WEBPACK_IMPORTED_MODULE_0__["default"]();\n var li = document.createElement(\'li\');\n li.setAttribute(\'onclick\', \'void(0)\'); // iOS trick to trigger click on hover\n li.innerHTML = name || \'\';\n this.domUl.appendChild(li);\n li.appendChild(menu.domUl);\n menu._setDomContainer(li);\n return menu;\n }\n\n addExtra() {\n var cb = this._onChangeColor;\n var menu = this.addMenu(\'Extra UI\');\n var ext = this.uiExtra;\n menu.addTitle(\'Overall\');\n ext.overallColor = menu.addColor(\'\', utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__["default"]._curWidgetColor, cb.bind(this, utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__["default"].changeOverallColor));\n\n menu.addTitle(\'Advanced\');\n ext.widgetColor = menu.addColor(\'Widget\', utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__["default"]._curWidgetColor, cb.bind(this, utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__["default"].changeWidgetsColor));\n ext.backColor = menu.addColor(\'Back\', utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__["default"]._curBackgroundColor, cb.bind(this, utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__["default"].changeBackgroundColor));\n ext.textColor = menu.addColor(\'Text\', utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__["default"]._curTextColor, cb.bind(this, utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__["default"].changeTextColor));\n ext.showBorder = menu.addCheckbox(\'Border\', utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__["default"]._curShowBorder, utils_EditStyle__WEBPACK_IMPORTED_MODULE_1__["default"].changeDisplayBoorder);\n return menu;\n }\n\n setVisibility(visible) {\n this.domTopbar.hidden = !visible;\n this.callbackResize();\n }\n}\n\n/* harmony default export */ __webpack_exports__["default"] = (Topbar);\n\n\n//# sourceURL=webpack://yagui/./src/containers/Topbar.js?')},"./src/utils/EditStyle.js":function srcUtilsEditStyleJs(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! utils/GuiUtils */ \"./src/utils/GuiUtils.js\");\n\n\nvar EditStyle = {};\n\nEditStyle.refRules = {};\n\nvar yaguiSheet;\nvar findSheet = function () {\n if (yaguiSheet) return yaguiSheet;\n var sheets = document.styleSheets;\n for (var i = 0, nb = sheets.length; i < nb; ++i) {\n var href = sheets[i].href;\n if (href && href.indexOf('yagui.css') !== -1) {\n yaguiSheet = sheets[i];\n return yaguiSheet;\n }\n }\n return;\n};\n\nvar editStyle = function (selector, key, value) {\n var sheet = findSheet();\n if (!sheet)\n return;\n var rules = sheet.cssRules || sheet.rules;\n var rule = EditStyle.refRules[selector];\n if (!rule) {\n var i = 0;\n var len = rules.length;\n for (i = 0; i < len; ++i) {\n if (rules[i].selectorText === selector) break;\n }\n if (i === len) return false;\n rule = EditStyle.refRules[selector] = rules[i];\n }\n if (rule)\n rule.style[key] = value;\n};\n\nEditStyle.changeWidgetsColor = function (color) {\n var str = utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getStrColor(color);\n // button\n editStyle('.gui-button', 'background', str);\n // select\n editStyle('.gui-select', 'background', str);\n // slider\n editStyle('.gui-slider > div', 'background', str);\n EditStyle._curWidgetColor = color;\n};\n\nEditStyle.changeDisplayBoorder = function (bool) {\n var str = bool ? '1px solid #000' : '0';\n editStyle('.gui-button', 'border', str);\n // select\n editStyle('.gui-select', 'border', str);\n // slider\n editStyle('.gui-slider', 'border', str);\n editStyle('.gui-input-number', 'border', str);\n // folder\n editStyle('.gui-sidebar > ul > label', 'borderTop', str);\n editStyle('.gui-sidebar > ul > label', 'borderBottom', str);\n // side bar\n editStyle('.gui-sidebar', 'borderLeft', str);\n editStyle('.gui-sidebar', 'borderRight', str);\n // top bar\n editStyle('.gui-topbar', 'borderBottom', str);\n EditStyle._curShowBorder = bool;\n};\n\nEditStyle.changeBackgroundColor = function (color) {\n // side bar\n editStyle('.gui-sidebar', 'background', utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getStrColor(color));\n // top bar\n var colTop = utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getStrColor(utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getColorMult(color, 0.5));\n editStyle('.gui-topbar', 'background', colTop);\n editStyle('.gui-topbar ul > li > ul', 'background', colTop);\n EditStyle._curBackgroundColor = color;\n};\n\nEditStyle.changeTextColor = function (color) {\n var strColor = utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getStrColor(color);\n editStyle('*', 'color', strColor);\n editStyle('.gui-sidebar > ul > label', 'color', strColor);\n EditStyle._curTextColor = color;\n};\n\nEditStyle.changeOverallColor = function (color) {\n EditStyle.changeWidgetsColor(color);\n var bgCol = utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getColorMult(color, 0.5);\n bgCol.length = 3;\n EditStyle.changeBackgroundColor(bgCol);\n\n var texCol = utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getColorAdd(color, 0.5);\n for (var i = 0; i < 3; ++i) texCol[i] = Math.min(0.8, texCol[i]);\n EditStyle.changeTextColor(texCol);\n\n EditStyle._curWidgetColor = color;\n EditStyle._curBackgroundColor = bgCol;\n EditStyle._curTextColor = texCol;\n};\n\n// init value\nEditStyle._curTextColor = [0.73, 0.73, 0.73, 1.0];\nEditStyle._curWidgetColor = [0.32, 0.37, 0.39, 1.0];\nEditStyle._curBackgroundColor = [0.24, 0.24, 0.24];\nEditStyle._curShowBorder = false;\n\nEditStyle.changeOverallColor([0.3, 0.34, 0.4, 1.0]);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (EditStyle);\n\n\n//# sourceURL=webpack://yagui/./src/utils/EditStyle.js?")},"./src/utils/GuiUtils.js":function srcUtilsGuiUtilsJs(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\nvar GuiUtils = {};\n\nGuiUtils.rgbToHsv = function (rgb) {\n var r = rgb[0];\n var g = rgb[1];\n var b = rgb[2];\n var maxRGB = Math.max(r, g, b);\n var minRGB = Math.min(r, g, b);\n if (minRGB === maxRGB) return [0, 0, minRGB];\n var d = (r === minRGB) ? g - b : ((b === minRGB) ? r - g : b - r);\n var h = (r === minRGB) ? 3 : ((b === minRGB) ? 1 : 5);\n return [(h - d / (maxRGB - minRGB)) / 6, (maxRGB - minRGB) / maxRGB, maxRGB];\n};\n\nGuiUtils.hsvToRgb = function (hsv) {\n var h = hsv[0] * 6;\n var s = hsv[1];\n var v = hsv[2];\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1.0 - s);\n var q = v * (1.0 - f * s);\n var t = v * (1.0 - (1.0 - f) * s);\n var mod = i % 6;\n if (mod === 0) return [v, t, p];\n else if (mod === 1) return [q, v, p];\n else if (mod === 2) return [p, v, t];\n else if (mod === 3) return [p, q, v];\n else if (mod === 4) return [t, p, v];\n else return [v, p, q];\n};\n\nGuiUtils.getValidColor = function (color) {\n for (var i = 0, len = color.length; i < len; ++i) color[i] = Math.max(0.0, Math.min(1.0, color[i]));\n return color;\n};\n\nGuiUtils.getStrColor = function (color) {\n if (color.length === 3) return GuiUtils.rgbToHex(color);\n return 'rgba(' + Math.round(color[0] * 255) + ',' + Math.round(color[1] * 255) + ',' + Math.round(color[2] * 255) + ',' + color[3] + ')';\n};\n\nGuiUtils.getColorMult = function (color, fac) {\n var out = [color[0] * fac, color[1] * fac, color[2] * fac];\n if (color.length === 4) out.push(color[3]);\n return GuiUtils.getValidColor(out);\n};\n\nGuiUtils.getColorAdd = function (color, add) {\n var out = [color[0] + add, color[1] + add, color[2] + add];\n if (color.length === 4) out.push(color[3]);\n return GuiUtils.getValidColor(out);\n};\n\nGuiUtils.rgbToHex = function (rgb) {\n var h = '#';\n for (var i = 0; i < 3; ++i) {\n var c = Math.round(rgb[i] * 255).toString(16);\n h += c.length === 1 ? '0' + c : c;\n }\n return h;\n};\n\nGuiUtils.hexToRgb = function (hex) {\n var i = 0;\n if (hex[0] === '#') hex = hex.slice(1);\n var h = hex;\n if (hex.length > 6) h = hex.slice(0, 6);\n else if (hex.length < 6) {\n h = '';\n for (i = 0; i < 3; ++i)\n h += hex[i] ? hex[i] + hex[i] : '00';\n }\n var col = [0, 0, 0];\n for (i = 0; i < 3; ++i) {\n var c = parseInt(h[i * 2] + h[i * 2 + 1], 16);\n col[i] = (c !== c ? 0 : c) / 255;\n }\n return col;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (GuiUtils);\n\n\n//# sourceURL=webpack://yagui/./src/utils/GuiUtils.js?")},"./src/widgets/BaseWidget.js":function srcWidgetsBaseWidgetJs(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\nclass BaseWidget {\n\n constructor() {}\n\n _getInitialValue(valOrObject, callbackOrKey) {\n if (typeof callbackOrKey !== 'string') return valOrObject;\n return valOrObject[callbackOrKey];\n }\n\n _getCheckCallback(valOrObject, callbackOrKey) {\n if (typeof callbackOrKey !== 'string') return callbackOrKey;\n return function (val) {\n valOrObject[callbackOrKey] = val;\n };\n }\n\n _setDomContainer(container) {\n this.domContainer = container;\n }\n\n setCallback(callback) {\n this.callback = callback;\n }\n\n setVisibility(visible) {\n if (!this.domContainer) return;\n this.domContainer.hidden = !visible;\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (BaseWidget);\n\n\n//# sourceURL=webpack://yagui/./src/widgets/BaseWidget.js?")},"./src/widgets/Button.js":function srcWidgetsButtonJs(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var widgets_BaseWidget__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! widgets/BaseWidget */ \"./src/widgets/BaseWidget.js\");\n\n\nclass Button extends widgets_BaseWidget__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n\n constructor(name, callbackOrObject, key) {\n super();\n\n var callback = key ? callbackOrObject[key].bind(callbackOrObject) : callbackOrObject;\n\n this.domButton = document.createElement('button');\n this.domButton.className = 'gui-button';\n this.domButton.innerHTML = name || '';\n this.domButton.addEventListener('click', this._onClick.bind(this));\n\n this.setCallback(callback);\n }\n\n setEnable(bool) {\n this.domButton.disabled = bool === undefined ? false : !bool;\n }\n\n _onClick() {\n if (this.callback) this.callback();\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Button);\n\n\n//# sourceURL=webpack://yagui/./src/widgets/Button.js?")},"./src/widgets/Checkbox.js":function srcWidgetsCheckboxJs(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var widgets_BaseWidget__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! widgets/BaseWidget */ \"./src/widgets/BaseWidget.js\");\n\n\nclass Checkbox extends widgets_BaseWidget__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n\n constructor(valOrObject, callbackOrKey) {\n super();\n\n var value = this._getInitialValue(valOrObject, callbackOrKey);\n var callback = this._getCheckCallback(valOrObject, callbackOrKey);\n this.domCheckbox = document.createElement('input');\n this.domCheckbox.className = 'gui-input-checkbox';\n this.domCheckbox.type = 'checkbox';\n\n this.domLabelCheckbox = document.createElement('label');\n\n this.setValue(value === undefined ? true : value);\n this.setCallback(callback);\n }\n\n _onMouseDown() {\n this.setValue(!this.domCheckbox.checked);\n }\n\n setValue(val, ignoreCB) {\n this.domCheckbox.checked = val;\n if (!ignoreCB && this.callback) this.callback(val);\n }\n\n getValue() {\n return this.domCheckbox.checked;\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Checkbox);\n\n\n//# sourceURL=webpack://yagui/./src/widgets/Checkbox.js?")},"./src/widgets/Color.js":function srcWidgetsColorJs(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! utils/GuiUtils */ \"./src/utils/GuiUtils.js\");\n/* harmony import */ var widgets_BaseWidget__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! widgets/BaseWidget */ \"./src/widgets/BaseWidget.js\");\n\n\n\nvar vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\nvar urlAlpha = 'url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAChJREFUeNpiPHPmDAMMGBsbw9lMDDgA6RKM%2F%2F%2F%2Fh3POnj1LCzsAAgwAQtYIcFfEyzkAAAAASUVORK5CYII%3D\")';\n\nclass Color extends widgets_BaseWidget__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n\n constructor(valOrObject, callbackOrKey) {\n super();\n\n var value = this._getInitialValue(valOrObject, callbackOrKey);\n var callback = this._getCheckCallback(valOrObject, callbackOrKey);\n if (value) this.color = utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getValidColor(value.slice());\n else this.color = [1.0, 0.0, 0.0];\n\n // container\n this.domColor = document.createElement('div');\n this.domColor.className = 'gui-widget-color';\n\n // input text\n this.domInputColor = document.createElement('input');\n this.domPopup = document.createElement('div');\n\n // hue picker\n this.domHue = document.createElement('div');\n this.domHue.className = 'gui-color-hue';\n this.domHueKnob = document.createElement('div');\n this.domHueKnob.className = 'gui-knob-hue';\n\n // saturation picker\n this.domSaturation = document.createElement('div');\n this.domSaturation.className = 'gui-color-saturation';\n var zAlphaSat = document.createElement('div');\n this.domSaturation.appendChild(zAlphaSat);\n this.domSaturationKnob = document.createElement('div');\n this.domSaturationKnob.className = 'gui-knob-saturation';\n\n this.domHue.appendChild(this.domHueKnob);\n this.domPopup.appendChild(this.domSaturationKnob);\n this.domPopup.appendChild(this.domSaturation);\n this.domPopup.appendChild(this.domHue);\n this.domColor.appendChild(this.domInputColor);\n this.domColor.appendChild(this.domPopup);\n\n this._hueGradient(this.domHue);\n this._linearGradient(zAlphaSat, 'top', 'rgba(0,0,0,0)', '#000');\n\n this.domColor.addEventListener('keydown', this._onInputDown.bind(this));\n this.domSaturation.addEventListener('mousedown', this._onSaturationDown.bind(this));\n this.domHue.addEventListener('mousedown', this._onHueDown.bind(this));\n window.addEventListener('mouseup', this._onMouseUp.bind(this));\n window.addEventListener('mouseout', this._onMouseUp.bind(this));\n window.addEventListener('mousemove', this._onMouseMove.bind(this));\n\n // alpha picker\n this.hasAlpha = this.color.length === 4;\n this.alpha = 1.0;\n if (this.hasAlpha) {\n this.domPopup.style.width = '142px';\n this.domAlpha = document.createElement('div');\n this.domAlpha.className = 'gui-color-alpha';\n this.domAlphaKnob = document.createElement('div');\n this.domAlphaKnob.className = 'gui-knob-alpha';\n\n this._alphaGradient(this.domAlpha, 'top', 'rgba(0,0,0,1.0)', 'rgba(0,0,0,0.0)');\n\n this.domAlpha.addEventListener('mousedown', this._onAlphaDown.bind(this));\n this.domAlpha.appendChild(this.domAlphaKnob);\n this.domPopup.appendChild(this.domAlpha);\n }\n\n this.editHue = this.editSaturation = this.editAlpha = false;\n this.widgetHeight = this.widgetWidth = 100;\n this.setValue(this.color);\n this.setCallback(callback);\n }\n\n _onInputDown(ev) {\n ev.stopPropagation();\n if (ev.keyCode === 13)\n this.setValue(utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hexToRgb(ev.target.value));\n }\n\n _onUpdateSaturation(ev) {\n var rect = this.domSaturation.getBoundingClientRect();\n var hsv = utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].rgbToHsv(this.getValue());\n hsv[1] = Math.min(1.0, Math.max(0.0, (ev.clientX - rect.left) / rect.width));\n hsv[2] = Math.min(1.0, Math.max(0.0, 1.0 - (ev.clientY - rect.top) / rect.width));\n this.setValue(utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hsvToRgb(hsv), false, true);\n this._updateGui();\n }\n\n _onUpdateHue(ev) {\n var rect = this.domHue.getBoundingClientRect();\n var hsv = utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].rgbToHsv(this.getValue());\n hsv[0] = Math.min(1.0, Math.max(0.0, 1.0 - (ev.clientY - rect.top) / rect.height));\n this.setValue(utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hsvToRgb(hsv), false, true);\n this._updateGui();\n }\n\n _onUpdateAlpha(ev) {\n var rect = this.domAlpha.getBoundingClientRect();\n var col = this.getValue();\n col[3] = this.alpha = Math.min(1.0, Math.max(0.0, 1.0 - (ev.clientY - rect.top) / rect.height));\n this.setValue(col, false, true);\n this._updateGui();\n }\n\n _updateGui() {\n var color = this.getValue();\n var hsv = utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].rgbToHsv(color);\n\n this.domSaturationKnob.style.marginLeft = this.widgetWidth * hsv[1] - 7 + 'px';\n this.domSaturationKnob.style.marginTop = this.widgetHeight * (1.0 - hsv[2]) - 7 + 'px';\n\n hsv[1] = hsv[2] = 1.0;\n this._linearGradient(this.domSaturation, 'left', '#fff', utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getStrColor(utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hsvToRgb(hsv)));\n\n this.domHueKnob.style.marginTop = (1.0 - hsv[0]) * this.widgetHeight + 'px';\n\n if (this.hasAlpha && color[3] !== undefined)\n this.domAlphaKnob.style.marginTop = (1.0 - this.alpha) * this.widgetHeight + 'px';\n }\n\n _onMouseMove(ev) {\n if (!this.editSaturation && !this.editHue && !this.editAlpha) return;\n if (this.editSaturation) return this._onUpdateSaturation(ev);\n if (this.editHue) return this._onUpdateHue(ev);\n if (this.editAlpha) return this._onUpdateAlpha(ev);\n }\n\n _onSaturationDown(ev) {\n this.editSaturation = true;\n this._onMouseMove(ev);\n }\n\n _onHueDown(ev) {\n this.editHue = true;\n this._onMouseMove(ev);\n }\n\n _onAlphaDown(ev) {\n this.editAlpha = true;\n this._onMouseMove(ev);\n }\n\n _onMouseUp() {\n this.editHue = this.editSaturation = this.editAlpha = false;\n }\n\n _hueGradient(dom) {\n dom.style.background = '';\n for (var i = 0, l = vendors.length; i < l; ++i)\n dom.style.cssText += 'background: ' + vendors[i] + 'linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\n }\n\n _alphaGradient(dom, dir, col1, col2) {\n dom.style.background = '';\n for (var i = 0, l = vendors.length; i < l; ++i)\n dom.style.cssText += 'background: ' + vendors[i] + 'linear-gradient(' + dir + ', ' + col1 + ',' + col2 + '),' + urlAlpha + ';';\n }\n\n _linearGradient(dom, dir, col1, col2) {\n dom.style.background = '';\n for (var i = 0, l = vendors.length; i < l; ++i)\n dom.style.cssText += 'background: ' + vendors[i] + 'linear-gradient(' + dir + ', ' + col1 + ' 0%, ' + col2 + ' 100%);';\n }\n\n setValue(color, ignoreCB, ignoreUI) {\n var c = this.color;\n for (var i = 0, nbC = color.length; i < nbC; ++i)\n c[i] = color[i];\n\n var hex = utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].rgbToHex(color);\n this.domInputColor.value = hex;\n if (this.hasAlpha) {\n if (color.length >= 4) this.alpha = color[3];\n else color.push(this.alpha);\n var col = 'rgba(' + parseInt(color[0] * 255, 10) + ',' + parseInt(color[1] * 255, 10) + ',' + parseInt(color[2] * 255, 10) + ',' + this.alpha + ')';\n this._alphaGradient(this.domInputColor, '0deg', col, col);\n } else {\n this.domInputColor.style.background = hex;\n }\n\n // color of text\n var hsv = utils_GuiUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].rgbToHsv(color);\n this.domSaturationKnob.style.borderColor = (hsv[2] < 0.5 || hsv[1] > 0.5) ? '#fff' : '#000';\n this.domInputColor.style.color = (this.alpha > 0.2 && (hsv[2] < 0.5 || hsv[1] > 0.5)) ? '#fff' : '#000';\n if (!ignoreUI) this._updateGui();\n if (!ignoreCB && this.callback) this.callback(color);\n }\n\n getValue() {\n return this.color;\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Color);\n\n\n//# sourceURL=webpack://yagui/./src/widgets/Color.js?")},"./src/widgets/Combobox.js":function srcWidgetsComboboxJs(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var widgets_BaseWidget__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! widgets/BaseWidget */ \"./src/widgets/BaseWidget.js\");\n\n\nclass Combobox extends widgets_BaseWidget__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n\n constructor(valOrObject, callbackOrKey, options) {\n super();\n\n var value = this._getInitialValue(valOrObject, callbackOrKey);\n var callback = this._getCheckCallback(valOrObject, callbackOrKey);\n options = options || {};\n value = value !== undefined ? value : options[0];\n\n this.isArray = options.length !== undefined;\n\n this.domSelect = document.createElement('select');\n this.domSelect.className = 'gui-select';\n this.addOptions(options);\n\n this.domSelect.addEventListener('change', this._onChange.bind(this));\n this.setValue(value);\n this.setCallback(callback);\n }\n\n _parseValue(val) {\n return this.isArray ? parseInt(val, 10) : val;\n }\n\n _onChange(ev) {\n this.setValue(ev.target.value);\n }\n\n addOptions(options) {\n var keys = Object.keys(options);\n for (var i = 0; i < keys.length; ++i) {\n var opt = document.createElement('option');\n opt.innerHTML = options[keys[i]];\n opt.value = keys[i];\n this.domSelect.appendChild(opt);\n }\n }\n\n setValue(val, ignoreCB) {\n this.domSelect.value = val;\n if (!ignoreCB && this.callback) this.callback(this._parseValue(val));\n }\n\n getValue() {\n return this._parseValue(this.domSelect.value);\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Combobox);\n\n\n//# sourceURL=webpack://yagui/./src/widgets/Combobox.js?")},"./src/widgets/MenuButton.js":function srcWidgetsMenuButtonJs(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var widgets_BaseWidget__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! widgets/BaseWidget */ \"./src/widgets/BaseWidget.js\");\n\n\nclass MenuButton extends widgets_BaseWidget__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n\n constructor(callbackOrObject, shortcutOrKey, shortcut) {\n super();\n\n var callback = callbackOrObject;\n if (callback && typeof callback !== 'function') callback = callbackOrObject[shortcutOrKey].bind(callbackOrObject);\n else shortcut = shortcutOrKey;\n\n this.domSpan = document.createElement('span');\n this.domSpan.className = 'shortcut';\n this.domSpan.innerHTML = shortcut || '';\n\n this.setCallback(callback);\n }\n\n _setDomContainer(container) {\n this.domContainer = container;\n container.addEventListener('click', this._onClick.bind(this));\n }\n\n _onClick() {\n if (this.callback) this.callback();\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (MenuButton);\n\n\n//# sourceURL=webpack://yagui/./src/widgets/MenuButton.js?")},"./src/widgets/Slider.js":function srcWidgetsSliderJs(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var widgets_BaseWidget__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! widgets/BaseWidget */ \"./src/widgets/BaseWidget.js\");\n\n\nclass Slider extends widgets_BaseWidget__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n\n constructor(valOrObject, callbackOrKey, min, max, step) {\n super();\n\n var value = this._getInitialValue(valOrObject, callbackOrKey);\n var callback = this._getCheckCallback(valOrObject, callbackOrKey);\n value = value !== undefined ? value : 100;\n min = min !== undefined ? min : 0;\n max = max !== undefined ? max : 200;\n step = step !== undefined ? step : 1;\n\n // slider\n this.domSlider = document.createElement('div');\n this.domSlider.className = 'gui-slider';\n this.domSliderFill = document.createElement('div');\n this.domSlider.appendChild(this.domSliderFill);\n\n // text input\n this.domInputText = document.createElement('input');\n this.domInputText.className = 'gui-input-number';\n this.domInputText.type = 'number';\n this.min = this.domInputText.min = min;\n this.max = this.domInputText.max = max;\n this.step = this.domInputText.step = step;\n\n this.domInputText.addEventListener('keydown', this._onKeyDown.bind(this));\n this.domInputText.addEventListener('change', this._onInputText.bind(this));\n this.domInputText.addEventListener('blur', this._onInputText.bind(this));\n this.domSlider.addEventListener('mousedown', this._onMouseDown.bind(this));\n window.addEventListener('mouseup', this._onMouseUp.bind(this), true);\n window.addEventListener('mousemove', this._onMouseMove.bind(this));\n\n this.lastValue = value;\n this.isDown = false;\n this.setValue(value);\n this.setCallback(callback);\n }\n\n _onInputText(ev) {\n var val = parseFloat(ev.target.value);\n if (val !== val || val === this.lastValue) return;\n this.setValue(val);\n }\n\n _onKeyDown(ev) {\n ev.stopPropagation();\n if (ev.which === 13) // enter\n this.domInputText.blur();\n }\n\n _onMouseMove(ev) {\n ev.preventDefault();\n if (!this.isDown)\n return;\n var rect = this.domSlider.getBoundingClientRect();\n var val = this.min + (this.max - this.min) * ((ev.clientX - rect.left) / rect.width);\n this.setValue(val);\n }\n\n _onMouseDown(ev) {\n this.isDown = true;\n this._onMouseMove(ev);\n }\n\n _onMouseUp() {\n this.isDown = false;\n }\n\n _setDomContainer(container) {\n this.domContainer = container;\n }\n\n getValue() {\n return parseFloat(this.domInputText.value);\n }\n\n setValue(val, ignoreCB) {\n this.lastValue = val;\n val = Math.max(Math.min(val, this.max), this.min);\n val = Math.round(val / this.step) * this.step;\n this.domInputText.value = val;\n var per = this.min;\n if (this.max !== this.min) per = (val - this.min) / (this.max - this.min);\n this.domSliderFill.style.width = 100 * per + '%';\n if (!ignoreCB && this.callback) this.callback(val);\n }\n\n setMax(max) {\n this.domInputText.max = this.max = max;\n return this;\n }\n\n setMin(min) {\n this.min = min;\n return this;\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Slider);\n\n\n//# sourceURL=webpack://yagui/./src/widgets/Slider.js?")},"./src/widgets/Title.js":function srcWidgetsTitleJs(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var widgets_BaseWidget__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! widgets/BaseWidget */ \"./src/widgets/BaseWidget.js\");\n\n\nclass Title extends widgets_BaseWidget__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n\n constructor(name) {\n super();\n\n this.domText = document.createElement('div');\n this.domText.innerHTML = name || '';\n this.domText.className = 'group-title';\n }\n\n setText(text) {\n this.domText.innerHTML = text;\n }\n\n setVisibility(visible) {\n this.domText.hidden = !visible;\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Title);\n\n\n//# sourceURL=webpack://yagui/./src/widgets/Title.js?")},"./src/yagui.js":function srcYaguiJs(module,exports,__webpack_require__){eval('var GuiMain = __webpack_require__(/*! GuiMain */ "./src/GuiMain.js").default;\n\nvar yagui = {\n GuiMain: GuiMain\n};\n\nmodule.exports = yagui;\n\n\n//# sourceURL=webpack://yagui/./src/yagui.js?')}})},"object"===_typeof(exports)&&"object"===_typeof(module)?module.exports=factory():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=factory)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))},183:(e,t,r)=>{"use strict";r.d(t,{Z:()=>u});var i=r(52);var n;function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var s=(a(n={backgroundTitle:"背景",backgroundReset:"重設",backgroundImport:"匯入 (jpg, png...)",backgroundFill:"填充",cameraTitle:"鏡頭",cameraReset:"檢視",cameraCenter:"重設 (空白鍵)",cameraFront:"前視角 (F)",cameraLeft:"左視角 (L)",cameraTop:"俯視角 (T)",cameraMode:"模式",cameraOrbit:"軌道 (轉盤)",cameraSpherical:"球面 (軌跡球)",cameraPlane:"平面 (軌跡球)",cameraProjection:"投影",cameraPerspective:"透視角",cameraOrthographic:"等視角",cameraFov:"視野範圍",cameraPivot:"選擇軸心",fileTitle:"檔案 (匯入/匯出)",fileImportTitle:"匯入",fileAdd:"加入 (obj, sgl, ply, stl)",fileAutoMatrix:"縮放並置中",fileVertexSRGB:"sRGB 頂點色彩",fileExportSceneTitle:"匯出場景",fileExportAll:"匯出出口",fileExportSGL:"儲存 .sgl (SculptGL)",fileExportOBJ:"儲存 .obj",fileExportPLY:"儲存 .ply",fileExportSTL:"儲存 .stl",fileExportTextureTitle:null,fileExportTextureSize:null,fileExportColor:null,fileExportRoughness:null,fileExportMetalness:null,sceneTitle:"場景",sceneReset:"清除場景",sceneResetConfirm:"確認清除場景",sceneAddSphere:"加入球體",sceneAddCube:"加入立方體",sceneAddCylinder:"加入圓柱",sceneAddTorus:"加入圓環",sceneSelection:"選取項目",sceneMerge:"合併選取項目",sceneDuplicate:"刪除選擇"},"sceneDuplicate",null),a(n,"meshTitle","網面"),a(n,"meshNbVertices","頂點 : "),a(n,"meshNbFaces","面 : "),a(n,"topologyTitle","網面結構(拓撲)"),a(n,"multiresTitle","多重解析度"),a(n,"multiresSubdivide","細分"),a(n,"multiresReverse","反轉"),a(n,"multiresResolution","解析度"),a(n,"multiresNoLower","沒有更低等級的解析度。"),a(n,"multiresNoHigher","沒有更高等級的解析度。"),a(n,"multiresDelHigher","刪除較高等級"),a(n,"multiresDelLower","刪除較低等級"),a(n,"multiresSelectLowest","反轉前請先選擇最低的解析度。"),a(n,"multiresSelectHighest","細分前請先選擇最高的解析度。"),a(n,"multiresWarnBigMesh",(function(e){return"下一個細分等級會達到 "+e+" 個面。\n若你清楚你自己正在做什麼,再點擊「細分」一次。"})),a(n,"multiresNotReversible","抱歉,無法反轉此網面。\n此網面不是由流形網面經過細分曲面 (loop-catmull) 而來。"),a(n,"remeshTitle","立體像素網面重構"),a(n,"remeshRemesh","網面重構"),a(n,"remeshResolution","解析度"),a(n,"remeshBlock","塊狀重構"),a(n,"dynamicTitle","動態網面結構"),a(n,"dynamicActivated","啟用 (無四邊形)"),a(n,"dynamicSubdivision","細分"),a(n,"dynamicDecimation","削減面數"),a(n,"dynamicLinear","線性細分"),a(n,"sculptTitle","雕刻和塗繪"),a(n,"sculptBrush","筆刷"),a(n,"sculptInflate","膨脹"),a(n,"sculptTwist","扭轉"),a(n,"sculptSmooth","平滑 (-Shift)"),a(n,"sculptFlatten","抹平"),a(n,"sculptPinch","捏塑"),a(n,"sculptCrease","皺褶"),a(n,"sculptDrag","拖拉"),a(n,"sculptPaint","塗繪"),a(n,"sculptMasking","遮罩 (-Ctrl)"),a(n,"sculptMove","移動"),a(n,"sculptLocalScale","局部縮放"),a(n,"sculptTransform","變形 (E)"),a(n,"sculptCommon","通用"),a(n,"sculptTool","工具"),a(n,"sculptSymmetry","對稱"),a(n,"sculptContinuous","連續"),a(n,"sculptRadius","半徑 (-X)"),a(n,"sculptIntensity","強度 (-C)"),a(n,"sculptHardness","硬度"),a(n,"sculptCulling","薄曲面 (僅影響前面頂點)"),a(n,"sculptAlphaTitle","透明色版 (Alpha)"),a(n,"sculptLockPositon","鎖定位置"),a(n,"sculptAlphaTex","紋理"),a(n,"sculptImportAlpha","匯入 alpha 紋理 (jpg, png...)"),a(n,"sculptNegative","反向 (N 或 -Alt)"),a(n,"sculptColor","反照率"),a(n,"sculptRoughness","粗糙度"),a(n,"sculptMetallic","金屬性"),a(n,"sculptClay","黏土"),a(n,"sculptAccumulate","累積 (每道筆劃無限制)"),a(n,"sculptColorGlobal","總體"),a(n,"sculptPickColor","選擇材質或顏色 (-S)"),a(n,"sculptTangentialSmoothing","僅放鬆"),a(n,"sculptTopologicalCheck","網面結構檢查"),a(n,"sculptMoveAlongNormal","沿法線方向移動 (N 或 -Alt)"),a(n,"sculptMaskingClear","清除 (-Ctrl + 拖動)"),a(n,"sculptMaskingInvert","反轉 (-Ctrl + 點擊)"),a(n,"sculptMaskingBlur","模糊"),a(n,"sculptMaskingSharpen","銳利化"),a(n,"sculptPBRTitle","PBR 材質"),a(n,"sculptPaintAll","塗繪全部"),a(n,"sculptExtractTitle","提取"),a(n,"sculptExtractThickness","厚度"),a(n,"sculptExtractAction","提取 !"),a(n,"stateTitle","記錄"),a(n,"stateUndo","復原"),a(n,"stateRedo","取消復原"),a(n,"stateMaxStack","最大推疊"),a(n,"pressureTitle","感壓繪圖板"),a(n,"pressureRadius","半徑感壓"),a(n,"pressureIntensity","強度感壓"),a(n,"renderingTitle","圖形繪算"),a(n,"renderingGrid","顯示格線"),a(n,"renderingSymmetryLine","顯示鏡像線"),a(n,"renderingMatcap","材質捕捉 (Matcap)"),a(n,"renderingCurvature","曲率"),a(n,"renderingPBR","物理式繪算(PBR)"),a(n,"renderingTransparency","透明"),a(n,"renderingNormal","法線著色器"),a(n,"renderingUV","UV 著色器"),a(n,"renderingShader","著色器"),a(n,"renderingMaterial","材質"),a(n,"renderingImportUV","匯入 (jpg, png...)"),a(n,"renderingImportMatcap","匯入 (jpg, png...)"),a(n,"renderingExtra","額外"),a(n,"renderingFlat","平整面"),a(n,"renderingWireframe","線框 (W)"),a(n,"renderingExposure","曝光"),a(n,"renderingEnvironment","環境"),a(n,"renderingIsolate","隔離/顯示 (I)"),a(n,"renderingFilmic","電影色調對應"),a(n,"contour","輪廓"),a(n,"contourShow","顯示輪廓"),a(n,"contourColor","顏色"),a(n,"darkenUnselected","未選取部分變暗"),a(n,"resolution","解析度"),a(n,"matcapPearl","珍珠"),a(n,"matcapClay","黏土"),a(n,"matcapSkin","膚色"),a(n,"matcapGreen","綠色"),a(n,"matcapWhite","白色"),a(n,"sketchfabTitle","前往 Sketchfab !"),a(n,"sketchfabUpload","上傳"),a(n,"sketchfabUploadMessage",'請輸入你的 sketchfab API 密鑰.\n你也可以不填寫留下 "guest" 進行匿名上傳。\n(當上傳中和完成時會跳出新視窗)'),a(n,"sketchfabUploadError",(function(e){return"Sketchfab 上傳錯誤 :\n"+e})),a(n,"sketchfabUploadSuccess","上傳成功 !\n這是你的連結 :"),a(n,"sketchfabAbort","中止最後上傳的項目 ?"),a(n,"sketchfabUploadProcessing","處理中...\n你的模型將會存放在:"),a(n,"about","關於和說明"),a(n,"alphaNone","無"),a(n,"alphaSquare","方塊"),a(n,"alphaSkin","皮膚"),n),o=function e(t){var r=e.languages[e.select][t]||e.languages.english[t];return"string"==typeof r?r:"function"==typeof r?r.apply(this,Array.prototype.slice.call(arguments,1)):(console.error("No TR found for : "+t),t)};o.languages={english:{backgroundTitle:"Background",backgroundReset:"Reset",backgroundImport:"Import (jpg, png...)",backgroundFill:"Fill",cameraTitle:"Camera",cameraReset:"View",cameraCenter:"Reset (bar)",cameraFront:"Front (F)",cameraLeft:"Left (L)",cameraTop:"Top (T)",cameraMode:"Mode",cameraOrbit:"Orbit (Turntable)",cameraSpherical:"Spherical (Trackball)",cameraPlane:"Plane (Trackball)",cameraProjection:"Projection",cameraPerspective:"Perspective",cameraOrthographic:"Orthographic",cameraFov:"Fov",cameraPivot:"Picking pivot",fileTitle:"Files (import/export)",fileImportTitle:"Import",fileAdd:"Add (obj, sgl, ply, stl)",fileAutoMatrix:"Scale and center",fileVertexSRGB:"sRGB vertex color",fileExportSceneTitle:"Export Scene",fileExportAll:"Export all",fileExportSGL:"Save .sgl (SculptGL)",fileExportOBJ:"Save .obj",fileExportPLY:"Save .ply",fileExportSTL:"Save .stl",fileExportTextureTitle:"Export textures",fileExportTextureSize:"Size",fileExportColor:"Save diffuse",fileExportRoughness:"Save roughness",fileExportMetalness:"Save metalness",sceneTitle:"Scene",sceneReset:"Clear scene",sceneResetConfirm:"Confirm clear scene",sceneAddSphere:"Add sphere",sceneAddCube:"Add cube",sceneAddCylinder:"Add cylinder",sceneAddTorus:"Add torus",sceneSelection:"Selection",sceneMerge:"Merge selection",sceneDuplicate:"Copy selection",sceneDelete:"Delete selection",meshTitle:"Mesh",meshNbVertices:"Vertex : ",meshNbFaces:"Faces : ",topologyTitle:"Topology",multiresTitle:"Multiresolution",multiresSubdivide:"Subdivide",multiresReverse:"Reverse",multiresResolution:"Resolution",multiresNoLower:"There is no lower resolution level.",multiresNoHigher:"There is no higher resolution level.",multiresDelHigher:"Delete higher",multiresDelLower:"Delete lower",multiresSelectLowest:"Select the lowest resolution before reversing.",multiresSelectHighest:"Select the highest resolution before subdividing.",multiresWarnBigMesh:function(e){return"The next subdivision level will reach "+e+' faces.\nIf you know what you are doing, click again on "subdivide".'},multiresNotReversible:"Sorry it is not possile to reverse this mesh.\nThe mesh is not a product of a (loop-catmull) subdivision surface on a manifold mesh.",remeshTitle:"Voxel remeshing (quads)",remeshRemesh:"Remesh",remeshResolution:"Resolution",remeshBlock:"Block",dynamicTitle:"Dynamic Topology",dynamicActivated:"Activated (no quads)",dynamicSubdivision:"Subdivision",dynamicDecimation:"Decimation",dynamicLinear:"Linear subdivision",sculptTitle:"Sculpting & Painting",sculptBrush:"Brush",sculptInflate:"Inflate",sculptTwist:"Twist",sculptSmooth:"Smooth (-Shift)",sculptFlatten:"Flatten",sculptPinch:"Pinch",sculptCrease:"Crease",sculptDrag:"Drag",sculptPaint:"Paint",sculptMasking:"Masking (-Ctrl)",sculptMove:"Move",sculptLocalScale:"Local scale",sculptTransform:"Transform (E)",sculptPen:"Pen",sculptCommon:"Common",sculptTool:"Tool",sculptSymmetry:"Symmetry",sculptContinuous:"Continuous",sculptRadius:"Radius (-X)",sculptIntensity:"Intensity (-C)",sculptHardness:"Hardness",sculptCulling:"Thin surface (front vertex only)",sculptAlphaTitle:"Alpha",sculptLockPositon:"Lock position",sculptAlphaTex:"Texture",sculptImportAlpha:"Import alpha tex (jpg, png...)",sculptNegative:"Negative (N or -Alt)",sculptColor:"Albedo",sculptRoughness:"Roughness",sculptMetallic:"Metallic",sculptClay:"Clay",sculptAccumulate:"Accumulate (no limit per stroke)",sculptColorGlobal:"Global",sculptPickColor:"Material / Color picker (-S)",sculptTangentialSmoothing:"Relax only",sculptTopologicalCheck:"Topological check",sculptMoveAlongNormal:"Move along normal (N or -Alt)",sculptMaskingClear:"Clear (-Ctrl + Drag)",sculptMaskingInvert:"Invert (-Ctrl + Click)",sculptMaskingBlur:"Blur",sculptMaskingSharpen:"Sharpen",sculptPBRTitle:"PBR materials",sculptPaintAll:"Paint all",sculptExtractTitle:"Extract",sculptExtractThickness:"Thickness",sculptExtractAction:"Extract !",penMode:"Pen mode",penModePoints:"Points",penModeStroke:"Stroke",penTitle:"Pen",penEnable:"Enable pen tool",penCloseLoop:"Close loop",penSpacing:"Spacing",penClear:"Clear stroke",penNewSet:"New set",penFinishSet:"Finish set",penFeatureList:"Point sets",penNoFeatures:"No feature sets yet",penClosed:"Closed",padsTrimsTitle:"Pads & Trims",padsTrimsSourceSets:"Point sets",padsTrimsCreatePad:"Create pad",padsTrimsCreateTrim:"Create trim",padsTrimsPadHeight:"Pad height",padsTrimsTrimDepth:"Trim depth",padsTrimsPadDirection:"Pad direction",padsTrimsTrimDirection:"Trim direction",padsTrimsDirIn:"In",padsTrimsDirOut:"Out",padsTrimsDirBoth:"Both",padsTrimsFeatureSets:"Volumes",padsTrimsFrom:"from",padsTrimsPadLabel:"Pad",padsTrimsTrimLabel:"Trim",padsTrimsHeight:"height",padsTrimsDepth:"depth",stateTitle:"History",stateUndo:"Undo",stateRedo:"Redo",stateMaxStack:"Max Stack",pressureTitle:"Tablet pressure",pressureRadius:"Pressure radius",pressureIntensity:"Pressure intensity",renderingTitle:"Rendering",renderingGrid:"Show grid",renderingSymmetryLine:"Show mirror line",renderingMatcap:"Matcap",renderingCurvature:"Curvature",renderingPBR:"PBR",renderingTransparency:"Transparency",renderingNormal:"Normal shader",renderingUV:"UV shader",renderingShader:"Shader",renderingMaterial:"Material",renderingImportUV:"Import (jpg, png...)",renderingImportMatcap:"Import (jpg, png...)",renderingExtra:"Extra",renderingFlat:"Flat shading",renderingWireframe:"Wireframe (W)",renderingSectionCut:"Section cut",renderingSectionAxis:"Axis",renderingSectionOffset:"Offset",renderingSectionInvert:"Invert",renderingExposure:"Exposure",renderingEnvironment:"Environment",renderingIsolate:"Isolate/Show (I)",renderingFilmic:"Filmic tonemapping",contour:"Contour",contourShow:"Show contour",contourColor:"Color",darkenUnselected:"Darken unselected",resolution:"Resolution",matcapPearl:"Pearl",matcapClay:"Clay",matcapSkin:"Skin",matcapGreen:"Green",matcapWhite:"White",sketchfabTitle:"Go to Sketchfab !",sketchfabUpload:"Upload",sketchfabUploadMessage:'Please enter your sketchfab API Key.\nYou can also leave "guest" to upload anonymously.\n(a new window will pop up when the uploading and processing is finished)',sketchfabUploadError:function(e){return"Sketchfab upload error :\n"+e},sketchfabUploadSuccess:"Upload success !\nHere is your link :",sketchfabAbort:"Abort the last upload ?",sketchfabUploadProcessing:"Processing...\nYour model will be available at :",about:"About & Help",alphaNone:"None",alphaSquare:"Square",alphaSkin:"Skin",remeshTitleMC:"Voxel remeshing (manifold tris)",remeshRemeshMC:"Remesh",remeshSmoothingMC:"Relax topology"},日本語:{backgroundTitle:"バックグラウンド",backgroundReset:"リセット",backgroundImport:"インポート (jpg, png...)",backgroundFill:null,cameraTitle:"カメラ",cameraReset:"View",cameraCenter:null,cameraFront:null,cameraLeft:null,cameraTop:null,cameraMode:"モード",cameraOrbit:null,cameraSpherical:"球体 (Trackball)",cameraPlane:"平面 (Trackball)",cameraProjection:"タイプ",cameraPerspective:"透視投影",cameraOrthographic:"平行投影",cameraFov:"視野",cameraPivot:"ピボット選択",fileTitle:"ファイル (インポート/エクスポート)",fileImportTitle:null,fileAdd:"Add (obj, sgl, ply, stl)",fileAutoMatrix:null,fileVertexSRGB:null,fileExportSceneTitle:null,fileExportAll:null,fileExportSGL:null,fileExportOBJ:null,fileExportPLY:null,fileExportSTL:null,fileExportTextureTitle:null,fileExportTextureSize:null,fileExportColor:null,fileExportRoughness:null,fileExportMetalness:null,sceneTitle:null,sceneReset:null,sceneAddSphere:null,sceneAddCube:null,sceneAddCylinder:null,sceneAddTorus:null,sceneSelection:null,sceneMerge:null,sceneDuplicate:null,meshTitle:"メッシュ",meshNbVertices:null,meshNbFaces:null,topologyTitle:null,multiresTitle:null,multiresSubdivide:null,multiresReverse:null,multiresResolution:null,multiresNoLower:null,multiresNoHigher:null,multiresDelHigher:null,multiresDelLower:null,multiresSelectLowest:null,multiresSelectHighest:null,multiresWarnBigMesh:null,multiresNotReversible:null,remeshTitle:null,remeshRemesh:null,remeshResolution:null,remeshBlock:null,dynamicTitle:null,dynamicActivated:null,dynamicSubdivision:null,dynamicDecimation:null,dynamicLinear:null,sculptTitle:null,sculptBrush:"ブラシ",sculptInflate:"膨張",sculptTwist:"回転",sculptSmooth:"スムーズ化 (-Shift)",sculptFlatten:"フラット化",sculptPinch:"つまむ",sculptCrease:"しわ",sculptDrag:"ドラッグ",sculptPaint:"ペイント",sculptMasking:null,sculptMove:null,sculptLocalScale:null,sculptTransform:null,sculptCommon:null,sculptTool:"ツール",sculptSymmetry:"対称加工",sculptContinuous:"連続加工",sculptRadius:"半径 (-X)",sculptIntensity:"明るさ (-C)",sculptHardness:null,sculptCulling:null,sculptAlphaTitle:null,sculptLockPositon:null,sculptAlphaTex:null,sculptImportAlpha:null,sculptNegative:"ネガティブ (N or -Alt)",sculptColor:null,sculptRoughness:null,sculptMetallic:null,sculptClay:"クレイ",sculptAccumulate:null,sculptColorGlobal:null,sculptPickColor:null,sculptTangentialSmoothing:null,sculptTopologicalCheck:null,sculptMoveAlongNormal:null,sculptMaskingClear:null,sculptMaskingInvert:null,sculptMaskingBlur:null,sculptMaskingSharpen:null,sculptPBRTitle:null,sculptPaintAll:null,sculptExtractTitle:null,sculptExtractThickness:null,sculptExtractAction:null,stateTitle:"履歴",stateUndo:"アンドゥ",stateRedo:"リドゥ",stateMaxStack:null,pressureTitle:"ワコムタブレット",pressureRadius:"圧力半径?",pressureIntensity:"圧力の強さ?",renderingTitle:null,renderingGrid:null,renderingSymmetryLine:null,renderingMatcap:null,renderingCurvature:null,renderingPBR:null,renderingTransparency:"透過",renderingNormal:"ノーマル",renderingUV:null,renderingShader:"シェーダー",renderingMaterial:null,renderingImportUV:null,renderingImportMatcap:null,renderingExtra:null,renderingFlat:"フラットシェーディング",renderingWireframe:"ワイヤーフレーム (W)",renderingExposure:null,renderingEnvironment:null,renderingIsolate:null,renderingFilmic:null,contour:null,contourShow:null,contourColor:null,darkenUnselected:null,resolution:null,matcapPearl:null,matcapClay:"クレイ",matcapSkin:"スキン",matcapGreen:null,matcapWhite:null,sketchfabTitle:"Sketchfabへ移動",sketchfabUpload:"アップロード",sketchfabUploadMessage:null,sketchfabUploadError:null,sketchfabUploadSuccess:null,sketchfabAbort:null,sketchfabUploadProcessing:null,about:null,alphaNone:null,alphaSquare:null,alphaSkin:null},中文:s,한국어:{backgroundTitle:"배경",backgroundReset:"초기화",backgroundImport:"가져오기 (jpg, png...)",backgroundFill:"화면 가득 채우기",cameraTitle:"카메라",cameraReset:"뷰",cameraCenter:"초기화 (bar)",cameraFront:"앞쪽 (F)",cameraLeft:"왼쪽 (L)",cameraTop:"위쪽 (T)",cameraMode:"조작방식",cameraOrbit:"궤도 (Turntable)",cameraSpherical:"구형 (Trackball)",cameraPlane:"평면 (Trackball)",cameraProjection:"사영법",cameraPerspective:"투시원근법",cameraOrthographic:"정사영법",cameraFov:"시야각",cameraPivot:"피봇 찍기",fileTitle:"파일 (가져오기/내보내기)",fileImportTitle:"가져오기",fileAdd:"추가 (obj, sgl, ply, stl)",fileAutoMatrix:"크기조정 및 중앙정렬",fileVertexSRGB:"sRGB 버텍스 색상",fileExportSceneTitle:"장면 내보내기",fileExportAll:"모두 내보내기",fileExportSGL:".sgl 파일로 저장하기",fileExportOBJ:".obj 파일로 저장하기",fileExportPLY:".ply 파일로 저장하기",fileExportSTL:".stl 파일로 저장하기",fileExportTextureTitle:null,fileExportTextureSize:null,fileExportColor:null,fileExportRoughness:null,fileExportMetalness:null,sceneTitle:"장면",sceneReset:"모두 없애기",sceneResetConfirm:"모두 제거 확인",sceneAddSphere:"구 추가하기",sceneAddCube:"정육면체 추가하기",sceneAddCylinder:"기둥 추가하기",sceneAddTorus:"도넛 추가하기",sceneSelection:"선택",sceneMerge:"장면 병합하기",sceneDuplicate:null,sceneDelete:"선택 항목 삭제",meshTitle:"메시",meshNbVertices:"버텍스 개수 : ",meshNbFaces:"페이스 개수 : ",topologyTitle:"토폴로지",multiresTitle:"다중 해상도",multiresSubdivide:"세분화",multiresReverse:"간소화",multiresResolution:"해상도",multiresNoLower:"더 낮은 해상도가 존재하지 않습니다.",multiresNoHigher:"더 높은 해상도가 존재하지 않습니다.",multiresDelHigher:"상위 단계 제거",multiresDelLower:"하위 단계 제거",multiresSelectLowest:"간소화 하기 전에 더 낮은 해상도를 고르세요.",multiresSelectHighest:"세분화 하기 전에 더 높은 해상도를 고르세요",multiresWarnBigMesh:function(e){return"다음 분할 단계의 면 개수는 "+e+' 개가 될 것입니다.\n지금 뭘 하려는건지 정확히 이해하고 있다면 "세분화" 버튼을 다시 누르세요.'},multiresNotReversible:"이 메시는 더이상 병합할 수 없습니다.\n이 메시는 다양체 메시상의 세분화(loop-catmull) 결과가 아닙니다.",remeshTitle:"복셀 리메싱",remeshRemesh:"리메시",remeshResolution:"해상도",remeshBlock:"각지게",dynamicTitle:"동적 토폴로지",dynamicActivated:"활성화 (사각형 유지 안함)",dynamicSubdivision:"세분화",dynamicDecimation:"간소화",dynamicLinear:"선형 세분화",sculptTitle:"스컬핑 & 페인팅",sculptBrush:"브러시",sculptInflate:"부풀리기",sculptTwist:"비틀기",sculptSmooth:"부드럽게 (-Shift)",sculptFlatten:"평평하게",sculptPinch:"꼬집기",sculptCrease:"주름내기",sculptDrag:"잡아끌기",sculptPaint:"칠하기",sculptMasking:"마스킹 (-Ctrl)",sculptMove:"잡아당기기",sculptLocalScale:"지역 스케일",sculptTransform:"변환 (E)",sculptCommon:"일반",sculptTool:"도구",sculptSymmetry:"대칭",sculptContinuous:"누적",sculptRadius:"반경 (-X)",sculptIntensity:"세기 (-C)",sculptHardness:"경도",sculptCulling:"얇은 표면 (앞쪽 면만 적용)",sculptAlphaTitle:"알파",sculptLockPositon:"위치 고정",sculptAlphaTex:"텍스쳐",sculptImportAlpha:"알파 텍스쳐 가져오기 (jpg, png...)",sculptNegative:"반전 (N 또는 -Alt)",sculptColor:"알베도",sculptRoughness:"거칠기",sculptMetallic:"금속",sculptClay:"찰흙",sculptAccumulate:"누적 (획 당으로 제한받지 않음)",sculptColorGlobal:null,sculptPickColor:"재질 / 색상 선택 (-S)",sculptTangentialSmoothing:"완화 한정",sculptTopologicalCheck:"위상 검사",sculptMoveAlongNormal:"법선 방향으로 움직이기",sculptMaskingClear:"초기화 (-Ctrl + Drag)",sculptMaskingInvert:"반전 (-Ctrl + Click)",sculptMaskingBlur:"흐리게",sculptMaskingSharpen:"선명하게",sculptPBRTitle:"PBR 재질",sculptPaintAll:"전부 칠하기",sculptExtractTitle:"추출하기",sculptExtractThickness:"두께",sculptExtractAction:"추출!",stateTitle:"히스토리",stateUndo:"실행 취소",stateRedo:"다시 실행",stateMaxStack:"최대 실행취소 횟수",pressureTitle:"필압",pressureRadius:"필압반경",pressureIntensity:"필압 세기",renderingTitle:"렌더링",renderingGrid:"그리드 보기",renderingSymmetryLine:"대칭선 보기",renderingMatcap:"매트캡",renderingCurvature:"곡률 강조",renderingPBR:"PBR",renderingTransparency:"투명도",renderingNormal:"노말 셰이더",renderingUV:"UV 셰이더",renderingShader:"셰이더",renderingMaterial:"재질",renderingImportUV:"가져오기 (jpg, png...)",renderingImportMatcap:"가져오기 (jpg, png...)",renderingExtra:"그 외",renderingFlat:"플랫 셰이딩",renderingWireframe:"와이어프레임 (W)",renderingExposure:"노출",renderingEnvironment:"환경",renderingIsolate:"하나보기/모두보기 (I)",renderingFilmic:"영화적(filmic) 톤매핑",contour:"윤곽선",contourShow:"윤곽선 보기",contourColor:"색상",darkenUnselected:"선택안된건 어둡게",resolution:"해상도",matcapPearl:"진주",matcapClay:"찰흙",matcapSkin:"피부",matcapGreen:"초록",matcapWhite:"하양",sketchfabTitle:"Sketchfab에 올리기",sketchfabUpload:"올리기",sketchfabUploadMessage:null,sketchfabUploadError:null,sketchfabUploadSuccess:null,sketchfabAbort:null,sketchfabUploadProcessing:null,about:"SculptGL 정보",alphaNone:null,alphaSquare:null,alphaSkin:null},русский:{backgroundTitle:"Фон",backgroundReset:"Сброс",backgroundImport:"Импорт (jpg, png...)",backgroundFill:"Заполнить",cameraTitle:"Камера",cameraReset:"Вид",cameraCenter:"Сброс (bar)",cameraFront:"Спереди (F)",cameraLeft:"Слева (L)",cameraTop:"Сверху (T)",cameraMode:"Режим камеры",cameraOrbit:"Орбита (Вращение)",cameraSpherical:"Сферическая (трекбол)",cameraPlane:"Плоскость (трекбол)",cameraProjection:"Проекция",cameraPerspective:"Перспективная",cameraOrthographic:"Ортогональная",cameraFov:"Угол обзора",cameraPivot:"Выбор вращения",fileTitle:"Файл",fileImportTitle:"Импорт",fileAdd:"Добавить(obj,sgl,ply,stl)",fileAutoMatrix:"Масштаб-вид",fileVertexSRGB:"Цвета вершин sRGB",fileExportSceneTitle:"Экспорт сцены",fileExportAll:"Экспорт все",fileExportSGL:"Сохранить .sgl",fileExportOBJ:"Сохранить .obj",fileExportPLY:"Сохранить .ply",fileExportSTL:"Сохранить .stl",fileExportTextureTitle:null,fileExportTextureSize:null,fileExportColor:null,fileExportRoughness:null,fileExportMetalness:null,sceneTitle:"Сцена",sceneReset:"Очистить сцену",sceneResetConfirm:"Подтвердить четкую сцену",sceneAddSphere:"Добавить сферу",sceneAddCube:"Добавить куб",sceneAddCylinder:"Добавить цилиндр",sceneAddTorus:"Добавить тор",sceneSelection:"Выбрать",sceneMerge:"Объединить",sceneDuplicate:null,sceneDelete:"Удалить выделение",meshTitle:"Сетка",meshNbVertices:"Вершины : ",meshNbFaces:"Грани : ",topologyTitle:"Топология",multiresTitle:"Детализация",multiresSubdivide:"Увеличить",multiresReverse:"Реверс",multiresResolution:"Разрешение",multiresNoLower:"Ниже уровня не существует.",multiresNoHigher:"Выше уровня не существует.",multiresDelHigher:"Удалить высокое",multiresDelLower:"Удалить низкое",multiresSelectLowest:"Выберете низкий перед реверсом.",multiresSelectHighest:"Выберете бысокий перед увеличением.",multiresWarnBigMesh:function(e){return"Следующий уровень "+e+' faces.\nЕсли вы уверены, снова нажмите на "разрешение".'},multiresNotReversible:"К сожалению это не возможно, чтобы изменить эту сетку.\nСетка не продуктивна.",remeshTitle:"Перестроить воксели",remeshRemesh:"Перестроить",remeshResolution:"Разрешение",remeshBlock:"Блоки-кубики",dynamicTitle:"Динамическая топология",dynamicActivated:"Активировать (без кубиков)",dynamicSubdivision:"Увеличить",dynamicDecimation:"Прореживание",dynamicLinear:"Линейное увеличение",sculptTitle:"Лепить и красить",sculptBrush:"3D Кисть",sculptInflate:"3D Надуть",sculptTwist:"3D Закручивание",sculptSmooth:"3D Сгладить (-Shift)",sculptFlatten:"3D Расплющить",sculptPinch:"3D Сдавить",sculptCrease:"3D Складка",sculptDrag:"3D Тянучка",sculptMove:"3D Перемещать",sculptLocalScale:"3D масштабирование",sculptPaint:"2D Кисть",sculptMasking:"2D Маска (-Ctrl)",sculptTransform:"Трансформация",sculptCommon:"Общее",sculptTool:"Инструмент",sculptSymmetry:"Симетрия",sculptContinuous:"Спрей",sculptRadius:"Размер (-X)",sculptIntensity:"Сила (-C)",sculptHardness:"Жесткость",sculptCulling:"Тонкая поверхность(передние вершины)",sculptAlphaTitle:"Альфа",sculptLockPositon:"Фиксация",sculptAlphaTex:"Текстура",sculptImportAlpha:"Импорт альфа текстуры (jpg, png...)",sculptNegative:"Негатив (N или -Alt)",sculptColor:"Палитра",sculptRoughness:"Шероховатость",sculptMetallic:"Металлический",sculptClay:"Без учета содержимого",sculptAccumulate:"Наращивать без ограничений",sculptColorGlobal:"Глобальный",sculptPickColor:"Пипетка материал (-S)",sculptTangentialSmoothing:"Сглаживание по касательной",sculptTopologicalCheck:"Проверка топологии",sculptMoveAlongNormal:"Перемещать вдоль нормали",sculptMaskingClear:"Очистить (-Ctrl + Drag)",sculptMaskingInvert:"Инверсия (-Ctrl + Click)",sculptMaskingBlur:"Сгладить",sculptMaskingSharpen:"Резко",sculptPBRTitle:"PBR материал",sculptPaintAll:"Краска",sculptExtractTitle:"Извлечь",sculptExtractThickness:"Толщина",sculptExtractAction:"Извлечь!",stateTitle:"История",stateUndo:"Назад",stateRedo:"Вперед",stateMaxStack:"Количество шагов",pressureTitle:"Планшет pressure",pressureRadius:"Нажим-размер",pressureIntensity:"Нажим-жесткость",renderingTitle:"Визуализация",renderingGrid:"Показать сетку",renderingSymmetryLine:"Линия симетрии",renderingMatcap:null,renderingCurvature:"Рельефность",renderingPBR:"PBR",renderingTransparency:"Прозрачность",renderingNormal:"Карта нормалей",renderingUV:"UV",renderingShader:"Шейдеры",renderingMaterial:"Материал",renderingImportUV:"Импорт (jpg, png...)",renderingImportMatcap:"Импорт (jpg, png...)",renderingExtra:"Дополнительно",renderingFlat:"Плоскости",renderingWireframe:"Каркас (W)",renderingExposure:"Экспозиция",renderingEnvironment:"Отражение",renderingIsolate:"Изолировать / Показать (I)",renderingFilmic:"Пленка",contour:"Контур",contourShow:"Показать контур",contourColor:"Цвет",darkenUnselected:"Затемнить невыбранное",resolution:"Разрешение",matcapPearl:"Жемчуг",matcapClay:"Глина",matcapSkin:"Кожа",matcapGreen:"Зеленый",matcapWhite:"Белый",sketchfabTitle:"В Sketchfab.com ",sketchfabUpload:"Загрузить",sketchfabUploadMessage:"Ведите API-ключ sketchfab.\nОставьте слово «guest», чтобы загрузить модель анонимно.\n(По окончании загрузки и обработки откроется новое окно)",sketchfabUploadError:function(e){return"Ошибка загрузки в Sketchfab :\n"+e},sketchfabUploadSuccess:"Загрузка выполнена !\nВаша ссылка:",sketchfabAbort:"Прервать загрузку?",sketchfabUploadProcessing:"Обработка...\nВаша модель будет доступна после:",about:"О программе",alphaNone:"Нет",alphaSquare:"Квадрат",alphaSkin:"Кожа"},turkish:{backgroundTitle:"Arka plan",backgroundReset:"Temizle",backgroundImport:"İçe Aktar (jpg, png...)",backgroundFill:"Doldur",cameraTitle:"Kamera",cameraReset:"Görünüm",cameraCenter:"Temizle (boşluk)",cameraFront:"Ön (F)",cameraLeft:"Sol (L)",cameraTop:"Üst (T)",cameraMode:"Mod",cameraOrbit:"Eksen (Döner Tabla)",cameraSpherical:"Küresel (Trackball)",cameraPlane:"Düzlem (Trackball)",cameraProjection:"İz Düşüm",cameraPerspective:"Perspektif",cameraOrthographic:"Orthografik",cameraFov:"Görüş Alanı",cameraPivot:"Eksen",fileTitle:"Dosyalar (içeri/dışarı)",fileImportTitle:"İçe Aktar",fileAdd:"Aktar (obj, sgl, ply, stl)",fileAutoMatrix:"Ölçekle ve ortala",fileVertexSRGB:"sRGB verteks renk",fileExportSceneTitle:"Sahneyi Dışa Aktar",fileExportAll:"tümünü ver",fileExportSGL:"Kaydet .sgl (SculptGL)",fileExportOBJ:"Kaydet .obj",fileExportPLY:"Kaydet .ply",fileExportSTL:"Kaydet .stl",fileExportTextureTitle:null,fileExportTextureSize:null,fileExportColor:null,fileExportRoughness:null,fileExportMetalness:null,sceneTitle:"Sahne",sceneReset:"Sahneyi temizle",sceneResetConfirm:"Net sahneyi doğrulayın",sceneAddSphere:"Küre ekle",sceneAddCube:"Küp ekle",sceneAddCylinder:"Silindir ekle",sceneAddTorus:"Halka ekle",sceneSelection:"Seçim",sceneMerge:"Seçimi birleştir",sceneDuplicate:null,sceneDelete:"Seçimi sil",meshTitle:"Nesne",meshNbVertices:"Verteks : ",meshNbFaces:"Cephe : ",topologyTitle:"Topoloji",multiresTitle:"Çoklu çözünürlük",multiresSubdivide:"Böl",multiresReverse:"Ters",multiresResolution:"Çözünürlük",multiresNoLower:"Daha düşük çözünürlük yok.",multiresNoHigher:"Daha yüksek çözünürlük yok.",multiresDelHigher:"Üst çözünürlüğü sil",multiresDelLower:"Alt çözünürlüğü sil",multiresSelectLowest:"Tersine çevirmeden önce en düşük çözünürlüğü seç.",multiresSelectHighest:"Tesine çevirmeden önce en yüksek çözünürlüğü seç.",multiresWarnBigMesh:function(e){return"Sonraki çözünürlük "+e+' cepheden oluşacak.\nEğer devam etmek istiyorsanız, tekrar "böl" butonuna basın.'},multiresNotReversible:"Malesef bu nesneyi tersine çevirmek mümkün değil.\nThe mesh is not a product of a (loop-catmull) subdivision surface on a manifold mesh.",remeshTitle:"Voksel Remeshing",remeshRemesh:"Remesh",remeshResolution:"Çözünürlük",remeshBlock:"Engelle",dynamicTitle:"Dinamik Topoloji",dynamicActivated:"Aktifleştirildi (no quads)",dynamicSubdivision:"Altbölüm",dynamicDecimation:"Üstbölüm",dynamicLinear:"Doğrusal altbölüm",sculptTitle:"Oyma & Boyama",sculptBrush:"Fırça",sculptInflate:"Şişir",sculptTwist:"Bükülme",sculptSmooth:"Yumuşat (-Shift)",sculptFlatten:"Düzleştir",sculptPinch:"Çimdik",sculptCrease:"Kıvrım",sculptDrag:"Sürükle",sculptPaint:"Boya",sculptMasking:"Maskeleme (-Ctrl)",sculptMove:"Taşı",sculptLocalScale:"Yerel ölçek",sculptTransform:"Transform (E)",sculptCommon:"Genel",sculptTool:"Araç",sculptSymmetry:"Simetri",sculptContinuous:"Sürekli",sculptRadius:"Yarıçağ (-X)",sculptIntensity:"Yoğunluk (-C)",sculptHardness:"Sertlik",sculptCulling:"İnce yüzey (front vertex only)",sculptAlphaTitle:"Alfa",sculptLockPositon:"Pozisyonu kilitle",sculptAlphaTex:"Kaplama",sculptImportAlpha:"Alfa kaplama yükle (jpg, png...)",sculptNegative:"Negatif (N or -Alt)",sculptColor:"Aklık",sculptRoughness:"Pürüzlülük",sculptMetallic:"Metalik",sculptClay:"Kil",sculptAccumulate:"Biriktir (limitsiz)",sculptColorGlobal:"Evrensel",sculptPickColor:"Materyal / Renk seçici (-S)",sculptTangentialSmoothing:"Rahatlat",sculptTopologicalCheck:"Topoloji kontrol",sculptMoveAlongNormal:"Normal boyunca taşı (N or -Alt)",sculptMaskingClear:"Temizle (-Ctrl + Drag)",sculptMaskingInvert:"Tersine çevir (-Ctrl + Click)",sculptMaskingBlur:"Bulanıklaştır",sculptMaskingSharpen:"Keskinleştir",sculptPBRTitle:"PBR materyali",sculptPaintAll:"Tümünü boya",sculptExtractTitle:"Çıkar",sculptExtractThickness:"Kalınlık",sculptExtractAction:"Çıkar !",stateTitle:"Geçmiş",stateUndo:"Geri Al",stateRedo:"İleri Al",stateMaxStack:"Maksimum Yığın",pressureTitle:"Tablet pressure",pressureRadius:"Basınç çapı",pressureIntensity:"Basınç hassasiyeti",renderingTitle:"Sahneleme",renderingGrid:"Izgarayı göster",renderingSymmetryLine:"aynalama çizgisini göster",renderingMatcap:"Matcap",renderingCurvature:"Eğrilik",renderingPBR:"PBR",renderingTransparency:"Transparanlık",renderingNormal:"Normal shader",renderingUV:"UV shader",renderingShader:"Shader",renderingMaterial:"Materyal",renderingImportUV:"İçe AKtar (jpg, png...)",renderingImportMatcap:"İçe AKtar (jpg, png...)",renderingExtra:"Ekstra",renderingFlat:"Düz gölgeleme",renderingWireframe:"Tel kafes (W)",renderingExposure:"Teşir",renderingEnvironment:"Ortam",renderingIsolate:"İzole/Göster (I)",renderingFilmic:"Film Ton Eşleşmesi",contour:"Kontür",contourShow:"Kontürü göster",contourColor:"Renk",darkenUnselected:"Seçilmeyenleri koyu yap",resolution:"Çözünürlük",matcapPearl:"İnci",matcapClay:"Kil",matcapSkin:"Deri",matcapGreen:"Yeşil",matcapWhite:"Beyaz",sketchfabTitle:"Sketchfab'a git !",sketchfabUpload:"Yükle",sketchfabUploadMessage:'Lütfen sketchfab entegrasyon anahtarını giriniz.\nAnonim olarak kullanmak için "guest" olarak bırakınız.\n(İşleme ve yükleme tamamlandığında yeni bir pencere açılacak)',sketchfabUploadError:function(e){return"Sketchfab yükleme hatası :\n"+e},sketchfabUploadSuccess:"Yükleme başarılı !\nAdresiniz burada :",sketchfabAbort:"Son yüklemeyi iptal et ?",sketchfabUploadProcessing:"Hesaplanıyor...\nModeliniz şu adreste olacak :",about:"Hakkında & Yardım",alphaNone:"Hiç Biri",alphaSquare:"Kare",alphaSkin:"Deri"},svenska:{backgroundTitle:"Bakgrund",backgroundReset:"Återställ",backgroundImport:"Importera (jpg, png...)",backgroundFill:"Fyll",cameraTitle:"Kamera",cameraReset:"Vy",cameraCenter:"Återställ (bar)",cameraFront:"Fram (F)",cameraLeft:"Vänster (L)",cameraTop:"Över (T)",cameraMode:"Läge",cameraOrbit:"Omloppsbana (skivtallrik)",cameraSpherical:"Sfärisk (trackball)",cameraPlane:"Plan (trackball)",cameraProjection:"Projektion",cameraPerspective:"Perspektiv",cameraOrthographic:"Ortografisk",cameraFov:"Fov",cameraPivot:"Plocka pivot",fileTitle:"Filer (import/export)",fileImportTitle:"Importera",fileAdd:"Lägg till (obj, sgl, ply, stl)",fileAutoMatrix:"Skala och centrera",fileVertexSRGB:"sRGB vertexfärg",fileExportSceneTitle:"Exportera Scen",fileExportAll:"Exportera alla",fileExportSGL:"Spara .sgl (SculptGL)",fileExportOBJ:"Spara .obj",fileExportPLY:"Spara .ply",fileExportSTL:"Spara .stl",fileExportTextureTitle:null,fileExportTextureSize:null,fileExportColor:null,fileExportRoughness:null,fileExportMetalness:null,sceneTitle:"Scen",sceneReset:"Rensa scen",sceneResetConfirm:"Bekräfta klar scen",sceneAddSphere:"Lägg till sfär",sceneAddCube:"Lägg till kub",sceneAddCylinder:"Lägg till cylinder",sceneAddTorus:"Lägg till torus",sceneSelection:"Urval",sceneMerge:"Sammanfoga urval",sceneDuplicate:null,sceneDelete:"Radera valet",meshTitle:"Mesh",meshNbVertices:"Vertex : ",meshNbFaces:"Faces : ",topologyTitle:"Topologi",multiresTitle:"Upplösningar",multiresSubdivide:"Dela upp yta",multiresReverse:"Omvänd",multiresResolution:"Upplösning",multiresNoLower:"Det finns ingen lägre upplösningsnivå.",multiresNoHigher:"Det finns ingen högre upplösningsnivå.",multiresDelHigher:"Ta bort högre",multiresDelLower:"Ta bort lägre",multiresSelectLowest:"Välj den lägsta upplösningen innan omvändning.",multiresSelectHighest:"Välj den högsta upplösningen innan uppdelning.",multiresWarnBigMesh:function(e){return"Nästa underavdelning nivå kommer att ha "+e+' faces.\nOm du vet vad du gör, klicka igen på "dela upp yta".'},multiresNotReversible:"Tyvärr, det går inte att omvända denna mesh.\nMeshen är inte en produkt av en (loop-calmull) mångfaldsytindelning.",remeshTitle:"Voxel Meshombyggnation",remeshRemesh:"Bygg om mesh",remeshResolution:"Upplösning",remeshBlock:"Kuber",dynamicTitle:"Dynamisk Topologi",dynamicActivated:"Aktiverad (inga quads)",dynamicSubdivision:"Ytindelning",dynamicDecimation:"Decimering",dynamicLinear:"Linjär ytindelning",sculptTitle:"Skulptering & Måleri",sculptBrush:"Pensel",sculptInflate:"Blås upp",sculptTwist:"Tvista",sculptSmooth:"Jämna ut (-Shift)",sculptFlatten:"Platta till",sculptPinch:"Nyp",sculptCrease:"Vecka",sculptDrag:"Dra",sculptPaint:"Måla",sculptMasking:"Maskera (-Ctrl)",sculptMove:"Flytta",sculptLocalScale:"Skala lokalt",sculptTransform:"Transformera (E)",sculptCommon:"Generellt",sculptTool:"Verktyg",sculptSymmetry:"Symmetri",sculptContinuous:"Kontinuerlig",sculptRadius:"Radie (-X)",sculptIntensity:"Intensitet (-C)",sculptHardness:"Hårdhet",sculptCulling:"Tunn yta (endast främre vertex)",sculptAlphaTitle:"Alfa",sculptLockPositon:"Lås position",sculptAlphaTex:"Textur",sculptImportAlpha:"Importera alfatextur (jpg, png...)",sculptNegative:"Negativ (N or -Alt)",sculptColor:"Albedo",sculptRoughness:"Ytjämnhet",sculptMetallic:"Metallisk",sculptClay:"Lera",sculptAccumulate:"Ackumulera (ingen gräns per strykning)",sculptColorGlobal:"Global",sculptPickColor:"Material / Färgvälgare (-S)",sculptTangentialSmoothing:"Tangentiell utjämning",sculptTopologicalCheck:"Topologisk check",sculptMoveAlongNormal:"Flytta längsmed normal (N or -Alt)",sculptMaskingClear:"Rensa (-Ctrl + Drag)",sculptMaskingInvert:"Invertera (-Ctrl + Click)",sculptMaskingBlur:"Gör suddig",sculptMaskingSharpen:"Gör skarp",sculptPBRTitle:"PBR-material",sculptPaintAll:"Måla allt",sculptExtractTitle:"Extrahera",sculptExtractThickness:"Tjocklek",sculptExtractAction:"Extrahera!",stateTitle:"Historia",stateUndo:"Ångra",stateRedo:"Gör om",stateMaxStack:"Ågra antal steg",pressureTitle:"pressureplatta",pressureRadius:"Tryckradie",pressureIntensity:"Tryckintensitet",renderingTitle:"Rendering",renderingGrid:"Visa rutnät",renderingSymmetryLine:"Visa speglingslinje",renderingMatcap:"MatCap",renderingCurvature:"Kurvatur",renderingPBR:"PBR",renderingTransparency:"Genomskinlighet",renderingNormal:"Normal shader",renderingUV:"UV-shader",renderingShader:"Shader",renderingMaterial:"Material",renderingImportUV:"Importera (jpg, png...)",renderingImportMatcap:"Importera (jpg, png...)",renderingExtra:"Extra",renderingFlat:"Platt shading",renderingWireframe:"Wireframe (W)",renderingExposure:"Exponering",renderingEnvironment:"Miljö",renderingIsolate:"Isolera/Visa (I)",renderingFilmic:"Filmiska färgtoner",contour:"Kontur",contourShow:"Visa kontur",contourColor:"Färg",darkenUnselected:"Skym ej valda",resolution:"Upplösning",matcapPearl:"Pärla",matcapClay:"Lera",matcapSkin:"Hud",matcapGreen:"Grön",matcapWhite:"Vit",sketchfabTitle:"Gå till Sketchfab!",sketchfabUpload:"Ladda upp",sketchfabUploadMessage:'Vänligen fyll i din sketchfab API-nyckel.\nDu kan även ange "guest" för att ladda upp anonymt.\n(ett nytt fönster kommer att öppnas när uppladdning och bearbetning är klar)',sketchfabUploadError:function(e){return"Sketchfab uppladdningsfel:\n"+e},sketchfabUploadSuccess:"Uppladdning lyckades!\nHär är din länk:",sketchfabAbort:"Avbryta senaste uppladdningen?",sketchfabUploadProcessing:"Bearbetar...\nDin modell kommer bli tillgänglig här:",about:"Om & Hjälp",alphaNone:"Ingen",alphaSquare:"Fyrkant",alphaSkin:"Hud"},français:{backgroundTitle:"Fond d'écran",backgroundReset:"Réinitialiser",backgroundImport:"Importer (jpg, png...)",backgroundFill:"Remplir",cameraTitle:"Caméra",cameraReset:"Vue",cameraCenter:"Reset (bar)",cameraFront:"De face (F)",cameraLeft:"De gauche (L)",cameraTop:"De haut (T)",cameraMode:"Mode",cameraOrbit:"Orbite (Turntable)",cameraSpherical:"Spherique (Trackball)",cameraPlane:"Planaire (Trackball)",cameraProjection:"Projection",cameraPerspective:"Perspective",cameraOrthographic:"Orthographique",cameraFov:"Champs de vision",cameraPivot:"Point de pivot",fileTitle:"Fichiers (importer/exporter)",fileImportTitle:"Importer",fileAdd:"Ajouter (obj, sgl, ply, stl)",fileAutoMatrix:"Mise a l'échelle et centrage",fileVertexSRGB:"Couleur de vertex en sRGB",fileExportSceneTitle:"Exporter Scene",fileExportAll:"Tout exporter",fileExportSGL:"Sauver .sgl (SculptGL)",fileExportOBJ:"Sauver .obj",fileExportPLY:"Sauver .ply",fileExportSTL:"Sauver .stl",fileExportTextureTitle:null,fileExportTextureSize:null,fileExportColor:null,fileExportRoughness:null,fileExportMetalness:null,sceneTitle:"Scène",sceneReset:"Réinitialiser scène",sceneResetConfirm:"Confirmer réinitialiser la scène?",sceneAddSphere:"Ajouter sphere",sceneAddCube:"Ajouter cube",sceneAddCylinder:"Ajouter cylindre",sceneAddTorus:"Ajouter tore",sceneSelection:"Sélection",sceneMerge:"Fusionner selection",sceneDuplicate:null,sceneDelete:"Supprimer la sélection",meshTitle:"Mesh",meshNbVertices:"Vertex : ",meshNbFaces:"Faces : ",topologyTitle:"Topologie",multiresTitle:"Multirésolution",multiresSubdivide:"Subdiviser",multiresReverse:"Inverser",multiresResolution:"Résolution",multiresNoLower:"Il n'y a pas de niveau de résolution inférieur.",multiresNoHigher:"Il n'y a pas de niveau de résolution plus élevé.",multiresDelHigher:"Suppression supérieur",multiresDelLower:"Suppression inférieur",multiresSelectLowest:"Sélectionnez la résolution la plus basse avant d'inverser.",multiresSelectHighest:"Sélectionnez la résolution la plus élevée avant de subdiviser.",multiresWarnBigMesh:function(e){return"Le prochain niveau de subdivision atteindra "+e+' faces.\nSi vous savez ce que vous faites, cliquez de nouveau sur "subdiviser".'},multiresNotReversible:"Désolé, il n'est pas possible d'inverser ce maillage.\nLe mesh n'est pas un produit d'une surface de subdivision (loop-catmull) provenant manifold.",remeshTitle:"Remaillage volumétrique",remeshRemesh:"Remaillage",remeshResolution:"Résolution",remeshBlock:"Bloc",dynamicTitle:"Topologie dynamique",dynamicActivated:"Activaté (pas quads)",dynamicSubdivision:"Subdivision",dynamicDecimation:"Décimation",dynamicLinear:"Subdivision linéaire",sculptTitle:"Sculpture & Painture",sculptBrush:"Brosse",sculptInflate:"Gonfler",sculptTwist:"Tordre",sculptSmooth:"Lisser (-Shift)",sculptFlatten:"Aplatir",sculptPinch:"Pincer",sculptCrease:"Plier",sculptDrag:"Tirer",sculptPaint:"Peindre",sculptMasking:"Masquer (-Ctrl)",sculptMove:"Bouger",sculptLocalScale:"Mise à l'échelle locale",sculptTransform:"Transformer (E)",sculptCommon:"Commun",sculptTool:"Outil",sculptSymmetry:"Symétrie",sculptContinuous:"Continu",sculptRadius:"Rayon (-X)",sculptIntensity:"Intensité (-C)",sculptHardness:"Dureté",sculptCulling:"Surface fine (vertex de face uniquement)",sculptAlphaTitle:"Alpha",sculptLockPositon:"Bloquer position",sculptAlphaTex:"Texture",sculptImportAlpha:"Importer texture alpha (jpg, png...)",sculptNegative:"Négatif (N ou -Alt)",sculptColor:"Albedo",sculptRoughness:"Rugosité",sculptMetallic:"Métallique",sculptClay:"Argile",sculptAccumulate:"Accumuler effet",sculptColorGlobal:"Global",sculptPickColor:"Matériau / selection de couleur (-S)",sculptTangentialSmoothing:"Relaxer uniquement",sculptTopologicalCheck:"Vérification topologique",sculptMoveAlongNormal:"Extruder suivant la normale (N ou -Alt)",sculptMaskingClear:"Reset (-Ctrl + Drag)",sculptMaskingInvert:"Inverser (-Ctrl + Click)",sculptMaskingBlur:"Brouiller",sculptMaskingSharpen:"Aiguiser",sculptPBRTitle:"Matériaux physiques (PBR)",sculptPaintAll:"Peindre tout",sculptExtractTitle:"Extraire",sculptExtractThickness:"Epaisseur",sculptExtractAction:"Extraire !",stateTitle:"Historique",stateUndo:"Annuler",stateRedo:"Refaire",stateMaxStack:"Nombre maximale d'action",pressureTitle:"Pression de la tablette",pressureRadius:"Pression sur le rayon",pressureIntensity:"Pression sur l'intensité",renderingTitle:"Rendu",renderingGrid:"Afficher grille",renderingSymmetryLine:"Afficher ligne de symétrie",renderingMatcap:"Matcap",renderingCurvature:"Courbure",renderingPBR:"PBR",renderingTransparency:"Transparence",renderingNormal:"Normal shader",renderingUV:"UV shader",renderingShader:"Shader",renderingMaterial:"Matériau",renderingImportUV:"Importer (jpg, png...)",renderingImportMatcap:"Importer (jpg, png...)",renderingExtra:"Extra",renderingFlat:"Ombrage plat",renderingWireframe:"Fil de fer (W)",renderingExposure:"Exposition",renderingEnvironment:"Environment",renderingIsolate:"Isoler/Afficher (I)",renderingFilmic:"Tonemapping filmique",contour:"Contour",contourShow:"Afficher les contours",contourColor:"Couleur",darkenUnselected:"Assombrir non séléctioné",resolution:"Résolution",matcapPearl:"Perle",matcapClay:"Argile",matcapSkin:"Peau",matcapGreen:"Vert",matcapWhite:"Blanc",sketchfabTitle:"Vers Sketchfab !",sketchfabUpload:"Uploader",sketchfabUploadMessage:"Entrez votre clé d'API sketchfab.\n",sketchfabUploadError:function(e){return"Sketchfab upload error :\n"+e},sketchfabUploadSuccess:"Téléchargement fini !\nVoici le lien :",sketchfabAbort:"Annuler le dernier téléchargement ?",sketchfabUploadProcessing:"En traitement...\nLe modèle sera disponible sur :",about:"A propos & aide",alphaNone:"Vide",alphaSquare:"Carré",alphaSkin:"Peau",remeshTitleMC:"Remaillage surfacique (manifold tris)",remeshRemeshMC:"Remaillage",remeshSmoothingMC:"Lisser topologie"},deutsch:{backgroundTitle:"Hintergrund",backgroundReset:"Zurücksetzen",backgroundImport:"Importieren (jpg, png...)",backgroundFill:"Füllen",cameraTitle:"Kamera",cameraReset:"Ansicht",cameraCenter:"Reset (space)",cameraFront:"Front (F)",cameraLeft:"Links (L)",cameraTop:"Oben (T)",cameraMode:"Modus",cameraOrbit:"Orbit (Drehscheibe)",cameraSpherical:"Sphärisch (Rollkugel)",cameraPlane:"Ebene (Rollkugel)",cameraProjection:"Projektion",cameraPerspective:"Perspektivisch",cameraOrthographic:"Orthographisch",cameraFov:"Sichtfeld (fov)",cameraPivot:"Pivot auswählen",fileTitle:"Datei (import/export)",fileImportTitle:"Importieren",fileAdd:"Hinzufügen (obj, sgl, ply, stl)",fileAutoMatrix:"Skalieren und zentrieren",fileVertexSRGB:"Vertexfarbe sRGB",fileExportSceneTitle:"Exportieren",fileExportAll:"Alles Exportieren",fileExportSGL:"Speichern .sgl (SculptGL)",fileExportOBJ:"Speichern .obj",fileExportPLY:"Speichern .ply",fileExportSTL:"Speichern .stl",fileExportTextureTitle:"Texturen exportieren",fileExportTextureSize:"Größe",fileExportColor:"Farben speichern",fileExportRoughness:"Rauheit speichern",fileExportMetalness:"Metallisches speichern",sceneTitle:"Szene",sceneReset:"Szene löschen",sceneResetConfirm:"Bestätige das Löschen der aktuellen Szene",sceneAddSphere:"Kugel hinzufügen",sceneAddCube:"Würfel hinzufügen",sceneAddCylinder:"Zylinder hinzufügen",sceneAddTorus:"Torus hinzufügen",sceneSelection:"Auswahl",sceneMerge:"Auswahl zusammenführen",sceneDuplicate:"Auswahl kopieren",sceneDelete:"Auswahl löschen",meshTitle:"Mesh",meshNbVertices:"Vertex : ",meshNbFaces:"Faces : ",topologyTitle:"Topologie",multiresTitle:"Mehrfachauflösung",multiresSubdivide:"Aufteilen",multiresReverse:"Umkehren",multiresResolution:"Auflösung",multiresNoLower:"Es gibt keine kleinere Auflösung.",multiresNoHigher:"Es gibt keine höhere Auflösung.",multiresDelHigher:"Höhere löschen",multiresDelLower:"Niedrigere löschen",multiresSelectLowest:"Wählen Sie vor dem Umkehren die kleinste Auflösung aus.",multiresSelectHighest:"Wählen Sie vor dem Umkehren die höchste Auflösung aus.",multiresWarnBigMesh:function(e){return"Die nächste Unterteilungsebene wird "+e+' Flächen erreichen\nWenn Sie wissen, was Sie tun, dann klicken Sie nocheinmal auf "umkehren".'},multiresNotReversible:"Es ist leider nicht möglich dieses Netz umzukehren.\nDas Netz ist kein Produkt einer (loop/catmull) Unterteilungsfläche auf eines mannigfaltigen Netzes",remeshTitle:"Voxel remeshing (Vierecke)",remeshRemesh:"Remesh",remeshResolution:"Auflösung",remeshBlock:"Block",dynamicTitle:"Dynamische Topologie",dynamicActivated:"Aktiviert (ohne Vierecke)",dynamicSubdivision:"Aufteilung",dynamicDecimation:"Dezimierung",dynamicLinear:"Lineare Aufteilung",sculptTitle:"Modellieren & Bemalen",sculptBrush:"Pinsel",sculptInflate:"Aufblasen",sculptTwist:"Verdrehen",sculptSmooth:"Glätten (-Shift)",sculptFlatten:"Ebnen",sculptPinch:"Kneifen",sculptCrease:"Falten",sculptDrag:"Ziehen",sculptPaint:"Malen",sculptMasking:"Maskieren (-Strg)",sculptMove:"Bewegen",sculptLocalScale:"Lokales Skalieren",sculptTransform:"Transformieren (E)",sculptCommon:"Allgemein",sculptTool:"Werkzeuge",sculptSymmetry:"Symmetrie",sculptContinuous:"Kontinuierlich",sculptRadius:"Radius (-X)",sculptIntensity:"Intensität (-C)",sculptHardness:"Härte",sculptCulling:"Dünne Oberfläche (nur vorderer vertex)",sculptAlphaTitle:"Alpha",sculptLockPositon:"Verriegelungsposition",sculptAlphaTex:"Textur",sculptImportAlpha:"Alpha tex importieren(jpg, png...)",sculptNegative:"Negativ (N or -Alt)",sculptColor:"Albedo",sculptRoughness:"Rauheit",sculptMetallic:"Metallisches",sculptClay:"Lehm",sculptAccumulate:"Akkumulieren (Kein Limit pro Anschlag)",sculptColorGlobal:"Global",sculptPickColor:"Material / Farb Auswahl (-S)",sculptTangentialSmoothing:"Tangentiale Glättung",sculptTopologicalCheck:"Topologischer Check",sculptMoveAlongNormal:"Normal weiterlaufen (N or -Alt)",sculptMaskingClear:"Löschen (-Ctrl + Drag)",sculptMaskingInvert:"Invertieren (-Ctrl + Click)",sculptMaskingBlur:"Verwischen",sculptMaskingSharpen:"Schärfen",sculptPBRTitle:"PBR Materialen",sculptPaintAll:"Alles Anmalen",sculptExtractTitle:"Extrahieren",sculptExtractThickness:"Dicke",sculptExtractAction:"Extrahieren !",stateTitle:"Verlauf",stateUndo:"Rückgängig",stateRedo:"Wiederholen",stateMaxStack:"Max. Schritte",pressureTitle:"Tablet Druck",pressureRadius:"Druckradius",pressureIntensity:"Druckintensität",renderingTitle:"Rendering",renderingGrid:"Gitter anzeigen",renderingSymmetryLine:"Spiegellinie anzeigen",renderingMatcap:"Matcap",renderingCurvature:"Krümmung",renderingPBR:"PBR",renderingTransparency:"Transparenz",renderingNormal:"Normale Shader",renderingUV:"UV shader",renderingShader:"Shader",renderingMaterial:"Material",renderingImportUV:"Importieren (jpg, png...)",renderingImportMatcap:"Importieren (jpg, png...)",renderingExtra:"Extra",renderingFlat:"Flaches Schattieren",renderingWireframe:"Drahtgitter (W)",renderingExposure:"Belichtung",renderingEnvironment:"Umgebung",renderingIsolate:"Isoliert/Zeige (I)",renderingFilmic:"Filmische Tonzuordnung",contour:"Kontur",contourShow:"Kontur anzeigen",contourColor:"Farbe",darkenUnselected:"Nicht markiertes abdunkeln",resolution:"Auflösung",matcapPearl:"Perle",matcapClay:"Ton",matcapSkin:"Haut",matcapGreen:"Grün",matcapWhite:"Weiß",sketchfabTitle:"Hier gehts zu Sketchfab !",sketchfabUpload:"Hochladen",sketchfabUploadMessage:'Please enter your sketchfab API Key.\nYou can also leave "guest" to upload anonymously.\n(a new window will pop up when the uploading and processing is finished)',sketchfabUploadError:function(e){return"Sketchfab upload error :\n"+e},sketchfabUploadSuccess:"Upload success !\nHere is your link :",sketchfabAbort:"Abort the last upload ?",sketchfabUploadProcessing:"Processing...\nYour model will be available at :",about:"Über & Hilfe (Englisch)",alphaNone:"None",alphaSquare:"Würfel",alphaSkin:"Haut",remeshTitleMC:"Voxel remeshing (mannigfaltige Dreiecke)",remeshRemeshMC:"Remesh",remeshSmoothingMC:"Topologie entspannen"},italiano:{backgroundTitle:"Sfondo",backgroundReset:"Resetta",backgroundImport:"Importa (jpg, png...)",backgroundFill:"Riempi",cameraTitle:"Camera",cameraReset:"Vista",cameraCenter:"Resetta (bar)",cameraFront:"Fronte (F)",cameraLeft:"Sinistra (L)",cameraTop:"Sopra (T)",cameraMode:"Modalitá",cameraOrbit:"Orbita (Ruota intorno)",cameraSpherical:"Sferica (Trackball)",cameraPlane:"Planare (Trackball)",cameraProjection:"Proiezione",cameraPerspective:"Prospettiva",cameraOrthographic:"Ortografica",cameraFov:"Fov",cameraPivot:"Seleziona pivot",fileTitle:"Files (importa/esporta)",fileImportTitle:"Importa",fileAdd:"Aggiungi (obj, sgl, ply, stl)",fileAutoMatrix:"Scala e centra",fileVertexSRGB:"sRGB vertex color",fileExportSceneTitle:"Esporta Scena",fileExportAll:"Exporta tutto",fileExportSGL:"Salva .sgl (SculptGL)",fileExportOBJ:"Salva .obj",fileExportPLY:"Salva .ply",fileExportSTL:"Salva .stl",fileExportTextureTitle:"Esporta textures",fileExportTextureSize:"Dimensione",fileExportColor:"Salva diffuse",fileExportRoughness:"Salva roughness",fileExportMetalness:"Salva metalness",sceneTitle:"Scena",sceneReset:"Pulisci scena",sceneResetConfirm:"Conferma pulitura scena",sceneAddSphere:"Aggiungi sfera",sceneAddCube:"Aggiungi cubo",sceneAddCylinder:"Aggiungi cilindro",sceneAddTorus:"Aggiungi toroide",sceneSelection:"Selezione",sceneMerge:"Unisci selezione",sceneDuplicate:"Copia selezione",sceneDelete:"Elimina selezione",meshTitle:"Mesh",meshNbVertices:"Vertex : ",meshNbFaces:"Faces : ",topologyTitle:"Topologia",multiresTitle:"Multirisoluzione",multiresSubdivide:"Suddivisione",multiresReverse:"Invertire",multiresResolution:"Risoluzione",multiresNoLower:"Non esiste un livello di risoluzione inferiore.",multiresNoHigher:"Non esiste un livello di risoluzione più alto.",multiresDelHigher:"Elimina superiore",multiresDelLower:"Elimina inferiore",multiresSelectLowest:"Selezionare la risoluzione più bassa prima di invertire.",multiresSelectHighest:"Seleziona la risoluzione più alta prima di suddividere.",multiresWarnBigMesh:function(e){return"Il livello di suddivisione successivo raggiungerà "+e+' facce.\nSe sai cosa stai facendo, clicca di nuovo su "Suddividi".'},multiresNotReversible:"Spiacenti, non è possibile invertire questa mesh.\nLa mesh non è un prodotto di una superficie di suddivisione (loop-catmull) su una mesh collettore.",remeshTitle:"Voxel remeshing (quads)",remeshRemesh:"Remesh",remeshResolution:"Risolutione",remeshBlock:"Blocca",dynamicTitle:"Topologia Dinamica",dynamicActivated:"Attivata (no quads)",dynamicSubdivision:"Suddivisione",dynamicDecimation:"Decimazione",dynamicLinear:"Suddivisione Lineare",sculptTitle:"Scalpisci & Dipingi",sculptBrush:"Spazzola",sculptInflate:"Gonfia",sculptTwist:"Torci",sculptSmooth:"Ammorbidisci (-Shift)",sculptFlatten:"Appiattisci",sculptPinch:"Pizzica",sculptCrease:"Piega",sculptDrag:"Trascina",sculptPaint:"Dipingi",sculptMasking:"Maschera (-Ctrl)",sculptMove:"Muovi",sculptLocalScale:"Scala Locale",sculptTransform:"Trasformazioni (E)",sculptCommon:"Comune",sculptTool:"Strumento",sculptSymmetry:"Simmetria",sculptContinuous:"Continua",sculptRadius:"Raggio (-X)",sculptIntensity:"Intensità (-C)",sculptHardness:"Durezza",sculptCulling:"Superficie sottile (solo vertici frontali)",sculptAlphaTitle:"Alpha",sculptLockPositon:"Blocca posizione",sculptAlphaTex:"Texture",sculptImportAlpha:"Importa alpha tex (jpg, png...)",sculptNegative:"Negativo (N or -Alt)",sculptColor:"Albedo",sculptRoughness:"Rugosità",sculptMetallic:"Metallico",sculptClay:"Clay",sculptAccumulate:"Accumulazione (no limit per stroke)",sculptColorGlobal:"Globale",sculptPickColor:"Materiale / Color picker (-S)",sculptTangentialSmoothing:"Solo Relax",sculptTopologicalCheck:"Controllo Topologia",sculptMoveAlongNormal:"Muovi lungo la normale (N o -Alt)",sculptMaskingClear:"Pulisci (-Ctrl + Drag)",sculptMaskingInvert:"Inverti (-Ctrl + Click)",sculptMaskingBlur:"Sfoca",sculptMaskingSharpen:"Nitidezza",sculptPBRTitle:"Materiali PBR",sculptPaintAll:"Dipingi tutto",sculptExtractTitle:"Estrazione",sculptExtractThickness:"Assottigliamento",sculptExtractAction:"Estrai !",stateTitle:"Story",stateUndo:"Indietro",stateRedo:"Avanti",stateMaxStack:"Pila massima",pressureTitle:"Pressione tavoletta",pressureRadius:"Raggio pressione",pressureIntensity:"Intensità pressione",renderingTitle:"Rendering",renderingGrid:"Vedi Griglia",renderingSymmetryLine:"Vedi linea di specchiatura",renderingMatcap:"Matcap",renderingCurvature:"Curvature",renderingPBR:"PBR",renderingTransparency:"Trasparenza",renderingNormal:"Normal shader",renderingUV:"UV shader",renderingShader:"Shader",renderingMaterial:"Materiale",renderingImportUV:"Importa (jpg, png...)",renderingImportMatcap:"Importa (jpg, png...)",renderingExtra:"Extra",renderingFlat:"Shading piatto",renderingWireframe:"Wireframe (W)",renderingExposure:"Esposizione",renderingEnvironment:"Ambiente",renderingIsolate:"Isola/Vedi (I)",renderingFilmic:"Coloritura tipo Film",contour:"Contorno",contourShow:"Vedi contorno",contourColor:"Colore",darkenUnselected:"Scurisci i non selezionati",resolution:"Risolutione",matcapPearl:"Perla",matcapClay:"Argilla",matcapSkin:"Pelle",matcapGreen:"Verde",matcapWhite:"Bianco",sketchfabTitle:"Vai su Sketchfab !",sketchfabUpload:"Upload",sketchfabUploadMessage:'Inserisci la tua chiave API di sketchfab.\nPuoi anche lasciare "guest" per caricare in modo anonimo.\n(verrà visualizzata una nuova finestra al termine del caricamento e dell\'elaborazione)',sketchfabUploadError:function(e){return"Sketchfab errore upload :\n"+e},sketchfabUploadSuccess:"Caricato con successo !\nEcco il tuo link :",sketchfabAbort:"Annulla l'ultimo caricamento?",sketchfabUploadProcessing:"Processing...\nIl tuo modello sarà disponibile su :",about:"Informazioni & Aiuto",alphaNone:"Nessuno",alphaSquare:"Quadrata",alphaSkin:"Pelle",remeshTitleMC:"Voxel remeshing (manifold tris)",remeshRemeshMC:"Remesh",remeshSmoothingMC:"Relax topology"}},o.select="english";var l=window.navigator.language||window.navigator.userLanguage;switch(l&&(l=l.substr(0,2)),"ja"===l?o.select="日本語":"zh"===l?o.select="中文":"ko"===l?o.select="한국어":"tr"===l?o.select="turkish":"sv"===l?o.select="svenska":"fr"===l?o.select="français":"de"===l&&(o.select="deutsch"),(0,i.Z)().language){case"english":o.select="english";break;case"chinese":o.select="中文";break;case"korean":o.select="한국어";break;case"japanese":o.select="日本語";break;case"russian":o.select="русский";break;case"turkish":o.select="turkish";break;case"swedish":o.select="svenska";break;case"french":o.select="français";break;case"german":o.select="deutsch";break;case"italian":o.select="italiano"}const u=o},165:(e,t,r)=>{"use strict";r.d(t,{Z:()=>T});var i,n,a,s,o,l,u,c,h,d,f,_,p,g,m,v,y=r(928),b={normalizedMouse:function(e,t,r,i){return[2*e/r-1,1-2*t/i]},mouseOnUnitSphere:function(e){var t=e[0],r=e[1],i=1-t*t-r*r,n=[t,r,i>0?Math.sqrt(i):0];return y.Fv(n,n)}};b.intersectionRayTriangleEdges=(i=1+1e-15,n=-1e-15,a=[0,0,0],s=[0,0,0],o=[0,0,0],function(e,t,r,l,u,c){y.kC(a,t,l);var h=y.AK(r,a);if(h>-1e-15&&h<1e-15)return-1;var d=1/h;y.lu(s,e,u);var f=y.AK(s,a)*d;if(fi)return-1;y.kC(o,s,r);var _=y.AK(t,o)*d;if(_i)return-1;var p=y.AK(l,o)*d;return p=n?(v=1,l=n+2*_+g):l=_*(v=-_/n)+g):(v=0,p>=0?(b=0,l=g):-p>=s?(b=1,l=s+2*p+g):l=p*(b=-p/s)+g)):(T=3,v=0,p>=0?(b=0,l=g):-p>=s?(b=1,l=s+2*p+g):l=p*(b=-p/s)+g);else if(b<0)T=5,b=0,_>=0?(v=0,l=g):-_>=n?(v=1,l=n+2*_+g):l=_*(v=-_/n)+g;else{T=0;var M=1/m;l=(v*=M)*(n*v+a*(b*=M)+2*_)+b*(a*v+s*b+2*p)+g}else v<0?(T=2,(h=s+p)>(u=a+_)?(d=h-u)>=(f=n-2*a+s)?(v=1,b=0,l=n+2*_+g):l=(v=d/f)*(n*v+a*(b=1-v)+2*_)+b*(a*v+s*b+2*p)+g:(v=0,h<=0?(b=1,l=s+2*p+g):p>=0?(b=0,l=g):l=p*(b=-p/s)+g)):b<0?(T=6,(h=n+_)>(u=a+p)?(d=h-u)>=(f=n-2*a+s)?(b=1,v=0,l=s+2*p+g):l=(v=1-(b=d/f))*(n*v+a*b+2*_)+b*(a*v+s*b+2*p)+g:(b=0,h<=0?(v=1,l=n+2*_+g):_>=0?(v=0,l=g):l=_*(v=-_/n)+g)):(T=1,(d=s+p-a-_)<=0?(v=0,b=1,l=s+2*p+g):d>=(f=n-2*a+s)?(v=1,b=0,l=n+2*_+g):l=(v=d/f)*(n*v+a*(b=1-v)+2*_)+b*(a*v+s*b+2*p)+g);return l<0&&(l=0),o&&(o[0]=i[0]+v*t[0]+b*r[0],o[1]=i[1]+v*t[1]+b*r[1],o[2]=i[2]+v*t[2]+b*r[2],o[3]=T),l}),b.distance2PointTriangle=function(){var e=[0,0,0],t=[0,0,0];return function(r,i,n,a,s){y.lu(e,n,i),y.lu(t,a,i);var o=y.x9(e),l=y.AK(e,t),u=y.x9(t);return b.distance2PointTriangleEdges(r,e,t,i,o,l,u,s)}}(),b.pointInsideTriangle=(h=[0,0,0],d=[0,0,0],f=[0,0,0],_=[0,0,0],p=[0,0,0],function(e,t,r,i){y.lu(h,t,r),y.lu(d,t,i),y.lu(f,e,r),y.lu(_,e,i);var n=y.Zh(y.kC(p,h,d)),a=y.Zh(y.kC(p,h,f)),s=y.Zh(y.kC(p,d,_)),o=y.Zh(y.kC(p,f,_));return Math.abs(n-(a+s+o))<1e-20}),b.triangleInsideSphere=function(e,t,r,i,n){return b.distanceSqToSegment(e,r,i)1?y.x9(y.lu(g,e,r)):(g[0]=e[0]-t[0]-n*m[0],g[1]=e[1]-t[1]-n*m[1],g[2]=e[2]-t[2]-n*m[2],y.x9(g))}),b.signedAngle2d=function(e,t){var r=e[0],i=e[1],n=t[0],a=t[1];return Math.atan2(r*a-i*n,r*n+i*a)},b.pointPlaneDistance=function(){var e=[0,0,0];return function(t,r,i){return y.AK(y.lu(e,t,r),i)}}(),b.mirrorPoint=function(){var e=[0,0,0];return function(t,r,i){return y.lu(t,t,y.bA(e,i,2*b.pointPlaneDistance(t,r,i)))}}(),b.vertexOnLine=(v=[0,0,0],function(e,t,r){y.lu(v,r,t);var i=[0,0,0],n=y.AK(v,y.lu(i,e,t));return y.od(i,t,v,n/y.x9(v))}),b.intersectLinePlane=function(e,t,r,i,n){var a=y.AK(y.lu(n,e,r),i),s=y.AK(y.lu(n,t,r),i);if(a===s)return t;var o=-a/(s-a);return y.od(n,e,y.lu(n,t,e),o)},b.getPerpendicularVector=function(e){var t=[0,0,0];return 0===e[0]?t[0]=1:0===e[1]?t[1]=1:0===e[2]?t[2]=1:(t[0]=e[2],t[1]=e[2],t[2]=-e[0]-e[1],y.Fv(t,t)),t};const T=b},358:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{Z:()=>__WEBPACK_DEFAULT_EXPORT__});var gl_matrix__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(89),gl_matrix__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(928),math3d_Geometry__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(165),misc_Tablet__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(522),misc_Utils__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(781),gui_GuiTR__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(183);function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var r=0;r1)return 0;var o=i._ratioX*(n[1]*e+n[5]*t+n[9]*r+n[13])/a;if(Math.abs(o)>1)return 0;var l=i._width;return s=(.5-.5*s)*l,o=(.5-.5*o)*i._height,i._texture[(0|s)+l*(0|o)]/255}},{key:"updateAlpha",value:function(e){var t=_TMP_V1,r=_TMP_V2,i=Math.sqrt(this._rLocal2);if(this._alphaSide=i*Math.SQRT1_2,gl_matrix__WEBPACK_IMPORTED_MODULE_5__.lu(t,this._interPoint,this._alphaOrigin),0!==gl_matrix__WEBPACK_IMPORTED_MODULE_5__.Zh(t)){gl_matrix__WEBPACK_IMPORTED_MODULE_5__.Fv(t,t);var n=this._pickedNormal;gl_matrix__WEBPACK_IMPORTED_MODULE_5__.od(t,t,n,-gl_matrix__WEBPACK_IMPORTED_MODULE_5__.AK(t,n)),gl_matrix__WEBPACK_IMPORTED_MODULE_5__.Fv(t,t),e||gl_matrix__WEBPACK_IMPORTED_MODULE_5__.JG(this._alphaOrigin,this._interPoint),gl_matrix__WEBPACK_IMPORTED_MODULE_5__.od(r,this._alphaOrigin,n,i),gl_matrix__WEBPACK_IMPORTED_MODULE_4__.zB(this._alphaLookAt,this._alphaOrigin,r,t)}}},{key:"initAlpha",value:function(){this.computePickedNormal(),this.updateAlpha()}},{key:"getMesh",value:function(){return this._mesh}},{key:"setLocalRadius2",value:function(e){this._rLocal2=e}},{key:"getLocalRadius2",value:function(){return this._rLocal2}},{key:"getLocalRadius",value:function(){return Math.sqrt(this._rLocal2)}},{key:"getWorldRadius2",value:function(){return this._rWorld2}},{key:"getWorldRadius",value:function(){return Math.sqrt(this._rWorld2)}},{key:"setIntersectionPoint",value:function(e){this._interPoint=e}},{key:"getEyeDirection",value:function(){return this._eyeDir}},{key:"getIntersectionPoint",value:function(){return this._interPoint}},{key:"getPickedVertices",value:function(){return this._pickedVertices}},{key:"getPickedFace",value:function(){return this._pickedFace}},{key:"getPickedNormal",value:function(){return this._pickedNormal}},{key:"intersectionMouseMeshes",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._main.getMeshes(),t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._main._mouseX,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._main._mouseY,i=this.unproject(t,r,0),n=this.unproject(t,r,.1),a=1/0,s=null,o=-1,l=0,u=e.length;l0&&void 0!==arguments[0]?arguments[0]:this._main.getMesh(),t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._main._mouseX,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._main._mouseY,i=this.unproject(t,r,0),n=this.unproject(t,r,.1),a=gl_matrix__WEBPACK_IMPORTED_MODULE_4__.Ue();return gl_matrix__WEBPACK_IMPORTED_MODULE_4__.U_(a,e.getMatrix()),gl_matrix__WEBPACK_IMPORTED_MODULE_5__.fF(i,i,a),gl_matrix__WEBPACK_IMPORTED_MODULE_5__.fF(n,n,a),this.intersectionRayMesh(e,i,n)}},{key:"intersectionRayMesh",value:function(e,t,r){if(this._mesh=null,this._pickedFace=-1,gl_matrix__WEBPACK_IMPORTED_MODULE_5__.JG(_TMP_NEAR,t),gl_matrix__WEBPACK_IMPORTED_MODULE_5__.JG(_TMP_FAR,r),this._xSym){var i=e.getSymmetryOrigin(),n=e.getSymmetryNormal();math3d_Geometry__WEBPACK_IMPORTED_MODULE_0__.Z.mirrorPoint(_TMP_NEAR,i,n),math3d_Geometry__WEBPACK_IMPORTED_MODULE_0__.Z.mirrorPoint(_TMP_FAR,i,n)}var a=e.getVertices(),s=e.getFaces(),o=this.getEyeDirection();gl_matrix__WEBPACK_IMPORTED_MODULE_5__.lu(o,_TMP_FAR,_TMP_NEAR),gl_matrix__WEBPACK_IMPORTED_MODULE_5__.Fv(o,o);for(var l=e.intersectRay(_TMP_NEAR,o),u=1/0,c=l.length,h=0;h=0&&ge||(l[k]=c,g[v++]=k)}}}return this._pickedVertices=new Uint32Array(g.subarray(0,v)),this._pickedVertices}},{key:"computeWorldRadius2",value:function(e){gl_matrix__WEBPACK_IMPORTED_MODULE_5__.fF(_TMP_INTER,this.getIntersectionPoint(),this._mesh.getMatrix());var t=this._main.getSculptManager().getCurrentTool().getScreenRadius();e||(t*=misc_Tablet__WEBPACK_IMPORTED_MODULE_1__.Z.getPressureRadius());var r=this.project(_TMP_INTER);return gl_matrix__WEBPACK_IMPORTED_MODULE_5__.nI(_TMP_INTER,this.unproject(r[0]+t,r[1],r[2]))}},{key:"updateLocalAndWorldRadius2",value:function(){this._mesh&&(this._rWorld2=this.computeWorldRadius2(),this._rLocal2=this._rWorld2/this._mesh.getScale2())}},{key:"unproject",value:function(e,t,r){return this._main.getCamera().unproject(e,t,r)}},{key:"project",value:function(e){return this._main.getCamera().project(e)}},{key:"computePickedNormal",value:function(){if(this._mesh&&!(this._pickedFace<0))return this.polyLerp(this._mesh.getNormals(),this._pickedNormal),gl_matrix__WEBPACK_IMPORTED_MODULE_5__.Fv(this._pickedNormal,this._pickedNormal)}},{key:"polyLerp",value:function(e,t){var r=this._mesh.getVertices(),i=this._mesh.getFaces(),n=4*this._pickedFace,a=3*i[n],s=3*i[n+1],o=3*i[n+2],l=i[n+3],u=l!==misc_Utils__WEBPACK_IMPORTED_MODULE_2__.Z.TRI_INDEX;u&&(l*=3);var c=1/gl_matrix__WEBPACK_IMPORTED_MODULE_5__.TK(this._interPoint,r.subarray(a,a+3)),h=1/gl_matrix__WEBPACK_IMPORTED_MODULE_5__.TK(this._interPoint,r.subarray(s,s+3)),d=1/gl_matrix__WEBPACK_IMPORTED_MODULE_5__.TK(this._interPoint,r.subarray(o,o+3)),f=u?1/gl_matrix__WEBPACK_IMPORTED_MODULE_5__.TK(this._interPoint,r.subarray(l,l+3)):0,_=1/(c+h+d+f);return gl_matrix__WEBPACK_IMPORTED_MODULE_5__.t8(t,0,0,0),gl_matrix__WEBPACK_IMPORTED_MODULE_5__.od(t,t,e.subarray(a,a+3),c*_),gl_matrix__WEBPACK_IMPORTED_MODULE_5__.od(t,t,e.subarray(s,s+3),h*_),gl_matrix__WEBPACK_IMPORTED_MODULE_5__.od(t,t,e.subarray(o,o+3),d*_),u&&gl_matrix__WEBPACK_IMPORTED_MODULE_5__.od(t,t,e.subarray(l,l+3),f*_),t}}],[{key:"addAlpha",value:function(t,r,i,n){var a={};a._name=n,a._texture=t,a._ratioX=Math.max(1,r/i),a._ratioY=Math.max(1,i/r),a._ratioMax=Math.max(a._ratioX,a._ratioY),a._width=r,a._height=i;for(var s=1;e.ALPHAS[a._name];)a._name=n+s++;return e.ALPHAS[a._name]=a,e.ALPHAS_NAMES[a._name]=a._name,a}}]),e}();Picking.INIT_ALPHAS_NAMES=[(0,gui_GuiTR__WEBPACK_IMPORTED_MODULE_3__.Z)("alphaSquare"),(0,gui_GuiTR__WEBPACK_IMPORTED_MODULE_3__.Z)("alphaSkin")],Picking.INIT_ALPHAS_PATHS=["square.jpg","skin.jpg"];var readAlphas=function readAlphas(){if(window.module&&window.module.exports){var fs=eval("require")("fs"),path=eval("require")("path"),directoryPath=path.join(window.__filename,"../resources/alpha");fs.readdir(directoryPath,(function(e,t){if(!e)for(var r=0;r{"use strict";r.d(t,{Z:()=>s});var i=r(781),n={Action:{NOTHING:0,MASK_EDIT:1,SCULPT_EDIT:2,CAMERA_ZOOM:3,CAMERA_ROTATE:4,CAMERA_PAN:5,CAMERA_PAN_ZOOM_ALT:6},Tools:{BRUSH:0,INFLATE:1,TWIST:2,SMOOTH:3,FLATTEN:4,PINCH:5,CREASE:6,DRAG:7,PAINT:8,MOVE:9,MASKING:10,LOCALSCALE:11,TRANSFORM:12,PEN:13},Shader:{PBR:0,FLAT:1,NORMAL:2,WIREFRAME:3,UV:4,MATCAP:5,SELECTION:6,BACKGROUND:7,MERGE:8,FXAA:9,CONTOUR:10,PAINTUV:11,BLUR:12,COMPARISON_IMAGE:13},Projection:{PERSPECTIVE:0,ORTHOGRAPHIC:1},CameraMode:{ORBIT:0,SPHERICAL:1,PLANE:2},MultiState:{NONE:0,SCULPT:1,CAMERA:2,PICKING:3}},a=Object.keys(n.Tools).length;n.KeyAction=i.Z.extend({INTENSITY:a++,RADIUS:a++,NEGATIVE:a++,PICKER:a++,DELETE:a++,CAMERA_FRONT:a++,CAMERA_TOP:a++,CAMERA_LEFT:a++,CAMERA_RESET:a++,STRIFE_LEFT:a++,STRIFE_RIGHT:a++,STRIFE_UP:a++,STRIFE_DOWN:a++,WIREFRAME:a++,REMESH:a++},n.Tools);const s=n},50:()=>{if(window.Map||(window.Map=function(){this.map={}},window.Map.prototype={set:function(e,t){this.map[e]=t},get:function(e){return this.map[e]}}),!Float32Array.prototype.slice){var e=function(e,t){return new this.constructor(this.subarray(e,t))};Int8Array.prototype.slice=e,Uint8Array.prototype.slice=e,Uint8ClampedArray.prototype.slice=e,Int16Array.prototype.slice=e,Uint16Array.prototype.slice=e,Int32Array.prototype.slice=e,Uint32Array.prototype.slice=e,Float32Array.prototype.slice=e,Float64Array.prototype.slice=e}String.prototype.endsWith||(String.prototype.endsWith=function(e){return this.slice(-e.length)===e}),String.prototype.startsWith||(String.prototype.startsWith=function(e){return this.slice(0,e.length)===e});for(var t=["moz","webkit"],r=0;r{"use strict";r.d(t,{Z:()=>n});var i={radiusFactor:.75,intensityFactor:0,pressure:.5,getPressureIntensity:function(){return 1+i.intensityFactor*(2*i.pressure-1)},getPressureRadius:function(){return 1+i.radiusFactor*(2*i.pressure-1)}};const n=i},781:(e,t,r)=>{"use strict";r.d(t,{Z:()=>l});var i=r(928),n={SCALE:100,TAG_FLAG:1,SCULPT_FLAG:1,STATE_FLAG:1,TRI_INDEX:4294967295,cursors:{}};n.cursors.dropper="url(resources/dropper.png) 5 25, auto",n.linearToSRGB1=function(e){return e<.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055},n.sRGBToLinear1=function(e){return e<.04045?e*(1/12.92):Math.pow((e+.055)*(1/1.055),2.4)},n.extend=function(e,t){for(var r=Object.keys(t),i=0,n=r.length;i>t;return e+1};var a,s,o=function(e,t){return e-t};n.tidy=function(e){e.sort(o);var t=e.length,r=0,i=0;for(r=1;r1&&(e.length=i+1)},n.intersectionArrays=function(e,t){for(var r=0,i=0,n=[],a=e.length,s=t.length;rt[i]?i++:(n.push(e[r]),++r,++i);return n},n.littleEndian=(a=new ArrayBuffer(2),new DataView(a).setInt16(0,256,!0),256===new Int16Array(a)[0]),n.getBytes=function(e,t){return[e[t].charCodeAt(),e[t+1].charCodeAt(),e[t+2].charCodeAt(),e[t+3].charCodeAt()]},n.getUint32=function(e,t){var r=n.getBytes(e,t);return r[0]<<0|r[1]<<8|r[2]<<16|r[3]<<24},n.getFloat32=function(e,t){var r=n.getBytes(e,t),i=1-2*(r[3]>>7),a=(r[3]<<1&255|r[2]>>7)-127,s=(127&r[2])<<16|r[1]<<8|r[0];return 128===a?0!==s?NaN:i*(1/0):-127===a?i*s*Math.pow(2,-149):i*(1+s*Math.pow(2,-23))*Math.pow(2,a)},n.ab2str=function(e){for(var t="",r=new Uint8Array(e),i=65535,n=0,a=r.length;n=e?s:s=new ArrayBuffer(e)}),n.now=Date.now||function(){return(new Date).getTime()},n.throttle=function(e,t){var r,i=[],a=null,s=0,o=function(){s=n.now(),a=null,r=e.apply(e,i)};return function(){for(var l=n.now(),u=t-(l-s),c=i.length=arguments.length,h=0;ht?(window.clearTimeout(a),a=null,s=l,r=e.apply(e,i)):a||(a=window.setTimeout(o,u)),r}},n.normalizeArrayVec3=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,r=0,i=e.length/3;r1&&void 0!==arguments[1]?arguments[1]:e,r=0,i=e.length;r1&&void 0!==arguments[1]?arguments[1]:e,r=0,i=e.length;r{"use strict";r.d(t,{Z:()=>h});var i,n=r(839),a=n.Z.KeyAction,s=function(e,t){return void 0===e?t:"false"!==e&&"0"!==e},o=function(e,t,r,i){var n=parseFloat(e);return n||0===n?Math.max(t,Math.min(r,n)):i},l=function(e,t,r,i){var n=parseInt(e,10);return n||0===n?Math.max(t,Math.min(r,n)):i},u=function(e,t,r){if(t){var i=e[t.toUpperCase()];if(void 0!==i)return i}return r},c=function(){if(i)return i;i={};var e=function(){for(var e=window.location.search.substr(1).split("&"),t={},r=0,i=e.length;r=10?l:o.charCodeAt(0);var u=a[s[0].toUpperCase()];void 0!==u&&(t[o]=u)}}return t}(e.shortcuts),i};c(),c.getShortKey=function(e){return e>=96&&e<=105&&(e-=48),c().shortcuts[e]};const h=c}},__webpack_module_cache__={};function __webpack_require__(e){if(__webpack_module_cache__[e])return __webpack_module_cache__[e].exports;var t=__webpack_module_cache__[e]={id:e,loaded:!1,exports:{}};return __webpack_modules__[e].call(t.exports,t,t.exports,__webpack_require__),t.loaded=!0,t.exports}return __webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),__webpack_require__(866)})()}));