@loaders.gl/ply
Version:
Framework-independent loader for the PLY format
13 lines (12 loc) • 10.3 kB
JavaScript
(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 () {
;var __exports__=(()=>{var R=Object.create;var x=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var W=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var V=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),X=(e,t)=>{for(var r in t)x(e,r,{get:t[r],enumerable:!0})},h=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of j(t))!J.call(e,o)&&o!==r&&x(e,o,{get:()=>t[o],enumerable:!(n=U(t,o))||n.enumerable});return e},g=(e,t,r)=>(h(e,t,"default"),r&&h(r,t,"default")),Z=(e,t,r)=>(r=e!=null?R(W(e)):{},h(t||!e||!e.__esModule?x(r,"default",{value:e,enumerable:!0}):r,e)),q=e=>h(x({},"__esModule",{value:!0}),e);var P=V((ue,v)=>{v.exports=globalThis.loaders});var d={};X(d,{PLYLoader:()=>le,PLYWorkerLoader:()=>A});g(d,Z(P(),1));var Q="4.3.2",A={dataType:null,batchType:null,name:"PLY",id:"ply",module:"ply",version:Q,worker:!0,extensions:["ply"],mimeTypes:["text/plain","application/octet-stream"],text:!0,binary:!0,tests:["ply"],options:{ply:{}}};function M(e){switch(e.constructor){case Int8Array:return"int8";case Uint8Array:case Uint8ClampedArray:return"uint8";case Int16Array:return"int16";case Uint16Array:return"uint16";case Int32Array:return"int32";case Uint32Array:return"uint32";case Float32Array:return"float32";case Float64Array:return"float64";default:return"null"}}function b(e){let t=1/0,r=1/0,n=1/0,o=-1/0,a=-1/0,s=-1/0,i=e.POSITION?e.POSITION.value:[],l=i&&i.length;for(let c=0;c<l;c+=3){let f=i[c],u=i[c+1],y=i[c+2];t=f<t?f:t,r=u<r?u:r,n=y<n?y:n,o=f>o?f:o,a=u>a?u:a,s=y>s?y:s}return[[t,r,n],[o,a,s]]}function k(e,t={}){return{fields:$(e),metadata:t}}function N(e,t,r){let n=M(t.value),o=r||z(t);return{name:e,type:{type:"fixed-size-list",listSize:t.size,children:[{name:"value",type:n}]},nullable:!1,metadata:o}}function $(e){let t=[];for(let r in e){let n=e[r];t.push(N(r,n))}return t}function z(e){let t={};return"byteOffset"in e&&(t.byteOffset=e.byteOffset.toString(10)),"byteStride"in e&&(t.byteStride=e.byteStride.toString(10)),"normalized"in e&&(t.normalized=e.normalized.toString()),t}function D(e,t){let r=G(e);return k(t,r)}function G(e){let t={};return t.ply_comments=JSON.stringify(e.comments),t.ply_elements=JSON.stringify(e.elements),e.format!==void 0&&(t.ply_format=e.format),e.version!==void 0&&(t.ply_version=e.version),e.headerLength!==void 0&&(t.ply_headerLength=e.headerLength.toString(10)),t}function p(e,t,r){let n=K(t),o=b(n),a=t.indices.length||t.vertices.length/3,s=t.indices&&t.indices.length>0,i=s?4:0,l=s?"triangle-list":"point-list",c=D(e,n),f={loader:"ply",loaderData:e,header:{vertexCount:a,boundingBox:o},schema:c,attributes:n,indices:{value:new Uint32Array(0),size:0},mode:i,topology:l};return t.indices.length>0&&(f.indices={value:new Uint32Array(t.indices),size:1}),f}function K(e){let t={};for(let r of Object.keys(e))switch(r){case"vertices":e.vertices.length>0&&(t.POSITION={value:new Float32Array(e.vertices),size:3});break;case"normals":e.normals.length>0&&(t.NORMAL={value:new Float32Array(e.normals),size:3});break;case"uvs":e.uvs.length>0&&(t.TEXCOORD_0={value:new Float32Array(e.uvs),size:2});break;case"colors":e.colors.length>0&&(t.COLOR_0={value:new Uint8Array(e.colors),size:3,normalized:!0});break;case"indices":break;default:e[r].length>0&&(t[r]={value:new Float32Array(e[r]),size:1});break}return t}function T(e,t={}){let r,n;if(e instanceof ArrayBuffer){let o=new TextDecoder().decode(e);r=E(o,t),n=r.format==="ascii"?O(o,r):ne(e,r)}else r=E(e,t),n=O(e,r);return p(r,n)}function E(e,t){let r=/ply([\s\S]*)end_header\s/,n="",o=0,a=r.exec(e);a!==null&&(n=a[1],o=a[0].length);let s=n.split(`
`);return H(s,o,t)}function H(e,t,r){let n={comments:[],elements:[],headerLength:t},o,a,s=null;for(let i=0;i<e.length;i++){let l=e[i];if(l=l.trim(),l!=="")switch(a=l.split(/\s+/),o=a.shift(),l=a.join(" "),o){case"format":n.format=a[0],n.version=a[1];break;case"comment":n.comments.push(l);break;case"element":s&&n.elements.push(s),s={name:a[0],count:parseInt(a[1],10),properties:[]};break;case"property":if(s){let c=ee(a);r?.propertyNameMapping&&c.name in r?.propertyNameMapping&&(c.name=r?.propertyNameMapping[c.name]),s.properties.push(c)}break;default:console.log("unhandled",o,a)}}return s&&n.elements.push(s),n}function Y(e){let t={indices:[],vertices:[],normals:[],uvs:[],colors:[]};for(let r of e.elements)if(r.name==="vertex")for(let n of r.properties)switch(n.name){case"x":case"y":case"z":case"nx":case"ny":case"nz":case"s":case"t":case"red":case"green":case"blue":break;default:t[n.name]=[];break}return t}function ee(e){let t=e[0];switch(t){case"list":return{type:t,name:e[3],countType:e[1],itemType:e[2]};default:return{type:t,name:e[1]}}}function I(e,t){switch(t){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 parseInt(e,10);case"float":case"double":case"float32":case"float64":return parseFloat(e);default:throw new Error(t)}}function te(e,t){let r=t.split(/\s+/),n={};for(let o=0;o<e.length;o++)if(e[o].type==="list"){let a=[],s=I(r.shift(),e[o].countType);for(let i=0;i<s;i++)a.push(I(r.shift(),e[o].itemType));n[e[o].name]=a}else n[e[o].name]=I(r.shift(),e[o].type);return n}function O(e,t){let r=Y(t),n,o=/end_header\s([\s\S]*)$/,a="";(n=o.exec(e))!==null&&(a=n[1]);let s=a.split(`
`),i=0,l=0;for(let c=0;c<s.length;c++){let f=s[c];if(f=f.trim(),f!==""){l>=t.elements[i].count&&(i++,l=0);let u=te(t.elements[i].properties,f);C(r,t.elements[i].name,u),l++}}return r}function C(e,t,r={}){if(t==="vertex")for(let n of Object.keys(r))switch(n){case"x":e.vertices.push(r.x,r.y,r.z);break;case"y":case"z":break;case"nx":"nx"in r&&"ny"in r&&"nz"in r&&e.normals.push(r.nx,r.ny,r.nz);break;case"ny":case"nz":break;case"s":"s"in r&&"t"in r&&e.uvs.push(r.s,r.t);break;case"t":break;case"red":"red"in r&&"green"in r&&"blue"in r&&e.colors.push(r.red,r.green,r.blue);break;case"green":case"blue":break;default:e[n].push(r[n])}else if(t==="face"){let n=r.vertex_indices||r.vertex_index;n.length===3?e.indices.push(n[0],n[1],n[2]):n.length===4&&(e.indices.push(n[0],n[1],n[3]),e.indices.push(n[1],n[2],n[3]))}}function w(e,t,r,n){switch(r){case"int8":case"char":return[e.getInt8(t),1];case"uint8":case"uchar":return[e.getUint8(t),1];case"int16":case"short":return[e.getInt16(t,n),2];case"uint16":case"ushort":return[e.getUint16(t,n),2];case"int32":case"int":return[e.getInt32(t,n),4];case"uint32":case"uint":return[e.getUint32(t,n),4];case"float32":case"float":return[e.getFloat32(t,n),4];case"float64":case"double":return[e.getFloat64(t,n),8];default:throw new Error(r)}}function re(e,t,r,n){let o={},a,s=0;for(let i=0;i<r.length;i++)if(r[i].type==="list"){let l=[];a=w(e,t+s,r[i].countType,n);let c=a[0];s+=a[1];for(let f=0;f<c;f++)a=w(e,t+s,r[i].itemType,n),l.push(a[0]),s+=a[1];o[r[i].name]=l}else a=w(e,t+s,r[i].type,n),o[r[i].name]=a[0],s+=a[1];return[o,s]}function ne(e,t){let r=Y(t),n=t.format==="binary_little_endian",o=new DataView(e,t.headerLength),a,s=0;for(let i=0;i<t.elements.length;i++){let l=t.elements[i].count;for(let c=0;c<l;c++){a=re(o,s,t.elements[i].properties,n),s+=a[1];let f=a[0];C(r,t.elements[i].name,f)}}return r}async function*S(e,t={}){let r=new TextDecoder(void 0,t);for await(let n of e)yield typeof n=="string"?n:r.decode(n,{stream:!0})}async function*F(e){let t="";for await(let r of e){t+=r;let n;for(;(n=t.indexOf(`
`))>=0;){let o=t.slice(0,n+1);t=t.slice(n+1),yield o}}t.length>0&&(yield t)}async function L(e,t){for(;;){let{done:r,value:n}=await e.next();if(r){e.return();return}if(t(n))return}}var m;async function*_(e,t){let r=F(S(e)),n=await oe(r,t),o;switch(n.format){case"ascii":o=await se(r,n);break;default:throw new Error("Binary PLY can not yet be parsed in streaming mode")}yield p(n,o,t)}async function oe(e,t){let r={comments:[],elements:[]};return await L(e,n=>{if(n=n.trim(),n==="end_header")return!0;if(n==="")return!1;let o=n.split(/\s+/),a=o.shift();switch(n=o.join(" "),a){case"ply":break;case"format":r.format=o[0],r.version=o[1];break;case"comment":r.comments.push(n);break;case"element":m&&r.elements.push(m),m={name:o[0],count:parseInt(o[1],10),properties:[]};break;case"property":let s=ae(o,t.propertyNameMapping);m.properties.push(s);break;default:console.log("unhandled",a,o)}return!1}),m&&r.elements.push(m),r}function ae(e,t){let r=e[0];switch(r){case"list":return{type:r,name:e[3],countType:e[1],itemType:e[2]};default:return{type:r,name:e[1]}}}async function se(e,t){let r={indices:[],vertices:[],normals:[],uvs:[],colors:[]},n=0,o=0;for await(let a of e)if(a=a.trim(),a!==""){o>=t.elements[n].count&&(n++,o=0);let s=ie(t.elements[n].properties,a);ce(r,t.elements[n].name,s),o++}return r}function B(e,t){switch(t){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 parseInt(e,10);case"float":case"double":case"float32":case"float64":return parseFloat(e);default:throw new Error(t)}}function ie(e,t){let r=t.split(/\s+/),n={};for(let o=0;o<e.length;o++)if(e[o].type==="list"){let a=[],s=B(r.shift(),e[o].countType);for(let i=0;i<s;i++)a.push(B(r.shift(),e[o].itemType));n[e[o].name]=a}else n[e[o].name]=B(r.shift(),e[o].type);return n}function ce(e,t,r={}){switch(t){case"vertex":e.vertices.push(r.x,r.y,r.z),"nx"in r&&"ny"in r&&"nz"in r&&e.normals.push(r.nx,r.ny,r.nz),"s"in r&&"t"in r&&e.uvs.push(r.s,r.t),"red"in r&&"green"in r&&"blue"in r&&e.colors.push(r.red/255,r.green/255,r.blue/255);break;case"face":let n=r.vertex_indices||r.vertex_index;n.length===3?e.indices.push(n[0],n[1],n[2]):n.length===4&&(e.indices.push(n[0],n[1],n[3]),e.indices.push(n[1],n[2],n[3]));break;default:break}}var le={...A,parse:async(e,t)=>T(e,t?.ply),parseTextSync:(e,t)=>T(e,t?.ply),parseSync:(e,t)=>T(e,t?.ply),parseInBatches:(e,t)=>_(e,t?.ply)};return q(d);})();
return __exports__;
});