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