BinaryDecoderWorker.js 9.2 KB

1
  1. function _arrayLikeToArray(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,i=Array(e);r<e;r++)i[r]=t[r];return i}function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function _defineProperties(t,e){for(var r=0;r<e.length;r++){var i=e[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,_toPropertyKey(i.key),i)}}function _createClass(t,e,r){return e&&_defineProperties(t.prototype,e),r&&_defineProperties(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function _createForOfIteratorHelper(t,e){var r,i,n,a,o="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(o)return n=!(i=!0),{s:function(){o=o.call(t)},n:function(){var t=o.next();return i=t.done,t},e:function(t){n=!0,r=t},f:function(){try{i||null==o.return||o.return()}finally{if(n)throw r}}};if(Array.isArray(t)||(o=_unsupportedIterableToArray(t))||e&&t&&"number"==typeof t.length)return o&&(t=o),a=0,{s:e=function(){},n:function(){return a>=t.length?{done:!0}:{done:!1,value:t[a++]}},e:function(t){throw t},f:e};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _toPrimitive(t,e){if("object"!=typeof t||!t)return t;var r=t[Symbol.toPrimitive];if(void 0===r)return("string"===e?String:Number)(t);r=r.call(t,e||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}function _toPropertyKey(t){t=_toPrimitive(t,"string");return"symbol"==typeof t?t:t+""}function _unsupportedIterableToArray(t,e){var r;if(t)return"string"==typeof t?_arrayLikeToArray(t,e):"Map"===(r="Object"===(r={}.toString.call(t).slice(8,-1))&&t.constructor?t.constructor.name:r)||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(t,e):void 0}var obj,Version=function(){function r(t){_classCallCheck(this,r);var e=-1===(this.version=t).indexOf(".")?t.length:t.indexOf(".");this.versionMajor=parseInt(t.substr(0,e)),this.versionMinor=parseInt(t.substr(e+1)),0===this.versionMinor.length&&(this.versionMinor=0)}return _createClass(r,[{key:"newerThan",value:function(t){t=new r(t);return this.versionMajor>t.versionMajor||this.versionMajor===t.versionMajor&&this.versionMinor>t.versionMinor}},{key:"equalOrHigher",value:function(t){t=new r(t);return this.versionMajor>t.versionMajor||this.versionMajor===t.versionMajor&&this.versionMinor>=t.versionMinor}},{key:"upTo",value:function(t){return!this.newerThan(t)}}])}(),PointAttributeTypes={DATA_TYPE_DOUBLE:{ordinal:0,name:"double",size:8},DATA_TYPE_FLOAT:{ordinal:1,name:"float",size:4},DATA_TYPE_INT8:{ordinal:2,name:"int8",size:1},DATA_TYPE_UINT8:{ordinal:3,name:"uint8",size:1},DATA_TYPE_INT16:{ordinal:4,name:"int16",size:2},DATA_TYPE_UINT16:{ordinal:5,name:"uint16",size:2},DATA_TYPE_INT32:{ordinal:6,name:"int32",size:4},DATA_TYPE_UINT32:{ordinal:7,name:"uint32",size:4},DATA_TYPE_INT64:{ordinal:8,name:"int64",size:8},DATA_TYPE_UINT64:{ordinal:9,name:"uint64",size:8}},i=0;for(obj in PointAttributeTypes)PointAttributeTypes[i]=PointAttributeTypes[obj],i++;var PointAttribute=_createClass(function t(e,r,i){_classCallCheck(this,t),this.name=e,this.type=r,this.numElements=i,this.byteSize=this.numElements*this.type.size,this.description="",this.range=[1/0,-1/0]}),typedArrayMapping=(PointAttribute.POSITION_CARTESIAN=new PointAttribute("POSITION_CARTESIAN",PointAttributeTypes.DATA_TYPE_FLOAT,3),PointAttribute.RGBA_PACKED=new PointAttribute("COLOR_PACKED",PointAttributeTypes.DATA_TYPE_INT8,4),PointAttribute.COLOR_PACKED=PointAttribute.RGBA_PACKED,PointAttribute.RGB_PACKED=new PointAttribute("COLOR_PACKED",PointAttributeTypes.DATA_TYPE_INT8,3),PointAttribute.NORMAL_FLOATS=new PointAttribute("NORMAL_FLOATS",PointAttributeTypes.DATA_TYPE_FLOAT,3),PointAttribute.INTENSITY=new PointAttribute("INTENSITY",PointAttributeTypes.DATA_TYPE_UINT16,1),PointAttribute.CLASSIFICATION=new PointAttribute("CLASSIFICATION",PointAttributeTypes.DATA_TYPE_UINT8,1),PointAttribute.NORMAL_SPHEREMAPPED=new PointAttribute("NORMAL_SPHEREMAPPED",PointAttributeTypes.DATA_TYPE_UINT8,2),PointAttribute.NORMAL_OCT16=new PointAttribute("NORMAL_OCT16",PointAttributeTypes.DATA_TYPE_UINT8,2),PointAttribute.NORMAL=new PointAttribute("NORMAL",PointAttributeTypes.DATA_TYPE_FLOAT,3),PointAttribute.RETURN_NUMBER=new PointAttribute("RETURN_NUMBER",PointAttributeTypes.DATA_TYPE_UINT8,1),PointAttribute.NUMBER_OF_RETURNS=new PointAttribute("NUMBER_OF_RETURNS",PointAttributeTypes.DATA_TYPE_UINT8,1),PointAttribute.SOURCE_ID=new PointAttribute("SOURCE_ID",PointAttributeTypes.DATA_TYPE_UINT16,1),PointAttribute.INDICES=new PointAttribute("INDICES",PointAttributeTypes.DATA_TYPE_UINT32,1),PointAttribute.SPACING=new PointAttribute("SPACING",PointAttributeTypes.DATA_TYPE_FLOAT,1),PointAttribute.GPS_TIME=new PointAttribute("GPS_TIME",PointAttributeTypes.DATA_TYPE_DOUBLE,1),{int8:Int8Array,int16:Int16Array,int32:Int32Array,int64:Float64Array,uint8:Uint8Array,uint16:Uint16Array,uint32:Uint32Array,uint64:Float64Array,float:Float32Array,double:Float64Array});Potree={},onmessage=function(t){performance.mark("binary-decoder-start");var Y,e=t.data.buffer,r=t.data.pointAttributes,i=e.byteLength/r.byteSize,n=new DataView(e),z=new Version(t.data.version),L=t.data.offset,B=t.data.scale,a=(t.data.spacing,t.data.hasChildren,t.data.name,[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]),o=[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],u=[0,0,0],A={},s=0,f=_createForOfIteratorHelper(r.attributes);try{for(f.s();!(Y=f.n()).done;){var b=Y.value;if("POSITION_CARTESIAN"===b.name){for(var j=new ArrayBuffer(4*i*3),k=new Float32Array(j),T=0;T<i;T++){var l=void 0,y=void 0,P=void 0,P=z.newerThan("1.3")?(l=n.getUint32(s+T*r.byteSize+0,!0)*B,y=n.getUint32(s+T*r.byteSize+4,!0)*B,n.getUint32(s+T*r.byteSize+8,!0)*B):(l=n.getFloat32(T*r.byteSize+0,!0)+L[0],y=n.getFloat32(T*r.byteSize+4,!0)+L[1],n.getFloat32(T*r.byteSize+8,!0)+L[2]);k[3*T+0]=l,k[3*T+1]=y,k[3*T+2]=P,u[0]+=l/i,u[1]+=y/i,u[2]+=P/i,a[0]=Math.min(a[0],l),a[1]=Math.min(a[1],y),a[2]=Math.min(a[2],P),o[0]=Math.max(o[0],l),o[1]=Math.max(o[1],y),o[2]=Math.max(o[2],P)}A[b.name]={buffer:j,attribute:b}}else if("rgba"===b.name){for(var x=new ArrayBuffer(4*i),G=new Uint8Array(x),_=0;_<i;_++)G[4*_+0]=n.getUint8(s+_*r.byteSize+0),G[4*_+1]=n.getUint8(s+_*r.byteSize+1),G[4*_+2]=n.getUint8(s+_*r.byteSize+2);A[b.name]={buffer:x,attribute:b}}else if("NORMAL_SPHEREMAPPED"===b.name){for(var V=new ArrayBuffer(4*i*3),H=new Float32Array(V),I=0;I<i;I++){var K=n.getUint8(s+I*r.byteSize+0),q=n.getUint8(s+I*r.byteSize+1),N=2*(K/255)-1,m=2*(q/255)-1,$=N*-N+m*-m+1,J=$;N*=Math.sqrt($),m*=Math.sqrt($),N*=2,m*=2,J=2*J-1,H[3*I+0]=N,H[3*I+1]=m,H[3*I+2]=J}A[b.name]={buffer:V,attribute:b}}else if("NORMAL_OCT16"===b.name){for(var Q=new ArrayBuffer(4*i*3),W=new Float32Array(Q),p=0;p<i;p++){var X=n.getUint8(s+p*r.byteSize+0),Z=n.getUint8(s+p*r.byteSize+1),c=X/255*2-1,E=Z/255*2-1,v=1-Math.abs(c)-Math.abs(E),h=0,g=0,g=0<=v?(h=c,E):(h=-(E/Math.sign(E)-1)/Math.sign(c),-(c/Math.sign(c)-1)/Math.sign(E)),tt=Math.sqrt(h*h+g*g+v*v);h/=tt,g/=tt,v/=tt,W[3*p+0]=h,W[3*p+1]=g,W[3*p+2]=v}A[b.name]={buffer:Q,attribute:b}}else if("NORMAL"===b.name){for(var et=new ArrayBuffer(4*i*3),rt=new Float32Array(et),M=0;M<i;M++){var it=n.getFloat32(s+M*r.byteSize+0,!0),nt=n.getFloat32(s+M*r.byteSize+4,!0),at=n.getFloat32(s+M*r.byteSize+8,!0);rt[3*M+0]=it,rt[3*M+1]=nt,rt[3*M+2]=at}A[b.name]={buffer:et,attribute:b}}else{var ot=new ArrayBuffer(4*i),ut=new Float32Array(ot),At=typedArrayMapping[b.type.name],d=(preciseBuffer=new At(i),1/0),S=-1/0,O=0,st=1,ft={int8:n.getInt8,int16:n.getInt16,int32:n.getInt32,int64:n.getInt64,uint8:n.getUint8,uint16:n.getUint16,uint32:n.getUint32,uint64:n.getUint64,float:n.getFloat32,double:n.getFloat64}[b.type.name].bind(n);if(4<b.type.size){for(var bt=0;bt<i;bt++){var Tt=ft(s+bt*r.byteSize,!0);Number.isNaN(Tt)||(d=Math.min(d,Tt),S=Math.max(S,Tt))}st=null!=b.initialRange?(O=b.initialRange[0],1/(b.initialRange[1]-b.initialRange[0])):1/(S-(O=d))}for(var w=0;w<i;w++){var D=ft(s+w*r.byteSize,!0);Number.isNaN(D)||(d=Math.min(d,D),S=Math.max(S,D)),ut[w]=(D-O)*st,preciseBuffer[w]=D}b.range=[d,S],A[b.name]={buffer:ot,preciseBuffer:preciseBuffer,attribute:b,offset:O,scale:st}}s+=b.byteSize}}catch(t){f.e(t)}finally{f.f()}for(var t=new ArrayBuffer(4*i),lt=new Uint32Array(t),U=0;U<i;U++)lt[U]=U;A.INDICES={buffer:t,attribute:PointAttribute.INDICES};var yt,F=_createForOfIteratorHelper(r.vectors);try{for(F.s();!(yt=F.n()).done;){var Pt,_t=yt.value,It=_t.name,Nt=_t.attributes,mt=Nt.length,pt=new ArrayBuffer(mt*i*4),ct=new Float32Array(pt),Et=0,R=_createForOfIteratorHelper(Nt);try{for(R.s();!(Pt=R.n()).done;){for(var vt=A[Pt.value],ht=vt.offset,gt=vt.scale,Mt=new DataView(vt.buffer),dt=Mt.getFloat32.bind(Mt),C=0;C<i;C++){var St=dt(4*C,!0);ct[C*mt+Et]=St/gt+ht}Et++}}catch(t){R.e(t)}finally{R.f()}var Ot=new PointAttribute(It,PointAttributeTypes.DATA_TYPE_FLOAT,3);A[It]={buffer:pt,attribute:Ot}}}catch(t){F.e(t)}finally{F.f()}performance.mark("binary-decoder-end"),performance.clearMarks(),performance.clearMeasures();var wt,Dt={buffer:e,mean:u,attributeBuffers:A,tightBoundingBox:{min:a,max:o}},Ut=[];for(wt in Dt.attributeBuffers)Ut.push(Dt.attributeBuffers[wt].buffer);Ut.push(e),postMessage(Dt,Ut)};