UNPKG

@loaders.gl/pcd

Version:

Framework-independent loader for the PCD format

18 lines (17 loc) 7.88 kB
(function webpackUniversalModuleDefinition(root, factory) { if (typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if (typeof define === 'function' && define.amd) define([], factory); else if (typeof exports === 'object') exports['loaders'] = factory(); else root['loaders'] = factory();})(globalThis, function () { "use strict";var __exports__=(()=>{var D=Object.create;var x=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty;var P=(t,o)=>()=>(o||t((o={exports:{}}).exports,o),o.exports),B=(t,o)=>{for(var n in o)x(t,n,{get:o[n],enumerable:!0})},y=(t,o,n,e)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of v(o))!L.call(t,i)&&i!==n&&x(t,i,{get:()=>o[i],enumerable:!(e=C(o,i))||e.enumerable});return t},w=(t,o,n)=>(y(t,o,"default"),n&&y(n,o,"default")),E=(t,o,n)=>(n=t!=null?D(O(t)):{},y(o||!t||!t.__esModule?x(n,"default",{value:t,enumerable:!0}):n,t)),U=t=>y(x({},"__esModule",{value:!0}),t);var F=P((W,z)=>{z.exports=globalThis.loaders});var d={};B(d,{PCDLoader:()=>Z,PCDWorkerLoader:()=>I});w(d,E(F(),1));function T(t){let o=1/0,n=1/0,e=1/0,i=-1/0,r=-1/0,p=-1/0,s=t.POSITION?t.POSITION.value:[],l=s&&s.length;for(let h=0;h<l;h+=3){let f=s[h],a=s[h+1],u=s[h+2];o=f<o?f:o,n=a<n?a:n,e=u<e?u:e,i=f>i?f:i,r=a>r?a:r,p=u>p?u:p}return[[o,n,e],[i,r,p]]}function S(t,o){let n=t.length,e=new Uint8Array(o),i=0,r=0,p,s,l;do if(p=t[i++],p<1<<5){if(p++,r+p>o)throw new Error("Output buffer is not large enough");if(i+p>n)throw new Error("Invalid compressed data");do e[r++]=t[i++];while(--p)}else{if(s=p>>5,l=r-((p&31)<<8)-1,i>=n)throw new Error("Invalid compressed data");if(s===7&&(s+=t[i++],i>=n))throw new Error("Invalid compressed data");if(l-=t[i++],r+s+2>o)throw new Error("Output buffer is not large enough");if(l<0)throw new Error("Invalid compressed data");if(l>=r)throw new Error("Invalid compressed data");do e[r++]=e[l++];while(--s+2)}while(i<n);return e}function A(t,o){let n=t.offset,e=[];return n.x!==void 0&&e.push({name:"POSITION",type:{type:"fixed-size-list",listSize:3,children:[{name:"xyz",type:"float32"}]}}),n.normal_x!==void 0&&e.push({name:"NORMAL",type:{type:"fixed-size-list",listSize:3,children:[{name:"xyz",type:"float32"}]}}),n.rgb!==void 0&&e.push({name:"COLOR_0",type:{type:"fixed-size-list",listSize:3,children:[{name:"rgb",type:"uint8"}]}}),{fields:e,metadata:o}}var m=!0;function b(t){let o=new TextDecoder().decode(t),n=M(o),e={};switch(n.data){case"ascii":e=R(n,o);break;case"binary":e=k(n,t);break;case"binary_compressed":e=V(n,t);break;default:throw new Error(`PCD: ${n.data} files are not supported`)}e=N(e);let i=_(n,e),r=Object.fromEntries([["mode","0"],["boundingBox",JSON.stringify(i.boundingBox)]]),p=A(n,r);return{loader:"pcd",loaderData:n,header:i,schema:p,mode:0,topology:"point-list",attributes:e}}function _(t,o){return typeof t.width=="number"&&typeof t.height=="number"?{vertexCount:t.width*t.height,boundingBox:T(o)}:{vertexCount:t.vertexCount,boundingBox:t.boundingBox}}function N(t){let o={POSITION:{value:new Float32Array(t.position),size:3}};return t.normal&&t.normal.length>0&&(o.NORMAL={value:new Float32Array(t.normal),size:3}),t.color&&t.color.length>0&&(o.COLOR_0={value:new Uint8Array(t.color),size:3}),t.intensity&&t.intensity.length>0&&(o.COLOR_0={value:new Uint8Array(t.color),size:3}),t.label&&t.label.length>0&&(o.COLOR_0={value:new Uint8Array(t.label),size:3}),o}function M(t){let o=t.search(/[\r\n]DATA\s(\S*)\s/i),n=/[\r\n]DATA\s(\S*)\s/i.exec(t.substr(o-1)),e={};if(e.data=n&&n[1],n!==null&&(e.headerLen=(n&&n[0].length)+o),e.str=t.substr(0,e.headerLen),e.str=e.str.replace(/\#.*/gi,""),e.version=/VERSION (.*)/i.exec(e.str),e.fields=/FIELDS (.*)/i.exec(e.str),e.size=/SIZE (.*)/i.exec(e.str),e.type=/TYPE (.*)/i.exec(e.str),e.count=/COUNT (.*)/i.exec(e.str),e.width=/WIDTH (.*)/i.exec(e.str),e.height=/HEIGHT (.*)/i.exec(e.str),e.viewpoint=/VIEWPOINT (.*)/i.exec(e.str),e.points=/POINTS (.*)/i.exec(e.str),e.version!==null&&(e.version=parseFloat(e.version[1])),e.fields!==null&&(e.fields=e.fields[1].split(" ")),e.type!==null&&(e.type=e.type[1].split(" ")),e.width!==null&&(e.width=parseInt(e.width[1],10)),e.height!==null&&(e.height=parseInt(e.height[1],10)),e.viewpoint!==null&&(e.viewpoint=e.viewpoint[1]),e.points!==null&&(e.points=parseInt(e.points[1],10)),e.points===null&&typeof e.width=="number"&&typeof e.height=="number"&&(e.points=e.width*e.height),e.size!==null&&(e.size=e.size[1].split(" ").map(r=>parseInt(r,10))),e.count!==null)e.count=e.count[1].split(" ").map(r=>parseInt(r,10));else if(e.count=[],e.fields!==null)for(let r=0;r<e.fields.length;r++)e.count.push(1);e.offset={};let i=0;if(e.fields!==null&&e.size!==null)for(let r=0;r<e.fields.length;r++)e.data==="ascii"?e.offset[e.fields[r]]=r:(e.offset[e.fields[r]]=i,i+=e.size[r]);return e.rowSize=i,e}function R(t,o){let n=[],e=[],i=[],r=[],p=[],s=t.offset,h=o.substr(t.headerLen).split(` `);for(let f=0;f<h.length;f++)if(h[f]!==""){let a=h[f].split(" ");if(s.x!==void 0&&(n.push(parseFloat(a[s.x])),n.push(parseFloat(a[s.y])),n.push(parseFloat(a[s.z]))),s.rgb!==void 0){let u=parseFloat(a[s.rgb]),c=new Float32Array([u]),g=new DataView(c.buffer,0);i.push(g.getUint8(0)),i.push(g.getUint8(1)),i.push(g.getUint8(2))}s.normal_x!==void 0&&(e.push(parseFloat(a[s.normal_x])),e.push(parseFloat(a[s.normal_y])),e.push(parseFloat(a[s.normal_z]))),s.intensity!==void 0&&r.push(parseFloat(a[s.intensity])),s.label!==void 0&&p.push(parseInt(a[s.label]))}return{position:n,normal:e,color:i}}function k(t,o){let n=[],e=[],i=[],r=[],p=[],s=new DataView(o,t.headerLen),l=t.offset;for(let h=0,f=0;h<t.points;h++,f+=t.rowSize)l.x!==void 0&&(n.push(s.getFloat32(f+l.x,m)),n.push(s.getFloat32(f+l.y,m)),n.push(s.getFloat32(f+l.z,m))),l.rgb!==void 0&&(i.push(s.getUint8(f+l.rgb+0)),i.push(s.getUint8(f+l.rgb+1)),i.push(s.getUint8(f+l.rgb+2))),l.normal_x!==void 0&&(e.push(s.getFloat32(f+l.normal_x,m)),e.push(s.getFloat32(f+l.normal_y,m)),e.push(s.getFloat32(f+l.normal_z,m))),l.intensity!==void 0&&r.push(s.getFloat32(f+l.intensity,m)),l.label!==void 0&&p.push(s.getInt32(f+l.label,m));return{position:n,normal:e,color:i,intensity:r,label:p}}function V(t,o){let n=[],e=[],i=[],r=[],p=[],s=new Uint32Array(o.slice(t.headerLen,t.headerLen+8)),l=s[0],h=s[1],f=S(new Uint8Array(o,t.headerLen+8,l),h),a=new DataView(f.buffer),u=t.offset;for(let c=0;c<t.points;c++){if(u.x!==void 0&&(n.push(a.getFloat32(t.points*u.x+t.size[0]*c,m)),n.push(a.getFloat32(t.points*u.y+t.size[1]*c,m)),n.push(a.getFloat32(t.points*u.z+t.size[2]*c,m))),u.rgb!==void 0&&(i.push(a.getUint8(t.points*u.rgb+t.size[3]*c+0)/255),i.push(a.getUint8(t.points*u.rgb+t.size[3]*c+1)/255),i.push(a.getUint8(t.points*u.rgb+t.size[3]*c+2)/255)),u.normal_x!==void 0&&(e.push(a.getFloat32(t.points*u.normal_x+t.size[4]*c,m)),e.push(a.getFloat32(t.points*u.normal_y+t.size[5]*c,m)),e.push(a.getFloat32(t.points*u.normal_z+t.size[6]*c,m))),u.intensity!==void 0){let g=t.fields.indexOf("intensity");r.push(a.getFloat32(t.points*u.intensity+t.size[g]*c,m))}if(u.label!==void 0){let g=t.fields.indexOf("label");p.push(a.getInt32(t.points*u.label+t.size[g]*c,m))}}return{position:n,normal:e,color:i,intensity:r,label:p}}var Y="4.3.3",I={dataType:null,batchType:null,name:"PCD (Point Cloud Data)",id:"pcd",module:"pcd",version:Y,worker:!0,extensions:["pcd"],mimeTypes:["text/plain"],options:{pcd:{}}};var Z={...I,parse:async t=>b(t),parseSync:b};return U(d);})(); /** Parse compressed PCD data in in binary_compressed form ( https://pointclouds.org/documentation/tutorials/pcd_file_format.html) * from https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/PCDLoader.js * @license MIT (http://opensource.org/licenses/MIT) * @param pcdHeader * @param data * @returns [attributes] */ return __exports__; });