summit/frontend/node_modules/three-stdlib/loaders/PCDLoader.cjs.map

1 line
18 KiB
Plaintext
Raw Normal View History

2025-12-08 16:31:30 +00:00
{"version":3,"file":"PCDLoader.cjs","sources":["../../src/loaders/PCDLoader.js"],"sourcesContent":["import { BufferGeometry, FileLoader, Float32BufferAttribute, Loader, LoaderUtils, Points, PointsMaterial } from 'three'\nimport { decodeText } from '../_polyfill/LoaderUtils'\n\nclass PCDLoader extends Loader {\n constructor(manager) {\n super(manager)\n\n this.littleEndian = true\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\n const loader = new FileLoader(scope.manager)\n loader.setPath(scope.path)\n loader.setResponseType('arraybuffer')\n loader.setRequestHeader(scope.requestHeader)\n loader.setWithCredentials(scope.withCredentials)\n loader.load(\n url,\n function (data) {\n try {\n onLoad(scope.parse(data, url))\n } catch (e) {\n if (onError) {\n onError(e)\n } else {\n console.error(e)\n }\n\n scope.manager.itemError(url)\n }\n },\n onProgress,\n onError,\n )\n }\n\n parse(data, url) {\n // from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n\n function decompressLZF(inData, outLength) {\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 do {\n ctrl = inData[inPtr++]\n if (ctrl < 1 << 5) {\n ctrl++\n if (outPtr + ctrl > outLength) throw new Error('Output buffer is not large enough')\n if (inPtr + ctrl > inLength) throw new Error('Invalid compressed data')\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) throw new Error('Invalid compressed data')\n if (len === 7) {\n len += inData[inPtr++]\n if (inPtr >= inLength) throw new Error('Invalid compressed data')\n }\n\n ref -= inData[inPtr++]\n if (outPtr + len + 2 > outLength) throw new Error('Output buffer is not large enough')\n if (ref < 0) throw new Error('Invalid compressed data')\n if (ref >= outPtr) throw new Error('Invalid compressed data')\n do {\n outData[outPtr++] = outData[ref++]\n } while (--len + 2)\n }\n } while (inPtr < inLength)\n\n return outData\n }\n\n function parseHeader(data) {\n const 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 PCDheader.data = result2[1]\n PCDheader.headerLen = result2[0].length + result1\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) PCDheader.version = parseFloat(PCDheader.version[1])\n\n if (PCDheader.fields !== null) PCDheader.fields = PCDheader.fields[1].split(' ')\n\n if (PCDheader.type !== null) PCDheader.type = PCDheader.type[1].split(' ')\n\n if (PCDheader.width !== null) PCDheader.width = parseInt(PCDheader.width[1])\n\n if (PCDheader.height !== null) PCDheader.height = parseInt(PCDheader.height[1])\n\n if (PCDheader.viewpoint !== null) PCDheader.viewpoint = PCDheader.viewpoint[