@loaders.gl/pointclouds 0.0.0-stage → 5.0.0-beta.1
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/LAS-README.md +12 -0
- package/LICENSE +24 -0
- package/PCD-README.md +12 -0
- package/PLY-README.md +38 -0
- package/README.md +7 -2
- package/THIRD-PARTY-NOTICES.md +27 -0
- package/dist/dist.dev.js +30141 -0
- package/dist/dist.min.js +54 -0
- package/dist/index.cjs +61 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/las/bundled.cjs +72 -0
- package/dist/las/bundled.cjs.map +7 -0
- package/dist/las/bundled.d.ts +12 -0
- package/dist/las/bundled.d.ts.map +1 -0
- package/dist/las/bundled.js +12 -0
- package/dist/las/bundled.js.map +1 -0
- package/dist/las/index.cjs +78 -0
- package/dist/las/index.cjs.map +7 -0
- package/dist/las/index.d.ts +17 -0
- package/dist/las/index.d.ts.map +1 -0
- package/dist/las/index.js +15 -0
- package/dist/las/index.js.map +1 -0
- package/dist/las/las-copc-loader-types.cjs +49 -0
- package/dist/las/las-copc-loader-types.cjs.map +7 -0
- package/dist/las/las-copc-loader-types.d.ts +63 -0
- package/dist/las/las-copc-loader-types.d.ts.map +1 -0
- package/dist/las/las-copc-loader-types.js +14 -0
- package/dist/las/las-copc-loader-types.js.map +1 -0
- package/dist/las/las-copc-loader.cjs +57 -0
- package/dist/las/las-copc-loader.cjs.map +7 -0
- package/dist/las/las-copc-loader.d.ts +37 -0
- package/dist/las/las-copc-loader.d.ts.map +1 -0
- package/dist/las/las-copc-loader.js +40 -0
- package/dist/las/las-copc-loader.js.map +1 -0
- package/dist/las/las-format.cjs +44 -0
- package/dist/las/las-format.cjs.map +7 -0
- package/dist/las/las-format.d.ts +16 -0
- package/dist/las/las-format.d.ts.map +1 -0
- package/dist/las/las-format.js +19 -0
- package/dist/las/las-format.js.map +1 -0
- package/dist/las/las-loader-shared.cjs +82 -0
- package/dist/las/las-loader-shared.cjs.map +7 -0
- package/dist/las/las-loader-shared.d.ts +66 -0
- package/dist/las/las-loader-shared.d.ts.map +1 -0
- package/dist/las/las-loader-shared.js +58 -0
- package/dist/las/las-loader-shared.js.map +1 -0
- package/dist/las/las-loader-types.cjs +54 -0
- package/dist/las/las-loader-types.cjs.map +7 -0
- package/dist/las/las-loader-types.d.ts +104 -0
- package/dist/las/las-loader-types.d.ts.map +1 -0
- package/dist/las/las-loader-types.js +19 -0
- package/dist/las/las-loader-types.js.map +1 -0
- package/dist/las/las-loader.cjs +80 -0
- package/dist/las/las-loader.cjs.map +7 -0
- package/dist/las/las-loader.d.ts +45 -0
- package/dist/las/las-loader.d.ts.map +1 -0
- package/dist/las/las-loader.js +58 -0
- package/dist/las/las-loader.js.map +1 -0
- package/dist/las/las-writer.cjs +1054 -0
- package/dist/las/las-writer.cjs.map +7 -0
- package/dist/las/las-writer.d.ts +69 -0
- package/dist/las/las-writer.d.ts.map +1 -0
- package/dist/las/las-writer.js +994 -0
- package/dist/las/las-writer.js.map +1 -0
- package/dist/las/laz-rs-loader-types.cjs +49 -0
- package/dist/las/laz-rs-loader-types.cjs.map +7 -0
- package/dist/las/laz-rs-loader-types.d.ts +65 -0
- package/dist/las/laz-rs-loader-types.d.ts.map +1 -0
- package/dist/las/laz-rs-loader-types.js +16 -0
- package/dist/las/laz-rs-loader-types.js.map +1 -0
- package/dist/las/laz-rs-loader.cjs +272 -0
- package/dist/las/laz-rs-loader.cjs.map +7 -0
- package/dist/las/laz-rs-loader.d.ts +37 -0
- package/dist/las/laz-rs-loader.d.ts.map +1 -0
- package/dist/las/laz-rs-loader.js +38 -0
- package/dist/las/laz-rs-loader.js.map +1 -0
- package/dist/las/lazperf-loader-types.cjs +49 -0
- package/dist/las/lazperf-loader-types.cjs.map +7 -0
- package/dist/las/lazperf-loader-types.d.ts +67 -0
- package/dist/las/lazperf-loader-types.d.ts.map +1 -0
- package/dist/las/lazperf-loader-types.js +17 -0
- package/dist/las/lazperf-loader-types.js.map +1 -0
- package/dist/las/lazperf-loader.cjs +60 -0
- package/dist/las/lazperf-loader.cjs.map +7 -0
- package/dist/las/lazperf-loader.d.ts +39 -0
- package/dist/las/lazperf-loader.d.ts.map +1 -0
- package/dist/las/lazperf-loader.js +44 -0
- package/dist/las/lazperf-loader.js.map +1 -0
- package/dist/las/lib/copc/parse-las.cjs +177 -0
- package/dist/las/lib/copc/parse-las.cjs.map +7 -0
- package/dist/las/lib/copc/parse-las.d.ts +17 -0
- package/dist/las/lib/copc/parse-las.d.ts.map +1 -0
- package/dist/las/lib/copc/parse-las.js +215 -0
- package/dist/las/lib/copc/parse-las.js.map +1 -0
- package/dist/las/lib/get-las-schema.cjs +62 -0
- package/dist/las/lib/get-las-schema.cjs.map +7 -0
- package/dist/las/lib/get-las-schema.d.ts +16 -0
- package/dist/las/lib/get-las-schema.d.ts.map +1 -0
- package/dist/las/lib/get-las-schema.js +46 -0
- package/dist/las/lib/get-las-schema.js.map +1 -0
- package/dist/las/lib/las-compatibility.cjs +110 -0
- package/dist/las/lib/las-compatibility.cjs.map +7 -0
- package/dist/las/lib/las-compatibility.d.ts +40 -0
- package/dist/las/lib/las-compatibility.d.ts.map +1 -0
- package/dist/las/lib/las-compatibility.js +115 -0
- package/dist/las/lib/las-compatibility.js.map +1 -0
- package/dist/las/lib/las-extra-bytes.cjs +223 -0
- package/dist/las/lib/las-extra-bytes.cjs.map +7 -0
- package/dist/las/lib/las-extra-bytes.d.ts +35 -0
- package/dist/las/lib/las-extra-bytes.d.ts.map +1 -0
- package/dist/las/lib/las-extra-bytes.js +195 -0
- package/dist/las/lib/las-extra-bytes.js.map +1 -0
- package/dist/las/lib/las-types.cjs +19 -0
- package/dist/las/lib/las-types.cjs.map +7 -0
- package/dist/las/lib/las-types.d.ts +194 -0
- package/dist/las/lib/las-types.d.ts.map +1 -0
- package/dist/las/lib/las-types.js +5 -0
- package/dist/las/lib/las-types.js.map +1 -0
- package/dist/las/lib/las-waveform.cjs +196 -0
- package/dist/las/lib/las-waveform.cjs.map +7 -0
- package/dist/las/lib/las-waveform.d.ts +89 -0
- package/dist/las/lib/las-waveform.d.ts.map +1 -0
- package/dist/las/lib/las-waveform.js +193 -0
- package/dist/las/lib/las-waveform.js.map +1 -0
- package/dist/las/lib/laz-perf/laslaz-decoder.cjs +382 -0
- package/dist/las/lib/laz-perf/laslaz-decoder.cjs.map +7 -0
- package/dist/las/lib/laz-perf/laslaz-decoder.d.ts +129 -0
- package/dist/las/lib/laz-perf/laslaz-decoder.d.ts.map +1 -0
- package/dist/las/lib/laz-perf/laslaz-decoder.js +377 -0
- package/dist/las/lib/laz-perf/laslaz-decoder.js.map +1 -0
- package/dist/las/lib/laz-perf/parse-las.cjs +270 -0
- package/dist/las/lib/laz-perf/parse-las.cjs.map +7 -0
- package/dist/las/lib/laz-perf/parse-las.d.ts +24 -0
- package/dist/las/lib/laz-perf/parse-las.d.ts.map +1 -0
- package/dist/las/lib/laz-perf/parse-las.js +307 -0
- package/dist/las/lib/laz-perf/parse-las.js.map +1 -0
- package/dist/las/lib/laz-rs-wasm/laslaz-decoder.cjs +631 -0
- package/dist/las/lib/laz-rs-wasm/laslaz-decoder.cjs.map +7 -0
- package/dist/las/lib/laz-rs-wasm/laslaz-decoder.d.ts +129 -0
- package/dist/las/lib/laz-rs-wasm/laslaz-decoder.d.ts.map +1 -0
- package/dist/las/lib/laz-rs-wasm/laslaz-decoder.js +414 -0
- package/dist/las/lib/laz-rs-wasm/laslaz-decoder.js.map +1 -0
- package/dist/las/lib/laz-rs-wasm/parse-las.cjs +270 -0
- package/dist/las/lib/laz-rs-wasm/parse-las.cjs.map +7 -0
- package/dist/las/lib/laz-rs-wasm/parse-las.d.ts +24 -0
- package/dist/las/lib/laz-rs-wasm/parse-las.d.ts.map +1 -0
- package/dist/las/lib/laz-rs-wasm/parse-las.js +307 -0
- package/dist/las/lib/laz-rs-wasm/parse-las.js.map +1 -0
- package/dist/las/lib/typescript/parse-las.cjs +2767 -0
- package/dist/las/lib/typescript/parse-las.cjs.map +7 -0
- package/dist/las/lib/typescript/parse-las.d.ts +39 -0
- package/dist/las/lib/typescript/parse-las.d.ts.map +1 -0
- package/dist/las/lib/typescript/parse-las.js +2607 -0
- package/dist/las/lib/typescript/parse-las.js.map +1 -0
- package/dist/las/libs/laz-perf/laz-perf.cjs +18093 -0
- package/dist/las/libs/laz-perf/laz-perf.cjs.map +7 -0
- package/dist/las/libs/laz-perf/laz-perf.d.ts +2 -0
- package/dist/las/libs/laz-perf/laz-perf.d.ts.map +1 -0
- package/dist/las/libs/laz-perf/laz-perf.js +19003 -0
- package/dist/las/libs/laz-perf/laz-perf.js.map +1 -0
- package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.d.ts +95 -0
- package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.d.ts.map +1 -0
- package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.js +442 -0
- package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.js.map +1 -0
- package/dist/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm +0 -0
- package/dist/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm.d.ts +38 -0
- package/dist/las/unbundled.cjs +71 -0
- package/dist/las/unbundled.cjs.map +7 -0
- package/dist/las/unbundled.d.ts +11 -0
- package/dist/las/unbundled.d.ts.map +1 -0
- package/dist/las/unbundled.js +11 -0
- package/dist/las/unbundled.js.map +1 -0
- package/dist/las/workers/las-worker.cjs +23 -0
- package/dist/las/workers/las-worker.cjs.map +7 -0
- package/dist/las/workers/las-worker.d.ts +2 -0
- package/dist/las/workers/las-worker.d.ts.map +1 -0
- package/dist/las/workers/las-worker.js +23 -0
- package/dist/las/workers/las-worker.js.map +1 -0
- package/dist/las-worker.js +23058 -0
- package/dist/pcd/bundled.cjs +33 -0
- package/dist/pcd/bundled.cjs.map +7 -0
- package/dist/pcd/bundled.d.ts +3 -0
- package/dist/pcd/bundled.d.ts.map +1 -0
- package/dist/pcd/bundled.js +5 -0
- package/dist/pcd/bundled.js.map +1 -0
- package/dist/pcd/index.cjs +40 -0
- package/dist/pcd/index.cjs.map +7 -0
- package/dist/pcd/index.d.ts +8 -0
- package/dist/pcd/index.d.ts.map +1 -0
- package/dist/pcd/index.js +10 -0
- package/dist/pcd/index.js.map +1 -0
- package/dist/pcd/lib/decompress-lzf.cjs +80 -0
- package/dist/pcd/lib/decompress-lzf.cjs.map +7 -0
- package/dist/pcd/lib/decompress-lzf.d.ts +7 -0
- package/dist/pcd/lib/decompress-lzf.d.ts.map +1 -0
- package/dist/pcd/lib/decompress-lzf.js +62 -0
- package/dist/pcd/lib/decompress-lzf.js.map +1 -0
- package/dist/pcd/lib/get-pcd-schema.cjs +70 -0
- package/dist/pcd/lib/get-pcd-schema.cjs.map +7 -0
- package/dist/pcd/lib/get-pcd-schema.d.ts +10 -0
- package/dist/pcd/lib/get-pcd-schema.d.ts.map +1 -0
- package/dist/pcd/lib/get-pcd-schema.js +53 -0
- package/dist/pcd/lib/get-pcd-schema.js.map +1 -0
- package/dist/pcd/lib/parse-pcd.cjs +354 -0
- package/dist/pcd/lib/parse-pcd.cjs.map +7 -0
- package/dist/pcd/lib/parse-pcd.d.ts +20 -0
- package/dist/pcd/lib/parse-pcd.d.ts.map +1 -0
- package/dist/pcd/lib/parse-pcd.js +341 -0
- package/dist/pcd/lib/parse-pcd.js.map +1 -0
- package/dist/pcd/lib/pcd-types.cjs +19 -0
- package/dist/pcd/lib/pcd-types.cjs.map +7 -0
- package/dist/pcd/lib/pcd-types.d.ts +31 -0
- package/dist/pcd/lib/pcd-types.d.ts.map +1 -0
- package/dist/pcd/lib/pcd-types.js +5 -0
- package/dist/pcd/lib/pcd-types.js.map +1 -0
- package/dist/pcd/pcd-format.cjs +42 -0
- package/dist/pcd/pcd-format.cjs.map +7 -0
- package/dist/pcd/pcd-format.d.ts +16 -0
- package/dist/pcd/pcd-format.d.ts.map +1 -0
- package/dist/pcd/pcd-format.js +19 -0
- package/dist/pcd/pcd-format.js.map +1 -0
- package/dist/pcd/pcd-loader-types.cjs +64 -0
- package/dist/pcd/pcd-loader-types.cjs.map +7 -0
- package/dist/pcd/pcd-loader-types.d.ts +105 -0
- package/dist/pcd/pcd-loader-types.d.ts.map +1 -0
- package/dist/pcd/pcd-loader-types.js +35 -0
- package/dist/pcd/pcd-loader-types.js.map +1 -0
- package/dist/pcd/pcd-loader.cjs +144 -0
- package/dist/pcd/pcd-loader.cjs.map +7 -0
- package/dist/pcd/pcd-loader.d.ts +44 -0
- package/dist/pcd/pcd-loader.d.ts.map +1 -0
- package/dist/pcd/pcd-loader.js +128 -0
- package/dist/pcd/pcd-loader.js.map +1 -0
- package/dist/pcd/pcd-writer.cjs +134 -0
- package/dist/pcd/pcd-writer.cjs.map +7 -0
- package/dist/pcd/pcd-writer.d.ts +37 -0
- package/dist/pcd/pcd-writer.d.ts.map +1 -0
- package/dist/pcd/pcd-writer.js +115 -0
- package/dist/pcd/pcd-writer.js.map +1 -0
- package/dist/pcd/unbundled.cjs +33 -0
- package/dist/pcd/unbundled.cjs.map +7 -0
- package/dist/pcd/unbundled.d.ts +3 -0
- package/dist/pcd/unbundled.d.ts.map +1 -0
- package/dist/pcd/unbundled.js +5 -0
- package/dist/pcd/unbundled.js.map +1 -0
- package/dist/pcd/workers/pcd-worker.cjs +23 -0
- package/dist/pcd/workers/pcd-worker.cjs.map +7 -0
- package/dist/pcd/workers/pcd-worker.d.ts +2 -0
- package/dist/pcd/workers/pcd-worker.d.ts.map +1 -0
- package/dist/pcd/workers/pcd-worker.js +23 -0
- package/dist/pcd/workers/pcd-worker.js.map +1 -0
- package/dist/pcd-worker.js +17522 -0
- package/dist/ply/bundled.cjs +33 -0
- package/dist/ply/bundled.cjs.map +7 -0
- package/dist/ply/bundled.d.ts +3 -0
- package/dist/ply/bundled.d.ts.map +1 -0
- package/dist/ply/bundled.js +5 -0
- package/dist/ply/bundled.js.map +1 -0
- package/dist/ply/index.cjs +40 -0
- package/dist/ply/index.cjs.map +7 -0
- package/dist/ply/index.d.ts +8 -0
- package/dist/ply/index.d.ts.map +1 -0
- package/dist/ply/index.js +11 -0
- package/dist/ply/index.js.map +1 -0
- package/dist/ply/lib/get-ply-schema.cjs +126 -0
- package/dist/ply/lib/get-ply-schema.cjs.map +7 -0
- package/dist/ply/lib/get-ply-schema.d.ts +10 -0
- package/dist/ply/lib/get-ply-schema.d.ts.map +1 -0
- package/dist/ply/lib/get-ply-schema.js +117 -0
- package/dist/ply/lib/get-ply-schema.js.map +1 -0
- package/dist/ply/lib/normalize-ply.cjs +96 -0
- package/dist/ply/lib/normalize-ply.cjs.map +7 -0
- package/dist/ply/lib/normalize-ply.d.ts +8 -0
- package/dist/ply/lib/normalize-ply.d.ts.map +1 -0
- package/dist/ply/lib/normalize-ply.js +89 -0
- package/dist/ply/lib/normalize-ply.js.map +1 -0
- package/dist/ply/lib/parse-ply-arrow.cjs +552 -0
- package/dist/ply/lib/parse-ply-arrow.cjs.map +7 -0
- package/dist/ply/lib/parse-ply-arrow.d.ts +25 -0
- package/dist/ply/lib/parse-ply-arrow.d.ts.map +1 -0
- package/dist/ply/lib/parse-ply-arrow.js +493 -0
- package/dist/ply/lib/parse-ply-arrow.js.map +1 -0
- package/dist/ply/lib/parse-ply-in-batches.cjs +607 -0
- package/dist/ply/lib/parse-ply-in-batches.cjs.map +7 -0
- package/dist/ply/lib/parse-ply-in-batches.d.ts +9 -0
- package/dist/ply/lib/parse-ply-in-batches.d.ts.map +1 -0
- package/dist/ply/lib/parse-ply-in-batches.js +625 -0
- package/dist/ply/lib/parse-ply-in-batches.js.map +1 -0
- package/dist/ply/lib/parse-ply.cjs +755 -0
- package/dist/ply/lib/parse-ply.cjs.map +7 -0
- package/dist/ply/lib/parse-ply.d.ts +69 -0
- package/dist/ply/lib/parse-ply.d.ts.map +1 -0
- package/dist/ply/lib/parse-ply.js +851 -0
- package/dist/ply/lib/parse-ply.js.map +1 -0
- package/dist/ply/lib/ply-types.cjs +19 -0
- package/dist/ply/lib/ply-types.cjs.map +7 -0
- package/dist/ply/lib/ply-types.d.ts +37 -0
- package/dist/ply/lib/ply-types.d.ts.map +1 -0
- package/dist/ply/lib/ply-types.js +2 -0
- package/dist/ply/lib/ply-types.js.map +1 -0
- package/dist/ply/ply-format.cjs +43 -0
- package/dist/ply/ply-format.cjs.map +7 -0
- package/dist/ply/ply-format.d.ts +18 -0
- package/dist/ply/ply-format.d.ts.map +1 -0
- package/dist/ply/ply-format.js +22 -0
- package/dist/ply/ply-format.js.map +1 -0
- package/dist/ply/ply-loader-types.cjs +65 -0
- package/dist/ply/ply-loader-types.cjs.map +7 -0
- package/dist/ply/ply-loader-types.d.ts +111 -0
- package/dist/ply/ply-loader-types.d.ts.map +1 -0
- package/dist/ply/ply-loader-types.js +38 -0
- package/dist/ply/ply-loader-types.js.map +1 -0
- package/dist/ply/ply-loader.cjs +134 -0
- package/dist/ply/ply-loader.cjs.map +7 -0
- package/dist/ply/ply-loader.d.ts +44 -0
- package/dist/ply/ply-loader.d.ts.map +1 -0
- package/dist/ply/ply-loader.js +121 -0
- package/dist/ply/ply-loader.js.map +1 -0
- package/dist/ply/ply-writer.cjs +175 -0
- package/dist/ply/ply-writer.cjs.map +7 -0
- package/dist/ply/ply-writer.d.ts +37 -0
- package/dist/ply/ply-writer.d.ts.map +1 -0
- package/dist/ply/ply-writer.js +140 -0
- package/dist/ply/ply-writer.js.map +1 -0
- package/dist/ply/unbundled.cjs +33 -0
- package/dist/ply/unbundled.cjs.map +7 -0
- package/dist/ply/unbundled.d.ts +3 -0
- package/dist/ply/unbundled.d.ts.map +1 -0
- package/dist/ply/unbundled.js +5 -0
- package/dist/ply/unbundled.js.map +1 -0
- package/dist/ply/workers/ply-worker.cjs +34 -0
- package/dist/ply/workers/ply-worker.cjs.map +7 -0
- package/dist/ply/workers/ply-worker.d.ts +2 -0
- package/dist/ply/workers/ply-worker.d.ts.map +1 -0
- package/dist/ply/workers/ply-worker.js +37 -0
- package/dist/ply/workers/ply-worker.js.map +1 -0
- package/dist/ply-worker.js +19175 -0
- package/package.json +234 -4
- package/src/index.ts +19 -0
- package/src/las/bundled.ts +39 -0
- package/src/las/index.ts +70 -0
- package/src/las/las-copc-loader-types.ts +18 -0
- package/src/las/las-copc-loader.ts +61 -0
- package/src/las/las-format.ts +21 -0
- package/src/las/las-loader-shared.ts +124 -0
- package/src/las/las-loader-types.ts +27 -0
- package/src/las/las-loader.ts +109 -0
- package/src/las/las-writer.ts +1473 -0
- package/src/las/laz-rs-loader-types.ts +21 -0
- package/src/las/laz-rs-loader.ts +53 -0
- package/src/las/lazperf-loader-types.ts +22 -0
- package/src/las/lazperf-loader.ts +65 -0
- package/src/las/lib/LASZIP-LICENSE +202 -0
- package/src/las/lib/LASZIP-NOTICE +4 -0
- package/src/las/lib/copc/parse-las.ts +265 -0
- package/src/las/lib/get-las-schema.ts +50 -0
- package/src/las/lib/las-compatibility.ts +178 -0
- package/src/las/lib/las-extra-bytes.ts +274 -0
- package/src/las/lib/las-types.ts +206 -0
- package/src/las/lib/las-waveform.ts +292 -0
- package/src/las/lib/laz-perf/laslaz-decoder.ts +443 -0
- package/src/las/lib/laz-perf/parse-las.ts +412 -0
- package/src/las/lib/laz-rs-wasm/laslaz-decoder.ts +488 -0
- package/src/las/lib/laz-rs-wasm/parse-las.ts +412 -0
- package/src/las/lib/typescript/parse-las.ts +3730 -0
- package/src/las/libs/laz-perf/laz-perf.ts +20615 -0
- package/src/las/libs/laz-rs-wasm/laz_rs_wasm.d.ts +89 -0
- package/src/las/libs/laz-rs-wasm/laz_rs_wasm.js +497 -0
- package/src/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm +0 -0
- package/src/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm.d.ts +38 -0
- package/src/las/libs/laz-rs-wasm/package.json +19 -0
- package/src/las/unbundled.ts +38 -0
- package/src/las/workers/las-worker.ts +24 -0
- package/src/pcd/bundled.ts +9 -0
- package/src/pcd/index.ts +13 -0
- package/src/pcd/lib/decompress-lzf.ts +68 -0
- package/src/pcd/lib/get-pcd-schema.ts +66 -0
- package/src/pcd/lib/parse-pcd.ts +474 -0
- package/src/pcd/lib/pcd-types.ts +34 -0
- package/src/pcd/pcd-format.ts +21 -0
- package/src/pcd/pcd-loader-types.ts +53 -0
- package/src/pcd/pcd-loader.ts +179 -0
- package/src/pcd/pcd-writer.ts +152 -0
- package/src/pcd/unbundled.ts +6 -0
- package/src/pcd/workers/pcd-worker.ts +24 -0
- package/src/ply/bundled.ts +9 -0
- package/src/ply/index.ts +15 -0
- package/src/ply/lib/get-ply-schema.ts +133 -0
- package/src/ply/lib/normalize-ply.ts +110 -0
- package/src/ply/lib/parse-ply-arrow.ts +676 -0
- package/src/ply/lib/parse-ply-in-batches.ts +827 -0
- package/src/ply/lib/parse-ply.ts +1081 -0
- package/src/ply/lib/ply-types.ts +47 -0
- package/src/ply/ply-format.ts +24 -0
- package/src/ply/ply-loader-types.ts +61 -0
- package/src/ply/ply-loader.ts +185 -0
- package/src/ply/ply-writer.ts +215 -0
- package/src/ply/unbundled.ts +6 -0
- package/src/ply/workers/ply-worker.ts +40 -0
- package/third-party-licenses/plasio-LICENSE +21 -0
- package/third-party-licenses/three-LICENSE +21 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { LoaderOptions } from '@loaders.gl/core/loader-utils';
|
|
2
|
+
import type { MeshArrowTable, ArrowTableBatch } from '@loaders.gl/core/schema';
|
|
3
|
+
import type { PCDMesh } from "./lib/pcd-types.js";
|
|
4
|
+
import { serializeArrowWorkerTable } from '@loaders.gl/core/schema-utils/arrow-transport';
|
|
5
|
+
export type PCDLoaderOptions = LoaderOptions & {
|
|
6
|
+
pcd?: {
|
|
7
|
+
/** Output shape. Defaults to a Mesh Arrow table. */
|
|
8
|
+
shape?: 'mesh' | 'arrow-table';
|
|
9
|
+
/** Color storage format. Defaults to uint8norm for backwards compatibility. */
|
|
10
|
+
colorFormat?: 'uint8norm' | 'float16' | 'float32';
|
|
11
|
+
/** Override the URL to the worker bundle (by default loads from unpkg.com) */
|
|
12
|
+
workerUrl?: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Preloads the parser-bearing PCD loader implementation.
|
|
17
|
+
*/
|
|
18
|
+
declare function preload(): Promise<{
|
|
19
|
+
readonly parse: (arrayBuffer: ArrayBuffer, options: PCDLoaderOptions | undefined) => Promise<MeshArrowTable | PCDMesh>;
|
|
20
|
+
readonly parseSync: (arrayBuffer: ArrayBuffer, options: PCDLoaderOptions | undefined) => MeshArrowTable | PCDMesh;
|
|
21
|
+
readonly parseInBatches: (arrayBuffer: AsyncIterable<ArrayBufferLike | ArrayBufferView> | Iterable<ArrayBufferLike | ArrayBufferView>, options: PCDLoaderOptions | undefined) => AsyncIterable<PCDMesh | ArrowTableBatch>;
|
|
22
|
+
readonly serializeWorkerResult: typeof serializeArrowWorkerTable;
|
|
23
|
+
readonly deserializeWorkerResult: (result: unknown, options?: PCDLoaderOptions) => PCDMesh | MeshArrowTable;
|
|
24
|
+
readonly serializeWorkerBatch: typeof serializeArrowWorkerTable;
|
|
25
|
+
readonly deserializeWorkerBatch: (result: unknown, options?: PCDLoaderOptions) => PCDMesh | ArrowTableBatch;
|
|
26
|
+
readonly dataType: PCDMesh | MeshArrowTable;
|
|
27
|
+
readonly batchType: PCDMesh | ArrowTableBatch;
|
|
28
|
+
readonly version: any;
|
|
29
|
+
readonly worker: true;
|
|
30
|
+
readonly workerInBatches: true;
|
|
31
|
+
readonly options: {
|
|
32
|
+
readonly pcd: {
|
|
33
|
+
readonly shape: "arrow-table";
|
|
34
|
+
readonly colorFormat: "uint8norm";
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
readonly name: "PCD (Point Cloud Data)";
|
|
38
|
+
readonly id: "pcd";
|
|
39
|
+
readonly module: "pointclouds";
|
|
40
|
+
readonly encoding: "text";
|
|
41
|
+
readonly format: "pcd";
|
|
42
|
+
readonly extensions: ["pcd"];
|
|
43
|
+
readonly mimeTypes: ["text/plain"];
|
|
44
|
+
readonly category: "pointcloud";
|
|
45
|
+
readonly text: true;
|
|
46
|
+
readonly binary: true;
|
|
47
|
+
}>;
|
|
48
|
+
/**
|
|
49
|
+
* Metadata-only worker loader for PCD - Point Cloud Data
|
|
50
|
+
*/
|
|
51
|
+
export declare const PCDLoader: {
|
|
52
|
+
readonly dataType: PCDMesh | MeshArrowTable;
|
|
53
|
+
readonly batchType: PCDMesh | ArrowTableBatch;
|
|
54
|
+
readonly version: any;
|
|
55
|
+
readonly worker: true;
|
|
56
|
+
/** Enables the stateful input/output batch protocol on the built-in worker. */
|
|
57
|
+
readonly workerInBatches: true;
|
|
58
|
+
readonly serializeWorkerResult: typeof serializeArrowWorkerTable;
|
|
59
|
+
readonly options: {
|
|
60
|
+
readonly pcd: {
|
|
61
|
+
readonly shape: "arrow-table";
|
|
62
|
+
readonly colorFormat: "uint8norm";
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
readonly preload: typeof preload;
|
|
66
|
+
readonly name: "PCD (Point Cloud Data)";
|
|
67
|
+
readonly id: "pcd";
|
|
68
|
+
readonly module: "pointclouds";
|
|
69
|
+
readonly encoding: "text";
|
|
70
|
+
readonly format: "pcd";
|
|
71
|
+
readonly extensions: ["pcd"];
|
|
72
|
+
readonly mimeTypes: ["text/plain"];
|
|
73
|
+
readonly category: "pointcloud";
|
|
74
|
+
readonly text: true;
|
|
75
|
+
readonly binary: true;
|
|
76
|
+
};
|
|
77
|
+
/** @deprecated Use PCDLoader. */
|
|
78
|
+
export declare const PCDWorkerLoader: {
|
|
79
|
+
readonly dataType: PCDMesh | MeshArrowTable;
|
|
80
|
+
readonly batchType: PCDMesh | ArrowTableBatch;
|
|
81
|
+
readonly version: any;
|
|
82
|
+
readonly worker: true;
|
|
83
|
+
/** Enables the stateful input/output batch protocol on the built-in worker. */
|
|
84
|
+
readonly workerInBatches: true;
|
|
85
|
+
readonly serializeWorkerResult: typeof serializeArrowWorkerTable;
|
|
86
|
+
readonly options: {
|
|
87
|
+
readonly pcd: {
|
|
88
|
+
readonly shape: "arrow-table";
|
|
89
|
+
readonly colorFormat: "uint8norm";
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
readonly preload: typeof preload;
|
|
93
|
+
readonly name: "PCD (Point Cloud Data)";
|
|
94
|
+
readonly id: "pcd";
|
|
95
|
+
readonly module: "pointclouds";
|
|
96
|
+
readonly encoding: "text";
|
|
97
|
+
readonly format: "pcd";
|
|
98
|
+
readonly extensions: ["pcd"];
|
|
99
|
+
readonly mimeTypes: ["text/plain"];
|
|
100
|
+
readonly category: "pointcloud";
|
|
101
|
+
readonly text: true;
|
|
102
|
+
readonly binary: true;
|
|
103
|
+
};
|
|
104
|
+
export {};
|
|
105
|
+
//# sourceMappingURL=pcd-loader-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pcd-loader-types.d.ts","sourceRoot":"","sources":["../../src/pcd/pcd-loader-types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAS,aAAa,EAAC,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAC,cAAc,EAAE,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAC,OAAO,EAAC,2BAAwB;AAE7C,OAAO,EAAC,yBAAyB,EAAC,MAAM,+CAA+C,CAAC;AAMxF,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,oDAAoD;QACpD,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;QAC/B,+EAA+E;QAC/E,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;QAClD,8EAA8E;QAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,iBAAe,OAAO;;;;;;;;uBAUS,OAAO,GAAG,cAAc;wBACvB,OAAO,GAAG,eAAe;;;;;;;;;;;;;;;;;;;;GARxD;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;uBAES,OAAO,GAAG,cAAc;wBACvB,OAAO,GAAG,eAAe;;;IAGvD,+EAA+E;;;;;;;;;;;;;;;;;;;;CAOiB,CAAC;AAEnG,iCAAiC;AACjC,eAAO,MAAM,eAAe;uBAdG,OAAO,GAAG,cAAc;wBACvB,OAAO,GAAG,eAAe;;;IAGvD,+EAA+E;;;;;;;;;;;;;;;;;;;;CAUzC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { PCDFormat } from "./pcd-format.js";
|
|
5
|
+
import { serializeArrowWorkerTable } from '@loaders.gl/core/schema-utils/arrow-transport';
|
|
6
|
+
// __VERSION__ is injected by babel-plugin-version-inline
|
|
7
|
+
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
8
|
+
const VERSION = typeof "5.0.0-beta.1" !== 'undefined' ? "5.0.0-beta.1" : 'latest';
|
|
9
|
+
/**
|
|
10
|
+
* Preloads the parser-bearing PCD loader implementation.
|
|
11
|
+
*/
|
|
12
|
+
async function preload() {
|
|
13
|
+
const { PCDLoaderWithParser } = await import('@loaders.gl/pointclouds/pcd/pcd-loader');
|
|
14
|
+
return PCDLoaderWithParser;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Metadata-only worker loader for PCD - Point Cloud Data
|
|
18
|
+
*/
|
|
19
|
+
export const PCDLoader = {
|
|
20
|
+
...PCDFormat,
|
|
21
|
+
dataType: null,
|
|
22
|
+
batchType: null,
|
|
23
|
+
version: VERSION,
|
|
24
|
+
worker: true,
|
|
25
|
+
/** Enables the stateful input/output batch protocol on the built-in worker. */
|
|
26
|
+
workerInBatches: true,
|
|
27
|
+
serializeWorkerResult: serializeArrowWorkerTable,
|
|
28
|
+
options: {
|
|
29
|
+
pcd: { shape: 'arrow-table', colorFormat: 'uint8norm' }
|
|
30
|
+
},
|
|
31
|
+
preload
|
|
32
|
+
};
|
|
33
|
+
/** @deprecated Use PCDLoader. */
|
|
34
|
+
export const PCDWorkerLoader = PCDLoader;
|
|
35
|
+
//# sourceMappingURL=pcd-loader-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pcd-loader-types.js","sourceRoot":"","sources":["../../src/pcd/pcd-loader-types.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAKpC,OAAO,EAAC,SAAS,EAAC,wBAAqB;AACvC,OAAO,EAAC,yBAAyB,EAAC,MAAM,+CAA+C,CAAC;AAExF,yDAAyD;AACzD,qDAAqD;AACrD,MAAM,OAAO,GAAG,qBAAkB,KAAK,WAAW,CAAC,CAAC,gBAAa,CAAC,CAAC,QAAQ,CAAC;AAa5E;;GAEG;AACH,KAAK,UAAU,OAAO;IACpB,MAAM,EAAC,mBAAmB,EAAC,GAAG,MAAM,MAAM,CAAC,wCAAwC,CAAC,CAAC;IACrF,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,GAAG,SAAS;IACZ,QAAQ,EAAE,IAA2C;IACrD,SAAS,EAAE,IAA4C;IACvD,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,IAAI;IACZ,+EAA+E;IAC/E,eAAe,EAAE,IAAI;IACrB,qBAAqB,EAAE,yBAAyB;IAChD,OAAO,EAAE;QACP,GAAG,EAAE,EAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAC;KACtD;IACD,OAAO;CACyF,CAAC;AAEnG,iCAAiC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/pcd/pcd-loader.ts
|
|
21
|
+
var pcd_loader_exports = {};
|
|
22
|
+
__export(pcd_loader_exports, {
|
|
23
|
+
PCDLoaderWithParser: () => PCDLoaderWithParser
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(pcd_loader_exports);
|
|
26
|
+
var import_loader_utils = require("@loaders.gl/core/loader-utils");
|
|
27
|
+
var import_arrow_transport = require("@loaders.gl/core/schema-utils/arrow-transport");
|
|
28
|
+
var import_schema_utils = require("@loaders.gl/core/schema-utils");
|
|
29
|
+
var import_parse_pcd = require("./lib/parse-pcd.cjs");
|
|
30
|
+
var import_pcd_loader_types = require("./pcd-loader-types.cjs");
|
|
31
|
+
var { preload: _PCDLoaderPreload, ...PCDLoaderMetadataWithoutPreload } = import_pcd_loader_types.PCDLoader;
|
|
32
|
+
function convertPCDMesh(mesh, options) {
|
|
33
|
+
const table = (0, import_schema_utils.convertMeshToTable)(mesh, "arrow-table");
|
|
34
|
+
return options?.pcd?.shape === "mesh" ? convertPCDTableToMesh(table, mesh) : { ...table, loader: mesh.loader, loaderData: mesh.loaderData };
|
|
35
|
+
}
|
|
36
|
+
var PCDLoaderWithParser = {
|
|
37
|
+
...PCDLoaderMetadataWithoutPreload,
|
|
38
|
+
parse: async (arrayBuffer, options) => convertPCDMesh((0, import_parse_pcd.parsePCD)(arrayBuffer, options), options),
|
|
39
|
+
parseSync: (arrayBuffer, options) => convertPCDMesh((0, import_parse_pcd.parsePCD)(arrayBuffer, options), options),
|
|
40
|
+
parseInBatches: async function* (arrayBuffer, options) {
|
|
41
|
+
const batchSize = getNumericBatchSize(options);
|
|
42
|
+
const data = await (0, import_loader_utils.concatenateArrayBuffersAsync)(arrayBuffer);
|
|
43
|
+
const textData = new TextDecoder().decode(data);
|
|
44
|
+
const pcdHeader = (0, import_parse_pcd.parsePCDHeader)(textData);
|
|
45
|
+
if (pcdHeader.data === "ascii") {
|
|
46
|
+
yield* parsePCDASCIIInBatches(data, options, batchSize);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (pcdHeader.data === "binary") {
|
|
50
|
+
yield* parsePCDBinaryInBatches(data, options, batchSize);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
yield makePCDBatch((0, import_parse_pcd.parsePCD)(data, options), options);
|
|
54
|
+
},
|
|
55
|
+
serializeWorkerResult: import_arrow_transport.serializeArrowWorkerTable,
|
|
56
|
+
deserializeWorkerResult: deserializePCDWorkerResult,
|
|
57
|
+
serializeWorkerBatch: import_arrow_transport.serializeArrowWorkerTable,
|
|
58
|
+
deserializeWorkerBatch: deserializePCDWorkerBatch
|
|
59
|
+
};
|
|
60
|
+
function getNumericBatchSize(options) {
|
|
61
|
+
const batchSize = options?.batchSize ?? options?.core?.batchSize;
|
|
62
|
+
return typeof batchSize === "number" ? batchSize : void 0;
|
|
63
|
+
}
|
|
64
|
+
function* parsePCDASCIIInBatches(data, options, batchSize) {
|
|
65
|
+
const textData = new TextDecoder().decode(data);
|
|
66
|
+
const pcdHeader = (0, import_parse_pcd.parsePCDHeader)(textData);
|
|
67
|
+
const lines = textData.slice(pcdHeader.headerLen).split(/\r?\n/).filter((line) => line.trim().length > 0);
|
|
68
|
+
const normalizedBatchSize = batchSize || lines.length || 1;
|
|
69
|
+
for (let rowIndex = 0; rowIndex < lines.length; rowIndex += normalizedBatchSize) {
|
|
70
|
+
const batchLines = lines.slice(rowIndex, rowIndex + normalizedBatchSize);
|
|
71
|
+
const batchText = `${makePCDHeaderText(pcdHeader, batchLines.length)}${batchLines.join("\n")}
|
|
72
|
+
`;
|
|
73
|
+
yield makePCDBatch((0, import_parse_pcd.parsePCD)(new TextEncoder().encode(batchText).buffer, options), options);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function* parsePCDBinaryInBatches(data, options, batchSize) {
|
|
77
|
+
const textData = new TextDecoder().decode(data);
|
|
78
|
+
const pcdHeader = (0, import_parse_pcd.parsePCDHeader)(textData);
|
|
79
|
+
const normalizedBatchSize = batchSize || pcdHeader.points || 1;
|
|
80
|
+
const dataBytes = new Uint8Array(data);
|
|
81
|
+
for (let pointIndex = 0; pointIndex < pcdHeader.points; pointIndex += normalizedBatchSize) {
|
|
82
|
+
const pointCount = Math.min(normalizedBatchSize, pcdHeader.points - pointIndex);
|
|
83
|
+
const headerBytes = new TextEncoder().encode(makePCDHeaderText(pcdHeader, pointCount));
|
|
84
|
+
const rowByteOffset = pcdHeader.headerLen + pointIndex * pcdHeader.rowSize;
|
|
85
|
+
const rowByteLength = pointCount * pcdHeader.rowSize;
|
|
86
|
+
const batchBytes = new Uint8Array(headerBytes.length + rowByteLength);
|
|
87
|
+
batchBytes.set(headerBytes, 0);
|
|
88
|
+
batchBytes.set(
|
|
89
|
+
dataBytes.subarray(rowByteOffset, rowByteOffset + rowByteLength),
|
|
90
|
+
headerBytes.length
|
|
91
|
+
);
|
|
92
|
+
yield makePCDBatch((0, import_parse_pcd.parsePCD)(batchBytes.buffer, options), options);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function makePCDBatch(mesh, options) {
|
|
96
|
+
const table = (0, import_schema_utils.convertMeshToTable)(mesh, "arrow-table");
|
|
97
|
+
if (options?.pcd?.shape === "mesh") {
|
|
98
|
+
return convertPCDTableToMesh(table, mesh);
|
|
99
|
+
}
|
|
100
|
+
return (0, import_loader_utils.makeTableScanBatch)({
|
|
101
|
+
...table,
|
|
102
|
+
loader: mesh.loader,
|
|
103
|
+
loaderData: mesh.loaderData
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
function convertPCDTableToMesh(table, sourceMesh) {
|
|
107
|
+
return {
|
|
108
|
+
...(0, import_schema_utils.convertTableToMesh)(table),
|
|
109
|
+
loader: sourceMesh.loader,
|
|
110
|
+
loaderData: sourceMesh.loaderData
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function makePCDHeaderText(pcdHeader, pointCount) {
|
|
114
|
+
const lines = pcdHeader.str.split(/\r?\n/).filter((line) => line.trim().length > 0).map((line) => {
|
|
115
|
+
if (/^WIDTH\s+/i.test(line)) {
|
|
116
|
+
return `WIDTH ${pointCount}`;
|
|
117
|
+
}
|
|
118
|
+
if (/^HEIGHT\s+/i.test(line)) {
|
|
119
|
+
return "HEIGHT 1";
|
|
120
|
+
}
|
|
121
|
+
if (/^POINTS\s+/i.test(line)) {
|
|
122
|
+
return `POINTS ${pointCount}`;
|
|
123
|
+
}
|
|
124
|
+
return line;
|
|
125
|
+
});
|
|
126
|
+
if (!lines.some((line) => /^POINTS\s+/i.test(line))) {
|
|
127
|
+
const dataLineIndex = lines.findIndex((line) => /^DATA\s+/i.test(line));
|
|
128
|
+
lines.splice(dataLineIndex >= 0 ? dataLineIndex : lines.length, 0, `POINTS ${pointCount}`);
|
|
129
|
+
}
|
|
130
|
+
return `${lines.join("\n")}
|
|
131
|
+
`;
|
|
132
|
+
}
|
|
133
|
+
function deserializePCDWorkerResult(result, options) {
|
|
134
|
+
const table = (0, import_arrow_transport.deserializeArrowWorkerTable)(result);
|
|
135
|
+
return options?.pcd?.shape === "mesh" ? convertPCDTableToMesh(table, table) : table;
|
|
136
|
+
}
|
|
137
|
+
function deserializePCDWorkerBatch(result, options) {
|
|
138
|
+
return deserializePCDWorkerResult(result, options);
|
|
139
|
+
}
|
|
140
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
141
|
+
0 && (module.exports = {
|
|
142
|
+
PCDLoaderWithParser
|
|
143
|
+
});
|
|
144
|
+
//# sourceMappingURL=pcd-loader.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/pcd/pcd-loader.ts"],
|
|
4
|
+
"sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {PCDLoaderOptions} from './pcd-loader-types';\n\nimport {\n concatenateArrayBuffersAsync,\n makeTableScanBatch,\n type LoaderWithParser\n} from '@loaders.gl/core/loader-utils';\nimport type {ArrowTableBatch, MeshArrowTable} from '@loaders.gl/core/schema';\nimport {\n deserializeArrowWorkerTable,\n serializeArrowWorkerTable\n} from '@loaders.gl/core/schema-utils/arrow-transport';\nimport {convertMeshToTable, convertTableToMesh} from '@loaders.gl/core/schema-utils';\nimport type {PCDMesh} from './lib/pcd-types';\nimport {parsePCD, parsePCDHeader} from './lib/parse-pcd';\nimport {PCDLoader as PCDLoaderMetadata} from './pcd-loader-types';\n\nconst {preload: _PCDLoaderPreload, ...PCDLoaderMetadataWithoutPreload} = PCDLoaderMetadata;\n\ntype PCDParsedBatch = PCDMesh | ArrowTableBatch;\n\nfunction convertPCDMesh(mesh: PCDMesh, options?: PCDLoaderOptions): PCDMesh | MeshArrowTable {\n const table = convertMeshToTable(mesh, 'arrow-table');\n return options?.pcd?.shape === 'mesh'\n ? convertPCDTableToMesh(table, mesh)\n : {...table, loader: mesh.loader, loaderData: mesh.loaderData};\n}\n\n/**\n * Loader for PCD - Point Cloud Data\n */\nexport const PCDLoaderWithParser = {\n ...PCDLoaderMetadataWithoutPreload,\n parse: async (arrayBuffer, options) => convertPCDMesh(parsePCD(arrayBuffer, options), options),\n parseSync: (arrayBuffer, options) => convertPCDMesh(parsePCD(arrayBuffer, options), options),\n parseInBatches: async function* (\n arrayBuffer:\n | AsyncIterable<ArrayBufferLike | ArrayBufferView>\n | Iterable<ArrayBufferLike | ArrayBufferView>,\n options\n ): AsyncIterable<PCDParsedBatch> {\n const batchSize = getNumericBatchSize(options);\n const data = await concatenateArrayBuffersAsync(arrayBuffer);\n const textData = new TextDecoder().decode(data);\n const pcdHeader = parsePCDHeader(textData);\n\n if (pcdHeader.data === 'ascii') {\n yield* parsePCDASCIIInBatches(data, options, batchSize);\n return;\n }\n\n if (pcdHeader.data === 'binary') {\n yield* parsePCDBinaryInBatches(data, options, batchSize);\n return;\n }\n\n yield makePCDBatch(parsePCD(data, options), options);\n },\n serializeWorkerResult: serializeArrowWorkerTable,\n deserializeWorkerResult: deserializePCDWorkerResult,\n serializeWorkerBatch: serializeArrowWorkerTable,\n deserializeWorkerBatch: deserializePCDWorkerBatch\n} as const satisfies LoaderWithParser<PCDMesh | MeshArrowTable, PCDParsedBatch, PCDLoaderOptions>;\n\n/** Returns a numeric batch size when batching has an explicit row count. */\nfunction getNumericBatchSize(options?: PCDLoaderOptions): number | undefined {\n const batchSize = options?.batchSize ?? options?.core?.batchSize;\n return typeof batchSize === 'number' ? batchSize : undefined;\n}\n\nfunction* parsePCDASCIIInBatches(\n data: ArrayBuffer,\n options?: PCDLoaderOptions,\n batchSize?: number\n): Iterable<PCDParsedBatch> {\n const textData = new TextDecoder().decode(data);\n const pcdHeader = parsePCDHeader(textData);\n const lines = textData\n .slice(pcdHeader.headerLen)\n .split(/\\r?\\n/)\n .filter(line => line.trim().length > 0);\n const normalizedBatchSize = batchSize || lines.length || 1;\n\n for (let rowIndex = 0; rowIndex < lines.length; rowIndex += normalizedBatchSize) {\n const batchLines = lines.slice(rowIndex, rowIndex + normalizedBatchSize);\n const batchText = `${makePCDHeaderText(pcdHeader, batchLines.length)}${batchLines.join('\\n')}\\n`;\n yield makePCDBatch(parsePCD(new TextEncoder().encode(batchText).buffer, options), options);\n }\n}\n\nfunction* parsePCDBinaryInBatches(\n data: ArrayBuffer,\n options?: PCDLoaderOptions,\n batchSize?: number\n): Iterable<PCDParsedBatch> {\n const textData = new TextDecoder().decode(data);\n const pcdHeader = parsePCDHeader(textData);\n const normalizedBatchSize = batchSize || pcdHeader.points || 1;\n const dataBytes = new Uint8Array(data);\n\n for (let pointIndex = 0; pointIndex < pcdHeader.points; pointIndex += normalizedBatchSize) {\n const pointCount = Math.min(normalizedBatchSize, pcdHeader.points - pointIndex);\n const headerBytes = new TextEncoder().encode(makePCDHeaderText(pcdHeader, pointCount));\n const rowByteOffset = pcdHeader.headerLen + pointIndex * pcdHeader.rowSize;\n const rowByteLength = pointCount * pcdHeader.rowSize;\n const batchBytes = new Uint8Array(headerBytes.length + rowByteLength);\n batchBytes.set(headerBytes, 0);\n batchBytes.set(\n dataBytes.subarray(rowByteOffset, rowByteOffset + rowByteLength),\n headerBytes.length\n );\n yield makePCDBatch(parsePCD(batchBytes.buffer, options), options);\n }\n}\n\nfunction makePCDBatch(mesh: PCDMesh, options?: PCDLoaderOptions): PCDParsedBatch {\n const table = convertMeshToTable(mesh, 'arrow-table');\n if (options?.pcd?.shape === 'mesh') {\n return convertPCDTableToMesh(table, mesh);\n }\n\n return makeTableScanBatch({\n ...table,\n loader: mesh.loader,\n loaderData: mesh.loaderData\n } as MeshArrowTable);\n}\n\n/** Convert the parser's Arrow table to legacy PCD mesh output. */\nfunction convertPCDTableToMesh(table: MeshArrowTable, sourceMesh: PCDMesh): PCDMesh {\n return {\n ...(convertTableToMesh(table) as PCDMesh),\n loader: sourceMesh.loader,\n loaderData: sourceMesh.loaderData\n };\n}\n\nfunction makePCDHeaderText(pcdHeader: any, pointCount: number): string {\n const lines = pcdHeader.str\n .split(/\\r?\\n/)\n .filter(line => line.trim().length > 0)\n .map(line => {\n if (/^WIDTH\\s+/i.test(line)) {\n return `WIDTH ${pointCount}`;\n }\n if (/^HEIGHT\\s+/i.test(line)) {\n return 'HEIGHT 1';\n }\n if (/^POINTS\\s+/i.test(line)) {\n return `POINTS ${pointCount}`;\n }\n return line;\n });\n\n if (!lines.some(line => /^POINTS\\s+/i.test(line))) {\n const dataLineIndex = lines.findIndex(line => /^DATA\\s+/i.test(line));\n lines.splice(dataLineIndex >= 0 ? dataLineIndex : lines.length, 0, `POINTS ${pointCount}`);\n }\n\n return `${lines.join('\\n')}\\n`;\n}\n\n/** Hydrates worker columns before reconstructing legacy PCD meshes on the caller. */\nfunction deserializePCDWorkerResult(\n result: unknown,\n options?: PCDLoaderOptions\n): PCDMesh | MeshArrowTable {\n const table = deserializeArrowWorkerTable(result);\n return options?.pcd?.shape === 'mesh' ? convertPCDTableToMesh(table, table) : table;\n}\n\n/** Restores the existing PCD batch shape after caller-side hydration. */\nfunction deserializePCDWorkerBatch(result: unknown, options?: PCDLoaderOptions): PCDParsedBatch {\n return deserializePCDWorkerResult(result, options) as PCDParsedBatch;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["PCDLoaderMetadata"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { PCDLoaderOptions } from "./pcd-loader-types.js";
|
|
2
|
+
import type { ArrowTableBatch, MeshArrowTable } from '@loaders.gl/core/schema';
|
|
3
|
+
import { serializeArrowWorkerTable } from '@loaders.gl/core/schema-utils/arrow-transport';
|
|
4
|
+
import type { PCDMesh } from "./lib/pcd-types.js";
|
|
5
|
+
type PCDParsedBatch = PCDMesh | ArrowTableBatch;
|
|
6
|
+
/**
|
|
7
|
+
* Loader for PCD - Point Cloud Data
|
|
8
|
+
*/
|
|
9
|
+
export declare const PCDLoaderWithParser: {
|
|
10
|
+
readonly parse: (arrayBuffer: ArrayBuffer, options: PCDLoaderOptions | undefined) => Promise<MeshArrowTable | PCDMesh>;
|
|
11
|
+
readonly parseSync: (arrayBuffer: ArrayBuffer, options: PCDLoaderOptions | undefined) => MeshArrowTable | PCDMesh;
|
|
12
|
+
readonly parseInBatches: (arrayBuffer: AsyncIterable<ArrayBufferLike | ArrayBufferView> | Iterable<ArrayBufferLike | ArrayBufferView>, options: PCDLoaderOptions | undefined) => AsyncIterable<PCDParsedBatch>;
|
|
13
|
+
readonly serializeWorkerResult: typeof serializeArrowWorkerTable;
|
|
14
|
+
readonly deserializeWorkerResult: typeof deserializePCDWorkerResult;
|
|
15
|
+
readonly serializeWorkerBatch: typeof serializeArrowWorkerTable;
|
|
16
|
+
readonly deserializeWorkerBatch: typeof deserializePCDWorkerBatch;
|
|
17
|
+
readonly dataType: PCDMesh | MeshArrowTable;
|
|
18
|
+
readonly batchType: PCDMesh | ArrowTableBatch;
|
|
19
|
+
readonly version: any;
|
|
20
|
+
readonly worker: true;
|
|
21
|
+
readonly workerInBatches: true;
|
|
22
|
+
readonly options: {
|
|
23
|
+
readonly pcd: {
|
|
24
|
+
readonly shape: "arrow-table";
|
|
25
|
+
readonly colorFormat: "uint8norm";
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
readonly name: "PCD (Point Cloud Data)";
|
|
29
|
+
readonly id: "pcd";
|
|
30
|
+
readonly module: "pointclouds";
|
|
31
|
+
readonly encoding: "text";
|
|
32
|
+
readonly format: "pcd";
|
|
33
|
+
readonly extensions: ["pcd"];
|
|
34
|
+
readonly mimeTypes: ["text/plain"];
|
|
35
|
+
readonly category: "pointcloud";
|
|
36
|
+
readonly text: true;
|
|
37
|
+
readonly binary: true;
|
|
38
|
+
};
|
|
39
|
+
/** Hydrates worker columns before reconstructing legacy PCD meshes on the caller. */
|
|
40
|
+
declare function deserializePCDWorkerResult(result: unknown, options?: PCDLoaderOptions): PCDMesh | MeshArrowTable;
|
|
41
|
+
/** Restores the existing PCD batch shape after caller-side hydration. */
|
|
42
|
+
declare function deserializePCDWorkerBatch(result: unknown, options?: PCDLoaderOptions): PCDParsedBatch;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=pcd-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pcd-loader.d.ts","sourceRoot":"","sources":["../../src/pcd/pcd-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,gBAAgB,EAAC,8BAA2B;AAOzD,OAAO,KAAK,EAAC,eAAe,EAAE,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAEL,yBAAyB,EAC1B,MAAM,+CAA+C,CAAC;AAEvD,OAAO,KAAK,EAAC,OAAO,EAAC,2BAAwB;AAM7C,KAAK,cAAc,GAAG,OAAO,GAAG,eAAe,CAAC;AAShD;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;2CAMxB,aAAa,CAAC,eAAe,GAAG,eAAe,CAAC,GAChD,QAAQ,CAAC,eAAe,GAAG,eAAe,CAAC,4CAE9C,aAAa,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;CAsB+D,CAAC;AAoGlG,qFAAqF;AACrF,iBAAS,0BAA0B,CACjC,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,GAAG,cAAc,CAG1B;AAED,yEAAyE;AACzE,iBAAS,yBAAyB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,cAAc,CAE9F"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { concatenateArrayBuffersAsync, makeTableScanBatch } from '@loaders.gl/core/loader-utils';
|
|
5
|
+
import { deserializeArrowWorkerTable, serializeArrowWorkerTable } from '@loaders.gl/core/schema-utils/arrow-transport';
|
|
6
|
+
import { convertMeshToTable, convertTableToMesh } from '@loaders.gl/core/schema-utils';
|
|
7
|
+
import { parsePCD, parsePCDHeader } from "./lib/parse-pcd.js";
|
|
8
|
+
import { PCDLoader as PCDLoaderMetadata } from "./pcd-loader-types.js";
|
|
9
|
+
const { preload: _PCDLoaderPreload, ...PCDLoaderMetadataWithoutPreload } = PCDLoaderMetadata;
|
|
10
|
+
function convertPCDMesh(mesh, options) {
|
|
11
|
+
const table = convertMeshToTable(mesh, 'arrow-table');
|
|
12
|
+
return options?.pcd?.shape === 'mesh'
|
|
13
|
+
? convertPCDTableToMesh(table, mesh)
|
|
14
|
+
: { ...table, loader: mesh.loader, loaderData: mesh.loaderData };
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Loader for PCD - Point Cloud Data
|
|
18
|
+
*/
|
|
19
|
+
export const PCDLoaderWithParser = {
|
|
20
|
+
...PCDLoaderMetadataWithoutPreload,
|
|
21
|
+
parse: async (arrayBuffer, options) => convertPCDMesh(parsePCD(arrayBuffer, options), options),
|
|
22
|
+
parseSync: (arrayBuffer, options) => convertPCDMesh(parsePCD(arrayBuffer, options), options),
|
|
23
|
+
parseInBatches: async function* (arrayBuffer, options) {
|
|
24
|
+
const batchSize = getNumericBatchSize(options);
|
|
25
|
+
const data = await concatenateArrayBuffersAsync(arrayBuffer);
|
|
26
|
+
const textData = new TextDecoder().decode(data);
|
|
27
|
+
const pcdHeader = parsePCDHeader(textData);
|
|
28
|
+
if (pcdHeader.data === 'ascii') {
|
|
29
|
+
yield* parsePCDASCIIInBatches(data, options, batchSize);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (pcdHeader.data === 'binary') {
|
|
33
|
+
yield* parsePCDBinaryInBatches(data, options, batchSize);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
yield makePCDBatch(parsePCD(data, options), options);
|
|
37
|
+
},
|
|
38
|
+
serializeWorkerResult: serializeArrowWorkerTable,
|
|
39
|
+
deserializeWorkerResult: deserializePCDWorkerResult,
|
|
40
|
+
serializeWorkerBatch: serializeArrowWorkerTable,
|
|
41
|
+
deserializeWorkerBatch: deserializePCDWorkerBatch
|
|
42
|
+
};
|
|
43
|
+
/** Returns a numeric batch size when batching has an explicit row count. */
|
|
44
|
+
function getNumericBatchSize(options) {
|
|
45
|
+
const batchSize = options?.batchSize ?? options?.core?.batchSize;
|
|
46
|
+
return typeof batchSize === 'number' ? batchSize : undefined;
|
|
47
|
+
}
|
|
48
|
+
function* parsePCDASCIIInBatches(data, options, batchSize) {
|
|
49
|
+
const textData = new TextDecoder().decode(data);
|
|
50
|
+
const pcdHeader = parsePCDHeader(textData);
|
|
51
|
+
const lines = textData
|
|
52
|
+
.slice(pcdHeader.headerLen)
|
|
53
|
+
.split(/\r?\n/)
|
|
54
|
+
.filter(line => line.trim().length > 0);
|
|
55
|
+
const normalizedBatchSize = batchSize || lines.length || 1;
|
|
56
|
+
for (let rowIndex = 0; rowIndex < lines.length; rowIndex += normalizedBatchSize) {
|
|
57
|
+
const batchLines = lines.slice(rowIndex, rowIndex + normalizedBatchSize);
|
|
58
|
+
const batchText = `${makePCDHeaderText(pcdHeader, batchLines.length)}${batchLines.join('\n')}\n`;
|
|
59
|
+
yield makePCDBatch(parsePCD(new TextEncoder().encode(batchText).buffer, options), options);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function* parsePCDBinaryInBatches(data, options, batchSize) {
|
|
63
|
+
const textData = new TextDecoder().decode(data);
|
|
64
|
+
const pcdHeader = parsePCDHeader(textData);
|
|
65
|
+
const normalizedBatchSize = batchSize || pcdHeader.points || 1;
|
|
66
|
+
const dataBytes = new Uint8Array(data);
|
|
67
|
+
for (let pointIndex = 0; pointIndex < pcdHeader.points; pointIndex += normalizedBatchSize) {
|
|
68
|
+
const pointCount = Math.min(normalizedBatchSize, pcdHeader.points - pointIndex);
|
|
69
|
+
const headerBytes = new TextEncoder().encode(makePCDHeaderText(pcdHeader, pointCount));
|
|
70
|
+
const rowByteOffset = pcdHeader.headerLen + pointIndex * pcdHeader.rowSize;
|
|
71
|
+
const rowByteLength = pointCount * pcdHeader.rowSize;
|
|
72
|
+
const batchBytes = new Uint8Array(headerBytes.length + rowByteLength);
|
|
73
|
+
batchBytes.set(headerBytes, 0);
|
|
74
|
+
batchBytes.set(dataBytes.subarray(rowByteOffset, rowByteOffset + rowByteLength), headerBytes.length);
|
|
75
|
+
yield makePCDBatch(parsePCD(batchBytes.buffer, options), options);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function makePCDBatch(mesh, options) {
|
|
79
|
+
const table = convertMeshToTable(mesh, 'arrow-table');
|
|
80
|
+
if (options?.pcd?.shape === 'mesh') {
|
|
81
|
+
return convertPCDTableToMesh(table, mesh);
|
|
82
|
+
}
|
|
83
|
+
return makeTableScanBatch({
|
|
84
|
+
...table,
|
|
85
|
+
loader: mesh.loader,
|
|
86
|
+
loaderData: mesh.loaderData
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/** Convert the parser's Arrow table to legacy PCD mesh output. */
|
|
90
|
+
function convertPCDTableToMesh(table, sourceMesh) {
|
|
91
|
+
return {
|
|
92
|
+
...convertTableToMesh(table),
|
|
93
|
+
loader: sourceMesh.loader,
|
|
94
|
+
loaderData: sourceMesh.loaderData
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function makePCDHeaderText(pcdHeader, pointCount) {
|
|
98
|
+
const lines = pcdHeader.str
|
|
99
|
+
.split(/\r?\n/)
|
|
100
|
+
.filter(line => line.trim().length > 0)
|
|
101
|
+
.map(line => {
|
|
102
|
+
if (/^WIDTH\s+/i.test(line)) {
|
|
103
|
+
return `WIDTH ${pointCount}`;
|
|
104
|
+
}
|
|
105
|
+
if (/^HEIGHT\s+/i.test(line)) {
|
|
106
|
+
return 'HEIGHT 1';
|
|
107
|
+
}
|
|
108
|
+
if (/^POINTS\s+/i.test(line)) {
|
|
109
|
+
return `POINTS ${pointCount}`;
|
|
110
|
+
}
|
|
111
|
+
return line;
|
|
112
|
+
});
|
|
113
|
+
if (!lines.some(line => /^POINTS\s+/i.test(line))) {
|
|
114
|
+
const dataLineIndex = lines.findIndex(line => /^DATA\s+/i.test(line));
|
|
115
|
+
lines.splice(dataLineIndex >= 0 ? dataLineIndex : lines.length, 0, `POINTS ${pointCount}`);
|
|
116
|
+
}
|
|
117
|
+
return `${lines.join('\n')}\n`;
|
|
118
|
+
}
|
|
119
|
+
/** Hydrates worker columns before reconstructing legacy PCD meshes on the caller. */
|
|
120
|
+
function deserializePCDWorkerResult(result, options) {
|
|
121
|
+
const table = deserializeArrowWorkerTable(result);
|
|
122
|
+
return options?.pcd?.shape === 'mesh' ? convertPCDTableToMesh(table, table) : table;
|
|
123
|
+
}
|
|
124
|
+
/** Restores the existing PCD batch shape after caller-side hydration. */
|
|
125
|
+
function deserializePCDWorkerBatch(result, options) {
|
|
126
|
+
return deserializePCDWorkerResult(result, options);
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=pcd-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pcd-loader.js","sourceRoot":"","sources":["../../src/pcd/pcd-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/pcd/pcd-writer.ts
|
|
21
|
+
var pcd_writer_exports = {};
|
|
22
|
+
__export(pcd_writer_exports, {
|
|
23
|
+
PCDWriter: () => PCDWriter
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(pcd_writer_exports);
|
|
26
|
+
var import_schema_utils = require("@loaders.gl/core/schema-utils");
|
|
27
|
+
var import_pcd_format = require("./pcd-format.cjs");
|
|
28
|
+
var VERSION = true ? "5.0.0-beta.1" : "latest";
|
|
29
|
+
var PCDWriter = {
|
|
30
|
+
...import_pcd_format.PCDFormat,
|
|
31
|
+
dataType: null,
|
|
32
|
+
batchType: null,
|
|
33
|
+
version: VERSION,
|
|
34
|
+
options: {
|
|
35
|
+
pcd: {}
|
|
36
|
+
},
|
|
37
|
+
text: true,
|
|
38
|
+
encode: async (data, options) => encodePCDSync(data, options),
|
|
39
|
+
encodeSync: encodePCDSync,
|
|
40
|
+
encodeTextSync: encodePCD
|
|
41
|
+
};
|
|
42
|
+
function encodePCDSync(data, options) {
|
|
43
|
+
const text = encodePCD(data, options);
|
|
44
|
+
return new TextEncoder().encode(text).buffer;
|
|
45
|
+
}
|
|
46
|
+
function encodePCD(data, options) {
|
|
47
|
+
const mesh = (0, import_schema_utils.convertTableToMesh)(normalizeMeshArrowTable(data));
|
|
48
|
+
const positionAttribute = getRequiredAttribute(mesh, "POSITION");
|
|
49
|
+
const normalAttribute = mesh.attributes.NORMAL;
|
|
50
|
+
const colorAttribute = mesh.attributes.COLOR_0;
|
|
51
|
+
const vertexCount = positionAttribute.value.length / positionAttribute.size;
|
|
52
|
+
const fieldNames = ["x", "y", "z"];
|
|
53
|
+
const fieldSizes = ["4", "4", "4"];
|
|
54
|
+
const fieldTypes = ["F", "F", "F"];
|
|
55
|
+
const fieldCounts = ["1", "1", "1"];
|
|
56
|
+
if (normalAttribute) {
|
|
57
|
+
fieldNames.push("normal_x", "normal_y", "normal_z");
|
|
58
|
+
fieldSizes.push("4", "4", "4");
|
|
59
|
+
fieldTypes.push("F", "F", "F");
|
|
60
|
+
fieldCounts.push("1", "1", "1");
|
|
61
|
+
}
|
|
62
|
+
if (colorAttribute) {
|
|
63
|
+
fieldNames.push("rgb");
|
|
64
|
+
fieldSizes.push("4");
|
|
65
|
+
fieldTypes.push("F");
|
|
66
|
+
fieldCounts.push("1");
|
|
67
|
+
}
|
|
68
|
+
const lines = [
|
|
69
|
+
"# .PCD v0.7 - Point Cloud Data file generated by loaders.gl",
|
|
70
|
+
"VERSION 0.7",
|
|
71
|
+
`FIELDS ${fieldNames.join(" ")}`,
|
|
72
|
+
`SIZE ${fieldSizes.join(" ")}`,
|
|
73
|
+
`TYPE ${fieldTypes.join(" ")}`,
|
|
74
|
+
`COUNT ${fieldCounts.join(" ")}`,
|
|
75
|
+
`WIDTH ${vertexCount}`,
|
|
76
|
+
"HEIGHT 1",
|
|
77
|
+
"VIEWPOINT 0 0 0 1 0 0 0",
|
|
78
|
+
`POINTS ${vertexCount}`,
|
|
79
|
+
"DATA ascii"
|
|
80
|
+
];
|
|
81
|
+
for (let vertexIndex = 0; vertexIndex < vertexCount; vertexIndex++) {
|
|
82
|
+
const row = [
|
|
83
|
+
getComponent(positionAttribute, vertexIndex, 0),
|
|
84
|
+
getComponent(positionAttribute, vertexIndex, 1),
|
|
85
|
+
getComponent(positionAttribute, vertexIndex, 2)
|
|
86
|
+
];
|
|
87
|
+
if (normalAttribute) {
|
|
88
|
+
row.push(
|
|
89
|
+
getComponent(normalAttribute, vertexIndex, 0),
|
|
90
|
+
getComponent(normalAttribute, vertexIndex, 1),
|
|
91
|
+
getComponent(normalAttribute, vertexIndex, 2)
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
if (colorAttribute) {
|
|
95
|
+
row.push(getPackedRGB(colorAttribute, vertexIndex));
|
|
96
|
+
}
|
|
97
|
+
lines.push(row.join(" "));
|
|
98
|
+
}
|
|
99
|
+
return `${lines.join("\n")}
|
|
100
|
+
`;
|
|
101
|
+
}
|
|
102
|
+
function normalizeMeshArrowTable(data) {
|
|
103
|
+
if ("shape" in data && data.shape === "arrow-table") {
|
|
104
|
+
return data;
|
|
105
|
+
}
|
|
106
|
+
return (0, import_schema_utils.convertMeshToTable)(data, "arrow-table");
|
|
107
|
+
}
|
|
108
|
+
function getRequiredAttribute(mesh, attributeName) {
|
|
109
|
+
const attribute = mesh.attributes[attributeName];
|
|
110
|
+
if (!attribute) {
|
|
111
|
+
throw new Error(`PCDWriter: ${attributeName} attribute is required`);
|
|
112
|
+
}
|
|
113
|
+
return attribute;
|
|
114
|
+
}
|
|
115
|
+
function getComponent(attribute, vertexIndex, componentIndex) {
|
|
116
|
+
return attribute.value[vertexIndex * attribute.size + componentIndex] || 0;
|
|
117
|
+
}
|
|
118
|
+
function getPackedRGB(attribute, vertexIndex) {
|
|
119
|
+
const bytes = new Uint8Array(4);
|
|
120
|
+
bytes[0] = getColorByte(attribute, vertexIndex, 0);
|
|
121
|
+
bytes[1] = getColorByte(attribute, vertexIndex, 1);
|
|
122
|
+
bytes[2] = getColorByte(attribute, vertexIndex, 2);
|
|
123
|
+
return new DataView(bytes.buffer).getFloat32(0, true);
|
|
124
|
+
}
|
|
125
|
+
function getColorByte(attribute, vertexIndex, componentIndex) {
|
|
126
|
+
const value = getComponent(attribute, vertexIndex, componentIndex);
|
|
127
|
+
const byteValue = attribute.normalized || value <= 1 ? value * 255 : value;
|
|
128
|
+
return Math.max(0, Math.min(255, Math.round(byteValue)));
|
|
129
|
+
}
|
|
130
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
131
|
+
0 && (module.exports = {
|
|
132
|
+
PCDWriter
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=pcd-writer.cjs.map
|