@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,493 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { getMeshBoundingBox } from '@loaders.gl/core/schema-utils';
|
|
5
|
+
import * as arrow from 'apache-arrow';
|
|
6
|
+
import { parsePLYHeader } from "./parse-ply.js";
|
|
7
|
+
import { getPLYSchema } from "./get-ply-schema.js";
|
|
8
|
+
const PLY_END_HEADER_PATTERN = /end_header\s/;
|
|
9
|
+
/** Parse a full PLY payload into raw Arrow element tables. */
|
|
10
|
+
export function parsePLYToElementTables(data, options = {}) {
|
|
11
|
+
const header = parsePLYHeader(data, options);
|
|
12
|
+
const parseHeader = options.pointCloud ? getPointCloudPLYHeader(header) : header;
|
|
13
|
+
if (header.format === 'ascii') {
|
|
14
|
+
const text = data instanceof ArrayBuffer ? new TextDecoder().decode(data) : data;
|
|
15
|
+
return parseASCIIPLYToElementTables(text, parseHeader);
|
|
16
|
+
}
|
|
17
|
+
if (!(data instanceof ArrayBuffer)) {
|
|
18
|
+
throw new Error('Binary PLY parsing requires an ArrayBuffer.');
|
|
19
|
+
}
|
|
20
|
+
return parseBinaryPLYToElementTables(data, parseHeader);
|
|
21
|
+
}
|
|
22
|
+
/** Convert raw PLY element tables into the public Mesh Arrow table shape. */
|
|
23
|
+
export function convertPLYElementTablesToMeshArrowTable(elementTables) {
|
|
24
|
+
const mesh = convertPLYElementTablesToMesh(elementTables);
|
|
25
|
+
return convertPLYMeshToArrowTable(mesh);
|
|
26
|
+
}
|
|
27
|
+
/** Convert raw PLY element tables into the legacy Mesh shape. */
|
|
28
|
+
export function convertPLYElementTablesToMesh(elementTables) {
|
|
29
|
+
const attributes = getMeshAttributesFromPLYElementTables(elementTables);
|
|
30
|
+
const indices = getMeshIndicesFromPLYElementTables(elementTables);
|
|
31
|
+
const boundingBox = getMeshBoundingBox(attributes);
|
|
32
|
+
const vertexCount = attributes.POSITION?.value.length ? attributes.POSITION.value.length / 3 : 0;
|
|
33
|
+
const isTriangles = Boolean(indices?.value.length);
|
|
34
|
+
const mode = isTriangles ? 4 : 0;
|
|
35
|
+
const topology = isTriangles ? 'triangle-list' : 'point-list';
|
|
36
|
+
const schema = getPLYSchema(elementTables.header, attributes);
|
|
37
|
+
return {
|
|
38
|
+
loader: 'ply',
|
|
39
|
+
loaderData: elementTables.header,
|
|
40
|
+
header: {
|
|
41
|
+
vertexCount,
|
|
42
|
+
boundingBox: boundingBox ?? undefined
|
|
43
|
+
},
|
|
44
|
+
schema,
|
|
45
|
+
attributes,
|
|
46
|
+
indices: indices || { value: new Uint32Array(0), size: 0 },
|
|
47
|
+
mode,
|
|
48
|
+
topology
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** Parse an ASCII PLY payload into raw Arrow element tables. */
|
|
52
|
+
function parseASCIIPLYToElementTables(data, header) {
|
|
53
|
+
const collector = createElementTablesCollector(header);
|
|
54
|
+
const body = getPLYTextBody(data);
|
|
55
|
+
const lines = body.split('\n');
|
|
56
|
+
let elementIndex = 0;
|
|
57
|
+
let elementRowIndex = 0;
|
|
58
|
+
for (const sourceLine of lines) {
|
|
59
|
+
const line = sourceLine.trim();
|
|
60
|
+
if (line === '') {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
while (elementIndex < header.elements.length &&
|
|
64
|
+
elementRowIndex >= header.elements[elementIndex].count) {
|
|
65
|
+
elementIndex++;
|
|
66
|
+
elementRowIndex = 0;
|
|
67
|
+
}
|
|
68
|
+
if (elementIndex >= header.elements.length) {
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
appendASCIIElementRow(collector[elementIndex], line);
|
|
72
|
+
elementRowIndex++;
|
|
73
|
+
}
|
|
74
|
+
return { header, elements: collector.map(makePLYElementTable) };
|
|
75
|
+
}
|
|
76
|
+
/** Parse a binary PLY payload into raw Arrow element tables. */
|
|
77
|
+
function parseBinaryPLYToElementTables(data, header) {
|
|
78
|
+
const collector = createElementTablesCollector(header);
|
|
79
|
+
const dataView = new DataView(data, header.headerLength || 0);
|
|
80
|
+
const littleEndian = header.format !== 'binary_big_endian';
|
|
81
|
+
let byteOffset = 0;
|
|
82
|
+
for (let elementIndex = 0; elementIndex < header.elements.length; elementIndex++) {
|
|
83
|
+
const element = header.elements[elementIndex];
|
|
84
|
+
for (let rowIndex = 0; rowIndex < element.count; rowIndex++) {
|
|
85
|
+
byteOffset += appendBinaryElementRow(collector[elementIndex], dataView, byteOffset, littleEndian);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return { header, elements: collector.map(makePLYElementTable) };
|
|
89
|
+
}
|
|
90
|
+
/** Return a vertex-only PLY header for point-cloud parsing. */
|
|
91
|
+
function getPointCloudPLYHeader(header) {
|
|
92
|
+
const vertexElement = header.elements[0];
|
|
93
|
+
if (vertexElement?.name !== 'vertex') {
|
|
94
|
+
throw new Error('PLY pointCloud parsing requires a leading vertex element');
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
...header,
|
|
98
|
+
elements: [vertexElement]
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/** Create mutable collectors for all PLY element properties. */
|
|
102
|
+
function createElementTablesCollector(header) {
|
|
103
|
+
return header.elements.map(element => ({
|
|
104
|
+
element,
|
|
105
|
+
properties: element.properties.map(property => ({
|
|
106
|
+
property,
|
|
107
|
+
values: [],
|
|
108
|
+
offsets: property.type === 'list' ? [0] : undefined
|
|
109
|
+
}))
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
/** Append one ASCII row to an element collector. */
|
|
113
|
+
function appendASCIIElementRow(collector, line) {
|
|
114
|
+
const values = line.split(/\s+/);
|
|
115
|
+
let valueIndex = 0;
|
|
116
|
+
for (const propertyCollector of collector.properties) {
|
|
117
|
+
const property = propertyCollector.property;
|
|
118
|
+
if (property.type === 'list') {
|
|
119
|
+
const count = parseASCIINumber(values[valueIndex++], property.countType);
|
|
120
|
+
for (let listIndex = 0; listIndex < count; listIndex++) {
|
|
121
|
+
propertyCollector.values.push(parseASCIINumber(values[valueIndex++], property.itemType));
|
|
122
|
+
}
|
|
123
|
+
propertyCollector.offsets.push(propertyCollector.values.length);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
propertyCollector.values.push(parseASCIINumber(values[valueIndex++], property.type));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/** Append one binary row to an element collector and return consumed bytes. */
|
|
131
|
+
function appendBinaryElementRow(collector, dataView, byteOffset, littleEndian) {
|
|
132
|
+
let localOffset = 0;
|
|
133
|
+
for (const propertyCollector of collector.properties) {
|
|
134
|
+
const property = propertyCollector.property;
|
|
135
|
+
if (property.type === 'list') {
|
|
136
|
+
const [count, countByteLength] = readBinaryNumber(dataView, byteOffset + localOffset, property.countType, littleEndian);
|
|
137
|
+
localOffset += countByteLength;
|
|
138
|
+
for (let listIndex = 0; listIndex < count; listIndex++) {
|
|
139
|
+
const [value, valueByteLength] = readBinaryNumber(dataView, byteOffset + localOffset, property.itemType, littleEndian);
|
|
140
|
+
propertyCollector.values.push(value);
|
|
141
|
+
localOffset += valueByteLength;
|
|
142
|
+
}
|
|
143
|
+
propertyCollector.offsets.push(propertyCollector.values.length);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
const [value, valueByteLength] = readBinaryNumber(dataView, byteOffset + localOffset, property.type, littleEndian);
|
|
147
|
+
propertyCollector.values.push(value);
|
|
148
|
+
localOffset += valueByteLength;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return localOffset;
|
|
152
|
+
}
|
|
153
|
+
/** Convert one element collector into an Arrow table. */
|
|
154
|
+
function makePLYElementTable(collector) {
|
|
155
|
+
const fields = [];
|
|
156
|
+
const columns = {};
|
|
157
|
+
for (const propertyCollector of collector.properties) {
|
|
158
|
+
const column = makePLYPropertyVector(propertyCollector);
|
|
159
|
+
columns[propertyCollector.property.name] = column;
|
|
160
|
+
fields.push(new arrow.Field(propertyCollector.property.name, column.type, false));
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
element: collector.element,
|
|
164
|
+
table: new arrow.Table(new arrow.Schema(fields), columns)
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/** Return a raw Arrow vector for one PLY property. */
|
|
168
|
+
function makePLYPropertyVector(collector) {
|
|
169
|
+
const property = collector.property;
|
|
170
|
+
if (property.type === 'list') {
|
|
171
|
+
return makeListVector(property.itemType, collector.values, Int32Array.from(collector.offsets || [0]));
|
|
172
|
+
}
|
|
173
|
+
return arrow.makeVector(getTypedArray(collector.values, property.type));
|
|
174
|
+
}
|
|
175
|
+
/** Return the Mesh attributes represented by the PLY vertex table. */
|
|
176
|
+
function getMeshAttributesFromPLYElementTables(elementTables) {
|
|
177
|
+
const vertexTable = getPLYElementTable(elementTables, 'vertex');
|
|
178
|
+
const attributes = {};
|
|
179
|
+
if (!vertexTable) {
|
|
180
|
+
return attributes;
|
|
181
|
+
}
|
|
182
|
+
const position = makeFixedSizeListAttribute(vertexTable.table, ['x', 'y', 'z'], 'float');
|
|
183
|
+
if (position) {
|
|
184
|
+
attributes.POSITION = position;
|
|
185
|
+
}
|
|
186
|
+
const normal = makeFixedSizeListAttribute(vertexTable.table, ['nx', 'ny', 'nz'], 'float');
|
|
187
|
+
if (normal) {
|
|
188
|
+
attributes.NORMAL = normal;
|
|
189
|
+
}
|
|
190
|
+
const textureCoordinates = makeFixedSizeListAttribute(vertexTable.table, ['s', 't'], 'float');
|
|
191
|
+
if (textureCoordinates) {
|
|
192
|
+
attributes.TEXCOORD_0 = textureCoordinates;
|
|
193
|
+
}
|
|
194
|
+
const color = makeFixedSizeListAttribute(vertexTable.table, ['red', 'green', 'blue'], 'uchar');
|
|
195
|
+
if (color) {
|
|
196
|
+
attributes.COLOR_0 = { ...color, normalized: true };
|
|
197
|
+
}
|
|
198
|
+
const packedPropertyNames = new Set([
|
|
199
|
+
'x',
|
|
200
|
+
'y',
|
|
201
|
+
'z',
|
|
202
|
+
'nx',
|
|
203
|
+
'ny',
|
|
204
|
+
'nz',
|
|
205
|
+
's',
|
|
206
|
+
't',
|
|
207
|
+
'red',
|
|
208
|
+
'green',
|
|
209
|
+
'blue'
|
|
210
|
+
]);
|
|
211
|
+
for (const property of vertexTable.element.properties) {
|
|
212
|
+
if (property.type === 'list' || packedPropertyNames.has(property.name)) {
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
const column = vertexTable.table.getChild(property.name);
|
|
216
|
+
if (column) {
|
|
217
|
+
attributes[property.name] = {
|
|
218
|
+
value: getVectorValues(column),
|
|
219
|
+
size: 1
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return attributes;
|
|
224
|
+
}
|
|
225
|
+
/** Return triangulated mesh indices represented by the face table. */
|
|
226
|
+
function getMeshIndicesFromPLYElementTables(elementTables) {
|
|
227
|
+
const faceTable = getPLYElementTable(elementTables, 'face');
|
|
228
|
+
const indicesColumn = faceTable?.table.getChild('vertex_indices') || faceTable?.table.getChild('vertex_index');
|
|
229
|
+
if (!indicesColumn) {
|
|
230
|
+
return undefined;
|
|
231
|
+
}
|
|
232
|
+
const indices = [];
|
|
233
|
+
for (let rowIndex = 0; rowIndex < indicesColumn.length; rowIndex++) {
|
|
234
|
+
const vertexIndices = indicesColumn.get(rowIndex);
|
|
235
|
+
if (!vertexIndices) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
if (vertexIndices.length === 3) {
|
|
239
|
+
indices.push(getArrayLikeValue(vertexIndices, 0), getArrayLikeValue(vertexIndices, 1), getArrayLikeValue(vertexIndices, 2));
|
|
240
|
+
}
|
|
241
|
+
else if (vertexIndices.length === 4) {
|
|
242
|
+
indices.push(getArrayLikeValue(vertexIndices, 0), getArrayLikeValue(vertexIndices, 1), getArrayLikeValue(vertexIndices, 3));
|
|
243
|
+
indices.push(getArrayLikeValue(vertexIndices, 1), getArrayLikeValue(vertexIndices, 2), getArrayLikeValue(vertexIndices, 3));
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return indices.length > 0 ? { value: new Uint32Array(indices), size: 1 } : undefined;
|
|
247
|
+
}
|
|
248
|
+
/** Return one value from an Array-like object or Arrow vector. */
|
|
249
|
+
function getArrayLikeValue(values, index) {
|
|
250
|
+
return 'get' in values && typeof values.get === 'function'
|
|
251
|
+
? Number(values.get(index))
|
|
252
|
+
: Number(values[index]);
|
|
253
|
+
}
|
|
254
|
+
/** Convert a Mesh into the public Mesh Arrow table shape. */
|
|
255
|
+
function convertPLYMeshToArrowTable(mesh) {
|
|
256
|
+
const fields = [];
|
|
257
|
+
const columns = {};
|
|
258
|
+
const attributeNames = getOrderedAttributeNames(mesh.attributes);
|
|
259
|
+
for (const attributeName of attributeNames) {
|
|
260
|
+
const attribute = mesh.attributes[attributeName];
|
|
261
|
+
const column = makeMeshAttributeVector(attribute);
|
|
262
|
+
columns[attributeName] = column;
|
|
263
|
+
fields.push(getMeshAttributeField(mesh, attributeName, column));
|
|
264
|
+
if (attributeName === 'POSITION' && mesh.indices?.value.length) {
|
|
265
|
+
const indicesColumn = makeMeshIndicesVector(mesh.indices.value, column.length);
|
|
266
|
+
columns.indices = indicesColumn;
|
|
267
|
+
fields.push(new arrow.Field('indices', indicesColumn.type, true));
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
const metadata = getArrowMetadata({
|
|
271
|
+
...mesh.schema.metadata,
|
|
272
|
+
topology: mesh.topology,
|
|
273
|
+
mode: String(mesh.mode),
|
|
274
|
+
boundingBox: mesh.header?.boundingBox ? JSON.stringify(mesh.header.boundingBox) : undefined
|
|
275
|
+
});
|
|
276
|
+
const arrowSchema = new arrow.Schema(fields, metadata);
|
|
277
|
+
return {
|
|
278
|
+
shape: 'arrow-table',
|
|
279
|
+
schema: mesh.schema,
|
|
280
|
+
data: new arrow.Table(arrowSchema, columns),
|
|
281
|
+
topology: mesh.topology,
|
|
282
|
+
indices: mesh.indices?.value.length ? mesh.indices : undefined
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
/** Return a mesh attribute vector. */
|
|
286
|
+
function makeMeshAttributeVector(attribute) {
|
|
287
|
+
const { value, size } = attribute;
|
|
288
|
+
if (size === 1) {
|
|
289
|
+
return arrow.makeVector(value);
|
|
290
|
+
}
|
|
291
|
+
const values = arrow.makeVector(value);
|
|
292
|
+
const child = values.data[0];
|
|
293
|
+
const type = new arrow.FixedSizeList(size, new arrow.Field('value', child.type, false));
|
|
294
|
+
const data = new arrow.Data(type, 0, value.length / size, 0, {}, [child]);
|
|
295
|
+
return new arrow.Vector([data]);
|
|
296
|
+
}
|
|
297
|
+
/** Return a Mesh Arrow field, preserving PLY schema field metadata where available. */
|
|
298
|
+
function getMeshAttributeField(mesh, attributeName, column) {
|
|
299
|
+
const field = mesh.schema.fields.find(schemaField => schemaField.name === attributeName);
|
|
300
|
+
return new arrow.Field(attributeName, column.type, false, getArrowMetadata(field?.metadata));
|
|
301
|
+
}
|
|
302
|
+
/** Return an IndexedMesh indices column with the full index list stored in row 0. */
|
|
303
|
+
function makeMeshIndicesVector(indices, vertexCount) {
|
|
304
|
+
const values = indices instanceof Uint32Array ? indices : Uint32Array.from(indices);
|
|
305
|
+
const valueOffsets = new Int32Array(vertexCount + 1);
|
|
306
|
+
if (vertexCount > 0) {
|
|
307
|
+
valueOffsets.fill(values.length, 1);
|
|
308
|
+
}
|
|
309
|
+
const nullBitmap = new Uint8Array(Math.ceil(vertexCount / 8));
|
|
310
|
+
if (vertexCount > 0) {
|
|
311
|
+
nullBitmap[0] = 1;
|
|
312
|
+
}
|
|
313
|
+
const type = new arrow.List(new arrow.Field('item', new arrow.Uint32(), false));
|
|
314
|
+
const valuesData = new arrow.Data(type.children[0].type, 0, values.length, 0, {
|
|
315
|
+
[arrow.BufferType.DATA]: values
|
|
316
|
+
});
|
|
317
|
+
const indicesData = new arrow.Data(type, 0, vertexCount, Math.max(0, vertexCount - 1), {
|
|
318
|
+
[arrow.BufferType.OFFSET]: valueOffsets,
|
|
319
|
+
[arrow.BufferType.VALIDITY]: nullBitmap
|
|
320
|
+
}, [valuesData]);
|
|
321
|
+
return new arrow.Vector([indicesData]);
|
|
322
|
+
}
|
|
323
|
+
/** Return a fixed-size list mesh attribute from separate scalar PLY columns. */
|
|
324
|
+
function makeFixedSizeListAttribute(table, columnNames, preferredType) {
|
|
325
|
+
const columns = columnNames.map(columnName => table.getChild(columnName));
|
|
326
|
+
if (columns.some(column => !column)) {
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
329
|
+
const rowCount = table.numRows;
|
|
330
|
+
const values = preferredType === 'uchar'
|
|
331
|
+
? new Uint8Array(rowCount * columnNames.length)
|
|
332
|
+
: new Float32Array(rowCount * columnNames.length);
|
|
333
|
+
for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
|
|
334
|
+
for (let componentIndex = 0; componentIndex < columns.length; componentIndex++) {
|
|
335
|
+
values[rowIndex * columns.length + componentIndex] = Number(columns[componentIndex].get(rowIndex) ?? 0);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
return { value: values, size: columnNames.length };
|
|
339
|
+
}
|
|
340
|
+
/** Return a PLY element table by name. */
|
|
341
|
+
function getPLYElementTable(elementTables, elementName) {
|
|
342
|
+
return elementTables.elements.find(elementTable => elementTable.element.name === elementName);
|
|
343
|
+
}
|
|
344
|
+
/** Return mesh attributes in stable public order. */
|
|
345
|
+
function getOrderedAttributeNames(attributes) {
|
|
346
|
+
const firstNames = ['POSITION', 'indices'];
|
|
347
|
+
return [
|
|
348
|
+
...firstNames.filter(attributeName => attributeName in attributes),
|
|
349
|
+
...Object.keys(attributes).filter(attributeName => !firstNames.includes(attributeName))
|
|
350
|
+
];
|
|
351
|
+
}
|
|
352
|
+
/** Return a vector's backing values. */
|
|
353
|
+
function getVectorValues(vector) {
|
|
354
|
+
const data = vector.data[0];
|
|
355
|
+
return data.values;
|
|
356
|
+
}
|
|
357
|
+
/** Return a PLY text body after the header terminator. */
|
|
358
|
+
function getPLYTextBody(data) {
|
|
359
|
+
const match = PLY_END_HEADER_PATTERN.exec(data);
|
|
360
|
+
return match ? data.slice(match.index + match[0].length) : '';
|
|
361
|
+
}
|
|
362
|
+
/** Return an Arrow list vector from value offsets and child values. */
|
|
363
|
+
function makeListVector(typeName, values, valueOffsets) {
|
|
364
|
+
const childType = getArrowType(typeName);
|
|
365
|
+
const type = new arrow.List(new arrow.Field('item', childType, false));
|
|
366
|
+
const typedValues = getTypedArray(values, typeName);
|
|
367
|
+
const valuesData = new arrow.Data(childType, 0, typedValues.length, 0, {
|
|
368
|
+
[arrow.BufferType.DATA]: typedValues
|
|
369
|
+
});
|
|
370
|
+
const listData = new arrow.Data(type, 0, valueOffsets.length - 1, 0, { [arrow.BufferType.OFFSET]: valueOffsets }, [valuesData]);
|
|
371
|
+
return new arrow.Vector([listData]);
|
|
372
|
+
}
|
|
373
|
+
/** Return a typed array for one PLY scalar type. */
|
|
374
|
+
function getTypedArray(values, type) {
|
|
375
|
+
switch (type) {
|
|
376
|
+
case 'int8':
|
|
377
|
+
case 'char':
|
|
378
|
+
return Int8Array.from(values);
|
|
379
|
+
case 'uint8':
|
|
380
|
+
case 'uchar':
|
|
381
|
+
return Uint8Array.from(values);
|
|
382
|
+
case 'int16':
|
|
383
|
+
case 'short':
|
|
384
|
+
return Int16Array.from(values);
|
|
385
|
+
case 'uint16':
|
|
386
|
+
case 'ushort':
|
|
387
|
+
return Uint16Array.from(values);
|
|
388
|
+
case 'int32':
|
|
389
|
+
case 'int':
|
|
390
|
+
return Int32Array.from(values);
|
|
391
|
+
case 'uint32':
|
|
392
|
+
case 'uint':
|
|
393
|
+
return Uint32Array.from(values);
|
|
394
|
+
case 'float64':
|
|
395
|
+
case 'double':
|
|
396
|
+
return Float64Array.from(values);
|
|
397
|
+
case 'float32':
|
|
398
|
+
case 'float':
|
|
399
|
+
default:
|
|
400
|
+
return Float32Array.from(values);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
/** Return an Arrow scalar type for one PLY scalar type. */
|
|
404
|
+
function getArrowType(type) {
|
|
405
|
+
switch (type) {
|
|
406
|
+
case 'int8':
|
|
407
|
+
case 'char':
|
|
408
|
+
return new arrow.Int8();
|
|
409
|
+
case 'uint8':
|
|
410
|
+
case 'uchar':
|
|
411
|
+
return new arrow.Uint8();
|
|
412
|
+
case 'int16':
|
|
413
|
+
case 'short':
|
|
414
|
+
return new arrow.Int16();
|
|
415
|
+
case 'uint16':
|
|
416
|
+
case 'ushort':
|
|
417
|
+
return new arrow.Uint16();
|
|
418
|
+
case 'int32':
|
|
419
|
+
case 'int':
|
|
420
|
+
return new arrow.Int32();
|
|
421
|
+
case 'uint32':
|
|
422
|
+
case 'uint':
|
|
423
|
+
return new arrow.Uint32();
|
|
424
|
+
case 'float64':
|
|
425
|
+
case 'double':
|
|
426
|
+
return new arrow.Float64();
|
|
427
|
+
case 'float32':
|
|
428
|
+
case 'float':
|
|
429
|
+
default:
|
|
430
|
+
return new arrow.Float32();
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
/** Parse one ASCII scalar value. */
|
|
434
|
+
function parseASCIINumber(value, type) {
|
|
435
|
+
switch (type) {
|
|
436
|
+
case 'char':
|
|
437
|
+
case 'uchar':
|
|
438
|
+
case 'short':
|
|
439
|
+
case 'ushort':
|
|
440
|
+
case 'int':
|
|
441
|
+
case 'uint':
|
|
442
|
+
case 'int8':
|
|
443
|
+
case 'uint8':
|
|
444
|
+
case 'int16':
|
|
445
|
+
case 'uint16':
|
|
446
|
+
case 'int32':
|
|
447
|
+
case 'uint32':
|
|
448
|
+
return parseInt(value, 10);
|
|
449
|
+
case 'float':
|
|
450
|
+
case 'double':
|
|
451
|
+
case 'float32':
|
|
452
|
+
case 'float64':
|
|
453
|
+
return parseFloat(value);
|
|
454
|
+
default:
|
|
455
|
+
throw new Error(type);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
/** Read one binary scalar value and its byte length. */
|
|
459
|
+
function readBinaryNumber(dataView, byteOffset, type, littleEndian) {
|
|
460
|
+
switch (type) {
|
|
461
|
+
case 'int8':
|
|
462
|
+
case 'char':
|
|
463
|
+
return [dataView.getInt8(byteOffset), 1];
|
|
464
|
+
case 'uint8':
|
|
465
|
+
case 'uchar':
|
|
466
|
+
return [dataView.getUint8(byteOffset), 1];
|
|
467
|
+
case 'int16':
|
|
468
|
+
case 'short':
|
|
469
|
+
return [dataView.getInt16(byteOffset, littleEndian), 2];
|
|
470
|
+
case 'uint16':
|
|
471
|
+
case 'ushort':
|
|
472
|
+
return [dataView.getUint16(byteOffset, littleEndian), 2];
|
|
473
|
+
case 'int32':
|
|
474
|
+
case 'int':
|
|
475
|
+
return [dataView.getInt32(byteOffset, littleEndian), 4];
|
|
476
|
+
case 'uint32':
|
|
477
|
+
case 'uint':
|
|
478
|
+
return [dataView.getUint32(byteOffset, littleEndian), 4];
|
|
479
|
+
case 'float32':
|
|
480
|
+
case 'float':
|
|
481
|
+
return [dataView.getFloat32(byteOffset, littleEndian), 4];
|
|
482
|
+
case 'float64':
|
|
483
|
+
case 'double':
|
|
484
|
+
return [dataView.getFloat64(byteOffset, littleEndian), 8];
|
|
485
|
+
default:
|
|
486
|
+
throw new Error(type);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
/** Convert optional metadata to Arrow metadata. */
|
|
490
|
+
function getArrowMetadata(metadata) {
|
|
491
|
+
return new Map(Object.entries(metadata || {}).filter((entry) => entry[1] !== undefined));
|
|
492
|
+
}
|
|
493
|
+
//# sourceMappingURL=parse-ply-arrow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-ply-arrow.js","sourceRoot":"","sources":["../../../src/ply/lib/parse-ply-arrow.ts"],"names":[],"mappings":"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"}
|