UNPKG

awv3

Version:
1 lines 6.44 kB
"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{"default":e}}function optimizeGeometry(e,t,r){if("Blob"===e.command)return optimizeGeometry(e.data,t,r);switch("Geometry"===e.command&&(e.attributes.optimized=!0),e.attributes.action){case"Add":var a=e.attributes.type;if("Part"==a){if(self.postMessage({action:"Result",result:{attributes:{action:"Add",type:"Part",transforms:e.attributes.transforms,removes:e.attributes.removes,min:e.attributes.min,max:e.attributes.max,optimized:!0}},task:r},[]),e.attributes.models){var s=void 0,i=void 0,o=void 0,n=e.attributes.models;for(s=0,o=n.length;s<o;s++){i=n[s],i.action="Add",i.type="Model";var u=[];optimizeGeometry({attributes:i},u,r)}}break}if("Model"==a){var v=(e.attributes.protocolVersion,[]),d=d=e.attributes.lines;if(void 0!==d&&d.length>0){var l=void 0,c=void 0,f=void 0;for(l=0,c=d.length;l<c;l++){var h=d[l];f=[h[0],h[1],h[2]];var p=void 0,m=void 0;for(p=1,m=h.length/3;p<m;++p)v.push(f[0]),v.push(f[1]),v.push(f[2]),v.push(h[3*p+0]),v.push(h[3*p+1]),v.push(h[3*p+2]),f=[h[3*p+0],h[3*p+1],h[3*p+2]]}}var g=e.attributes.edges;if(void 0!==g&&g.length>0){var b=void 0,y=void 0,w=void 0;for(b=0,y=g.length;b<y;b++){var A=g[b];w=[A[0],A[1],A[2]];var M=void 0,k=void 0;for(M=1,k=A.length/3;M<k;++M)v.push(w[0]),v.push(w[1]),v.push(w[2]),v.push(A[3*M+0]),v.push(A[3*M+1]),v.push(A[3*M+2]),w=[A[3*M+0],A[3*M+1],A[3*M+2]]}e.attributes.edges=[],delete e.attributes.edges}var z=void 0;if(z=e.attributes.arcs,void 0!==z&&z.length>0){var x=void 0,F=void 0;for(x=0,F=z.length;x<F;x++){var _=z[x],C=_[9],G=0,S=Math.abs(Math.abs(_[10])-Math.PI)<1e-6?2*Math.PI:_[10],D=64,U=[_[0],_[1],_[2]],q=[_[3],_[4],_[5]],B=[_[6],_[7],_[8]],P=[_[3],_[4],_[5]],R=P[0],T=P[1],I=P[2];P[0]=T*B[2]-I*B[1],P[1]=I*B[0]-R*B[2],P[2]=R*B[1]-T*B[0];var O=Math.sqrt(P[0]*P[0]+P[1]*P[1]+P[2]*P[2]);if(0!==O){var V=1/O;P[0]*=V,P[1]*=V,P[2]*=V}else P[0]=P[1]=P[2]=0;var E=[B[0],B[1],B[2],0,P[0],P[1],P[2],0,q[0],q[1],q[2],0,U[0],U[1],U[2],1],J=G/D*S,L=void 0,N=[C*Math.cos(J),C*Math.sin(J),0];for(applyMatrix(N,E),L=1;L<=D;L++){var j=G+L/D*S,H=[C*Math.cos(j),C*Math.sin(j),0];applyMatrix(H,E),v.push(N[0]),v.push(N[1]),v.push(N[2]),v.push(H[0]),v.push(H[1]),v.push(H[2]),N=[H[0],H[1],H[2]]}}e.attributes.arcs=void 0,delete e.attributes.arcs}v.length>0&&(e.attributes.lines=new Float32Array(v),t.push(e.attributes.lines.buffer));var K=e.attributes.meshes;if(void 0!==K&&K.length>0){for(var Q=[],W={},X=0,Y=0,Z=0,$=0,ee=void 0,te=0,re=K.length;te<re;te++)if(ee=K[te],ee.color||ee.opacity||ee.meta){var ae={color:ee.color,opacity:ee.opacity,meta:ee.meta},se=0;ae.vertices=new Float32Array(ee.vertices.length),t.push(ae.vertices.buffer);for(var ie=0,oe=ee.vertices.length/3;ie<oe;ie++)ae.vertices[se++]=ee.vertices[3*ie+0],ae.vertices[se++]=ee.vertices[3*ie+1],ae.vertices[se++]=ee.vertices[3*ie+2];var ne=0;ae.indices=new Uint32Array(ee.indices.length),t.push(ae.indices.buffer);for(var ue=0,ve=ee.indices.length/3;ue<ve;ue++)ae.indices[ne++]=ee.indices[3*ue+0],ae.indices[ne++]=ee.indices[3*ue+1],ae.indices[ne++]=ee.indices[3*ue+2];if(ee.uvs){var de=0;ae.uvs=new Float32Array(ee.uvs.length),t.push(ae.uvs.buffer);for(var le=0,ce=ee.uvs.length/2;le<ce;le++)ae.uvs[de++]=ee.uvs[2*le+0],ae.uvs[de++]=ee.uvs[2*le+1]}if(ee.normals){var fe=0;ae.normals=new Float32Array(ee.normals.length),t.push(ae.normals.buffer);for(var he=0,pe=ee.normals.length/3;he<pe;he++)ae.normals[fe++]=ee.normals[3*he+0],ae.normals[fe++]=ee.normals[3*he+1],ae.normals[fe++]=ee.normals[3*he+2]}Q.push(ae)}else X+=ee.vertices.length,Y+=ee.indices.length,ee.uvs&&(Z+=ee.uvs.length),ee.normals&&($+=ee.normals.length);if(X>0){W.vertices=new Float32Array(X),t.push(W.vertices.buffer),W.indices=new Uint32Array(Y),t.push(W.indices.buffer),Z>0&&(W.uvs=new Float32Array(Z),t.push(W.uvs.buffer)),$>0&&(W.normals=new Float32Array($),t.push(W.normals.buffer)),X=Y=Z=$=0;for(var me=void 0,ge=void 0,be=void 0,ye=void 0,we=0,Ae=0;Ae<K.length;Ae++)if(ee=K[Ae],!(ee.color||ee.opacity||ee.meta)){me=ee.vertices;for(var Me=0,ke=me.length/3;Me<ke;Me++)W.vertices[X++]=me[3*Me+0],W.vertices[X++]=me[3*Me+1],W.vertices[X++]=me[3*Me+2];ge=ee.indices;for(var ze=0,xe=ge.length/3;ze<xe;ze++)W.indices[Y++]=ge[3*ze+0]+we,W.indices[Y++]=ge[3*ze+1]+we,W.indices[Y++]=ge[3*ze+2]+we;if(ee.uvs){be=ee.uvs;for(var Fe=0,_e=be.length/2;Fe<_e;Fe++)W.uvs[Z++]=be[2*Fe+0],W.uvs[Z++]=be[2*Fe+1]}if(ee.normals){ye=ee.normals;for(var Ce=0,Ge=ye.length/3;Ce<Ge;Ce++)W.normals[$++]=ye[3*Ce+0],W.normals[$++]=ye[3*Ce+1],W.normals[$++]=ye[3*Ce+2]}we+=me.length/3}Q.push(W)}e.attributes.meshes=Q}self.postMessage({action:"Result",result:e,task:r},t)}}}function cross(e,t){var r=e[0],a=e[1],s=e[2];e[0]=a*t[2]-s*t[1],e[1]=s*t[0]-r*t[2],e[2]=r*t[1]-a*t[0]}function applyMatrix(e,t){var r=e[0],a=e[1],s=e[2];e[0]=t[0]*r+t[4]*a+t[8]*s+t[12],e[1]=t[1]*r+t[5]*a+t[9]*s+t[13],e[2]=t[2]*r+t[6]*a+t[10]*s+t[14]}function base128decode(e){var t="!#$%()*,.0123456789:;=@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmnopqrstuvwxyz{|}~¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎ",r=e.length;if(r<=0)return null;var a=r%8,s=(r-a)/8*7+a;a>0&&s--;var i=0,o=0,n=0,u=0,v=0,d=8,l=7,c=void 0,f=new Uint8Array(s+1);for(c=0;c<r;c++)v=t.lastIndexOf(e[c]),v!=-1&&(o=v),d>7?(d=1,l=7,i=o):(n=o,o=o<<l--&255,o|=i,i=n>>d++,f[u++]=o);return f}function utf8ArrayToStr(e){var t=void 0,r=void 0,a=void 0,s=void 0,i=void 0,o=void 0;for(t="",a=e.length,r=0;r<a;)switch(s=e[r++],s>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:t+=String.fromCharCode(s);break;case 12:case 13:i=e[r++],t+=String.fromCharCode((31&s)<<6|63&i);break;case 14:i=e[r++],o=e[r++],t+=String.fromCharCode((15&s)<<12|(63&i)<<6|(63&o)<<0)}return t}function decodeBuffer(e,t){var r="";if("undefined"!=typeof TextDecoder){var a=new DataView(e.buffer),s=new TextDecoder("utf-8");r=s.decode(a)}else r=utf8ArrayToStr(e);return r.slice(0,t)}function unpack(e){var t=e.data;t instanceof Uint8Array||(t=base128decode(e.data)),t=_pako2["default"].inflate(t,{raw:!0}),t=decodeBuffer(t,e.length||t.length),e.data=JSON.parse(t),e.size=t.length}var _pako=require("pako"),_pako2=_interopRequireDefault(_pako);self.addEventListener("message",function(e){if(e=e.data,"Blob"===e.command)unpack(e),Array.isArray(e.data)&&(e.data=e.data[0]);else if("Geometry"!==e.command)throw"Unknown format";optimizeGeometry(e,void 0,e.task),self.postMessage({action:"Finished",time:0,size:e.size,task:e.task})},!1);