@loaders.gl/pcd 4.0.0-beta.2 → 4.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{dist.min.js → dist.dev.js} +90 -95
- package/dist/index.cjs +449 -0
- package/dist/{esm/index.js → index.js} +2 -2
- package/dist/index.js.map +1 -0
- package/dist/lib/decompress-lzf.js.map +1 -0
- package/dist/lib/get-pcd-schema.js.map +1 -0
- package/dist/{esm/lib → lib}/parse-pcd.js +3 -3
- package/dist/lib/parse-pcd.js.map +1 -0
- package/dist/lib/pcd-types.js.map +1 -0
- package/dist/{esm/pcd-loader.js → pcd-loader.js} +1 -1
- package/dist/pcd-loader.js.map +1 -0
- package/dist/pcd-worker.js +68 -15
- package/dist/{esm/workers → workers}/pcd-worker.js +1 -1
- package/dist/workers/pcd-worker.js.map +1 -0
- package/package.json +16 -8
- package/dist/bundle.d.ts +0 -2
- package/dist/bundle.d.ts.map +0 -1
- package/dist/es5/bundle.js +0 -6
- package/dist/es5/bundle.js.map +0 -1
- package/dist/es5/index.js +0 -42
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/lib/decompress-lzf.js +0 -57
- package/dist/es5/lib/decompress-lzf.js.map +0 -1
- package/dist/es5/lib/get-pcd-schema.js +0 -54
- package/dist/es5/lib/get-pcd-schema.js.map +0 -1
- package/dist/es5/lib/parse-pcd.js +0 -299
- package/dist/es5/lib/parse-pcd.js.map +0 -1
- package/dist/es5/lib/pcd-types.js +0 -2
- package/dist/es5/lib/pcd-types.js.map +0 -1
- package/dist/es5/pcd-loader.js +0 -21
- package/dist/es5/pcd-loader.js.map +0 -1
- package/dist/es5/workers/pcd-worker.js +0 -6
- package/dist/es5/workers/pcd-worker.js.map +0 -1
- package/dist/esm/bundle.js +0 -4
- package/dist/esm/bundle.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/lib/decompress-lzf.js.map +0 -1
- package/dist/esm/lib/get-pcd-schema.js.map +0 -1
- package/dist/esm/lib/parse-pcd.js.map +0 -1
- package/dist/esm/lib/pcd-types.js.map +0 -1
- package/dist/esm/pcd-loader.js.map +0 -1
- package/dist/esm/workers/pcd-worker.js.map +0 -1
- package/src/bundle.ts +0 -4
- /package/dist/{esm/lib → lib}/decompress-lzf.js +0 -0
- /package/dist/{esm/lib → lib}/get-pcd-schema.js +0 -0
- /package/dist/{esm/lib → lib}/pcd-types.js +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import parsePCDSync from
|
|
2
|
-
import { PCDLoader as PCDWorkerLoader } from
|
|
1
|
+
import parsePCDSync from "./lib/parse-pcd.js";
|
|
2
|
+
import { PCDLoader as PCDWorkerLoader } from "./pcd-loader.js";
|
|
3
3
|
export { PCDWorkerLoader };
|
|
4
4
|
export const PCDLoader = {
|
|
5
5
|
...PCDWorkerLoader,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["parsePCDSync","PCDLoader","PCDWorkerLoader","parse","arrayBuffer","parseSync"],"sources":["../src/index.ts"],"sourcesContent":["import type {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport parsePCDSync from './lib/parse-pcd';\nimport {PCDLoader as PCDWorkerLoader} from './pcd-loader';\nimport {PCDMesh} from './lib/pcd-types';\n\nexport {PCDWorkerLoader};\n\n/**\n * Loader for PCD - Point Cloud Data\n */\nexport const PCDLoader: LoaderWithParser<PCDMesh, never, LoaderOptions> = {\n ...PCDWorkerLoader,\n parse: async (arrayBuffer) => parsePCDSync(arrayBuffer),\n parseSync: parsePCDSync\n};\n"],"mappings":"OACOA,YAAY;AAAA,SACXC,SAAS,IAAIC,eAAe;AAGpC,SAAQA,eAAe;AAKvB,OAAO,MAAMD,SAA0D,GAAG;EACxE,GAAGC,eAAe;EAClBC,KAAK,EAAE,MAAOC,WAAW,IAAKJ,YAAY,CAACI,WAAW,CAAC;EACvDC,SAAS,EAAEL;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decompress-lzf.js","names":["decompressLZF","inData","outLength","inLength","length","outData","Uint8Array","inPtr","outPtr","ctrl","len","ref","Error"],"sources":["../../src/lib/decompress-lzf.ts"],"sourcesContent":["/* eslint-disable */\n/**\n * from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n * @param inData\n * @param outLength\n * @returns\n */\nexport function decompressLZF(inData: Uint8Array, outLength: number): Uint8Array {\n const inLength = inData.length;\n const outData = new Uint8Array(outLength);\n let inPtr = 0;\n let outPtr = 0;\n let ctrl;\n let len;\n let ref;\n\n do {\n ctrl = inData[inPtr++];\n\n if (ctrl < 1 << 5) {\n ctrl++;\n if (outPtr + ctrl > outLength) {\n throw new Error('Output buffer is not large enough');\n }\n if (inPtr + ctrl > inLength) {\n throw new Error('Invalid compressed data');\n }\n\n do {\n outData[outPtr++] = inData[inPtr++];\n } while (--ctrl);\n } else {\n len = ctrl >> 5;\n ref = outPtr - ((ctrl & 0x1f) << 8) - 1;\n if (inPtr >= inLength) {\n throw new Error('Invalid compressed data');\n }\n\n if (len === 7) {\n len += inData[inPtr++];\n if (inPtr >= inLength) {\n throw new Error('Invalid compressed data');\n }\n }\n\n ref -= inData[inPtr++];\n if (outPtr + len + 2 > outLength) {\n throw new Error('Output buffer is not large enough');\n }\n if (ref < 0) {\n throw new Error('Invalid compressed data');\n }\n if (ref >= outPtr) {\n throw new Error('Invalid compressed data');\n }\n\n do {\n outData[outPtr++] = outData[ref++];\n } while (--len + 2);\n }\n } while (inPtr < inLength);\n\n return outData;\n}\n"],"mappings":"AAOA,OAAO,SAASA,aAAaA,CAACC,MAAkB,EAAEC,SAAiB,EAAc;EAC/E,MAAMC,QAAQ,GAAGF,MAAM,CAACG,MAAM;EAC9B,MAAMC,OAAO,GAAG,IAAIC,UAAU,CAACJ,SAAS,CAAC;EACzC,IAAIK,KAAK,GAAG,CAAC;EACb,IAAIC,MAAM,GAAG,CAAC;EACd,IAAIC,IAAI;EACR,IAAIC,GAAG;EACP,IAAIC,GAAG;EAEP,GAAG;IACDF,IAAI,GAAGR,MAAM,CAACM,KAAK,EAAE,CAAC;IAEtB,IAAIE,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE;MACjBA,IAAI,EAAE;MACN,IAAID,MAAM,GAAGC,IAAI,GAAGP,SAAS,EAAE;QAC7B,MAAM,IAAIU,KAAK,CAAC,mCAAmC,CAAC;MACtD;MACA,IAAIL,KAAK,GAAGE,IAAI,GAAGN,QAAQ,EAAE;QAC3B,MAAM,IAAIS,KAAK,CAAC,yBAAyB,CAAC;MAC5C;MAEA,GAAG;QACDP,OAAO,CAACG,MAAM,EAAE,CAAC,GAAGP,MAAM,CAACM,KAAK,EAAE,CAAC;MACrC,CAAC,QAAQ,EAAEE,IAAI;IACjB,CAAC,MAAM;MACLC,GAAG,GAAGD,IAAI,IAAI,CAAC;MACfE,GAAG,GAAGH,MAAM,IAAI,CAACC,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC;MACvC,IAAIF,KAAK,IAAIJ,QAAQ,EAAE;QACrB,MAAM,IAAIS,KAAK,CAAC,yBAAyB,CAAC;MAC5C;MAEA,IAAIF,GAAG,KAAK,CAAC,EAAE;QACbA,GAAG,IAAIT,MAAM,CAACM,KAAK,EAAE,CAAC;QACtB,IAAIA,KAAK,IAAIJ,QAAQ,EAAE;UACrB,MAAM,IAAIS,KAAK,CAAC,yBAAyB,CAAC;QAC5C;MACF;MAEAD,GAAG,IAAIV,MAAM,CAACM,KAAK,EAAE,CAAC;MACtB,IAAIC,MAAM,GAAGE,GAAG,GAAG,CAAC,GAAGR,SAAS,EAAE;QAChC,MAAM,IAAIU,KAAK,CAAC,mCAAmC,CAAC;MACtD;MACA,IAAID,GAAG,GAAG,CAAC,EAAE;QACX,MAAM,IAAIC,KAAK,CAAC,yBAAyB,CAAC;MAC5C;MACA,IAAID,GAAG,IAAIH,MAAM,EAAE;QACjB,MAAM,IAAII,KAAK,CAAC,yBAAyB,CAAC;MAC5C;MAEA,GAAG;QACDP,OAAO,CAACG,MAAM,EAAE,CAAC,GAAGH,OAAO,CAACM,GAAG,EAAE,CAAC;MACpC,CAAC,QAAQ,EAAED,GAAG,GAAG,CAAC;IACpB;EACF,CAAC,QAAQH,KAAK,GAAGJ,QAAQ;EAEzB,OAAOE,OAAO;AAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-pcd-schema.js","names":["getPCDSchema","PCDheader","metadata","offset","fields","x","undefined","push","name","type","listSize","children","normal_x","rgb"],"sources":["../../src/lib/get-pcd-schema.ts"],"sourcesContent":["import {Schema, Field} from '@loaders.gl/schema';\nimport type {PCDHeader} from './pcd-types';\n\n/**\n * Gets schema from PCD header\n * @param PCDheader\n * @param metadata\n * @returns Schema\n */\nexport function getPCDSchema(PCDheader: PCDHeader, metadata: Record<string, string>): Schema {\n const offset = PCDheader.offset;\n\n const fields: Field[] = [];\n\n if (offset.x !== undefined) {\n fields.push({\n name: 'POSITION',\n type: {type: 'fixed-size-list', listSize: 3, children: [{name: 'xyz', type: 'float32'}]}\n });\n }\n\n if (offset.normal_x !== undefined) {\n fields.push({\n name: 'NORMAL',\n type: {type: 'fixed-size-list', listSize: 3, children: [{name: 'xyz', type: 'float32'}]}\n });\n }\n\n if (offset.rgb !== undefined) {\n fields.push({\n name: 'COLOR_0',\n type: {type: 'fixed-size-list', listSize: 3, children: [{name: 'rgb', type: 'uint8'}]}\n });\n }\n\n return {fields, metadata};\n}\n"],"mappings":"AASA,OAAO,SAASA,YAAYA,CAACC,SAAoB,EAAEC,QAAgC,EAAU;EAC3F,MAAMC,MAAM,GAAGF,SAAS,CAACE,MAAM;EAE/B,MAAMC,MAAe,GAAG,EAAE;EAE1B,IAAID,MAAM,CAACE,CAAC,KAAKC,SAAS,EAAE;IAC1BF,MAAM,CAACG,IAAI,CAAC;MACVC,IAAI,EAAE,UAAU;MAChBC,IAAI,EAAE;QAACA,IAAI,EAAE,iBAAiB;QAAEC,QAAQ,EAAE,CAAC;QAAEC,QAAQ,EAAE,CAAC;UAACH,IAAI,EAAE,KAAK;UAAEC,IAAI,EAAE;QAAS,CAAC;MAAC;IACzF,CAAC,CAAC;EACJ;EAEA,IAAIN,MAAM,CAACS,QAAQ,KAAKN,SAAS,EAAE;IACjCF,MAAM,CAACG,IAAI,CAAC;MACVC,IAAI,EAAE,QAAQ;MACdC,IAAI,EAAE;QAACA,IAAI,EAAE,iBAAiB;QAAEC,QAAQ,EAAE,CAAC;QAAEC,QAAQ,EAAE,CAAC;UAACH,IAAI,EAAE,KAAK;UAAEC,IAAI,EAAE;QAAS,CAAC;MAAC;IACzF,CAAC,CAAC;EACJ;EAEA,IAAIN,MAAM,CAACU,GAAG,KAAKP,SAAS,EAAE;IAC5BF,MAAM,CAACG,IAAI,CAAC;MACVC,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE;QAACA,IAAI,EAAE,iBAAiB;QAAEC,QAAQ,EAAE,CAAC;QAAEC,QAAQ,EAAE,CAAC;UAACH,IAAI,EAAE,KAAK;UAAEC,IAAI,EAAE;QAAO,CAAC;MAAC;IACvF,CAAC,CAAC;EACJ;EAEA,OAAO;IAACL,MAAM;IAAEF;EAAQ,CAAC;AAC3B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getMeshBoundingBox } from '@loaders.gl/schema';
|
|
2
|
-
import { decompressLZF } from
|
|
3
|
-
import { getPCDSchema } from
|
|
2
|
+
import { decompressLZF } from "./decompress-lzf.js";
|
|
3
|
+
import { getPCDSchema } from "./get-pcd-schema.js";
|
|
4
4
|
const LITTLE_ENDIAN = true;
|
|
5
5
|
export default function parsePCD(data) {
|
|
6
6
|
const textData = new TextDecoder().decode(data);
|
|
@@ -17,7 +17,7 @@ export default function parsePCD(data) {
|
|
|
17
17
|
attributes = parsePCDBinaryCompressed(pcdHeader, data);
|
|
18
18
|
break;
|
|
19
19
|
default:
|
|
20
|
-
throw new Error(
|
|
20
|
+
throw new Error(`PCD: ${pcdHeader.data} files are not supported`);
|
|
21
21
|
}
|
|
22
22
|
attributes = getMeshAttributes(attributes);
|
|
23
23
|
const header = getMeshHeader(pcdHeader, attributes);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-pcd.js","names":["getMeshBoundingBox","decompressLZF","getPCDSchema","LITTLE_ENDIAN","parsePCD","data","textData","TextDecoder","decode","pcdHeader","parsePCDHeader","attributes","parsePCDASCII","parsePCDBinary","parsePCDBinaryCompressed","Error","getMeshAttributes","header","getMeshHeader","metadata","Object","fromEntries","JSON","stringify","boundingBox","schema","loader","loaderData","mode","topology","width","height","pointCount","vertexCount","normalizedAttributes","POSITION","value","Float32Array","position","size","normal","length","NORMAL","color","COLOR_0","Uint8Array","intensity","label","result1","search","result2","exec","substr","headerLen","str","replace","version","fields","type","count","viewpoint","points","parseFloat","split","parseInt","map","x","i","push","offset","sizeSum","rowSize","pcdData","lines","line","undefined","y","z","rgb","floatValue","binaryColor","dataview","DataView","buffer","getUint8","normal_x","normal_y","normal_z","row","getFloat32","getInt32","sizes","Uint32Array","slice","compressedSize","decompressedSize","decompressed","intensityIndex","indexOf","labelIndex"],"sources":["../../src/lib/parse-pcd.ts"],"sourcesContent":["// PCD Loader, adapted from THREE.js (MIT license)\n// Description: A loader for PCD ascii and binary files.\n// Limitations: Compressed binary files are not supported.\n//\n// Attributions per original THREE.js source file:\n// @author Filipe Caixeta / http://filipecaixeta.com.br\n// @author Mugen87 / https://github.com/Mugen87\n\nimport {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport {decompressLZF} from './decompress-lzf';\nimport {getPCDSchema} from './get-pcd-schema';\nimport type {PCDHeader, PCDMesh} from './pcd-types';\n\ntype MeshHeader = {\n vertexCount: number;\n boundingBox: [[number, number, number], [number, number, number]];\n};\n\ntype NormalizedAttributes = {\n POSITION: {\n value: Float32Array;\n size: number;\n };\n NORMAL?: {\n value: Float32Array;\n size: number;\n };\n COLOR_0?: {\n value: Uint8Array;\n size: number;\n };\n};\n\ntype HeaderAttributes = {\n [attributeName: string]: number[];\n};\n\nconst LITTLE_ENDIAN: boolean = true;\n\n/**\n *\n * @param data\n * @returns\n */\nexport default function parsePCD(data: ArrayBufferLike): PCDMesh {\n // parse header (always ascii format)\n const textData = new TextDecoder().decode(data);\n const pcdHeader = parsePCDHeader(textData);\n\n let attributes: any = {};\n\n // parse data\n switch (pcdHeader.data) {\n case 'ascii':\n attributes = parsePCDASCII(pcdHeader, textData);\n break;\n\n case 'binary':\n attributes = parsePCDBinary(pcdHeader, data);\n break;\n\n case 'binary_compressed':\n attributes = parsePCDBinaryCompressed(pcdHeader, data);\n break;\n\n default:\n throw new Error(`PCD: ${pcdHeader.data} files are not supported`);\n }\n\n attributes = getMeshAttributes(attributes);\n\n const header = getMeshHeader(pcdHeader, attributes);\n\n const metadata = Object.fromEntries([\n ['mode', '0'],\n ['boundingBox', JSON.stringify(header.boundingBox)]\n ]);\n\n const schema = getPCDSchema(pcdHeader, metadata);\n\n return {\n loader: 'pcd',\n loaderData: pcdHeader,\n header,\n schema,\n mode: 0, // POINTS\n topology: 'point-list',\n attributes\n };\n}\n\n// Create a header that contains common data for PointCloud category loaders\nfunction getMeshHeader(pcdHeader: PCDHeader, attributes: NormalizedAttributes): MeshHeader {\n if (typeof pcdHeader.width === 'number' && typeof pcdHeader.height === 'number') {\n const pointCount = pcdHeader.width * pcdHeader.height; // Supports \"organized\" point sets\n return {\n vertexCount: pointCount,\n boundingBox: getMeshBoundingBox(attributes)\n };\n }\n return {\n vertexCount: pcdHeader.vertexCount,\n boundingBox: pcdHeader.boundingBox\n };\n}\n\n/**\n * @param attributes\n * @returns Normalized attributes\n */\nfunction getMeshAttributes(attributes: HeaderAttributes): {[attributeName: string]: MeshAttribute} {\n const normalizedAttributes: MeshAttributes = {\n POSITION: {\n // Binary PCD is only 32 bit\n value: new Float32Array(attributes.position),\n size: 3\n }\n };\n\n if (attributes.normal && attributes.normal.length > 0) {\n normalizedAttributes.NORMAL = {\n value: new Float32Array(attributes.normal),\n size: 3\n };\n }\n\n if (attributes.color && attributes.color.length > 0) {\n // TODO - RGBA\n normalizedAttributes.COLOR_0 = {\n value: new Uint8Array(attributes.color),\n size: 3\n };\n }\n\n if (attributes.intensity && attributes.intensity.length > 0) {\n // TODO - RGBA\n normalizedAttributes.COLOR_0 = {\n value: new Uint8Array(attributes.color),\n size: 3\n };\n }\n\n if (attributes.label && attributes.label.length > 0) {\n // TODO - RGBA\n normalizedAttributes.COLOR_0 = {\n value: new Uint8Array(attributes.label),\n size: 3\n };\n }\n\n return normalizedAttributes;\n}\n\n/**\n * Incoming data parsing\n * @param data\n * @returns Header\n */\n/* eslint-disable complexity, max-statements */\nfunction parsePCDHeader(data: string): PCDHeader {\n const result1 = data.search(/[\\r\\n]DATA\\s(\\S*)\\s/i);\n const result2 = /[\\r\\n]DATA\\s(\\S*)\\s/i.exec(data.substr(result1 - 1));\n\n const pcdHeader: any = {};\n pcdHeader.data = result2 && result2[1];\n if (result2 !== null) {\n pcdHeader.headerLen = (result2 && result2[0].length) + result1;\n }\n pcdHeader.str = data.substr(0, pcdHeader.headerLen);\n\n // remove comments\n\n pcdHeader.str = pcdHeader.str.replace(/\\#.*/gi, '');\n\n // parse\n\n pcdHeader.version = /VERSION (.*)/i.exec(pcdHeader.str);\n pcdHeader.fields = /FIELDS (.*)/i.exec(pcdHeader.str);\n pcdHeader.size = /SIZE (.*)/i.exec(pcdHeader.str);\n pcdHeader.type = /TYPE (.*)/i.exec(pcdHeader.str);\n pcdHeader.count = /COUNT (.*)/i.exec(pcdHeader.str);\n pcdHeader.width = /WIDTH (.*)/i.exec(pcdHeader.str);\n pcdHeader.height = /HEIGHT (.*)/i.exec(pcdHeader.str);\n pcdHeader.viewpoint = /VIEWPOINT (.*)/i.exec(pcdHeader.str);\n pcdHeader.points = /POINTS (.*)/i.exec(pcdHeader.str);\n\n // evaluate\n\n if (pcdHeader.version !== null) {\n pcdHeader.version = parseFloat(pcdHeader.version[1]);\n }\n\n if (pcdHeader.fields !== null) {\n pcdHeader.fields = pcdHeader.fields[1].split(' ');\n }\n\n if (pcdHeader.type !== null) {\n pcdHeader.type = pcdHeader.type[1].split(' ');\n }\n\n if (pcdHeader.width !== null) {\n pcdHeader.width = parseInt(pcdHeader.width[1], 10);\n }\n\n if (pcdHeader.height !== null) {\n pcdHeader.height = parseInt(pcdHeader.height[1], 10);\n }\n\n if (pcdHeader.viewpoint !== null) {\n pcdHeader.viewpoint = pcdHeader.viewpoint[1];\n }\n\n if (pcdHeader.points !== null) {\n pcdHeader.points = parseInt(pcdHeader.points[1], 10);\n }\n\n if (\n pcdHeader.points === null &&\n typeof pcdHeader.width === 'number' &&\n typeof pcdHeader.height === 'number'\n ) {\n pcdHeader.points = pcdHeader.width * pcdHeader.height;\n }\n\n if (pcdHeader.size !== null) {\n pcdHeader.size = pcdHeader.size[1].split(' ').map((x) => parseInt(x, 10));\n }\n\n if (pcdHeader.count !== null) {\n pcdHeader.count = pcdHeader.count[1].split(' ').map((x) => parseInt(x, 10));\n } else {\n pcdHeader.count = [];\n if (pcdHeader.fields !== null) {\n for (let i = 0; i < pcdHeader.fields.length; i++) {\n pcdHeader.count.push(1);\n }\n }\n }\n\n pcdHeader.offset = {};\n\n let sizeSum = 0;\n if (pcdHeader.fields !== null && pcdHeader.size !== null) {\n for (let i = 0; i < pcdHeader.fields.length; i++) {\n if (pcdHeader.data === 'ascii') {\n pcdHeader.offset[pcdHeader.fields[i]] = i;\n } else {\n pcdHeader.offset[pcdHeader.fields[i]] = sizeSum;\n sizeSum += pcdHeader.size[i];\n }\n }\n }\n\n // for binary only\n pcdHeader.rowSize = sizeSum;\n\n return pcdHeader;\n}\n\n/**\n * @param pcdHeader\n * @param textData\n * @returns [attributes]\n */\n// eslint-enable-next-line complexity, max-statements\nfunction parsePCDASCII(pcdHeader: PCDHeader, textData: string): HeaderAttributes {\n const position: number[] = [];\n const normal: number[] = [];\n const color: number[] = [];\n const intensity: number[] = [];\n const label: number[] = [];\n\n const offset = pcdHeader.offset;\n const pcdData = textData.substr(pcdHeader.headerLen);\n const lines = pcdData.split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n if (lines[i] !== '') {\n const line = lines[i].split(' ');\n\n if (offset.x !== undefined) {\n position.push(parseFloat(line[offset.x]));\n position.push(parseFloat(line[offset.y]));\n position.push(parseFloat(line[offset.z]));\n }\n\n if (offset.rgb !== undefined) {\n const floatValue = parseFloat(line[offset.rgb]);\n const binaryColor = new Float32Array([floatValue]);\n const dataview = new DataView(binaryColor.buffer, 0);\n color.push(dataview.getUint8(0));\n color.push(dataview.getUint8(1));\n color.push(dataview.getUint8(2));\n // TODO - handle alpha channel / RGBA?\n }\n\n if (offset.normal_x !== undefined) {\n normal.push(parseFloat(line[offset.normal_x]));\n normal.push(parseFloat(line[offset.normal_y]));\n normal.push(parseFloat(line[offset.normal_z]));\n }\n\n if (offset.intensity !== undefined) {\n intensity.push(parseFloat(line[offset.intensity]));\n }\n\n if (offset.label !== undefined) {\n label.push(parseInt(line[offset.label]));\n }\n }\n }\n\n return {position, normal, color};\n}\n\n/**\n * @param pcdHeader\n * @param data\n * @returns [attributes]\n */\nfunction parsePCDBinary(pcdHeader: PCDHeader, data: ArrayBufferLike): HeaderAttributes {\n const position: number[] = [];\n const normal: number[] = [];\n const color: number[] = [];\n const intensity: number[] = [];\n const label: number[] = [];\n\n const dataview = new DataView(data, pcdHeader.headerLen);\n const offset = pcdHeader.offset;\n\n for (let i = 0, row = 0; i < pcdHeader.points; i++, row += pcdHeader.rowSize) {\n if (offset.x !== undefined) {\n position.push(dataview.getFloat32(row + offset.x, LITTLE_ENDIAN));\n position.push(dataview.getFloat32(row + offset.y, LITTLE_ENDIAN));\n position.push(dataview.getFloat32(row + offset.z, LITTLE_ENDIAN));\n }\n\n if (offset.rgb !== undefined) {\n color.push(dataview.getUint8(row + offset.rgb + 0));\n color.push(dataview.getUint8(row + offset.rgb + 1));\n color.push(dataview.getUint8(row + offset.rgb + 2));\n }\n\n if (offset.normal_x !== undefined) {\n normal.push(dataview.getFloat32(row + offset.normal_x, LITTLE_ENDIAN));\n normal.push(dataview.getFloat32(row + offset.normal_y, LITTLE_ENDIAN));\n normal.push(dataview.getFloat32(row + offset.normal_z, LITTLE_ENDIAN));\n }\n\n if (offset.intensity !== undefined) {\n intensity.push(dataview.getFloat32(row + offset.intensity, LITTLE_ENDIAN));\n }\n\n if (offset.label !== undefined) {\n label.push(dataview.getInt32(row + offset.label, LITTLE_ENDIAN));\n }\n }\n\n return {position, normal, color, intensity, label};\n}\n\n/** Parse compressed PCD data in in binary_compressed form ( https://pointclouds.org/documentation/tutorials/pcd_file_format.html)\n * from https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/PCDLoader.js\n * @license MIT (http://opensource.org/licenses/MIT)\n * @param pcdHeader\n * @param data\n * @returns [attributes]\n */\n// eslint-enable-next-line complexity, max-statements\nfunction parsePCDBinaryCompressed(pcdHeader: PCDHeader, data: ArrayBufferLike): HeaderAttributes {\n const position: number[] = [];\n const normal: number[] = [];\n const color: number[] = [];\n const intensity: number[] = [];\n const label: number[] = [];\n\n const sizes = new Uint32Array(data.slice(pcdHeader.headerLen, pcdHeader.headerLen + 8));\n const compressedSize = sizes[0];\n const decompressedSize = sizes[1];\n const decompressed = decompressLZF(\n new Uint8Array(data, pcdHeader.headerLen + 8, compressedSize),\n decompressedSize\n );\n const dataview = new DataView(decompressed.buffer);\n\n const offset = pcdHeader.offset;\n\n for (let i = 0; i < pcdHeader.points; i++) {\n if (offset.x !== undefined) {\n position.push(\n dataview.getFloat32(pcdHeader.points * offset.x + pcdHeader.size[0] * i, LITTLE_ENDIAN)\n );\n position.push(\n dataview.getFloat32(pcdHeader.points * offset.y + pcdHeader.size[1] * i, LITTLE_ENDIAN)\n );\n position.push(\n dataview.getFloat32(pcdHeader.points * offset.z + pcdHeader.size[2] * i, LITTLE_ENDIAN)\n );\n }\n\n if (offset.rgb !== undefined) {\n color.push(\n dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 0) / 255.0\n );\n color.push(\n dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 1) / 255.0\n );\n color.push(\n dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 2) / 255.0\n );\n }\n\n if (offset.normal_x !== undefined) {\n normal.push(\n dataview.getFloat32(\n pcdHeader.points * offset.normal_x + pcdHeader.size[4] * i,\n LITTLE_ENDIAN\n )\n );\n normal.push(\n dataview.getFloat32(\n pcdHeader.points * offset.normal_y + pcdHeader.size[5] * i,\n LITTLE_ENDIAN\n )\n );\n normal.push(\n dataview.getFloat32(\n pcdHeader.points * offset.normal_z + pcdHeader.size[6] * i,\n LITTLE_ENDIAN\n )\n );\n }\n\n if (offset.intensity !== undefined) {\n const intensityIndex = pcdHeader.fields.indexOf('intensity');\n intensity.push(\n dataview.getFloat32(\n pcdHeader.points * offset.intensity + pcdHeader.size[intensityIndex] * i,\n LITTLE_ENDIAN\n )\n );\n }\n\n if (offset.label !== undefined) {\n const labelIndex = pcdHeader.fields.indexOf('label');\n label.push(\n dataview.getInt32(\n pcdHeader.points * offset.label + pcdHeader.size[labelIndex] * i,\n LITTLE_ENDIAN\n )\n );\n }\n }\n\n return {\n position,\n normal,\n color,\n intensity,\n label\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pcd-types.js","names":[],"sources":["../../src/lib/pcd-types.ts"],"sourcesContent":["import type {Mesh} from '@loaders.gl/schema';\n\ntype BoundingBox = [[number, number, number], [number, number, number]];\n\nexport type PCDHeader = {\n data: any;\n headerLen: number;\n str: string;\n version: number;\n fields: string[];\n size: number[];\n type: null | string[];\n count: null | number[];\n width: number;\n height: number;\n viewpoint: null | string;\n points: number;\n offset: {[index: string]: number};\n rowSize: number;\n vertexCount: number;\n boundingBox: BoundingBox;\n};\n\n/** */\nexport type PCDMesh = Mesh & {\n loader: 'pcd';\n loaderData: PCDHeader;\n topology: 'point-list';\n mode: 0;\n};\n"],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pcd-loader.js","names":["VERSION","__VERSION__","PCDLoader","name","id","module","version","worker","extensions","mimeTypes","options","pcd"],"sources":["../src/pcd-loader.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {PCDMesh} from './lib/pcd-types';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * Worker loader for PCD - Point Cloud Data\n */\nexport const PCDLoader: Loader<PCDMesh, never, LoaderOptions> = {\n name: 'PCD (Point Cloud Data)',\n id: 'pcd',\n module: 'pcd',\n version: VERSION,\n worker: true,\n extensions: ['pcd'],\n mimeTypes: ['text/plain'],\n options: {\n pcd: {}\n }\n};\n"],"mappings":"AAOA,MAAMA,OAAO,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAGA,WAAW,GAAG,QAAQ;AAK3E,OAAO,MAAMC,SAAgD,GAAG;EAC9DC,IAAI,EAAE,wBAAwB;EAC9BC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEN,OAAO;EAChBO,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,YAAY,CAAC;EACzBC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR;AACF,CAAC"}
|
package/dist/pcd-worker.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
(() => {
|
|
2
3
|
// ../worker-utils/src/lib/worker-utils/get-transfer-list.ts
|
|
3
4
|
function getTransferList(object, recursive = true, transfers) {
|
|
4
|
-
const transfersSet = transfers || new Set();
|
|
5
|
+
const transfersSet = transfers || /* @__PURE__ */ new Set();
|
|
5
6
|
if (!object) {
|
|
6
7
|
} else if (isTransferable(object)) {
|
|
7
8
|
transfersSet.add(object);
|
|
@@ -44,11 +45,15 @@
|
|
|
44
45
|
}
|
|
45
46
|
return parentPort;
|
|
46
47
|
}
|
|
47
|
-
var onMessageWrapperMap = new Map();
|
|
48
|
+
var onMessageWrapperMap = /* @__PURE__ */ new Map();
|
|
48
49
|
var WorkerBody = class {
|
|
50
|
+
/** Check that we are actually in a worker thread */
|
|
49
51
|
static inWorkerThread() {
|
|
50
52
|
return typeof self !== "undefined" || Boolean(getParentPort());
|
|
51
53
|
}
|
|
54
|
+
/*
|
|
55
|
+
* (type: WorkerMessageType, payload: WorkerMessagePayload) => any
|
|
56
|
+
*/
|
|
52
57
|
static set onmessage(onMessage) {
|
|
53
58
|
function handleMessage(message) {
|
|
54
59
|
const parentPort3 = getParentPort();
|
|
@@ -92,6 +97,11 @@
|
|
|
92
97
|
globalThis.removeEventListener("message", onMessageWrapper);
|
|
93
98
|
}
|
|
94
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Send a message from a worker to creating thread (main thread)
|
|
102
|
+
* @param type
|
|
103
|
+
* @param payload
|
|
104
|
+
*/
|
|
95
105
|
static postMessage(type, payload) {
|
|
96
106
|
const data = { source: "loaders.gl", type, payload };
|
|
97
107
|
const transferList = getTransferList(payload);
|
|
@@ -123,6 +133,7 @@
|
|
|
123
133
|
loader,
|
|
124
134
|
arrayBuffer: input,
|
|
125
135
|
options,
|
|
136
|
+
// @ts-expect-error fetch missing
|
|
126
137
|
context: {
|
|
127
138
|
...context,
|
|
128
139
|
_parse: parseOnMainThread
|
|
@@ -324,6 +335,7 @@
|
|
|
324
335
|
header,
|
|
325
336
|
schema,
|
|
326
337
|
mode: 0,
|
|
338
|
+
// POINTS
|
|
327
339
|
topology: "point-list",
|
|
328
340
|
attributes
|
|
329
341
|
};
|
|
@@ -344,6 +356,7 @@
|
|
|
344
356
|
function getMeshAttributes(attributes) {
|
|
345
357
|
const normalizedAttributes = {
|
|
346
358
|
POSITION: {
|
|
359
|
+
// Binary PCD is only 32 bit
|
|
347
360
|
value: new Float32Array(attributes.position),
|
|
348
361
|
size: 3
|
|
349
362
|
}
|
|
@@ -527,32 +540,72 @@
|
|
|
527
540
|
const sizes = new Uint32Array(data.slice(pcdHeader.headerLen, pcdHeader.headerLen + 8));
|
|
528
541
|
const compressedSize = sizes[0];
|
|
529
542
|
const decompressedSize = sizes[1];
|
|
530
|
-
const decompressed = decompressLZF(
|
|
543
|
+
const decompressed = decompressLZF(
|
|
544
|
+
new Uint8Array(data, pcdHeader.headerLen + 8, compressedSize),
|
|
545
|
+
decompressedSize
|
|
546
|
+
);
|
|
531
547
|
const dataview = new DataView(decompressed.buffer);
|
|
532
548
|
const offset = pcdHeader.offset;
|
|
533
549
|
for (let i = 0; i < pcdHeader.points; i++) {
|
|
534
550
|
if (offset.x !== void 0) {
|
|
535
|
-
position.push(
|
|
536
|
-
|
|
537
|
-
|
|
551
|
+
position.push(
|
|
552
|
+
dataview.getFloat32(pcdHeader.points * offset.x + pcdHeader.size[0] * i, LITTLE_ENDIAN)
|
|
553
|
+
);
|
|
554
|
+
position.push(
|
|
555
|
+
dataview.getFloat32(pcdHeader.points * offset.y + pcdHeader.size[1] * i, LITTLE_ENDIAN)
|
|
556
|
+
);
|
|
557
|
+
position.push(
|
|
558
|
+
dataview.getFloat32(pcdHeader.points * offset.z + pcdHeader.size[2] * i, LITTLE_ENDIAN)
|
|
559
|
+
);
|
|
538
560
|
}
|
|
539
561
|
if (offset.rgb !== void 0) {
|
|
540
|
-
color.push(
|
|
541
|
-
|
|
542
|
-
|
|
562
|
+
color.push(
|
|
563
|
+
dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 0) / 255
|
|
564
|
+
);
|
|
565
|
+
color.push(
|
|
566
|
+
dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 1) / 255
|
|
567
|
+
);
|
|
568
|
+
color.push(
|
|
569
|
+
dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 2) / 255
|
|
570
|
+
);
|
|
543
571
|
}
|
|
544
572
|
if (offset.normal_x !== void 0) {
|
|
545
|
-
normal.push(
|
|
546
|
-
|
|
547
|
-
|
|
573
|
+
normal.push(
|
|
574
|
+
dataview.getFloat32(
|
|
575
|
+
pcdHeader.points * offset.normal_x + pcdHeader.size[4] * i,
|
|
576
|
+
LITTLE_ENDIAN
|
|
577
|
+
)
|
|
578
|
+
);
|
|
579
|
+
normal.push(
|
|
580
|
+
dataview.getFloat32(
|
|
581
|
+
pcdHeader.points * offset.normal_y + pcdHeader.size[5] * i,
|
|
582
|
+
LITTLE_ENDIAN
|
|
583
|
+
)
|
|
584
|
+
);
|
|
585
|
+
normal.push(
|
|
586
|
+
dataview.getFloat32(
|
|
587
|
+
pcdHeader.points * offset.normal_z + pcdHeader.size[6] * i,
|
|
588
|
+
LITTLE_ENDIAN
|
|
589
|
+
)
|
|
590
|
+
);
|
|
548
591
|
}
|
|
549
592
|
if (offset.intensity !== void 0) {
|
|
550
593
|
const intensityIndex = pcdHeader.fields.indexOf("intensity");
|
|
551
|
-
intensity.push(
|
|
594
|
+
intensity.push(
|
|
595
|
+
dataview.getFloat32(
|
|
596
|
+
pcdHeader.points * offset.intensity + pcdHeader.size[intensityIndex] * i,
|
|
597
|
+
LITTLE_ENDIAN
|
|
598
|
+
)
|
|
599
|
+
);
|
|
552
600
|
}
|
|
553
601
|
if (offset.label !== void 0) {
|
|
554
602
|
const labelIndex = pcdHeader.fields.indexOf("label");
|
|
555
|
-
label.push(
|
|
603
|
+
label.push(
|
|
604
|
+
dataview.getInt32(
|
|
605
|
+
pcdHeader.points * offset.label + pcdHeader.size[labelIndex] * i,
|
|
606
|
+
LITTLE_ENDIAN
|
|
607
|
+
)
|
|
608
|
+
);
|
|
556
609
|
}
|
|
557
610
|
}
|
|
558
611
|
return {
|
|
@@ -565,7 +618,7 @@
|
|
|
565
618
|
}
|
|
566
619
|
|
|
567
620
|
// src/pcd-loader.ts
|
|
568
|
-
var VERSION = true ? "4.0.0-beta.
|
|
621
|
+
var VERSION = true ? "4.0.0-beta.4" : "latest";
|
|
569
622
|
var PCDLoader = {
|
|
570
623
|
name: "PCD (Point Cloud Data)",
|
|
571
624
|
id: "pcd",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pcd-worker.js","names":["createLoaderWorker","PCDLoader"],"sources":["../../src/workers/pcd-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {PCDLoader} from '../index';\n\ncreateLoaderWorker(PCDLoader);\n"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,0BAA0B;AAAC,SACpDC,SAAS;AAEjBD,kBAAkB,CAACC,SAAS,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/pcd",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.4",
|
|
4
4
|
"description": "Framework-independent loader for the PCD format",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
6
7
|
"publishConfig": {
|
|
7
8
|
"access": "public"
|
|
8
9
|
},
|
|
@@ -19,8 +20,15 @@
|
|
|
19
20
|
"PCD"
|
|
20
21
|
],
|
|
21
22
|
"types": "dist/index.d.ts",
|
|
22
|
-
"main": "dist/
|
|
23
|
-
"module": "dist/
|
|
23
|
+
"main": "dist/index.cjs",
|
|
24
|
+
"module": "dist/index.js",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"import": "./dist/index.js",
|
|
28
|
+
"require": "./dist/index.cjs",
|
|
29
|
+
"types": "./dist/index.d.ts"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
24
32
|
"sideEffects": false,
|
|
25
33
|
"files": [
|
|
26
34
|
"src",
|
|
@@ -28,13 +36,13 @@
|
|
|
28
36
|
"README.md"
|
|
29
37
|
],
|
|
30
38
|
"scripts": {
|
|
31
|
-
"pre-build": "npm run build-worker && npm run build-bundle",
|
|
32
|
-
"build-bundle": "
|
|
39
|
+
"pre-build": "npm run build-worker && npm run build-bundle && npm run build-bundle -- --env=dev",
|
|
40
|
+
"build-bundle": "ocular-bundle ./src/index.ts",
|
|
33
41
|
"build-worker": "esbuild src/workers/pcd-worker.ts --bundle --outfile=dist/pcd-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
|
|
34
42
|
},
|
|
35
43
|
"dependencies": {
|
|
36
|
-
"@loaders.gl/loader-utils": "4.0.0-beta.
|
|
37
|
-
"@loaders.gl/schema": "4.0.0-beta.
|
|
44
|
+
"@loaders.gl/loader-utils": "4.0.0-beta.4",
|
|
45
|
+
"@loaders.gl/schema": "4.0.0-beta.4"
|
|
38
46
|
},
|
|
39
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "848c20b474532d301f2c3f8d4e1fb9bf262b86d4"
|
|
40
48
|
}
|
package/dist/bundle.d.ts
DELETED
package/dist/bundle.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,aAAa,KAAqB,CAAC"}
|
package/dist/es5/bundle.js
DELETED
package/dist/es5/bundle.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";;AACA,IAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
|
package/dist/es5/index.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.PCDLoader = void 0;
|
|
8
|
-
Object.defineProperty(exports, "PCDWorkerLoader", {
|
|
9
|
-
enumerable: true,
|
|
10
|
-
get: function get() {
|
|
11
|
-
return _pcdLoader.PCDLoader;
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
15
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
16
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
-
var _parsePcd = _interopRequireDefault(require("./lib/parse-pcd"));
|
|
18
|
-
var _pcdLoader = require("./pcd-loader");
|
|
19
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
20
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
21
|
-
var PCDLoader = _objectSpread(_objectSpread({}, _pcdLoader.PCDLoader), {}, {
|
|
22
|
-
parse: function () {
|
|
23
|
-
var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer) {
|
|
24
|
-
return _regenerator.default.wrap(function _callee$(_context) {
|
|
25
|
-
while (1) switch (_context.prev = _context.next) {
|
|
26
|
-
case 0:
|
|
27
|
-
return _context.abrupt("return", (0, _parsePcd.default)(arrayBuffer));
|
|
28
|
-
case 1:
|
|
29
|
-
case "end":
|
|
30
|
-
return _context.stop();
|
|
31
|
-
}
|
|
32
|
-
}, _callee);
|
|
33
|
-
}));
|
|
34
|
-
function parse(_x) {
|
|
35
|
-
return _parse.apply(this, arguments);
|
|
36
|
-
}
|
|
37
|
-
return parse;
|
|
38
|
-
}(),
|
|
39
|
-
parseSync: _parsePcd.default
|
|
40
|
-
});
|
|
41
|
-
exports.PCDLoader = PCDLoader;
|
|
42
|
-
//# sourceMappingURL=index.js.map
|
package/dist/es5/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_parsePcd","_interopRequireDefault","require","_pcdLoader","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","PCDLoader","PCDWorkerLoader","parse","_parse","_asyncToGenerator2","_regenerator","mark","_callee","arrayBuffer","wrap","_callee$","_context","prev","next","abrupt","parsePCDSync","stop","_x","parseSync","exports"],"sources":["../../src/index.ts"],"sourcesContent":["import type {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport parsePCDSync from './lib/parse-pcd';\nimport {PCDLoader as PCDWorkerLoader} from './pcd-loader';\nimport {PCDMesh} from './lib/pcd-types';\n\nexport {PCDWorkerLoader};\n\n/**\n * Loader for PCD - Point Cloud Data\n */\nexport const PCDLoader: LoaderWithParser<PCDMesh, never, LoaderOptions> = {\n ...PCDWorkerLoader,\n parse: async (arrayBuffer) => parsePCDSync(arrayBuffer),\n parseSync: parsePCDSync\n};\n"],"mappings":";;;;;;;;;;;;;;;;AACA,IAAAA,SAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAA0D,SAAAE,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAC,MAAA,CAAAD,IAAA,CAAAF,MAAA,OAAAG,MAAA,CAAAC,qBAAA,QAAAC,OAAA,GAAAF,MAAA,CAAAC,qBAAA,CAAAJ,MAAA,GAAAC,cAAA,KAAAI,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAJ,MAAA,CAAAK,wBAAA,CAAAR,MAAA,EAAAO,GAAA,EAAAE,UAAA,OAAAP,IAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,IAAA,EAAAG,OAAA,YAAAH,IAAA;AAAA,SAAAU,cAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,WAAAF,SAAA,CAAAD,CAAA,IAAAC,SAAA,CAAAD,CAAA,QAAAA,CAAA,OAAAf,OAAA,CAAAI,MAAA,CAAAc,MAAA,OAAAC,OAAA,WAAAC,GAAA,QAAAC,gBAAA,CAAAC,OAAA,EAAAR,MAAA,EAAAM,GAAA,EAAAF,MAAA,CAAAE,GAAA,SAAAhB,MAAA,CAAAmB,yBAAA,GAAAnB,MAAA,CAAAoB,gBAAA,CAAAV,MAAA,EAAAV,MAAA,CAAAmB,yBAAA,CAAAL,MAAA,KAAAlB,OAAA,CAAAI,MAAA,CAAAc,MAAA,GAAAC,OAAA,WAAAC,GAAA,IAAAhB,MAAA,CAAAqB,cAAA,CAAAX,MAAA,EAAAM,GAAA,EAAAhB,MAAA,CAAAK,wBAAA,CAAAS,MAAA,EAAAE,GAAA,iBAAAN,MAAA;AAQnD,IAAMY,SAA0D,GAAAb,aAAA,CAAAA,aAAA,KAClEc,oBAAe;EAClBC,KAAK;IAAA,IAAAC,MAAA,OAAAC,kBAAA,CAAAR,OAAA,EAAAS,YAAA,CAAAT,OAAA,CAAAU,IAAA,CAAE,SAAAC,QAAOC,WAAW;MAAA,OAAAH,YAAA,CAAAT,OAAA,CAAAa,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAA,OAAAF,QAAA,CAAAG,MAAA,WAAK,IAAAC,iBAAY,EAACP,WAAW,CAAC;UAAA;UAAA;YAAA,OAAAG,QAAA,CAAAK,IAAA;QAAA;MAAA,GAAAT,OAAA;IAAA;IAAA,SAAAL,MAAAe,EAAA;MAAA,OAAAd,MAAA,CAAAjB,KAAA,OAAAI,SAAA;IAAA;IAAA,OAAAY,KAAA;EAAA;EACvDgB,SAAS,EAAEH;AAAY,EACxB;AAACI,OAAA,CAAAnB,SAAA,GAAAA,SAAA"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.decompressLZF = decompressLZF;
|
|
7
|
-
function decompressLZF(inData, outLength) {
|
|
8
|
-
var inLength = inData.length;
|
|
9
|
-
var outData = new Uint8Array(outLength);
|
|
10
|
-
var inPtr = 0;
|
|
11
|
-
var outPtr = 0;
|
|
12
|
-
var ctrl;
|
|
13
|
-
var len;
|
|
14
|
-
var ref;
|
|
15
|
-
do {
|
|
16
|
-
ctrl = inData[inPtr++];
|
|
17
|
-
if (ctrl < 1 << 5) {
|
|
18
|
-
ctrl++;
|
|
19
|
-
if (outPtr + ctrl > outLength) {
|
|
20
|
-
throw new Error('Output buffer is not large enough');
|
|
21
|
-
}
|
|
22
|
-
if (inPtr + ctrl > inLength) {
|
|
23
|
-
throw new Error('Invalid compressed data');
|
|
24
|
-
}
|
|
25
|
-
do {
|
|
26
|
-
outData[outPtr++] = inData[inPtr++];
|
|
27
|
-
} while (--ctrl);
|
|
28
|
-
} else {
|
|
29
|
-
len = ctrl >> 5;
|
|
30
|
-
ref = outPtr - ((ctrl & 0x1f) << 8) - 1;
|
|
31
|
-
if (inPtr >= inLength) {
|
|
32
|
-
throw new Error('Invalid compressed data');
|
|
33
|
-
}
|
|
34
|
-
if (len === 7) {
|
|
35
|
-
len += inData[inPtr++];
|
|
36
|
-
if (inPtr >= inLength) {
|
|
37
|
-
throw new Error('Invalid compressed data');
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
ref -= inData[inPtr++];
|
|
41
|
-
if (outPtr + len + 2 > outLength) {
|
|
42
|
-
throw new Error('Output buffer is not large enough');
|
|
43
|
-
}
|
|
44
|
-
if (ref < 0) {
|
|
45
|
-
throw new Error('Invalid compressed data');
|
|
46
|
-
}
|
|
47
|
-
if (ref >= outPtr) {
|
|
48
|
-
throw new Error('Invalid compressed data');
|
|
49
|
-
}
|
|
50
|
-
do {
|
|
51
|
-
outData[outPtr++] = outData[ref++];
|
|
52
|
-
} while (--len + 2);
|
|
53
|
-
}
|
|
54
|
-
} while (inPtr < inLength);
|
|
55
|
-
return outData;
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=decompress-lzf.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decompress-lzf.js","names":["decompressLZF","inData","outLength","inLength","length","outData","Uint8Array","inPtr","outPtr","ctrl","len","ref","Error"],"sources":["../../../src/lib/decompress-lzf.ts"],"sourcesContent":["/* eslint-disable */\n/**\n * from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n * @param inData\n * @param outLength\n * @returns\n */\nexport function decompressLZF(inData: Uint8Array, outLength: number): Uint8Array {\n const inLength = inData.length;\n const outData = new Uint8Array(outLength);\n let inPtr = 0;\n let outPtr = 0;\n let ctrl;\n let len;\n let ref;\n\n do {\n ctrl = inData[inPtr++];\n\n if (ctrl < 1 << 5) {\n ctrl++;\n if (outPtr + ctrl > outLength) {\n throw new Error('Output buffer is not large enough');\n }\n if (inPtr + ctrl > inLength) {\n throw new Error('Invalid compressed data');\n }\n\n do {\n outData[outPtr++] = inData[inPtr++];\n } while (--ctrl);\n } else {\n len = ctrl >> 5;\n ref = outPtr - ((ctrl & 0x1f) << 8) - 1;\n if (inPtr >= inLength) {\n throw new Error('Invalid compressed data');\n }\n\n if (len === 7) {\n len += inData[inPtr++];\n if (inPtr >= inLength) {\n throw new Error('Invalid compressed data');\n }\n }\n\n ref -= inData[inPtr++];\n if (outPtr + len + 2 > outLength) {\n throw new Error('Output buffer is not large enough');\n }\n if (ref < 0) {\n throw new Error('Invalid compressed data');\n }\n if (ref >= outPtr) {\n throw new Error('Invalid compressed data');\n }\n\n do {\n outData[outPtr++] = outData[ref++];\n } while (--len + 2);\n }\n } while (inPtr < inLength);\n\n return outData;\n}\n"],"mappings":";;;;;;AAOO,SAASA,aAAaA,CAACC,MAAkB,EAAEC,SAAiB,EAAc;EAC/E,IAAMC,QAAQ,GAAGF,MAAM,CAACG,MAAM;EAC9B,IAAMC,OAAO,GAAG,IAAIC,UAAU,CAACJ,SAAS,CAAC;EACzC,IAAIK,KAAK,GAAG,CAAC;EACb,IAAIC,MAAM,GAAG,CAAC;EACd,IAAIC,IAAI;EACR,IAAIC,GAAG;EACP,IAAIC,GAAG;EAEP,GAAG;IACDF,IAAI,GAAGR,MAAM,CAACM,KAAK,EAAE,CAAC;IAEtB,IAAIE,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE;MACjBA,IAAI,EAAE;MACN,IAAID,MAAM,GAAGC,IAAI,GAAGP,SAAS,EAAE;QAC7B,MAAM,IAAIU,KAAK,CAAC,mCAAmC,CAAC;MACtD;MACA,IAAIL,KAAK,GAAGE,IAAI,GAAGN,QAAQ,EAAE;QAC3B,MAAM,IAAIS,KAAK,CAAC,yBAAyB,CAAC;MAC5C;MAEA,GAAG;QACDP,OAAO,CAACG,MAAM,EAAE,CAAC,GAAGP,MAAM,CAACM,KAAK,EAAE,CAAC;MACrC,CAAC,QAAQ,EAAEE,IAAI;IACjB,CAAC,MAAM;MACLC,GAAG,GAAGD,IAAI,IAAI,CAAC;MACfE,GAAG,GAAGH,MAAM,IAAI,CAACC,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC;MACvC,IAAIF,KAAK,IAAIJ,QAAQ,EAAE;QACrB,MAAM,IAAIS,KAAK,CAAC,yBAAyB,CAAC;MAC5C;MAEA,IAAIF,GAAG,KAAK,CAAC,EAAE;QACbA,GAAG,IAAIT,MAAM,CAACM,KAAK,EAAE,CAAC;QACtB,IAAIA,KAAK,IAAIJ,QAAQ,EAAE;UACrB,MAAM,IAAIS,KAAK,CAAC,yBAAyB,CAAC;QAC5C;MACF;MAEAD,GAAG,IAAIV,MAAM,CAACM,KAAK,EAAE,CAAC;MACtB,IAAIC,MAAM,GAAGE,GAAG,GAAG,CAAC,GAAGR,SAAS,EAAE;QAChC,MAAM,IAAIU,KAAK,CAAC,mCAAmC,CAAC;MACtD;MACA,IAAID,GAAG,GAAG,CAAC,EAAE;QACX,MAAM,IAAIC,KAAK,CAAC,yBAAyB,CAAC;MAC5C;MACA,IAAID,GAAG,IAAIH,MAAM,EAAE;QACjB,MAAM,IAAII,KAAK,CAAC,yBAAyB,CAAC;MAC5C;MAEA,GAAG;QACDP,OAAO,CAACG,MAAM,EAAE,CAAC,GAAGH,OAAO,CAACM,GAAG,EAAE,CAAC;MACpC,CAAC,QAAQ,EAAED,GAAG,GAAG,CAAC;IACpB;EACF,CAAC,QAAQH,KAAK,GAAGJ,QAAQ;EAEzB,OAAOE,OAAO;AAChB"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getPCDSchema = getPCDSchema;
|
|
7
|
-
function getPCDSchema(PCDheader, metadata) {
|
|
8
|
-
var offset = PCDheader.offset;
|
|
9
|
-
var fields = [];
|
|
10
|
-
if (offset.x !== undefined) {
|
|
11
|
-
fields.push({
|
|
12
|
-
name: 'POSITION',
|
|
13
|
-
type: {
|
|
14
|
-
type: 'fixed-size-list',
|
|
15
|
-
listSize: 3,
|
|
16
|
-
children: [{
|
|
17
|
-
name: 'xyz',
|
|
18
|
-
type: 'float32'
|
|
19
|
-
}]
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
if (offset.normal_x !== undefined) {
|
|
24
|
-
fields.push({
|
|
25
|
-
name: 'NORMAL',
|
|
26
|
-
type: {
|
|
27
|
-
type: 'fixed-size-list',
|
|
28
|
-
listSize: 3,
|
|
29
|
-
children: [{
|
|
30
|
-
name: 'xyz',
|
|
31
|
-
type: 'float32'
|
|
32
|
-
}]
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
if (offset.rgb !== undefined) {
|
|
37
|
-
fields.push({
|
|
38
|
-
name: 'COLOR_0',
|
|
39
|
-
type: {
|
|
40
|
-
type: 'fixed-size-list',
|
|
41
|
-
listSize: 3,
|
|
42
|
-
children: [{
|
|
43
|
-
name: 'rgb',
|
|
44
|
-
type: 'uint8'
|
|
45
|
-
}]
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
return {
|
|
50
|
-
fields: fields,
|
|
51
|
-
metadata: metadata
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=get-pcd-schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-pcd-schema.js","names":["getPCDSchema","PCDheader","metadata","offset","fields","x","undefined","push","name","type","listSize","children","normal_x","rgb"],"sources":["../../../src/lib/get-pcd-schema.ts"],"sourcesContent":["import {Schema, Field} from '@loaders.gl/schema';\nimport type {PCDHeader} from './pcd-types';\n\n/**\n * Gets schema from PCD header\n * @param PCDheader\n * @param metadata\n * @returns Schema\n */\nexport function getPCDSchema(PCDheader: PCDHeader, metadata: Record<string, string>): Schema {\n const offset = PCDheader.offset;\n\n const fields: Field[] = [];\n\n if (offset.x !== undefined) {\n fields.push({\n name: 'POSITION',\n type: {type: 'fixed-size-list', listSize: 3, children: [{name: 'xyz', type: 'float32'}]}\n });\n }\n\n if (offset.normal_x !== undefined) {\n fields.push({\n name: 'NORMAL',\n type: {type: 'fixed-size-list', listSize: 3, children: [{name: 'xyz', type: 'float32'}]}\n });\n }\n\n if (offset.rgb !== undefined) {\n fields.push({\n name: 'COLOR_0',\n type: {type: 'fixed-size-list', listSize: 3, children: [{name: 'rgb', type: 'uint8'}]}\n });\n }\n\n return {fields, metadata};\n}\n"],"mappings":";;;;;;AASO,SAASA,YAAYA,CAACC,SAAoB,EAAEC,QAAgC,EAAU;EAC3F,IAAMC,MAAM,GAAGF,SAAS,CAACE,MAAM;EAE/B,IAAMC,MAAe,GAAG,EAAE;EAE1B,IAAID,MAAM,CAACE,CAAC,KAAKC,SAAS,EAAE;IAC1BF,MAAM,CAACG,IAAI,CAAC;MACVC,IAAI,EAAE,UAAU;MAChBC,IAAI,EAAE;QAACA,IAAI,EAAE,iBAAiB;QAAEC,QAAQ,EAAE,CAAC;QAAEC,QAAQ,EAAE,CAAC;UAACH,IAAI,EAAE,KAAK;UAAEC,IAAI,EAAE;QAAS,CAAC;MAAC;IACzF,CAAC,CAAC;EACJ;EAEA,IAAIN,MAAM,CAACS,QAAQ,KAAKN,SAAS,EAAE;IACjCF,MAAM,CAACG,IAAI,CAAC;MACVC,IAAI,EAAE,QAAQ;MACdC,IAAI,EAAE;QAACA,IAAI,EAAE,iBAAiB;QAAEC,QAAQ,EAAE,CAAC;QAAEC,QAAQ,EAAE,CAAC;UAACH,IAAI,EAAE,KAAK;UAAEC,IAAI,EAAE;QAAS,CAAC;MAAC;IACzF,CAAC,CAAC;EACJ;EAEA,IAAIN,MAAM,CAACU,GAAG,KAAKP,SAAS,EAAE;IAC5BF,MAAM,CAACG,IAAI,CAAC;MACVC,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE;QAACA,IAAI,EAAE,iBAAiB;QAAEC,QAAQ,EAAE,CAAC;QAAEC,QAAQ,EAAE,CAAC;UAACH,IAAI,EAAE,KAAK;UAAEC,IAAI,EAAE;QAAO,CAAC;MAAC;IACvF,CAAC,CAAC;EACJ;EAEA,OAAO;IAACL,MAAM,EAANA,MAAM;IAAEF,QAAQ,EAARA;EAAQ,CAAC;AAC3B"}
|