@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.
Files changed (405) hide show
  1. package/LAS-README.md +12 -0
  2. package/LICENSE +24 -0
  3. package/PCD-README.md +12 -0
  4. package/PLY-README.md +38 -0
  5. package/README.md +7 -2
  6. package/THIRD-PARTY-NOTICES.md +27 -0
  7. package/dist/dist.dev.js +30141 -0
  8. package/dist/dist.min.js +54 -0
  9. package/dist/index.cjs +61 -0
  10. package/dist/index.cjs.map +7 -0
  11. package/dist/index.d.ts +16 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +13 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/las/bundled.cjs +72 -0
  16. package/dist/las/bundled.cjs.map +7 -0
  17. package/dist/las/bundled.d.ts +12 -0
  18. package/dist/las/bundled.d.ts.map +1 -0
  19. package/dist/las/bundled.js +12 -0
  20. package/dist/las/bundled.js.map +1 -0
  21. package/dist/las/index.cjs +78 -0
  22. package/dist/las/index.cjs.map +7 -0
  23. package/dist/las/index.d.ts +17 -0
  24. package/dist/las/index.d.ts.map +1 -0
  25. package/dist/las/index.js +15 -0
  26. package/dist/las/index.js.map +1 -0
  27. package/dist/las/las-copc-loader-types.cjs +49 -0
  28. package/dist/las/las-copc-loader-types.cjs.map +7 -0
  29. package/dist/las/las-copc-loader-types.d.ts +63 -0
  30. package/dist/las/las-copc-loader-types.d.ts.map +1 -0
  31. package/dist/las/las-copc-loader-types.js +14 -0
  32. package/dist/las/las-copc-loader-types.js.map +1 -0
  33. package/dist/las/las-copc-loader.cjs +57 -0
  34. package/dist/las/las-copc-loader.cjs.map +7 -0
  35. package/dist/las/las-copc-loader.d.ts +37 -0
  36. package/dist/las/las-copc-loader.d.ts.map +1 -0
  37. package/dist/las/las-copc-loader.js +40 -0
  38. package/dist/las/las-copc-loader.js.map +1 -0
  39. package/dist/las/las-format.cjs +44 -0
  40. package/dist/las/las-format.cjs.map +7 -0
  41. package/dist/las/las-format.d.ts +16 -0
  42. package/dist/las/las-format.d.ts.map +1 -0
  43. package/dist/las/las-format.js +19 -0
  44. package/dist/las/las-format.js.map +1 -0
  45. package/dist/las/las-loader-shared.cjs +82 -0
  46. package/dist/las/las-loader-shared.cjs.map +7 -0
  47. package/dist/las/las-loader-shared.d.ts +66 -0
  48. package/dist/las/las-loader-shared.d.ts.map +1 -0
  49. package/dist/las/las-loader-shared.js +58 -0
  50. package/dist/las/las-loader-shared.js.map +1 -0
  51. package/dist/las/las-loader-types.cjs +54 -0
  52. package/dist/las/las-loader-types.cjs.map +7 -0
  53. package/dist/las/las-loader-types.d.ts +104 -0
  54. package/dist/las/las-loader-types.d.ts.map +1 -0
  55. package/dist/las/las-loader-types.js +19 -0
  56. package/dist/las/las-loader-types.js.map +1 -0
  57. package/dist/las/las-loader.cjs +80 -0
  58. package/dist/las/las-loader.cjs.map +7 -0
  59. package/dist/las/las-loader.d.ts +45 -0
  60. package/dist/las/las-loader.d.ts.map +1 -0
  61. package/dist/las/las-loader.js +58 -0
  62. package/dist/las/las-loader.js.map +1 -0
  63. package/dist/las/las-writer.cjs +1054 -0
  64. package/dist/las/las-writer.cjs.map +7 -0
  65. package/dist/las/las-writer.d.ts +69 -0
  66. package/dist/las/las-writer.d.ts.map +1 -0
  67. package/dist/las/las-writer.js +994 -0
  68. package/dist/las/las-writer.js.map +1 -0
  69. package/dist/las/laz-rs-loader-types.cjs +49 -0
  70. package/dist/las/laz-rs-loader-types.cjs.map +7 -0
  71. package/dist/las/laz-rs-loader-types.d.ts +65 -0
  72. package/dist/las/laz-rs-loader-types.d.ts.map +1 -0
  73. package/dist/las/laz-rs-loader-types.js +16 -0
  74. package/dist/las/laz-rs-loader-types.js.map +1 -0
  75. package/dist/las/laz-rs-loader.cjs +272 -0
  76. package/dist/las/laz-rs-loader.cjs.map +7 -0
  77. package/dist/las/laz-rs-loader.d.ts +37 -0
  78. package/dist/las/laz-rs-loader.d.ts.map +1 -0
  79. package/dist/las/laz-rs-loader.js +38 -0
  80. package/dist/las/laz-rs-loader.js.map +1 -0
  81. package/dist/las/lazperf-loader-types.cjs +49 -0
  82. package/dist/las/lazperf-loader-types.cjs.map +7 -0
  83. package/dist/las/lazperf-loader-types.d.ts +67 -0
  84. package/dist/las/lazperf-loader-types.d.ts.map +1 -0
  85. package/dist/las/lazperf-loader-types.js +17 -0
  86. package/dist/las/lazperf-loader-types.js.map +1 -0
  87. package/dist/las/lazperf-loader.cjs +60 -0
  88. package/dist/las/lazperf-loader.cjs.map +7 -0
  89. package/dist/las/lazperf-loader.d.ts +39 -0
  90. package/dist/las/lazperf-loader.d.ts.map +1 -0
  91. package/dist/las/lazperf-loader.js +44 -0
  92. package/dist/las/lazperf-loader.js.map +1 -0
  93. package/dist/las/lib/copc/parse-las.cjs +177 -0
  94. package/dist/las/lib/copc/parse-las.cjs.map +7 -0
  95. package/dist/las/lib/copc/parse-las.d.ts +17 -0
  96. package/dist/las/lib/copc/parse-las.d.ts.map +1 -0
  97. package/dist/las/lib/copc/parse-las.js +215 -0
  98. package/dist/las/lib/copc/parse-las.js.map +1 -0
  99. package/dist/las/lib/get-las-schema.cjs +62 -0
  100. package/dist/las/lib/get-las-schema.cjs.map +7 -0
  101. package/dist/las/lib/get-las-schema.d.ts +16 -0
  102. package/dist/las/lib/get-las-schema.d.ts.map +1 -0
  103. package/dist/las/lib/get-las-schema.js +46 -0
  104. package/dist/las/lib/get-las-schema.js.map +1 -0
  105. package/dist/las/lib/las-compatibility.cjs +110 -0
  106. package/dist/las/lib/las-compatibility.cjs.map +7 -0
  107. package/dist/las/lib/las-compatibility.d.ts +40 -0
  108. package/dist/las/lib/las-compatibility.d.ts.map +1 -0
  109. package/dist/las/lib/las-compatibility.js +115 -0
  110. package/dist/las/lib/las-compatibility.js.map +1 -0
  111. package/dist/las/lib/las-extra-bytes.cjs +223 -0
  112. package/dist/las/lib/las-extra-bytes.cjs.map +7 -0
  113. package/dist/las/lib/las-extra-bytes.d.ts +35 -0
  114. package/dist/las/lib/las-extra-bytes.d.ts.map +1 -0
  115. package/dist/las/lib/las-extra-bytes.js +195 -0
  116. package/dist/las/lib/las-extra-bytes.js.map +1 -0
  117. package/dist/las/lib/las-types.cjs +19 -0
  118. package/dist/las/lib/las-types.cjs.map +7 -0
  119. package/dist/las/lib/las-types.d.ts +194 -0
  120. package/dist/las/lib/las-types.d.ts.map +1 -0
  121. package/dist/las/lib/las-types.js +5 -0
  122. package/dist/las/lib/las-types.js.map +1 -0
  123. package/dist/las/lib/las-waveform.cjs +196 -0
  124. package/dist/las/lib/las-waveform.cjs.map +7 -0
  125. package/dist/las/lib/las-waveform.d.ts +89 -0
  126. package/dist/las/lib/las-waveform.d.ts.map +1 -0
  127. package/dist/las/lib/las-waveform.js +193 -0
  128. package/dist/las/lib/las-waveform.js.map +1 -0
  129. package/dist/las/lib/laz-perf/laslaz-decoder.cjs +382 -0
  130. package/dist/las/lib/laz-perf/laslaz-decoder.cjs.map +7 -0
  131. package/dist/las/lib/laz-perf/laslaz-decoder.d.ts +129 -0
  132. package/dist/las/lib/laz-perf/laslaz-decoder.d.ts.map +1 -0
  133. package/dist/las/lib/laz-perf/laslaz-decoder.js +377 -0
  134. package/dist/las/lib/laz-perf/laslaz-decoder.js.map +1 -0
  135. package/dist/las/lib/laz-perf/parse-las.cjs +270 -0
  136. package/dist/las/lib/laz-perf/parse-las.cjs.map +7 -0
  137. package/dist/las/lib/laz-perf/parse-las.d.ts +24 -0
  138. package/dist/las/lib/laz-perf/parse-las.d.ts.map +1 -0
  139. package/dist/las/lib/laz-perf/parse-las.js +307 -0
  140. package/dist/las/lib/laz-perf/parse-las.js.map +1 -0
  141. package/dist/las/lib/laz-rs-wasm/laslaz-decoder.cjs +631 -0
  142. package/dist/las/lib/laz-rs-wasm/laslaz-decoder.cjs.map +7 -0
  143. package/dist/las/lib/laz-rs-wasm/laslaz-decoder.d.ts +129 -0
  144. package/dist/las/lib/laz-rs-wasm/laslaz-decoder.d.ts.map +1 -0
  145. package/dist/las/lib/laz-rs-wasm/laslaz-decoder.js +414 -0
  146. package/dist/las/lib/laz-rs-wasm/laslaz-decoder.js.map +1 -0
  147. package/dist/las/lib/laz-rs-wasm/parse-las.cjs +270 -0
  148. package/dist/las/lib/laz-rs-wasm/parse-las.cjs.map +7 -0
  149. package/dist/las/lib/laz-rs-wasm/parse-las.d.ts +24 -0
  150. package/dist/las/lib/laz-rs-wasm/parse-las.d.ts.map +1 -0
  151. package/dist/las/lib/laz-rs-wasm/parse-las.js +307 -0
  152. package/dist/las/lib/laz-rs-wasm/parse-las.js.map +1 -0
  153. package/dist/las/lib/typescript/parse-las.cjs +2767 -0
  154. package/dist/las/lib/typescript/parse-las.cjs.map +7 -0
  155. package/dist/las/lib/typescript/parse-las.d.ts +39 -0
  156. package/dist/las/lib/typescript/parse-las.d.ts.map +1 -0
  157. package/dist/las/lib/typescript/parse-las.js +2607 -0
  158. package/dist/las/lib/typescript/parse-las.js.map +1 -0
  159. package/dist/las/libs/laz-perf/laz-perf.cjs +18093 -0
  160. package/dist/las/libs/laz-perf/laz-perf.cjs.map +7 -0
  161. package/dist/las/libs/laz-perf/laz-perf.d.ts +2 -0
  162. package/dist/las/libs/laz-perf/laz-perf.d.ts.map +1 -0
  163. package/dist/las/libs/laz-perf/laz-perf.js +19003 -0
  164. package/dist/las/libs/laz-perf/laz-perf.js.map +1 -0
  165. package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.d.ts +95 -0
  166. package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.d.ts.map +1 -0
  167. package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.js +442 -0
  168. package/dist/las/libs/laz-rs-wasm/laz_rs_wasm.js.map +1 -0
  169. package/dist/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm +0 -0
  170. package/dist/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm.d.ts +38 -0
  171. package/dist/las/unbundled.cjs +71 -0
  172. package/dist/las/unbundled.cjs.map +7 -0
  173. package/dist/las/unbundled.d.ts +11 -0
  174. package/dist/las/unbundled.d.ts.map +1 -0
  175. package/dist/las/unbundled.js +11 -0
  176. package/dist/las/unbundled.js.map +1 -0
  177. package/dist/las/workers/las-worker.cjs +23 -0
  178. package/dist/las/workers/las-worker.cjs.map +7 -0
  179. package/dist/las/workers/las-worker.d.ts +2 -0
  180. package/dist/las/workers/las-worker.d.ts.map +1 -0
  181. package/dist/las/workers/las-worker.js +23 -0
  182. package/dist/las/workers/las-worker.js.map +1 -0
  183. package/dist/las-worker.js +23058 -0
  184. package/dist/pcd/bundled.cjs +33 -0
  185. package/dist/pcd/bundled.cjs.map +7 -0
  186. package/dist/pcd/bundled.d.ts +3 -0
  187. package/dist/pcd/bundled.d.ts.map +1 -0
  188. package/dist/pcd/bundled.js +5 -0
  189. package/dist/pcd/bundled.js.map +1 -0
  190. package/dist/pcd/index.cjs +40 -0
  191. package/dist/pcd/index.cjs.map +7 -0
  192. package/dist/pcd/index.d.ts +8 -0
  193. package/dist/pcd/index.d.ts.map +1 -0
  194. package/dist/pcd/index.js +10 -0
  195. package/dist/pcd/index.js.map +1 -0
  196. package/dist/pcd/lib/decompress-lzf.cjs +80 -0
  197. package/dist/pcd/lib/decompress-lzf.cjs.map +7 -0
  198. package/dist/pcd/lib/decompress-lzf.d.ts +7 -0
  199. package/dist/pcd/lib/decompress-lzf.d.ts.map +1 -0
  200. package/dist/pcd/lib/decompress-lzf.js +62 -0
  201. package/dist/pcd/lib/decompress-lzf.js.map +1 -0
  202. package/dist/pcd/lib/get-pcd-schema.cjs +70 -0
  203. package/dist/pcd/lib/get-pcd-schema.cjs.map +7 -0
  204. package/dist/pcd/lib/get-pcd-schema.d.ts +10 -0
  205. package/dist/pcd/lib/get-pcd-schema.d.ts.map +1 -0
  206. package/dist/pcd/lib/get-pcd-schema.js +53 -0
  207. package/dist/pcd/lib/get-pcd-schema.js.map +1 -0
  208. package/dist/pcd/lib/parse-pcd.cjs +354 -0
  209. package/dist/pcd/lib/parse-pcd.cjs.map +7 -0
  210. package/dist/pcd/lib/parse-pcd.d.ts +20 -0
  211. package/dist/pcd/lib/parse-pcd.d.ts.map +1 -0
  212. package/dist/pcd/lib/parse-pcd.js +341 -0
  213. package/dist/pcd/lib/parse-pcd.js.map +1 -0
  214. package/dist/pcd/lib/pcd-types.cjs +19 -0
  215. package/dist/pcd/lib/pcd-types.cjs.map +7 -0
  216. package/dist/pcd/lib/pcd-types.d.ts +31 -0
  217. package/dist/pcd/lib/pcd-types.d.ts.map +1 -0
  218. package/dist/pcd/lib/pcd-types.js +5 -0
  219. package/dist/pcd/lib/pcd-types.js.map +1 -0
  220. package/dist/pcd/pcd-format.cjs +42 -0
  221. package/dist/pcd/pcd-format.cjs.map +7 -0
  222. package/dist/pcd/pcd-format.d.ts +16 -0
  223. package/dist/pcd/pcd-format.d.ts.map +1 -0
  224. package/dist/pcd/pcd-format.js +19 -0
  225. package/dist/pcd/pcd-format.js.map +1 -0
  226. package/dist/pcd/pcd-loader-types.cjs +64 -0
  227. package/dist/pcd/pcd-loader-types.cjs.map +7 -0
  228. package/dist/pcd/pcd-loader-types.d.ts +105 -0
  229. package/dist/pcd/pcd-loader-types.d.ts.map +1 -0
  230. package/dist/pcd/pcd-loader-types.js +35 -0
  231. package/dist/pcd/pcd-loader-types.js.map +1 -0
  232. package/dist/pcd/pcd-loader.cjs +144 -0
  233. package/dist/pcd/pcd-loader.cjs.map +7 -0
  234. package/dist/pcd/pcd-loader.d.ts +44 -0
  235. package/dist/pcd/pcd-loader.d.ts.map +1 -0
  236. package/dist/pcd/pcd-loader.js +128 -0
  237. package/dist/pcd/pcd-loader.js.map +1 -0
  238. package/dist/pcd/pcd-writer.cjs +134 -0
  239. package/dist/pcd/pcd-writer.cjs.map +7 -0
  240. package/dist/pcd/pcd-writer.d.ts +37 -0
  241. package/dist/pcd/pcd-writer.d.ts.map +1 -0
  242. package/dist/pcd/pcd-writer.js +115 -0
  243. package/dist/pcd/pcd-writer.js.map +1 -0
  244. package/dist/pcd/unbundled.cjs +33 -0
  245. package/dist/pcd/unbundled.cjs.map +7 -0
  246. package/dist/pcd/unbundled.d.ts +3 -0
  247. package/dist/pcd/unbundled.d.ts.map +1 -0
  248. package/dist/pcd/unbundled.js +5 -0
  249. package/dist/pcd/unbundled.js.map +1 -0
  250. package/dist/pcd/workers/pcd-worker.cjs +23 -0
  251. package/dist/pcd/workers/pcd-worker.cjs.map +7 -0
  252. package/dist/pcd/workers/pcd-worker.d.ts +2 -0
  253. package/dist/pcd/workers/pcd-worker.d.ts.map +1 -0
  254. package/dist/pcd/workers/pcd-worker.js +23 -0
  255. package/dist/pcd/workers/pcd-worker.js.map +1 -0
  256. package/dist/pcd-worker.js +17522 -0
  257. package/dist/ply/bundled.cjs +33 -0
  258. package/dist/ply/bundled.cjs.map +7 -0
  259. package/dist/ply/bundled.d.ts +3 -0
  260. package/dist/ply/bundled.d.ts.map +1 -0
  261. package/dist/ply/bundled.js +5 -0
  262. package/dist/ply/bundled.js.map +1 -0
  263. package/dist/ply/index.cjs +40 -0
  264. package/dist/ply/index.cjs.map +7 -0
  265. package/dist/ply/index.d.ts +8 -0
  266. package/dist/ply/index.d.ts.map +1 -0
  267. package/dist/ply/index.js +11 -0
  268. package/dist/ply/index.js.map +1 -0
  269. package/dist/ply/lib/get-ply-schema.cjs +126 -0
  270. package/dist/ply/lib/get-ply-schema.cjs.map +7 -0
  271. package/dist/ply/lib/get-ply-schema.d.ts +10 -0
  272. package/dist/ply/lib/get-ply-schema.d.ts.map +1 -0
  273. package/dist/ply/lib/get-ply-schema.js +117 -0
  274. package/dist/ply/lib/get-ply-schema.js.map +1 -0
  275. package/dist/ply/lib/normalize-ply.cjs +96 -0
  276. package/dist/ply/lib/normalize-ply.cjs.map +7 -0
  277. package/dist/ply/lib/normalize-ply.d.ts +8 -0
  278. package/dist/ply/lib/normalize-ply.d.ts.map +1 -0
  279. package/dist/ply/lib/normalize-ply.js +89 -0
  280. package/dist/ply/lib/normalize-ply.js.map +1 -0
  281. package/dist/ply/lib/parse-ply-arrow.cjs +552 -0
  282. package/dist/ply/lib/parse-ply-arrow.cjs.map +7 -0
  283. package/dist/ply/lib/parse-ply-arrow.d.ts +25 -0
  284. package/dist/ply/lib/parse-ply-arrow.d.ts.map +1 -0
  285. package/dist/ply/lib/parse-ply-arrow.js +493 -0
  286. package/dist/ply/lib/parse-ply-arrow.js.map +1 -0
  287. package/dist/ply/lib/parse-ply-in-batches.cjs +607 -0
  288. package/dist/ply/lib/parse-ply-in-batches.cjs.map +7 -0
  289. package/dist/ply/lib/parse-ply-in-batches.d.ts +9 -0
  290. package/dist/ply/lib/parse-ply-in-batches.d.ts.map +1 -0
  291. package/dist/ply/lib/parse-ply-in-batches.js +625 -0
  292. package/dist/ply/lib/parse-ply-in-batches.js.map +1 -0
  293. package/dist/ply/lib/parse-ply.cjs +755 -0
  294. package/dist/ply/lib/parse-ply.cjs.map +7 -0
  295. package/dist/ply/lib/parse-ply.d.ts +69 -0
  296. package/dist/ply/lib/parse-ply.d.ts.map +1 -0
  297. package/dist/ply/lib/parse-ply.js +851 -0
  298. package/dist/ply/lib/parse-ply.js.map +1 -0
  299. package/dist/ply/lib/ply-types.cjs +19 -0
  300. package/dist/ply/lib/ply-types.cjs.map +7 -0
  301. package/dist/ply/lib/ply-types.d.ts +37 -0
  302. package/dist/ply/lib/ply-types.d.ts.map +1 -0
  303. package/dist/ply/lib/ply-types.js +2 -0
  304. package/dist/ply/lib/ply-types.js.map +1 -0
  305. package/dist/ply/ply-format.cjs +43 -0
  306. package/dist/ply/ply-format.cjs.map +7 -0
  307. package/dist/ply/ply-format.d.ts +18 -0
  308. package/dist/ply/ply-format.d.ts.map +1 -0
  309. package/dist/ply/ply-format.js +22 -0
  310. package/dist/ply/ply-format.js.map +1 -0
  311. package/dist/ply/ply-loader-types.cjs +65 -0
  312. package/dist/ply/ply-loader-types.cjs.map +7 -0
  313. package/dist/ply/ply-loader-types.d.ts +111 -0
  314. package/dist/ply/ply-loader-types.d.ts.map +1 -0
  315. package/dist/ply/ply-loader-types.js +38 -0
  316. package/dist/ply/ply-loader-types.js.map +1 -0
  317. package/dist/ply/ply-loader.cjs +134 -0
  318. package/dist/ply/ply-loader.cjs.map +7 -0
  319. package/dist/ply/ply-loader.d.ts +44 -0
  320. package/dist/ply/ply-loader.d.ts.map +1 -0
  321. package/dist/ply/ply-loader.js +121 -0
  322. package/dist/ply/ply-loader.js.map +1 -0
  323. package/dist/ply/ply-writer.cjs +175 -0
  324. package/dist/ply/ply-writer.cjs.map +7 -0
  325. package/dist/ply/ply-writer.d.ts +37 -0
  326. package/dist/ply/ply-writer.d.ts.map +1 -0
  327. package/dist/ply/ply-writer.js +140 -0
  328. package/dist/ply/ply-writer.js.map +1 -0
  329. package/dist/ply/unbundled.cjs +33 -0
  330. package/dist/ply/unbundled.cjs.map +7 -0
  331. package/dist/ply/unbundled.d.ts +3 -0
  332. package/dist/ply/unbundled.d.ts.map +1 -0
  333. package/dist/ply/unbundled.js +5 -0
  334. package/dist/ply/unbundled.js.map +1 -0
  335. package/dist/ply/workers/ply-worker.cjs +34 -0
  336. package/dist/ply/workers/ply-worker.cjs.map +7 -0
  337. package/dist/ply/workers/ply-worker.d.ts +2 -0
  338. package/dist/ply/workers/ply-worker.d.ts.map +1 -0
  339. package/dist/ply/workers/ply-worker.js +37 -0
  340. package/dist/ply/workers/ply-worker.js.map +1 -0
  341. package/dist/ply-worker.js +19175 -0
  342. package/package.json +234 -4
  343. package/src/index.ts +19 -0
  344. package/src/las/bundled.ts +39 -0
  345. package/src/las/index.ts +70 -0
  346. package/src/las/las-copc-loader-types.ts +18 -0
  347. package/src/las/las-copc-loader.ts +61 -0
  348. package/src/las/las-format.ts +21 -0
  349. package/src/las/las-loader-shared.ts +124 -0
  350. package/src/las/las-loader-types.ts +27 -0
  351. package/src/las/las-loader.ts +109 -0
  352. package/src/las/las-writer.ts +1473 -0
  353. package/src/las/laz-rs-loader-types.ts +21 -0
  354. package/src/las/laz-rs-loader.ts +53 -0
  355. package/src/las/lazperf-loader-types.ts +22 -0
  356. package/src/las/lazperf-loader.ts +65 -0
  357. package/src/las/lib/LASZIP-LICENSE +202 -0
  358. package/src/las/lib/LASZIP-NOTICE +4 -0
  359. package/src/las/lib/copc/parse-las.ts +265 -0
  360. package/src/las/lib/get-las-schema.ts +50 -0
  361. package/src/las/lib/las-compatibility.ts +178 -0
  362. package/src/las/lib/las-extra-bytes.ts +274 -0
  363. package/src/las/lib/las-types.ts +206 -0
  364. package/src/las/lib/las-waveform.ts +292 -0
  365. package/src/las/lib/laz-perf/laslaz-decoder.ts +443 -0
  366. package/src/las/lib/laz-perf/parse-las.ts +412 -0
  367. package/src/las/lib/laz-rs-wasm/laslaz-decoder.ts +488 -0
  368. package/src/las/lib/laz-rs-wasm/parse-las.ts +412 -0
  369. package/src/las/lib/typescript/parse-las.ts +3730 -0
  370. package/src/las/libs/laz-perf/laz-perf.ts +20615 -0
  371. package/src/las/libs/laz-rs-wasm/laz_rs_wasm.d.ts +89 -0
  372. package/src/las/libs/laz-rs-wasm/laz_rs_wasm.js +497 -0
  373. package/src/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm +0 -0
  374. package/src/las/libs/laz-rs-wasm/laz_rs_wasm_bg.wasm.d.ts +38 -0
  375. package/src/las/libs/laz-rs-wasm/package.json +19 -0
  376. package/src/las/unbundled.ts +38 -0
  377. package/src/las/workers/las-worker.ts +24 -0
  378. package/src/pcd/bundled.ts +9 -0
  379. package/src/pcd/index.ts +13 -0
  380. package/src/pcd/lib/decompress-lzf.ts +68 -0
  381. package/src/pcd/lib/get-pcd-schema.ts +66 -0
  382. package/src/pcd/lib/parse-pcd.ts +474 -0
  383. package/src/pcd/lib/pcd-types.ts +34 -0
  384. package/src/pcd/pcd-format.ts +21 -0
  385. package/src/pcd/pcd-loader-types.ts +53 -0
  386. package/src/pcd/pcd-loader.ts +179 -0
  387. package/src/pcd/pcd-writer.ts +152 -0
  388. package/src/pcd/unbundled.ts +6 -0
  389. package/src/pcd/workers/pcd-worker.ts +24 -0
  390. package/src/ply/bundled.ts +9 -0
  391. package/src/ply/index.ts +15 -0
  392. package/src/ply/lib/get-ply-schema.ts +133 -0
  393. package/src/ply/lib/normalize-ply.ts +110 -0
  394. package/src/ply/lib/parse-ply-arrow.ts +676 -0
  395. package/src/ply/lib/parse-ply-in-batches.ts +827 -0
  396. package/src/ply/lib/parse-ply.ts +1081 -0
  397. package/src/ply/lib/ply-types.ts +47 -0
  398. package/src/ply/ply-format.ts +24 -0
  399. package/src/ply/ply-loader-types.ts +61 -0
  400. package/src/ply/ply-loader.ts +185 -0
  401. package/src/ply/ply-writer.ts +215 -0
  402. package/src/ply/unbundled.ts +6 -0
  403. package/src/ply/workers/ply-worker.ts +40 -0
  404. package/third-party-licenses/plasio-LICENSE +21 -0
  405. package/third-party-licenses/three-LICENSE +21 -0
@@ -0,0 +1,625 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ // PLY Loader, adapted from THREE.js (MIT license)
5
+ //
6
+ // Attributions per original THREE.js source file:
7
+ //
8
+ // @author Wei Meng / http://about.me/menway
9
+ //
10
+ // Description: A loader for PLY ASCII files (known as the Polygon File Format
11
+ // or the Stanford Triangle Format).
12
+ //
13
+ // Limitations: ASCII decoding assumes file is UTF-8.
14
+ //
15
+ // If the PLY file uses non standard property names, they can be mapped while
16
+ // loading. For example, the following maps the properties
17
+ // “diffuse_(red|green|blue)” in the file to standard color names.
18
+ //
19
+ // parsePLY(data, {
20
+ // propertyNameMapping: {
21
+ // diffuse_red: 'red',
22
+ // diffuse_green: 'green',
23
+ // diffuse_blue: 'blue'
24
+ // }
25
+ // });
26
+ import { makeLineIterator, makeTextDecoderIterator, forEach, toArrayBufferIterator } from '@loaders.gl/core/loader-utils';
27
+ import normalizePLY from "./normalize-ply.js";
28
+ import { getPLYBinaryPointCloudParsePlan, parsePLYBinaryPointCloudRecordsToArrowTable, parsePLYHeader } from "./parse-ply.js";
29
+ import { convertPLYElementTablesToMeshArrowTable, parsePLYToElementTables } from "./parse-ply-arrow.js";
30
+ const DEFAULT_BINARY_BATCH_SIZE = 65536;
31
+ const PLY_END_HEADER = 'end_header';
32
+ /**
33
+ * PARSER
34
+ * @param iterator
35
+ * @param options
36
+ */
37
+ export async function* parsePLYInBatches(iterator, options) {
38
+ if (options?.shape === 'arrow-table') {
39
+ yield* parseBinaryPLYToArrowInBatches(iterator, options);
40
+ return;
41
+ }
42
+ const lineIterator = makeLineIterator(makeTextDecoderIterator(toArrayBufferIterator(iterator)));
43
+ const header = await parseASCIIHeader(lineIterator, options);
44
+ let attributes;
45
+ switch (header.format) {
46
+ case 'ascii':
47
+ attributes = await parseASCII(lineIterator, header);
48
+ break;
49
+ default:
50
+ throw new Error('Binary PLY can not yet be parsed in streaming mode');
51
+ // attributes = await parseBinary(lineIterator, header);
52
+ }
53
+ yield normalizePLY(header, attributes, options);
54
+ }
55
+ /** Parse PLY vertices into Arrow table batches. */
56
+ async function* parseBinaryPLYToArrowInBatches(iterator, options) {
57
+ const byteIterator = toArrayBufferIterator(iterator)[Symbol.asyncIterator]();
58
+ const { header, initialBodyBytes } = await readPLYHeader(byteIterator, options);
59
+ let tables;
60
+ if (header.format === 'ascii') {
61
+ tables = parseASCIIPLYToArrowInBatches(byteIterator, header, initialBodyBytes, options);
62
+ }
63
+ else {
64
+ const vertexElement = getVertexElement(header, options);
65
+ tables = vertexElement.properties.some(property => property.type === 'list')
66
+ ? parseBinaryVariableWidthVertexPLYToArrowInBatches(byteIterator, header, initialBodyBytes, options)
67
+ : parseBinaryFixedWidthVertexPLYToArrowInBatches(byteIterator, header, initialBodyBytes, options);
68
+ }
69
+ for await (const table of tables) {
70
+ yield { ...table, loaderData: header };
71
+ }
72
+ }
73
+ /** Parse fixed-width binary PLY vertices into Arrow table batches. */
74
+ async function* parseBinaryFixedWidthVertexPLYToArrowInBatches(byteIterator, header, initialBodyBytes, options) {
75
+ const vertexElement = getFixedWidthVertexElement(header, options);
76
+ const batchSize = getBatchSize(options);
77
+ const vertexStride = getPLYElementSize(vertexElement);
78
+ const parsePlan = getPLYBinaryPointCloudParsePlan(header, options);
79
+ let remainingVertices = vertexElement.count;
80
+ let pendingBytes = initialBodyBytes;
81
+ while (true) {
82
+ while (remainingVertices > 0 && Math.floor(pendingBytes.length / vertexStride) >= batchSize) {
83
+ const batchVertexCount = Math.min(batchSize, remainingVertices);
84
+ const batch = makeBinaryPLYArrowBatch(header, pendingBytes, batchVertexCount, vertexStride, options, parsePlan);
85
+ pendingBytes = pendingBytes.subarray(batchVertexCount * vertexStride);
86
+ remainingVertices -= batchVertexCount;
87
+ yield batch;
88
+ }
89
+ if (options?.pointCloud && remainingVertices <= 0) {
90
+ return;
91
+ }
92
+ const { value: chunk, done } = await byteIterator.next();
93
+ if (done) {
94
+ break;
95
+ }
96
+ pendingBytes = concatenateBytes([pendingBytes, getUint8Array(chunk)]);
97
+ }
98
+ if (remainingVertices > 0) {
99
+ const batchVertexCount = Math.min(remainingVertices, Math.floor(pendingBytes.length / vertexStride));
100
+ if (batchVertexCount > 0) {
101
+ yield makeBinaryPLYArrowBatch(header, pendingBytes, batchVertexCount, vertexStride, options, parsePlan);
102
+ }
103
+ }
104
+ }
105
+ /** Parse ASCII vertex PLY rows into Arrow table batches. */
106
+ async function* parseASCIIPLYToArrowInBatches(byteIterator, header, initialBodyBytes, options) {
107
+ const vertexElement = getVertexElement(header, options);
108
+ const batchSize = getBatchSize(options);
109
+ const lineIterator = makeLineIterator(makeTextDecoderIterator(getByteIteratorWithInitialBytes(byteIterator, initialBodyBytes)));
110
+ let batchLines = [];
111
+ let remainingVertices = vertexElement.count;
112
+ for await (const sourceLine of lineIterator) {
113
+ const line = sourceLine.trim();
114
+ if (line === '') {
115
+ continue;
116
+ }
117
+ batchLines.push(line);
118
+ remainingVertices--;
119
+ if (batchLines.length >= batchSize) {
120
+ yield makeASCIIPLYArrowBatch(header, batchLines, options);
121
+ batchLines = [];
122
+ }
123
+ if (remainingVertices <= 0) {
124
+ break;
125
+ }
126
+ }
127
+ if (batchLines.length > 0) {
128
+ yield makeASCIIPLYArrowBatch(header, batchLines, options);
129
+ }
130
+ }
131
+ /** Parse variable-width binary vertex rows into Arrow table batches. */
132
+ async function* parseBinaryVariableWidthVertexPLYToArrowInBatches(byteIterator, header, initialBodyBytes, options) {
133
+ const vertexElement = getVertexElement(header, options);
134
+ const batchSize = getBatchSize(options);
135
+ const littleEndian = header.format !== 'binary_big_endian';
136
+ let remainingVertices = vertexElement.count;
137
+ let pendingBytes = initialBodyBytes;
138
+ let batchBytes = [];
139
+ let batchByteLength = 0;
140
+ let batchRowCount = 0;
141
+ while (remainingVertices > 0) {
142
+ const rowByteLength = getBinaryElementRowByteLength(pendingBytes, vertexElement, littleEndian);
143
+ if (rowByteLength === null) {
144
+ const { value: chunk, done } = await byteIterator.next();
145
+ if (done) {
146
+ break;
147
+ }
148
+ pendingBytes = concatenateBytes([pendingBytes, getUint8Array(chunk)]);
149
+ continue;
150
+ }
151
+ const rowBytes = pendingBytes.subarray(0, rowByteLength);
152
+ batchBytes.push(rowBytes);
153
+ batchByteLength += rowByteLength;
154
+ batchRowCount++;
155
+ remainingVertices--;
156
+ pendingBytes = pendingBytes.subarray(rowByteLength);
157
+ if (batchRowCount >= batchSize) {
158
+ yield makeBinaryPLYArrowBatchFromRows(header, batchBytes, batchByteLength, batchRowCount, options);
159
+ batchBytes = [];
160
+ batchByteLength = 0;
161
+ batchRowCount = 0;
162
+ }
163
+ }
164
+ if (batchRowCount > 0) {
165
+ yield makeBinaryPLYArrowBatchFromRows(header, batchBytes, batchByteLength, batchRowCount, options);
166
+ }
167
+ }
168
+ /** Read and parse the PLY header from the byte stream. */
169
+ async function readPLYHeader(iterator, options) {
170
+ let headerBytes = new Uint8Array(0);
171
+ while (true) {
172
+ const { value, done } = await iterator.next();
173
+ if (done) {
174
+ throw new Error('Incomplete PLY header');
175
+ }
176
+ headerBytes = concatenateBytes([headerBytes, getUint8Array(value)]);
177
+ const headerEnd = findHeaderEnd(headerBytes);
178
+ if (headerEnd === -1) {
179
+ continue;
180
+ }
181
+ const header = parsePLYHeader(getArrayBuffer(headerBytes.subarray(0, headerEnd)), options);
182
+ return { header, initialBodyBytes: headerBytes.subarray(headerEnd) };
183
+ }
184
+ }
185
+ /** Return the vertex element, or throw for unsupported Arrow batches. */
186
+ function getVertexElement(header, options) {
187
+ const vertexElement = header.elements[0];
188
+ if ((!options?.pointCloud && header.elements.length !== 1) || vertexElement?.name !== 'vertex') {
189
+ throw new Error('PLY arrow-table batch parsing requires one vertex element');
190
+ }
191
+ return vertexElement;
192
+ }
193
+ /** Return the fixed-width vertex element, or throw for unsupported binary batches. */
194
+ function getFixedWidthVertexElement(header, options) {
195
+ const vertexElement = header.elements[0];
196
+ if ((!options?.pointCloud && header.elements.length !== 1) ||
197
+ vertexElement?.name !== 'vertex' ||
198
+ vertexElement.properties.some(property => property.type === 'list')) {
199
+ throw new Error('Binary PLY arrow-table batch parsing requires one scalar vertex element');
200
+ }
201
+ return vertexElement;
202
+ }
203
+ /** Build one Arrow table batch from pending vertex record bytes. */
204
+ function makeBinaryPLYArrowBatch(header, pendingBytes, vertexCount, vertexStride, options, parsePlan) {
205
+ const vertexElement = header.elements[0];
206
+ const batchHeader = {
207
+ ...header,
208
+ headerLength: 0,
209
+ elements: [{ ...vertexElement, count: vertexCount }]
210
+ };
211
+ const byteLength = vertexCount * vertexStride;
212
+ const table = parsePLYBinaryPointCloudRecordsToArrowTable(pendingBytes.subarray(0, byteLength), batchHeader, options, parsePlan || undefined);
213
+ if (!table) {
214
+ throw new Error('Failed to parse binary PLY Arrow batch');
215
+ }
216
+ return table;
217
+ }
218
+ /** Build one Arrow table batch from ASCII PLY vertex lines. */
219
+ function makeASCIIPLYArrowBatch(header, lines, options) {
220
+ const batchHeaderText = makePLYHeaderText(header, lines.length, options);
221
+ const elementTables = parsePLYToElementTables(`${batchHeaderText}${lines.join('\n')}\n`, options);
222
+ return convertPLYElementTablesToMeshArrowTable(elementTables);
223
+ }
224
+ /** Build one Arrow table batch from variable-width binary PLY vertex rows. */
225
+ function makeBinaryPLYArrowBatchFromRows(header, rows, byteLength, vertexCount, options) {
226
+ const batchHeaderText = makePLYHeaderText(header, vertexCount, options);
227
+ const headerBytes = new TextEncoder().encode(batchHeaderText);
228
+ const batchBytes = new Uint8Array(headerBytes.length + byteLength);
229
+ batchBytes.set(headerBytes, 0);
230
+ let byteOffset = headerBytes.length;
231
+ for (const row of rows) {
232
+ batchBytes.set(row, byteOffset);
233
+ byteOffset += row.length;
234
+ }
235
+ const elementTables = parsePLYToElementTables(getArrayBuffer(batchBytes), options);
236
+ return convertPLYElementTablesToMeshArrowTable(elementTables);
237
+ }
238
+ /** Return binary element row byte length, or null if more bytes are needed. */
239
+ function getBinaryElementRowByteLength(bytes, element, littleEndian) {
240
+ const dataView = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
241
+ let byteOffset = 0;
242
+ for (const property of element.properties) {
243
+ if (property.type === 'list') {
244
+ const countSize = getPLYTypeSize(property.countType);
245
+ if (byteOffset + countSize > bytes.length) {
246
+ return null;
247
+ }
248
+ const count = readBinaryScalar(dataView, byteOffset, property.countType, littleEndian);
249
+ byteOffset += countSize;
250
+ const valuesByteLength = count * getPLYTypeSize(property.itemType);
251
+ if (byteOffset + valuesByteLength > bytes.length) {
252
+ return null;
253
+ }
254
+ byteOffset += valuesByteLength;
255
+ }
256
+ else {
257
+ const propertySize = getPLYTypeSize(property.type);
258
+ if (byteOffset + propertySize > bytes.length) {
259
+ return null;
260
+ }
261
+ byteOffset += propertySize;
262
+ }
263
+ }
264
+ return byteOffset;
265
+ }
266
+ /** Read one binary scalar value. */
267
+ // eslint-disable-next-line complexity
268
+ function readBinaryScalar(dataView, byteOffset, type, littleEndian) {
269
+ switch (type) {
270
+ case 'int8':
271
+ case 'char':
272
+ return dataView.getInt8(byteOffset);
273
+ case 'uint8':
274
+ case 'uchar':
275
+ return dataView.getUint8(byteOffset);
276
+ case 'int16':
277
+ case 'short':
278
+ return dataView.getInt16(byteOffset, littleEndian);
279
+ case 'uint16':
280
+ case 'ushort':
281
+ return dataView.getUint16(byteOffset, littleEndian);
282
+ case 'int32':
283
+ case 'int':
284
+ return dataView.getInt32(byteOffset, littleEndian);
285
+ case 'uint32':
286
+ case 'uint':
287
+ return dataView.getUint32(byteOffset, littleEndian);
288
+ case 'float32':
289
+ case 'float':
290
+ return dataView.getFloat32(byteOffset, littleEndian);
291
+ case 'float64':
292
+ case 'double':
293
+ return dataView.getFloat64(byteOffset, littleEndian);
294
+ default:
295
+ throw new Error(type);
296
+ }
297
+ }
298
+ /** Rebuild a PLY header text for one emitted batch. */
299
+ function makePLYHeaderText(header, vertexCount, options) {
300
+ const lines = ['ply', `format ${header.format} ${header.version || '1.0'}`];
301
+ const elements = options?.pointCloud ? header.elements.slice(0, 1) : header.elements;
302
+ for (const comment of header.comments) {
303
+ lines.push(`comment ${comment}`);
304
+ }
305
+ for (const element of elements) {
306
+ lines.push(`element ${element.name} ${element.name === 'vertex' ? vertexCount : element.count}`);
307
+ for (const property of element.properties) {
308
+ lines.push(property.type === 'list'
309
+ ? `property list ${property.countType} ${property.itemType} ${property.name}`
310
+ : `property ${property.type} ${property.name}`);
311
+ }
312
+ }
313
+ lines.push('end_header');
314
+ return `${lines.join('\n')}\n`;
315
+ }
316
+ /** Return a byte iterator that emits pending body bytes before reading source chunks. */
317
+ async function* getByteIteratorWithInitialBytes(iterator, initialBodyBytes) {
318
+ if (initialBodyBytes.length > 0) {
319
+ yield getArrayBuffer(initialBodyBytes);
320
+ }
321
+ while (true) {
322
+ const { value, done } = await iterator.next();
323
+ if (done) {
324
+ break;
325
+ }
326
+ yield getArrayBuffer(getUint8Array(value));
327
+ }
328
+ }
329
+ /** Return the configured binary PLY batch size. */
330
+ function getBatchSize(options) {
331
+ const batchSize = options?.batchSize;
332
+ return typeof batchSize === 'number' ? batchSize : DEFAULT_BINARY_BATCH_SIZE;
333
+ }
334
+ /** Return the byte size of a fixed-width PLY element. */
335
+ function getPLYElementSize(element) {
336
+ return element.properties.reduce((size, property) => size + getPLYTypeSize(property.type), 0);
337
+ }
338
+ /** Return the byte size of a scalar PLY type. */
339
+ // eslint-disable-next-line complexity
340
+ function getPLYTypeSize(type) {
341
+ switch (type) {
342
+ case 'int8':
343
+ case 'uint8':
344
+ case 'char':
345
+ case 'uchar':
346
+ return 1;
347
+ case 'int16':
348
+ case 'uint16':
349
+ case 'short':
350
+ case 'ushort':
351
+ return 2;
352
+ case 'int32':
353
+ case 'uint32':
354
+ case 'int':
355
+ case 'uint':
356
+ case 'float32':
357
+ case 'float':
358
+ return 4;
359
+ case 'float64':
360
+ case 'double':
361
+ return 8;
362
+ default:
363
+ throw new Error(type);
364
+ }
365
+ }
366
+ /** Find the byte offset immediately after the `end_header` terminator. */
367
+ function findHeaderEnd(bytes) {
368
+ const pattern = new TextEncoder().encode(PLY_END_HEADER);
369
+ const lastPatternStart = bytes.length - pattern.length;
370
+ for (let byteIndex = 0; byteIndex <= lastPatternStart; byteIndex++) {
371
+ let matches = true;
372
+ for (let patternIndex = 0; patternIndex < pattern.length; patternIndex++) {
373
+ if (bytes[byteIndex + patternIndex] !== pattern[patternIndex]) {
374
+ matches = false;
375
+ break;
376
+ }
377
+ }
378
+ if (matches) {
379
+ let headerEnd = byteIndex + pattern.length;
380
+ if (headerEnd === bytes.length ||
381
+ (bytes[headerEnd] === 0x0d && headerEnd + 1 === bytes.length)) {
382
+ return -1;
383
+ }
384
+ if (bytes[headerEnd] === 0x0d && bytes[headerEnd + 1] === 0x0a) {
385
+ headerEnd += 2;
386
+ }
387
+ else if (headerEnd < bytes.length && isWhitespaceByte(bytes[headerEnd])) {
388
+ headerEnd += 1;
389
+ }
390
+ return headerEnd;
391
+ }
392
+ }
393
+ return -1;
394
+ }
395
+ /** Return true for ASCII whitespace bytes that can terminate a PLY header. */
396
+ function isWhitespaceByte(byte) {
397
+ return byte === 0x0a || byte === 0x0d || byte === 0x09 || byte === 0x20;
398
+ }
399
+ /** Normalize an ArrayBuffer or view into a Uint8Array view. */
400
+ function getUint8Array(data) {
401
+ return ArrayBuffer.isView(data)
402
+ ? new Uint8Array(data.buffer, data.byteOffset, data.byteLength)
403
+ : new Uint8Array(data);
404
+ }
405
+ /** Return an exact ArrayBuffer copy for a byte range. */
406
+ function getArrayBuffer(bytes) {
407
+ const copy = new Uint8Array(bytes.byteLength);
408
+ copy.set(bytes);
409
+ return copy.buffer;
410
+ }
411
+ /** Concatenate byte chunks into a new Uint8Array. */
412
+ function concatenateBytes(chunks) {
413
+ const byteLength = chunks.reduce((length, chunk) => length + chunk.length, 0);
414
+ const bytes = new Uint8Array(byteLength);
415
+ let byteOffset = 0;
416
+ for (const chunk of chunks) {
417
+ bytes.set(chunk, byteOffset);
418
+ byteOffset += chunk.length;
419
+ }
420
+ return bytes;
421
+ }
422
+ /**
423
+ * Parses header
424
+ * @param lineIterator
425
+ * @param options
426
+ * @returns
427
+ */
428
+ async function parseASCIIHeader(lineIterator, options) {
429
+ let currentElement;
430
+ const header = {
431
+ comments: [],
432
+ elements: []
433
+ // headerLength
434
+ };
435
+ // Note: forEach does not reset iterator if exiting loop prematurely
436
+ // so that iteration can continue in a second loop
437
+ await forEach(lineIterator, (line) => {
438
+ line = line.trim();
439
+ // End of header
440
+ if (line === 'end_header') {
441
+ return true; // Returning true cancels `forEach`
442
+ }
443
+ // Ignore empty lines
444
+ if (line === '') {
445
+ // eslint-disable-next-line
446
+ return false; // Returning false does not cancel `forEach`
447
+ }
448
+ const lineValues = line.split(/\s+/);
449
+ const lineType = lineValues.shift();
450
+ line = lineValues.join(' ');
451
+ switch (lineType) {
452
+ case 'ply':
453
+ // First line magic characters, ignore
454
+ break;
455
+ case 'format':
456
+ header.format = lineValues[0];
457
+ header.version = lineValues[1];
458
+ break;
459
+ case 'comment':
460
+ header.comments.push(line);
461
+ break;
462
+ case 'element':
463
+ if (currentElement) {
464
+ header.elements.push(currentElement);
465
+ }
466
+ currentElement = {
467
+ name: lineValues[0],
468
+ count: parseInt(lineValues[1], 10),
469
+ properties: []
470
+ };
471
+ break;
472
+ case 'property':
473
+ const property = makePLYElementProperty(lineValues, options.propertyNameMapping);
474
+ currentElement?.properties.push(property);
475
+ break;
476
+ default:
477
+ // eslint-disable-next-line
478
+ console.log('unhandled', lineType, lineValues);
479
+ }
480
+ return false;
481
+ });
482
+ if (currentElement) {
483
+ header.elements.push(currentElement);
484
+ }
485
+ return header;
486
+ }
487
+ function makePLYElementProperty(propertyValues, propertyNameMapping) {
488
+ const type = propertyValues[0];
489
+ switch (type) {
490
+ case 'list':
491
+ return {
492
+ type,
493
+ name: propertyValues[3],
494
+ countType: propertyValues[1],
495
+ itemType: propertyValues[2]
496
+ };
497
+ default:
498
+ return {
499
+ type,
500
+ name: propertyValues[1]
501
+ };
502
+ }
503
+ }
504
+ // ASCII PARSING
505
+ /**
506
+ * @param lineIterator
507
+ * @param header
508
+ * @returns
509
+ */
510
+ async function parseASCII(lineIterator, header) {
511
+ // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)
512
+ const attributes = {
513
+ indices: [],
514
+ vertices: [],
515
+ normals: [],
516
+ uvs: [],
517
+ colors: []
518
+ };
519
+ let currentElement = 0;
520
+ let currentElementCount = 0;
521
+ for await (let line of lineIterator) {
522
+ line = line.trim();
523
+ if (line !== '') {
524
+ if (currentElementCount >= header.elements[currentElement].count) {
525
+ currentElement++;
526
+ currentElementCount = 0;
527
+ }
528
+ const element = parsePLYElement(header.elements[currentElement].properties, line);
529
+ handleElement(attributes, header.elements[currentElement].name, element);
530
+ currentElementCount++;
531
+ }
532
+ }
533
+ return attributes;
534
+ }
535
+ /**
536
+ * Parses ASCII number
537
+ * @param n
538
+ * @param type
539
+ * @returns ASCII number
540
+ */
541
+ // eslint-disable-next-line complexity
542
+ function parseASCIINumber(n, type) {
543
+ switch (type) {
544
+ case 'char':
545
+ case 'uchar':
546
+ case 'short':
547
+ case 'ushort':
548
+ case 'int':
549
+ case 'uint':
550
+ case 'int8':
551
+ case 'uint8':
552
+ case 'int16':
553
+ case 'uint16':
554
+ case 'int32':
555
+ case 'uint32':
556
+ return parseInt(n, 10);
557
+ case 'float':
558
+ case 'double':
559
+ case 'float32':
560
+ case 'float64':
561
+ return parseFloat(n);
562
+ default:
563
+ throw new Error(type);
564
+ }
565
+ }
566
+ /**
567
+ * Parses ASCII element
568
+ * @param properties
569
+ * @param line
570
+ * @returns element
571
+ */
572
+ function parsePLYElement(properties, line) {
573
+ const values = line.split(/\s+/);
574
+ const element = {};
575
+ for (let i = 0; i < properties.length; i++) {
576
+ if (properties[i].type === 'list') {
577
+ const list = [];
578
+ const n = parseASCIINumber(values.shift(), properties[i].countType);
579
+ for (let j = 0; j < n; j++) {
580
+ list.push(parseASCIINumber(values.shift(), properties[i].itemType));
581
+ }
582
+ element[properties[i].name] = list;
583
+ }
584
+ else {
585
+ element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);
586
+ }
587
+ }
588
+ return element;
589
+ }
590
+ /**
591
+ * @param buffer
592
+ * @param elementName
593
+ * @param element
594
+ */
595
+ // HELPER FUNCTIONS
596
+ // eslint-disable-next-line complexity
597
+ function handleElement(buffer, elementName, element = {}) {
598
+ switch (elementName) {
599
+ case 'vertex':
600
+ buffer.vertices.push(element.x, element.y, element.z);
601
+ if ('nx' in element && 'ny' in element && 'nz' in element) {
602
+ buffer.normals.push(element.nx, element.ny, element.nz);
603
+ }
604
+ if ('s' in element && 't' in element) {
605
+ buffer.uvs.push(element.s, element.t);
606
+ }
607
+ if ('red' in element && 'green' in element && 'blue' in element) {
608
+ buffer.colors.push(element.red, element.green, element.blue);
609
+ }
610
+ break;
611
+ case 'face':
612
+ const vertexIndices = element.vertex_indices || element.vertex_index; // issue #9338
613
+ if (vertexIndices.length === 3) {
614
+ buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);
615
+ }
616
+ else if (vertexIndices.length === 4) {
617
+ buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);
618
+ buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);
619
+ }
620
+ break;
621
+ default:
622
+ break;
623
+ }
624
+ }
625
+ //# sourceMappingURL=parse-ply-in-batches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-ply-in-batches.js","sourceRoot":"","sources":["../../../src/ply/lib/parse-ply-in-batches.ts"],"names":[],"mappings":"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"}