@loaders.gl/pcd 3.4.0-alpha.2 → 3.4.0-alpha.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.
Files changed (39) hide show
  1. package/dist/dist.min.js +82 -24
  2. package/dist/es5/index.js +6 -8
  3. package/dist/es5/index.js.map +1 -1
  4. package/dist/es5/lib/decompress-lzf.js +21 -7
  5. package/dist/es5/lib/decompress-lzf.js.map +1 -1
  6. package/dist/es5/lib/get-pcd-schema.js +6 -0
  7. package/dist/es5/lib/get-pcd-schema.js.map +1 -1
  8. package/dist/es5/lib/parse-pcd.js +58 -29
  9. package/dist/es5/lib/parse-pcd.js.map +1 -1
  10. package/dist/es5/lib/pcd-types.js.map +1 -1
  11. package/dist/es5/pcd-loader.js +1 -2
  12. package/dist/es5/pcd-loader.js.map +1 -1
  13. package/dist/es5/workers/pcd-worker.js.map +1 -1
  14. package/dist/esm/bundle.js +0 -1
  15. package/dist/esm/bundle.js.map +1 -1
  16. package/dist/esm/index.js +0 -1
  17. package/dist/esm/index.js.map +1 -1
  18. package/dist/esm/lib/decompress-lzf.js +21 -8
  19. package/dist/esm/lib/decompress-lzf.js.map +1 -1
  20. package/dist/esm/lib/get-pcd-schema.js +7 -1
  21. package/dist/esm/lib/get-pcd-schema.js.map +1 -1
  22. package/dist/esm/lib/parse-pcd.js +58 -30
  23. package/dist/esm/lib/parse-pcd.js.map +1 -1
  24. package/dist/esm/lib/pcd-types.js.map +1 -1
  25. package/dist/esm/pcd-loader.js +1 -3
  26. package/dist/esm/pcd-loader.js.map +1 -1
  27. package/dist/lib/decompress-lzf.d.ts.map +1 -1
  28. package/dist/lib/decompress-lzf.js +14 -7
  29. package/dist/lib/get-pcd-schema.d.ts.map +1 -1
  30. package/dist/lib/get-pcd-schema.js +6 -0
  31. package/dist/lib/parse-pcd.js +60 -17
  32. package/dist/lib/pcd-types.d.ts +9 -9
  33. package/dist/lib/pcd-types.d.ts.map +1 -1
  34. package/dist/pcd-worker.js +82 -24
  35. package/package.json +4 -4
  36. package/src/lib/decompress-lzf.ts +21 -7
  37. package/src/lib/get-pcd-schema.ts +9 -1
  38. package/src/lib/parse-pcd.ts +79 -33
  39. package/src/lib/pcd-types.ts +9 -9
@@ -1 +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","Map","JSON","stringify","boundingBox","schema","loaderData","mode","indices","width","height","pointCount","vertexCount","normalizedAttributes","POSITION","value","Float32Array","position","size","normal","length","NORMAL","color","COLOR_0","Uint8Array","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","PCDheader","sizes","Uint32Array","slice","compressedSize","decompressedSize","decompressed"],"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 type {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} from './pcd-types';\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) {\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 = new Map([\n ['mode', '0'],\n ['boundingBox', JSON.stringify(header.boundingBox)]\n ]);\n\n const schema = getPCDSchema(pcdHeader, metadata);\n\n return {\n loaderData: {\n header: pcdHeader\n },\n header,\n schema,\n mode: 0, // POINTS\n indices: null,\n attributes\n };\n}\n\n// Create a header that contains common data for PointCloud category loaders\nfunction getMeshHeader(pcdHeader: PCDHeader, attributes: NormalizedAttributes): Partial<PCDHeader> {\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 pcdHeader;\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 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 complexity, max-statements */\nfunction parsePCDASCII(pcdHeader: PCDHeader, textData: string): HeaderAttributes {\n const position: number[] = [];\n const normal: number[] = [];\n const color: 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 }\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\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\n return {position, normal, color};\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 */\nfunction parsePCDBinaryCompressed(PCDheader: PCDHeader, data: ArrayBufferLike): HeaderAttributes {\n const position: number[] = [];\n const normal: number[] = [];\n const color: 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(\n (PCDheader.points as number) * offset.x + (PCDheader.size as number[])[0] * i,\n LITTLE_ENDIAN\n )\n );\n position.push(\n dataview.getFloat32(\n (PCDheader.points as number) * offset.y + (PCDheader.size as number[])[1] * i,\n LITTLE_ENDIAN\n )\n );\n position.push(\n dataview.getFloat32(\n (PCDheader.points as number) * offset.z + (PCDheader.size as number[])[2] * i,\n LITTLE_ENDIAN\n )\n );\n }\n\n if (offset.rgb !== undefined) {\n color.push(\n dataview.getUint8(\n (PCDheader.points as number) * offset.rgb + (PCDheader.size as number[])[3] * i + 0\n ) / 255.0\n );\n color.push(\n dataview.getUint8(\n (PCDheader.points as number) * offset.rgb + (PCDheader.size as number[])[3] * i + 1\n ) / 255.0\n );\n color.push(\n dataview.getUint8(\n (PCDheader.points as number) * offset.rgb + (PCDheader.size as number[])[3] * i + 2\n ) / 255.0\n );\n }\n\n if (offset.normal_x !== undefined) {\n normal.push(\n dataview.getFloat32(\n (PCDheader.points as number) * offset.normal_x + (PCDheader.size as number[])[4] * i,\n LITTLE_ENDIAN\n )\n );\n normal.push(\n dataview.getFloat32(\n (PCDheader.points as number) * offset.normal_y + (PCDheader.size as number[])[5] * i,\n LITTLE_ENDIAN\n )\n );\n normal.push(\n dataview.getFloat32(\n (PCDheader.points as number) * offset.normal_z + (PCDheader.size as number[])[6] * i,\n LITTLE_ENDIAN\n )\n );\n }\n }\n\n return {\n position,\n normal,\n color\n };\n}\n"],"mappings":"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"}
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","concat","getMeshAttributes","header","getMeshHeader","metadata","Map","JSON","stringify","boundingBox","schema","loaderData","mode","indices","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} from './pcd-types';\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) {\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 = new Map([\n ['mode', '0'],\n ['boundingBox', JSON.stringify(header.boundingBox)]\n ]);\n\n const schema = getPCDSchema(pcdHeader, metadata);\n\n return {\n loaderData: {\n header: pcdHeader\n },\n header,\n schema,\n mode: 0, // POINTS\n indices: null,\n attributes\n };\n}\n\n// Create a header that contains common data for PointCloud category loaders\nfunction getMeshHeader(pcdHeader: PCDHeader, attributes: NormalizedAttributes): Partial<PCDHeader> {\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 pcdHeader;\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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"}
@@ -1 +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: RegExpExecArray | null | number;\n fields: RegExpExecArray | null | string[];\n size: RegExpExecArray | null | number[];\n type: RegExpExecArray | null | string[];\n count: RegExpExecArray | null | number[];\n width: RegExpExecArray | number;\n height: RegExpExecArray | number;\n viewpoint: RegExpExecArray | null | string;\n points: RegExpExecArray | 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":""}
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":""}
@@ -1,6 +1,4 @@
1
-
2
- const VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
3
-
1
+ const VERSION = typeof "3.4.0-alpha.4" !== 'undefined' ? "3.4.0-alpha.4" : 'latest';
4
2
  export const PCDLoader = {
5
3
  name: 'PCD (Point Cloud Data)',
6
4
  id: 'pcd',
@@ -1 +1 @@
1
- {"version":3,"file":"pcd-loader.js","names":["VERSION","PCDLoader","name","id","module","version","worker","extensions","mimeTypes","options","pcd","_typecheckPCDLoader"],"sources":["../../src/pcd-loader.ts"],"sourcesContent":["import type {Loader} from '@loaders.gl/loader-utils';\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 = {\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\nexport const _typecheckPCDLoader: Loader = PCDLoader;\n"],"mappings":";AAIA,MAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;;AAK3E,OAAO,MAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,wBAAwB;EAC9BC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,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;AAED,OAAO,MAAMC,mBAA2B,GAAGV,SAAS"}
1
+ {"version":3,"file":"pcd-loader.js","names":["VERSION","PCDLoader","name","id","module","version","worker","extensions","mimeTypes","options","pcd","_typecheckPCDLoader"],"sources":["../../src/pcd-loader.ts"],"sourcesContent":["import type {Loader} from '@loaders.gl/loader-utils';\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 = {\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\nexport const _typecheckPCDLoader: Loader = PCDLoader;\n"],"mappings":"AAIA,MAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAK3E,OAAO,MAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,wBAAwB;EAC9BC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,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;AAED,OAAO,MAAMC,mBAA2B,GAAGV,SAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"decompress-lzf.d.ts","sourceRoot":"","sources":["../../src/lib/decompress-lzf.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CA0C/E"}
1
+ {"version":3,"file":"decompress-lzf.d.ts","sourceRoot":"","sources":["../../src/lib/decompress-lzf.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAwD/E"}
@@ -20,10 +20,12 @@ function decompressLZF(inData, outLength) {
20
20
  ctrl = inData[inPtr++];
21
21
  if (ctrl < 1 << 5) {
22
22
  ctrl++;
23
- if (outPtr + ctrl > outLength)
23
+ if (outPtr + ctrl > outLength) {
24
24
  throw new Error('Output buffer is not large enough');
25
- if (inPtr + ctrl > inLength)
25
+ }
26
+ if (inPtr + ctrl > inLength) {
26
27
  throw new Error('Invalid compressed data');
28
+ }
27
29
  do {
28
30
  outData[outPtr++] = inData[inPtr++];
29
31
  } while (--ctrl);
@@ -31,20 +33,25 @@ function decompressLZF(inData, outLength) {
31
33
  else {
32
34
  len = ctrl >> 5;
33
35
  ref = outPtr - ((ctrl & 0x1f) << 8) - 1;
34
- if (inPtr >= inLength)
36
+ if (inPtr >= inLength) {
35
37
  throw new Error('Invalid compressed data');
38
+ }
36
39
  if (len === 7) {
37
40
  len += inData[inPtr++];
38
- if (inPtr >= inLength)
41
+ if (inPtr >= inLength) {
39
42
  throw new Error('Invalid compressed data');
43
+ }
40
44
  }
41
45
  ref -= inData[inPtr++];
42
- if (outPtr + len + 2 > outLength)
46
+ if (outPtr + len + 2 > outLength) {
43
47
  throw new Error('Output buffer is not large enough');
44
- if (ref < 0)
48
+ }
49
+ if (ref < 0) {
45
50
  throw new Error('Invalid compressed data');
46
- if (ref >= outPtr)
51
+ }
52
+ if (ref >= outPtr) {
47
53
  throw new Error('Invalid compressed data');
54
+ }
48
55
  do {
49
56
  outData[outPtr++] = outData[ref++];
50
57
  } while (--len + 2);
@@ -1 +1 @@
1
- {"version":3,"file":"get-pcd-schema.d.ts","sourceRoot":"","sources":["../../src/lib/get-pcd-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAuC,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAE3C,KAAK,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,CAoBnF"}
1
+ {"version":3,"file":"get-pcd-schema.d.ts","sourceRoot":"","sources":["../../src/lib/get-pcd-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAA8C,MAAM,oBAAoB,CAAC;AACvF,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAE3C,KAAK,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,CA4BnF"}
@@ -20,6 +20,12 @@ function getPCDSchema(PCDheader, metadata) {
20
20
  if (offset.rgb !== undefined) {
21
21
  fields.push(new schema_1.Field('COLOR_0', new schema_1.FixedSizeList(3, new schema_1.Field('rgb', new schema_1.Uint8())), false));
22
22
  }
23
+ if (offset.intensity !== undefined) {
24
+ fields.push(new schema_1.Field('intensity', new schema_1.Field('intensity', new schema_1.Float32()), false));
25
+ }
26
+ if (offset.label !== undefined) {
27
+ fields.push(new schema_1.Field('label', new schema_1.Field('label', new schema_1.Int32()), false));
28
+ }
23
29
  return new schema_1.Schema(fields, metadata);
24
30
  }
25
31
  exports.getPCDSchema = getPCDSchema;
@@ -90,6 +90,20 @@ function getMeshAttributes(attributes) {
90
90
  size: 3
91
91
  };
92
92
  }
93
+ if (attributes.intensity && attributes.intensity.length > 0) {
94
+ // TODO - RGBA
95
+ normalizedAttributes.COLOR_0 = {
96
+ value: new Uint8Array(attributes.color),
97
+ size: 3
98
+ };
99
+ }
100
+ if (attributes.label && attributes.label.length > 0) {
101
+ // TODO - RGBA
102
+ normalizedAttributes.COLOR_0 = {
103
+ value: new Uint8Array(attributes.label),
104
+ size: 3
105
+ };
106
+ }
93
107
  return normalizedAttributes;
94
108
  }
95
109
  /**
@@ -182,11 +196,13 @@ function parsePCDHeader(data) {
182
196
  * @param textData
183
197
  * @returns [attributes]
184
198
  */
185
- /* eslint-enable complexity, max-statements */
199
+ // eslint-enable-next-line complexity, max-statements
186
200
  function parsePCDASCII(pcdHeader, textData) {
187
201
  const position = [];
188
202
  const normal = [];
189
203
  const color = [];
204
+ const intensity = [];
205
+ const label = [];
190
206
  const offset = pcdHeader.offset;
191
207
  const pcdData = textData.substr(pcdHeader.headerLen);
192
208
  const lines = pcdData.split('\n');
@@ -212,6 +228,12 @@ function parsePCDASCII(pcdHeader, textData) {
212
228
  normal.push(parseFloat(line[offset.normal_y]));
213
229
  normal.push(parseFloat(line[offset.normal_z]));
214
230
  }
231
+ if (offset.intensity !== undefined) {
232
+ intensity.push(parseFloat(line[offset.intensity]));
233
+ }
234
+ if (offset.label !== undefined) {
235
+ label.push(parseInt(line[offset.label]));
236
+ }
215
237
  }
216
238
  }
217
239
  return { position, normal, color };
@@ -225,6 +247,8 @@ function parsePCDBinary(pcdHeader, data) {
225
247
  const position = [];
226
248
  const normal = [];
227
249
  const color = [];
250
+ const intensity = [];
251
+ const label = [];
228
252
  const dataview = new DataView(data, pcdHeader.headerLen);
229
253
  const offset = pcdHeader.offset;
230
254
  for (let i = 0, row = 0; i < pcdHeader.points; i++, row += pcdHeader.rowSize) {
@@ -243,8 +267,14 @@ function parsePCDBinary(pcdHeader, data) {
243
267
  normal.push(dataview.getFloat32(row + offset.normal_y, LITTLE_ENDIAN));
244
268
  normal.push(dataview.getFloat32(row + offset.normal_z, LITTLE_ENDIAN));
245
269
  }
270
+ if (offset.intensity !== undefined) {
271
+ intensity.push(dataview.getFloat32(row + offset.intensity, LITTLE_ENDIAN));
272
+ }
273
+ if (offset.label !== undefined) {
274
+ label.push(dataview.getInt32(row + offset.label, LITTLE_ENDIAN));
275
+ }
246
276
  }
247
- return { position, normal, color };
277
+ return { position, normal, color, intensity, label };
248
278
  }
249
279
  /** Parse compressed PCD data in in binary_compressed form ( https://pointclouds.org/documentation/tutorials/pcd_file_format.html)
250
280
  * from https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/PCDLoader.js
@@ -253,36 +283,49 @@ function parsePCDBinary(pcdHeader, data) {
253
283
  * @param data
254
284
  * @returns [attributes]
255
285
  */
256
- function parsePCDBinaryCompressed(PCDheader, data) {
286
+ // eslint-enable-next-line complexity, max-statements
287
+ function parsePCDBinaryCompressed(pcdHeader, data) {
257
288
  const position = [];
258
289
  const normal = [];
259
290
  const color = [];
260
- const sizes = new Uint32Array(data.slice(PCDheader.headerLen, PCDheader.headerLen + 8));
291
+ const intensity = [];
292
+ const label = [];
293
+ const sizes = new Uint32Array(data.slice(pcdHeader.headerLen, pcdHeader.headerLen + 8));
261
294
  const compressedSize = sizes[0];
262
295
  const decompressedSize = sizes[1];
263
- const decompressed = (0, decompress_lzf_1.decompressLZF)(new Uint8Array(data, PCDheader.headerLen + 8, compressedSize), decompressedSize);
296
+ const decompressed = (0, decompress_lzf_1.decompressLZF)(new Uint8Array(data, pcdHeader.headerLen + 8, compressedSize), decompressedSize);
264
297
  const dataview = new DataView(decompressed.buffer);
265
- const offset = PCDheader.offset;
266
- for (let i = 0; i < PCDheader.points; i++) {
298
+ const offset = pcdHeader.offset;
299
+ for (let i = 0; i < pcdHeader.points; i++) {
267
300
  if (offset.x !== undefined) {
268
- position.push(dataview.getFloat32(PCDheader.points * offset.x + PCDheader.size[0] * i, LITTLE_ENDIAN));
269
- position.push(dataview.getFloat32(PCDheader.points * offset.y + PCDheader.size[1] * i, LITTLE_ENDIAN));
270
- position.push(dataview.getFloat32(PCDheader.points * offset.z + PCDheader.size[2] * i, LITTLE_ENDIAN));
301
+ position.push(dataview.getFloat32(pcdHeader.points * offset.x + pcdHeader.size[0] * i, LITTLE_ENDIAN));
302
+ position.push(dataview.getFloat32(pcdHeader.points * offset.y + pcdHeader.size[1] * i, LITTLE_ENDIAN));
303
+ position.push(dataview.getFloat32(pcdHeader.points * offset.z + pcdHeader.size[2] * i, LITTLE_ENDIAN));
271
304
  }
272
305
  if (offset.rgb !== undefined) {
273
- color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 0) / 255.0);
274
- color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 1) / 255.0);
275
- color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 2) / 255.0);
306
+ color.push(dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 0) / 255.0);
307
+ color.push(dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 1) / 255.0);
308
+ color.push(dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 2) / 255.0);
276
309
  }
277
310
  if (offset.normal_x !== undefined) {
278
- normal.push(dataview.getFloat32(PCDheader.points * offset.normal_x + PCDheader.size[4] * i, LITTLE_ENDIAN));
279
- normal.push(dataview.getFloat32(PCDheader.points * offset.normal_y + PCDheader.size[5] * i, LITTLE_ENDIAN));
280
- normal.push(dataview.getFloat32(PCDheader.points * offset.normal_z + PCDheader.size[6] * i, LITTLE_ENDIAN));
311
+ normal.push(dataview.getFloat32(pcdHeader.points * offset.normal_x + pcdHeader.size[4] * i, LITTLE_ENDIAN));
312
+ normal.push(dataview.getFloat32(pcdHeader.points * offset.normal_y + pcdHeader.size[5] * i, LITTLE_ENDIAN));
313
+ normal.push(dataview.getFloat32(pcdHeader.points * offset.normal_z + pcdHeader.size[6] * i, LITTLE_ENDIAN));
314
+ }
315
+ if (offset.intensity !== undefined) {
316
+ const intensityIndex = pcdHeader.fields.indexOf('intensity');
317
+ intensity.push(dataview.getFloat32(pcdHeader.points * offset.intensity + pcdHeader.size[intensityIndex] * i, LITTLE_ENDIAN));
318
+ }
319
+ if (offset.label !== undefined) {
320
+ const labelIndex = pcdHeader.fields.indexOf('label');
321
+ label.push(dataview.getInt32(pcdHeader.points * offset.label + pcdHeader.size[labelIndex] * i, LITTLE_ENDIAN));
281
322
  }
282
323
  }
283
324
  return {
284
325
  position,
285
326
  normal,
286
- color
327
+ color,
328
+ intensity,
329
+ label
287
330
  };
288
331
  }
@@ -4,15 +4,15 @@ export type PCDHeader = {
4
4
  data: any;
5
5
  headerLen: number;
6
6
  str: string;
7
- version: RegExpExecArray | null | number;
8
- fields: RegExpExecArray | null | string[];
9
- size: RegExpExecArray | null | number[];
10
- type: RegExpExecArray | null | string[];
11
- count: RegExpExecArray | null | number[];
12
- width: RegExpExecArray | number;
13
- height: RegExpExecArray | number;
14
- viewpoint: RegExpExecArray | null | string;
15
- points: RegExpExecArray | number;
7
+ version: number;
8
+ fields: string[];
9
+ size: number[];
10
+ type: null | string[];
11
+ count: null | number[];
12
+ width: number;
13
+ height: number;
14
+ viewpoint: null | string;
15
+ points: number;
16
16
  offset: {
17
17
  [index: string]: number;
18
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pcd-types.d.ts","sourceRoot":"","sources":["../../src/lib/pcd-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAC;AAE7C,KAAK,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAExE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,MAAM,CAAC;IACzC,MAAM,EAAE,eAAe,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;IAC1C,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;IACxC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;IACxC,KAAK,EAAE,eAAe,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;IACzC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC;IAChC,MAAM,EAAE,eAAe,GAAG,MAAM,CAAC;IACjC,SAAS,EAAE,eAAe,GAAG,IAAI,GAAG,MAAM,CAAC;IAC3C,MAAM,EAAE,eAAe,GAAG,MAAM,CAAC;IACjC,MAAM,EAAE;QAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AAEF,OAAO;AACP,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG;IAC3B,MAAM,EAAE,KAAK,CAAC;IACd,UAAU,EAAE,SAAS,CAAC;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC;CACT,CAAC"}
1
+ {"version":3,"file":"pcd-types.d.ts","sourceRoot":"","sources":["../../src/lib/pcd-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAC;AAE7C,KAAK,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAExE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,IAAI,GAAG,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AAEF,OAAO;AACP,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG;IAC3B,MAAM,EAAE,KAAK,CAAC;IACd,UAAU,EAAE,SAAS,CAAC;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC;CACT,CAAC"}
@@ -457,6 +457,11 @@
457
457
  return `${this.isSigned ? "I" : "Ui"}nt${this.bitWidth}`;
458
458
  }
459
459
  };
460
+ var Int32 = class extends Int {
461
+ constructor() {
462
+ super(true, 32);
463
+ }
464
+ };
460
465
  var Uint8 = class extends Int {
461
466
  constructor() {
462
467
  super(false, 8);
@@ -639,30 +644,37 @@
639
644
  ctrl = inData[inPtr++];
640
645
  if (ctrl < 1 << 5) {
641
646
  ctrl++;
642
- if (outPtr + ctrl > outLength)
647
+ if (outPtr + ctrl > outLength) {
643
648
  throw new Error("Output buffer is not large enough");
644
- if (inPtr + ctrl > inLength)
649
+ }
650
+ if (inPtr + ctrl > inLength) {
645
651
  throw new Error("Invalid compressed data");
652
+ }
646
653
  do {
647
654
  outData[outPtr++] = inData[inPtr++];
648
655
  } while (--ctrl);
649
656
  } else {
650
657
  len = ctrl >> 5;
651
658
  ref = outPtr - ((ctrl & 31) << 8) - 1;
652
- if (inPtr >= inLength)
659
+ if (inPtr >= inLength) {
653
660
  throw new Error("Invalid compressed data");
661
+ }
654
662
  if (len === 7) {
655
663
  len += inData[inPtr++];
656
- if (inPtr >= inLength)
664
+ if (inPtr >= inLength) {
657
665
  throw new Error("Invalid compressed data");
666
+ }
658
667
  }
659
668
  ref -= inData[inPtr++];
660
- if (outPtr + len + 2 > outLength)
669
+ if (outPtr + len + 2 > outLength) {
661
670
  throw new Error("Output buffer is not large enough");
662
- if (ref < 0)
671
+ }
672
+ if (ref < 0) {
663
673
  throw new Error("Invalid compressed data");
664
- if (ref >= outPtr)
674
+ }
675
+ if (ref >= outPtr) {
665
676
  throw new Error("Invalid compressed data");
677
+ }
666
678
  do {
667
679
  outData[outPtr++] = outData[ref++];
668
680
  } while (--len + 2);
@@ -684,6 +696,12 @@
684
696
  if (offset.rgb !== void 0) {
685
697
  fields.push(new Field("COLOR_0", new FixedSizeList(3, new Field("rgb", new Uint8())), false));
686
698
  }
699
+ if (offset.intensity !== void 0) {
700
+ fields.push(new Field("intensity", new Field("intensity", new Float32()), false));
701
+ }
702
+ if (offset.label !== void 0) {
703
+ fields.push(new Field("label", new Field("label", new Int32()), false));
704
+ }
687
705
  return new Schema(fields, metadata);
688
706
  }
689
707
 
@@ -753,6 +771,18 @@
753
771
  size: 3
754
772
  };
755
773
  }
774
+ if (attributes.intensity && attributes.intensity.length > 0) {
775
+ normalizedAttributes.COLOR_0 = {
776
+ value: new Uint8Array(attributes.color),
777
+ size: 3
778
+ };
779
+ }
780
+ if (attributes.label && attributes.label.length > 0) {
781
+ normalizedAttributes.COLOR_0 = {
782
+ value: new Uint8Array(attributes.label),
783
+ size: 3
784
+ };
785
+ }
756
786
  return normalizedAttributes;
757
787
  }
758
788
  function parsePCDHeader(data) {
@@ -830,6 +860,8 @@
830
860
  const position = [];
831
861
  const normal = [];
832
862
  const color = [];
863
+ const intensity = [];
864
+ const label = [];
833
865
  const offset = pcdHeader.offset;
834
866
  const pcdData = textData.substr(pcdHeader.headerLen);
835
867
  const lines = pcdData.split("\n");
@@ -854,6 +886,12 @@
854
886
  normal.push(parseFloat(line[offset.normal_y]));
855
887
  normal.push(parseFloat(line[offset.normal_z]));
856
888
  }
889
+ if (offset.intensity !== void 0) {
890
+ intensity.push(parseFloat(line[offset.intensity]));
891
+ }
892
+ if (offset.label !== void 0) {
893
+ label.push(parseInt(line[offset.label]));
894
+ }
857
895
  }
858
896
  }
859
897
  return { position, normal, color };
@@ -862,6 +900,8 @@
862
900
  const position = [];
863
901
  const normal = [];
864
902
  const color = [];
903
+ const intensity = [];
904
+ const label = [];
865
905
  const dataview = new DataView(data, pcdHeader.headerLen);
866
906
  const offset = pcdHeader.offset;
867
907
  for (let i = 0, row = 0; i < pcdHeader.points; i++, row += pcdHeader.rowSize) {
@@ -880,45 +920,63 @@
880
920
  normal.push(dataview.getFloat32(row + offset.normal_y, LITTLE_ENDIAN));
881
921
  normal.push(dataview.getFloat32(row + offset.normal_z, LITTLE_ENDIAN));
882
922
  }
923
+ if (offset.intensity !== void 0) {
924
+ intensity.push(dataview.getFloat32(row + offset.intensity, LITTLE_ENDIAN));
925
+ }
926
+ if (offset.label !== void 0) {
927
+ label.push(dataview.getInt32(row + offset.label, LITTLE_ENDIAN));
928
+ }
883
929
  }
884
- return { position, normal, color };
930
+ return { position, normal, color, intensity, label };
885
931
  }
886
- function parsePCDBinaryCompressed(PCDheader, data) {
932
+ function parsePCDBinaryCompressed(pcdHeader, data) {
887
933
  const position = [];
888
934
  const normal = [];
889
935
  const color = [];
890
- const sizes = new Uint32Array(data.slice(PCDheader.headerLen, PCDheader.headerLen + 8));
936
+ const intensity = [];
937
+ const label = [];
938
+ const sizes = new Uint32Array(data.slice(pcdHeader.headerLen, pcdHeader.headerLen + 8));
891
939
  const compressedSize = sizes[0];
892
940
  const decompressedSize = sizes[1];
893
- const decompressed = decompressLZF(new Uint8Array(data, PCDheader.headerLen + 8, compressedSize), decompressedSize);
941
+ const decompressed = decompressLZF(new Uint8Array(data, pcdHeader.headerLen + 8, compressedSize), decompressedSize);
894
942
  const dataview = new DataView(decompressed.buffer);
895
- const offset = PCDheader.offset;
896
- for (let i = 0; i < PCDheader.points; i++) {
943
+ const offset = pcdHeader.offset;
944
+ for (let i = 0; i < pcdHeader.points; i++) {
897
945
  if (offset.x !== void 0) {
898
- position.push(dataview.getFloat32(PCDheader.points * offset.x + PCDheader.size[0] * i, LITTLE_ENDIAN));
899
- position.push(dataview.getFloat32(PCDheader.points * offset.y + PCDheader.size[1] * i, LITTLE_ENDIAN));
900
- position.push(dataview.getFloat32(PCDheader.points * offset.z + PCDheader.size[2] * i, LITTLE_ENDIAN));
946
+ position.push(dataview.getFloat32(pcdHeader.points * offset.x + pcdHeader.size[0] * i, LITTLE_ENDIAN));
947
+ position.push(dataview.getFloat32(pcdHeader.points * offset.y + pcdHeader.size[1] * i, LITTLE_ENDIAN));
948
+ position.push(dataview.getFloat32(pcdHeader.points * offset.z + pcdHeader.size[2] * i, LITTLE_ENDIAN));
901
949
  }
902
950
  if (offset.rgb !== void 0) {
903
- color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 0) / 255);
904
- color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 1) / 255);
905
- color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 2) / 255);
951
+ color.push(dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 0) / 255);
952
+ color.push(dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 1) / 255);
953
+ color.push(dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 2) / 255);
906
954
  }
907
955
  if (offset.normal_x !== void 0) {
908
- normal.push(dataview.getFloat32(PCDheader.points * offset.normal_x + PCDheader.size[4] * i, LITTLE_ENDIAN));
909
- normal.push(dataview.getFloat32(PCDheader.points * offset.normal_y + PCDheader.size[5] * i, LITTLE_ENDIAN));
910
- normal.push(dataview.getFloat32(PCDheader.points * offset.normal_z + PCDheader.size[6] * i, LITTLE_ENDIAN));
956
+ normal.push(dataview.getFloat32(pcdHeader.points * offset.normal_x + pcdHeader.size[4] * i, LITTLE_ENDIAN));
957
+ normal.push(dataview.getFloat32(pcdHeader.points * offset.normal_y + pcdHeader.size[5] * i, LITTLE_ENDIAN));
958
+ normal.push(dataview.getFloat32(pcdHeader.points * offset.normal_z + pcdHeader.size[6] * i, LITTLE_ENDIAN));
959
+ }
960
+ if (offset.intensity !== void 0) {
961
+ const intensityIndex = pcdHeader.fields.indexOf("intensity");
962
+ intensity.push(dataview.getFloat32(pcdHeader.points * offset.intensity + pcdHeader.size[intensityIndex] * i, LITTLE_ENDIAN));
963
+ }
964
+ if (offset.label !== void 0) {
965
+ const labelIndex = pcdHeader.fields.indexOf("label");
966
+ label.push(dataview.getInt32(pcdHeader.points * offset.label + pcdHeader.size[labelIndex] * i, LITTLE_ENDIAN));
911
967
  }
912
968
  }
913
969
  return {
914
970
  position,
915
971
  normal,
916
- color
972
+ color,
973
+ intensity,
974
+ label
917
975
  };
918
976
  }
919
977
 
920
978
  // src/pcd-loader.ts
921
- var VERSION = true ? "3.4.0-alpha.2" : "latest";
979
+ var VERSION = true ? "3.4.0-alpha.4" : "latest";
922
980
  var PCDLoader = {
923
981
  name: "PCD (Point Cloud Data)",
924
982
  id: "pcd",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/pcd",
3
- "version": "3.4.0-alpha.2",
3
+ "version": "3.4.0-alpha.4",
4
4
  "description": "Framework-independent loader for the PCD format",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -33,8 +33,8 @@
33
33
  "build-worker": "esbuild src/workers/pcd-worker.ts --bundle --outfile=dist/pcd-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
34
34
  },
35
35
  "dependencies": {
36
- "@loaders.gl/loader-utils": "3.4.0-alpha.2",
37
- "@loaders.gl/schema": "3.4.0-alpha.2"
36
+ "@loaders.gl/loader-utils": "3.4.0-alpha.4",
37
+ "@loaders.gl/schema": "3.4.0-alpha.4"
38
38
  },
39
- "gitHead": "f1c00c124d8d0c41a138ff40afb0d1a00711bf2e"
39
+ "gitHead": "f039a523df8b908a91f26c5ba8c4cfc1924b6140"
40
40
  }