@loaders.gl/pcd 4.0.0-alpha.5 → 4.0.0-alpha.6

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 (68) hide show
  1. package/dist/bundle.js +2 -2
  2. package/dist/dist.min.js +93 -487
  3. package/dist/es5/bundle.js +6 -0
  4. package/dist/es5/bundle.js.map +1 -0
  5. package/dist/es5/index.js +45 -0
  6. package/dist/es5/index.js.map +1 -0
  7. package/dist/es5/lib/decompress-lzf.js +57 -0
  8. package/dist/es5/lib/decompress-lzf.js.map +1 -0
  9. package/dist/es5/lib/get-pcd-schema.js +54 -0
  10. package/dist/es5/lib/get-pcd-schema.js.map +1 -0
  11. package/dist/es5/lib/parse-pcd.js +299 -0
  12. package/dist/es5/lib/parse-pcd.js.map +1 -0
  13. package/dist/es5/lib/pcd-types.js +2 -0
  14. package/dist/es5/lib/pcd-types.js.map +1 -0
  15. package/dist/es5/pcd-loader.js +21 -0
  16. package/dist/es5/pcd-loader.js.map +1 -0
  17. package/dist/es5/workers/pcd-worker.js +6 -0
  18. package/dist/es5/workers/pcd-worker.js.map +1 -0
  19. package/dist/esm/bundle.js +4 -0
  20. package/dist/esm/bundle.js.map +1 -0
  21. package/dist/esm/index.js +10 -0
  22. package/dist/esm/index.js.map +1 -0
  23. package/dist/esm/lib/decompress-lzf.js +51 -0
  24. package/dist/esm/lib/decompress-lzf.js.map +1 -0
  25. package/dist/esm/lib/get-pcd-schema.js +48 -0
  26. package/dist/esm/lib/get-pcd-schema.js.map +1 -0
  27. package/dist/esm/lib/parse-pcd.js +289 -0
  28. package/dist/esm/lib/parse-pcd.js.map +1 -0
  29. package/dist/esm/lib/pcd-types.js +2 -0
  30. package/dist/esm/lib/pcd-types.js.map +1 -0
  31. package/dist/esm/pcd-loader.js +14 -0
  32. package/dist/esm/pcd-loader.js.map +1 -0
  33. package/dist/esm/workers/pcd-worker.js +4 -0
  34. package/dist/esm/workers/pcd-worker.js.map +1 -0
  35. package/dist/index.d.ts +3 -25
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +17 -8
  38. package/dist/lib/decompress-lzf.d.ts.map +1 -1
  39. package/dist/lib/decompress-lzf.js +61 -43
  40. package/dist/lib/get-pcd-schema.d.ts +1 -3
  41. package/dist/lib/get-pcd-schema.d.ts.map +1 -1
  42. package/dist/lib/get-pcd-schema.js +32 -19
  43. package/dist/lib/parse-pcd.d.ts +2 -11
  44. package/dist/lib/parse-pcd.d.ts.map +1 -1
  45. package/dist/lib/parse-pcd.js +304 -260
  46. package/dist/lib/pcd-types.d.ts +12 -12
  47. package/dist/lib/pcd-types.d.ts.map +1 -1
  48. package/dist/lib/pcd-types.js +2 -2
  49. package/dist/pcd-loader.d.ts +3 -14
  50. package/dist/pcd-loader.d.ts.map +1 -1
  51. package/dist/pcd-loader.js +21 -14
  52. package/dist/pcd-worker.js +140 -466
  53. package/dist/workers/pcd-worker.js +5 -4
  54. package/package.json +6 -6
  55. package/src/index.ts +3 -2
  56. package/src/lib/decompress-lzf.ts +21 -7
  57. package/src/lib/get-pcd-schema.ts +15 -10
  58. package/src/lib/parse-pcd.ts +95 -42
  59. package/src/lib/pcd-types.ts +9 -9
  60. package/src/pcd-loader.ts +5 -4
  61. package/dist/bundle.js.map +0 -1
  62. package/dist/index.js.map +0 -1
  63. package/dist/lib/decompress-lzf.js.map +0 -1
  64. package/dist/lib/get-pcd-schema.js.map +0 -1
  65. package/dist/lib/parse-pcd.js.map +0 -1
  66. package/dist/lib/pcd-types.js.map +0 -1
  67. package/dist/pcd-loader.js.map +0 -1
  68. package/dist/workers/pcd-worker.js.map +0 -1
@@ -1,4 +1,5 @@
1
- import { createLoaderWorker } from '@loaders.gl/loader-utils';
2
- import { PCDLoader } from '../index';
3
- createLoaderWorker(PCDLoader);
4
- //# sourceMappingURL=pcd-worker.js.map
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const loader_utils_1 = require("@loaders.gl/loader-utils");
4
+ const index_1 = require("../index");
5
+ (0, loader_utils_1.createLoaderWorker)(index_1.PCDLoader);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/pcd",
3
- "version": "4.0.0-alpha.5",
3
+ "version": "4.0.0-alpha.6",
4
4
  "description": "Framework-independent loader for the PCD format",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -19,8 +19,8 @@
19
19
  "PCD"
20
20
  ],
21
21
  "types": "dist/index.d.ts",
22
- "main": "dist/index.js",
23
- "module": "dist/index.js",
22
+ "main": "dist/es5/index.js",
23
+ "module": "dist/esm/index.js",
24
24
  "sideEffects": false,
25
25
  "files": [
26
26
  "src",
@@ -33,8 +33,8 @@
33
33
  "build-worker": "esbuild src/workers/pcd-worker.ts --bundle --outfile=dist/pcd-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
34
34
  },
35
35
  "dependencies": {
36
- "@loaders.gl/loader-utils": "4.0.0-alpha.5",
37
- "@loaders.gl/schema": "4.0.0-alpha.5"
36
+ "@loaders.gl/loader-utils": "4.0.0-alpha.6",
37
+ "@loaders.gl/schema": "4.0.0-alpha.6"
38
38
  },
39
- "gitHead": "7a71a54bdf1ddf985cc3af3db90b82e7fa97d025"
39
+ "gitHead": "acc1985050dfaa0f1f0c066f8da5bce7454a046c"
40
40
  }
package/src/index.ts CHANGED
@@ -1,13 +1,14 @@
1
- import type {LoaderWithParser} from '@loaders.gl/loader-utils';
1
+ import type {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';
2
2
  import parsePCDSync from './lib/parse-pcd';
3
3
  import {PCDLoader as PCDWorkerLoader} from './pcd-loader';
4
+ import {PCDMesh} from './lib/pcd-types';
4
5
 
5
6
  export {PCDWorkerLoader};
6
7
 
7
8
  /**
8
9
  * Loader for PCD - Point Cloud Data
9
10
  */
10
- export const PCDLoader = {
11
+ export const PCDLoader: LoaderWithParser<PCDMesh, never, LoaderOptions> = {
11
12
  ...PCDWorkerLoader,
12
13
  parse: async (arrayBuffer) => parsePCDSync(arrayBuffer),
13
14
  parseSync: parsePCDSync
@@ -19,8 +19,12 @@ export function decompressLZF(inData: Uint8Array, outLength: number): Uint8Array
19
19
 
20
20
  if (ctrl < 1 << 5) {
21
21
  ctrl++;
22
- if (outPtr + ctrl > outLength) throw new Error('Output buffer is not large enough');
23
- if (inPtr + ctrl > inLength) throw new Error('Invalid compressed data');
22
+ if (outPtr + ctrl > outLength) {
23
+ throw new Error('Output buffer is not large enough');
24
+ }
25
+ if (inPtr + ctrl > inLength) {
26
+ throw new Error('Invalid compressed data');
27
+ }
24
28
 
25
29
  do {
26
30
  outData[outPtr++] = inData[inPtr++];
@@ -28,17 +32,27 @@ export function decompressLZF(inData: Uint8Array, outLength: number): Uint8Array
28
32
  } else {
29
33
  len = ctrl >> 5;
30
34
  ref = outPtr - ((ctrl & 0x1f) << 8) - 1;
31
- if (inPtr >= inLength) throw new Error('Invalid compressed data');
35
+ if (inPtr >= inLength) {
36
+ throw new Error('Invalid compressed data');
37
+ }
32
38
 
33
39
  if (len === 7) {
34
40
  len += inData[inPtr++];
35
- if (inPtr >= inLength) throw new Error('Invalid compressed data');
41
+ if (inPtr >= inLength) {
42
+ throw new Error('Invalid compressed data');
43
+ }
36
44
  }
37
45
 
38
46
  ref -= inData[inPtr++];
39
- if (outPtr + len + 2 > outLength) throw new Error('Output buffer is not large enough');
40
- if (ref < 0) throw new Error('Invalid compressed data');
41
- if (ref >= outPtr) throw new Error('Invalid compressed data');
47
+ if (outPtr + len + 2 > outLength) {
48
+ throw new Error('Output buffer is not large enough');
49
+ }
50
+ if (ref < 0) {
51
+ throw new Error('Invalid compressed data');
52
+ }
53
+ if (ref >= outPtr) {
54
+ throw new Error('Invalid compressed data');
55
+ }
42
56
 
43
57
  do {
44
58
  outData[outPtr++] = outData[ref++];
@@ -1,32 +1,37 @@
1
- import {Schema, Field, Float32, Uint8, FixedSizeList} from '@loaders.gl/schema';
1
+ import {Schema, Field} from '@loaders.gl/schema';
2
2
  import type {PCDHeader} from './pcd-types';
3
3
 
4
- type SchemaMetadata = Map<string, any>;
5
-
6
4
  /**
7
5
  * Gets schema from PCD header
8
6
  * @param PCDheader
9
7
  * @param metadata
10
8
  * @returns Schema
11
9
  */
12
- export function getPCDSchema(PCDheader: PCDHeader, metadata: SchemaMetadata): Schema {
10
+ export function getPCDSchema(PCDheader: PCDHeader, metadata: Record<string, string>): Schema {
13
11
  const offset = PCDheader.offset;
14
12
 
15
13
  const fields: Field[] = [];
16
14
 
17
15
  if (offset.x !== undefined) {
18
- fields.push(
19
- new Field('POSITION', new FixedSizeList(3, new Field('xyz', new Float32())), false)
20
- );
16
+ fields.push({
17
+ name: 'POSITION',
18
+ type: {type: 'fixed-size-list', listSize: 3, children: [{name: 'xyz', type: 'float32'}]}
19
+ });
21
20
  }
22
21
 
23
22
  if (offset.normal_x !== undefined) {
24
- fields.push(new Field('NORMAL', new FixedSizeList(3, new Field('xyz', new Float32())), false));
23
+ fields.push({
24
+ name: 'NORMAL',
25
+ type: {type: 'fixed-size-list', listSize: 3, children: [{name: 'xyz', type: 'float32'}]}
26
+ });
25
27
  }
26
28
 
27
29
  if (offset.rgb !== undefined) {
28
- fields.push(new Field('COLOR_0', new FixedSizeList(3, new Field('rgb', new Uint8())), false));
30
+ fields.push({
31
+ name: 'COLOR_0',
32
+ type: {type: 'fixed-size-list', listSize: 3, children: [{name: 'rgb', type: 'uint8'}]}
33
+ });
29
34
  }
30
35
 
31
- return new Schema(fields, metadata);
36
+ return {fields, metadata};
32
37
  }
@@ -6,11 +6,16 @@
6
6
  // @author Filipe Caixeta / http://filipecaixeta.com.br
7
7
  // @author Mugen87 / https://github.com/Mugen87
8
8
 
9
- import type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';
9
+ import {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';
10
10
  import {getMeshBoundingBox} from '@loaders.gl/schema';
11
11
  import {decompressLZF} from './decompress-lzf';
12
12
  import {getPCDSchema} from './get-pcd-schema';
13
- import type {PCDHeader} from './pcd-types';
13
+ import type {PCDHeader, PCDMesh} from './pcd-types';
14
+
15
+ type MeshHeader = {
16
+ vertexCount: number;
17
+ boundingBox: [[number, number, number], [number, number, number]];
18
+ };
14
19
 
15
20
  type NormalizedAttributes = {
16
21
  POSITION: {
@@ -38,7 +43,7 @@ const LITTLE_ENDIAN: boolean = true;
38
43
  * @param data
39
44
  * @returns
40
45
  */
41
- export default function parsePCD(data: ArrayBufferLike) {
46
+ export default function parsePCD(data: ArrayBufferLike): PCDMesh {
42
47
  // parse header (always ascii format)
43
48
  const textData = new TextDecoder().decode(data);
44
49
  const pcdHeader = parsePCDHeader(textData);
@@ -67,7 +72,7 @@ export default function parsePCD(data: ArrayBufferLike) {
67
72
 
68
73
  const header = getMeshHeader(pcdHeader, attributes);
69
74
 
70
- const metadata = new Map([
75
+ const metadata = Object.fromEntries([
71
76
  ['mode', '0'],
72
77
  ['boundingBox', JSON.stringify(header.boundingBox)]
73
78
  ]);
@@ -75,19 +80,18 @@ export default function parsePCD(data: ArrayBufferLike) {
75
80
  const schema = getPCDSchema(pcdHeader, metadata);
76
81
 
77
82
  return {
78
- loaderData: {
79
- header: pcdHeader
80
- },
83
+ loader: 'pcd',
84
+ loaderData: pcdHeader,
81
85
  header,
82
86
  schema,
83
87
  mode: 0, // POINTS
84
- indices: null,
88
+ topology: 'point-list',
85
89
  attributes
86
90
  };
87
91
  }
88
92
 
89
93
  // Create a header that contains common data for PointCloud category loaders
90
- function getMeshHeader(pcdHeader: PCDHeader, attributes: NormalizedAttributes): Partial<PCDHeader> {
94
+ function getMeshHeader(pcdHeader: PCDHeader, attributes: NormalizedAttributes): MeshHeader {
91
95
  if (typeof pcdHeader.width === 'number' && typeof pcdHeader.height === 'number') {
92
96
  const pointCount = pcdHeader.width * pcdHeader.height; // Supports "organized" point sets
93
97
  return {
@@ -95,7 +99,10 @@ function getMeshHeader(pcdHeader: PCDHeader, attributes: NormalizedAttributes):
95
99
  boundingBox: getMeshBoundingBox(attributes)
96
100
  };
97
101
  }
98
- return pcdHeader;
102
+ return {
103
+ vertexCount: pcdHeader.vertexCount,
104
+ boundingBox: pcdHeader.boundingBox
105
+ };
99
106
  }
100
107
 
101
108
  /**
@@ -126,6 +133,22 @@ function getMeshAttributes(attributes: HeaderAttributes): {[attributeName: strin
126
133
  };
127
134
  }
128
135
 
136
+ if (attributes.intensity && attributes.intensity.length > 0) {
137
+ // TODO - RGBA
138
+ normalizedAttributes.COLOR_0 = {
139
+ value: new Uint8Array(attributes.color),
140
+ size: 3
141
+ };
142
+ }
143
+
144
+ if (attributes.label && attributes.label.length > 0) {
145
+ // TODO - RGBA
146
+ normalizedAttributes.COLOR_0 = {
147
+ value: new Uint8Array(attributes.label),
148
+ size: 3
149
+ };
150
+ }
151
+
129
152
  return normalizedAttributes;
130
153
  }
131
154
 
@@ -240,11 +263,13 @@ function parsePCDHeader(data: string): PCDHeader {
240
263
  * @param textData
241
264
  * @returns [attributes]
242
265
  */
243
- /* eslint-enable complexity, max-statements */
266
+ // eslint-enable-next-line complexity, max-statements
244
267
  function parsePCDASCII(pcdHeader: PCDHeader, textData: string): HeaderAttributes {
245
268
  const position: number[] = [];
246
269
  const normal: number[] = [];
247
270
  const color: number[] = [];
271
+ const intensity: number[] = [];
272
+ const label: number[] = [];
248
273
 
249
274
  const offset = pcdHeader.offset;
250
275
  const pcdData = textData.substr(pcdHeader.headerLen);
@@ -275,6 +300,14 @@ function parsePCDASCII(pcdHeader: PCDHeader, textData: string): HeaderAttributes
275
300
  normal.push(parseFloat(line[offset.normal_y]));
276
301
  normal.push(parseFloat(line[offset.normal_z]));
277
302
  }
303
+
304
+ if (offset.intensity !== undefined) {
305
+ intensity.push(parseFloat(line[offset.intensity]));
306
+ }
307
+
308
+ if (offset.label !== undefined) {
309
+ label.push(parseInt(line[offset.label]));
310
+ }
278
311
  }
279
312
  }
280
313
 
@@ -290,6 +323,8 @@ function parsePCDBinary(pcdHeader: PCDHeader, data: ArrayBufferLike): HeaderAttr
290
323
  const position: number[] = [];
291
324
  const normal: number[] = [];
292
325
  const color: number[] = [];
326
+ const intensity: number[] = [];
327
+ const label: number[] = [];
293
328
 
294
329
  const dataview = new DataView(data, pcdHeader.headerLen);
295
330
  const offset = pcdHeader.offset;
@@ -312,9 +347,17 @@ function parsePCDBinary(pcdHeader: PCDHeader, data: ArrayBufferLike): HeaderAttr
312
347
  normal.push(dataview.getFloat32(row + offset.normal_y, LITTLE_ENDIAN));
313
348
  normal.push(dataview.getFloat32(row + offset.normal_z, LITTLE_ENDIAN));
314
349
  }
350
+
351
+ if (offset.intensity !== undefined) {
352
+ intensity.push(dataview.getFloat32(row + offset.intensity, LITTLE_ENDIAN));
353
+ }
354
+
355
+ if (offset.label !== undefined) {
356
+ label.push(dataview.getInt32(row + offset.label, LITTLE_ENDIAN));
357
+ }
315
358
  }
316
359
 
317
- return {position, normal, color};
360
+ return {position, normal, color, intensity, label};
318
361
  }
319
362
 
320
363
  /** Parse compressed PCD data in in binary_compressed form ( https://pointclouds.org/documentation/tutorials/pcd_file_format.html)
@@ -324,78 +367,86 @@ function parsePCDBinary(pcdHeader: PCDHeader, data: ArrayBufferLike): HeaderAttr
324
367
  * @param data
325
368
  * @returns [attributes]
326
369
  */
327
- function parsePCDBinaryCompressed(PCDheader: PCDHeader, data: ArrayBufferLike): HeaderAttributes {
370
+ // eslint-enable-next-line complexity, max-statements
371
+ function parsePCDBinaryCompressed(pcdHeader: PCDHeader, data: ArrayBufferLike): HeaderAttributes {
328
372
  const position: number[] = [];
329
373
  const normal: number[] = [];
330
374
  const color: number[] = [];
375
+ const intensity: number[] = [];
376
+ const label: number[] = [];
331
377
 
332
- const sizes = new Uint32Array(data.slice(PCDheader.headerLen, PCDheader.headerLen + 8));
378
+ const sizes = new Uint32Array(data.slice(pcdHeader.headerLen, pcdHeader.headerLen + 8));
333
379
  const compressedSize = sizes[0];
334
380
  const decompressedSize = sizes[1];
335
381
  const decompressed = decompressLZF(
336
- new Uint8Array(data, PCDheader.headerLen + 8, compressedSize),
382
+ new Uint8Array(data, pcdHeader.headerLen + 8, compressedSize),
337
383
  decompressedSize
338
384
  );
339
385
  const dataview = new DataView(decompressed.buffer);
340
386
 
341
- const offset = PCDheader.offset;
387
+ const offset = pcdHeader.offset;
342
388
 
343
- for (let i = 0; i < PCDheader.points; i++) {
389
+ for (let i = 0; i < pcdHeader.points; i++) {
344
390
  if (offset.x !== undefined) {
345
391
  position.push(
346
- dataview.getFloat32(
347
- (PCDheader.points as number) * offset.x + (PCDheader.size as number[])[0] * i,
348
- LITTLE_ENDIAN
349
- )
392
+ dataview.getFloat32(pcdHeader.points * offset.x + pcdHeader.size[0] * i, LITTLE_ENDIAN)
350
393
  );
351
394
  position.push(
352
- dataview.getFloat32(
353
- (PCDheader.points as number) * offset.y + (PCDheader.size as number[])[1] * i,
354
- LITTLE_ENDIAN
355
- )
395
+ dataview.getFloat32(pcdHeader.points * offset.y + pcdHeader.size[1] * i, LITTLE_ENDIAN)
356
396
  );
357
397
  position.push(
358
- dataview.getFloat32(
359
- (PCDheader.points as number) * offset.z + (PCDheader.size as number[])[2] * i,
360
- LITTLE_ENDIAN
361
- )
398
+ dataview.getFloat32(pcdHeader.points * offset.z + pcdHeader.size[2] * i, LITTLE_ENDIAN)
362
399
  );
363
400
  }
364
401
 
365
402
  if (offset.rgb !== undefined) {
366
403
  color.push(
367
- dataview.getUint8(
368
- (PCDheader.points as number) * offset.rgb + (PCDheader.size as number[])[3] * i + 0
369
- ) / 255.0
404
+ dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 0) / 255.0
370
405
  );
371
406
  color.push(
372
- dataview.getUint8(
373
- (PCDheader.points as number) * offset.rgb + (PCDheader.size as number[])[3] * i + 1
374
- ) / 255.0
407
+ dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 1) / 255.0
375
408
  );
376
409
  color.push(
377
- dataview.getUint8(
378
- (PCDheader.points as number) * offset.rgb + (PCDheader.size as number[])[3] * i + 2
379
- ) / 255.0
410
+ dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 2) / 255.0
380
411
  );
381
412
  }
382
413
 
383
414
  if (offset.normal_x !== undefined) {
384
415
  normal.push(
385
416
  dataview.getFloat32(
386
- (PCDheader.points as number) * offset.normal_x + (PCDheader.size as number[])[4] * i,
417
+ pcdHeader.points * offset.normal_x + pcdHeader.size[4] * i,
387
418
  LITTLE_ENDIAN
388
419
  )
389
420
  );
390
421
  normal.push(
391
422
  dataview.getFloat32(
392
- (PCDheader.points as number) * offset.normal_y + (PCDheader.size as number[])[5] * i,
423
+ pcdHeader.points * offset.normal_y + pcdHeader.size[5] * i,
393
424
  LITTLE_ENDIAN
394
425
  )
395
426
  );
396
427
  normal.push(
397
428
  dataview.getFloat32(
398
- (PCDheader.points as number) * offset.normal_z + (PCDheader.size as number[])[6] * i,
429
+ pcdHeader.points * offset.normal_z + pcdHeader.size[6] * i,
430
+ LITTLE_ENDIAN
431
+ )
432
+ );
433
+ }
434
+
435
+ if (offset.intensity !== undefined) {
436
+ const intensityIndex = pcdHeader.fields.indexOf('intensity');
437
+ intensity.push(
438
+ dataview.getFloat32(
439
+ pcdHeader.points * offset.intensity + pcdHeader.size[intensityIndex] * i,
440
+ LITTLE_ENDIAN
441
+ )
442
+ );
443
+ }
444
+
445
+ if (offset.label !== undefined) {
446
+ const labelIndex = pcdHeader.fields.indexOf('label');
447
+ label.push(
448
+ dataview.getInt32(
449
+ pcdHeader.points * offset.label + pcdHeader.size[labelIndex] * i,
399
450
  LITTLE_ENDIAN
400
451
  )
401
452
  );
@@ -405,6 +456,8 @@ function parsePCDBinaryCompressed(PCDheader: PCDHeader, data: ArrayBufferLike):
405
456
  return {
406
457
  position,
407
458
  normal,
408
- color
459
+ color,
460
+ intensity,
461
+ label
409
462
  };
410
463
  }
@@ -6,15 +6,15 @@ export type PCDHeader = {
6
6
  data: any;
7
7
  headerLen: number;
8
8
  str: string;
9
- version: RegExpExecArray | null | number;
10
- fields: RegExpExecArray | null | string[];
11
- size: RegExpExecArray | null | number[];
12
- type: RegExpExecArray | null | string[];
13
- count: RegExpExecArray | null | number[];
14
- width: RegExpExecArray | number;
15
- height: RegExpExecArray | number;
16
- viewpoint: RegExpExecArray | null | string;
17
- points: RegExpExecArray | number;
9
+ version: number;
10
+ fields: string[];
11
+ size: number[];
12
+ type: null | string[];
13
+ count: null | number[];
14
+ width: number;
15
+ height: number;
16
+ viewpoint: null | string;
17
+ points: number;
18
18
  offset: {[index: string]: number};
19
19
  rowSize: number;
20
20
  vertexCount: number;
package/src/pcd-loader.ts CHANGED
@@ -1,4 +1,7 @@
1
- import type {Loader} from '@loaders.gl/loader-utils';
1
+ // loaders.gl, MIT license
2
+
3
+ import type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';
4
+ import {PCDMesh} from './lib/pcd-types';
2
5
 
3
6
  // __VERSION__ is injected by babel-plugin-version-inline
4
7
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
@@ -7,7 +10,7 @@ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
7
10
  /**
8
11
  * Worker loader for PCD - Point Cloud Data
9
12
  */
10
- export const PCDLoader = {
13
+ export const PCDLoader: Loader<PCDMesh, never, LoaderOptions> = {
11
14
  name: 'PCD (Point Cloud Data)',
12
15
  id: 'pcd',
13
16
  module: 'pcd',
@@ -19,5 +22,3 @@ export const PCDLoader = {
19
22
  pcd: {}
20
23
  }
21
24
  };
22
-
23
- export const _typecheckPCDLoader: Loader = PCDLoader;
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/bundle.ts"],"names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"mappings":"AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACAC,UAAU,CAACC,OAAX,GAAqBD,UAAU,CAACC,OAAX,IAAsB,EAA3C;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,OAAzB,EAAkCH,aAAlC,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"file":"bundle.js"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["parsePCDSync","PCDLoader","PCDWorkerLoader","parse","arrayBuffer","parseSync","_typecheckPCDLoader"],"mappings":"AACA,OAAOA,YAAP,MAAyB,iBAAzB;AACA,SAAQC,SAAS,IAAIC,eAArB,QAA2C,cAA3C;AAEA,SAAQA,eAAR;AAKA,OAAO,MAAMD,SAAS,GAAG,EACvB,GAAGC,eADoB;AAEvBC,EAAAA,KAAK,EAAE,MAAOC,WAAP,IAAuBJ,YAAY,CAACI,WAAD,CAFnB;AAGvBC,EAAAA,SAAS,EAAEL;AAHY,CAAlB;AAMP,OAAO,MAAMM,mBAAqC,GAAGL,SAA9C","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport parsePCDSync from './lib/parse-pcd';\nimport {PCDLoader as PCDWorkerLoader} from './pcd-loader';\n\nexport {PCDWorkerLoader};\n\n/**\n * Loader for PCD - Point Cloud Data\n */\nexport const PCDLoader = {\n ...PCDWorkerLoader,\n parse: async (arrayBuffer) => parsePCDSync(arrayBuffer),\n parseSync: parsePCDSync\n};\n\nexport const _typecheckPCDLoader: LoaderWithParser = PCDLoader;\n"],"file":"index.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/lib/decompress-lzf.ts"],"names":["decompressLZF","inData","outLength","inLength","length","outData","Uint8Array","inPtr","outPtr","ctrl","len","ref","Error"],"mappings":"AAOA,OAAO,SAASA,aAAT,CAAuBC,MAAvB,EAA2CC,SAA3C,EAA0E;AAC/E,QAAMC,QAAQ,GAAGF,MAAM,CAACG,MAAxB;AACA,QAAMC,OAAO,GAAG,IAAIC,UAAJ,CAAeJ,SAAf,CAAhB;AACA,MAAIK,KAAK,GAAG,CAAZ;AACA,MAAIC,MAAM,GAAG,CAAb;AACA,MAAIC,IAAJ;AACA,MAAIC,GAAJ;AACA,MAAIC,GAAJ;;AAEA,KAAG;AACDF,IAAAA,IAAI,GAAGR,MAAM,CAACM,KAAK,EAAN,CAAb;;AAEA,QAAIE,IAAI,GAAG,KAAK,CAAhB,EAAmB;AACjBA,MAAAA,IAAI;AACJ,UAAID,MAAM,GAAGC,IAAT,GAAgBP,SAApB,EAA+B,MAAM,IAAIU,KAAJ,CAAU,mCAAV,CAAN;AAC/B,UAAIL,KAAK,GAAGE,IAAR,GAAeN,QAAnB,EAA6B,MAAM,IAAIS,KAAJ,CAAU,yBAAV,CAAN;;AAE7B,SAAG;AACDP,QAAAA,OAAO,CAACG,MAAM,EAAP,CAAP,GAAoBP,MAAM,CAACM,KAAK,EAAN,CAA1B;AACD,OAFD,QAES,EAAEE,IAFX;AAGD,KARD,MAQO;AACLC,MAAAA,GAAG,GAAGD,IAAI,IAAI,CAAd;AACAE,MAAAA,GAAG,GAAGH,MAAM,IAAI,CAACC,IAAI,GAAG,IAAR,KAAiB,CAArB,CAAN,GAAgC,CAAtC;AACA,UAAIF,KAAK,IAAIJ,QAAb,EAAuB,MAAM,IAAIS,KAAJ,CAAU,yBAAV,CAAN;;AAEvB,UAAIF,GAAG,KAAK,CAAZ,EAAe;AACbA,QAAAA,GAAG,IAAIT,MAAM,CAACM,KAAK,EAAN,CAAb;AACA,YAAIA,KAAK,IAAIJ,QAAb,EAAuB,MAAM,IAAIS,KAAJ,CAAU,yBAAV,CAAN;AACxB;;AAEDD,MAAAA,GAAG,IAAIV,MAAM,CAACM,KAAK,EAAN,CAAb;AACA,UAAIC,MAAM,GAAGE,GAAT,GAAe,CAAf,GAAmBR,SAAvB,EAAkC,MAAM,IAAIU,KAAJ,CAAU,mCAAV,CAAN;AAClC,UAAID,GAAG,GAAG,CAAV,EAAa,MAAM,IAAIC,KAAJ,CAAU,yBAAV,CAAN;AACb,UAAID,GAAG,IAAIH,MAAX,EAAmB,MAAM,IAAII,KAAJ,CAAU,yBAAV,CAAN;;AAEnB,SAAG;AACDP,QAAAA,OAAO,CAACG,MAAM,EAAP,CAAP,GAAoBH,OAAO,CAACM,GAAG,EAAJ,CAA3B;AACD,OAFD,QAES,EAAED,GAAF,GAAQ,CAFjB;AAGD;AACF,GA9BD,QA8BSH,KAAK,GAAGJ,QA9BjB;;AAgCA,SAAOE,OAAP;AACD","sourcesContent":["/* eslint-disable */\n/**\n * from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n * @param inData\n * @param outLength\n * @returns\n */\nexport function decompressLZF(inData: Uint8Array, outLength: number): Uint8Array {\n const inLength = inData.length;\n const outData = new Uint8Array(outLength);\n let inPtr = 0;\n let outPtr = 0;\n let ctrl;\n let len;\n let ref;\n\n do {\n ctrl = inData[inPtr++];\n\n if (ctrl < 1 << 5) {\n ctrl++;\n if (outPtr + ctrl > outLength) throw new Error('Output buffer is not large enough');\n if (inPtr + ctrl > inLength) throw new Error('Invalid compressed data');\n\n do {\n outData[outPtr++] = inData[inPtr++];\n } while (--ctrl);\n } else {\n len = ctrl >> 5;\n ref = outPtr - ((ctrl & 0x1f) << 8) - 1;\n if (inPtr >= inLength) throw new Error('Invalid compressed data');\n\n if (len === 7) {\n len += inData[inPtr++];\n if (inPtr >= inLength) throw new Error('Invalid compressed data');\n }\n\n ref -= inData[inPtr++];\n if (outPtr + len + 2 > outLength) throw new Error('Output buffer is not large enough');\n if (ref < 0) throw new Error('Invalid compressed data');\n if (ref >= outPtr) throw new Error('Invalid compressed data');\n\n do {\n outData[outPtr++] = outData[ref++];\n } while (--len + 2);\n }\n } while (inPtr < inLength);\n\n return outData;\n}\n"],"file":"decompress-lzf.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/lib/get-pcd-schema.ts"],"names":["Schema","Field","Float32","Uint8","FixedSizeList","getPCDSchema","PCDheader","metadata","offset","fields","x","undefined","push","normal_x","rgb"],"mappings":"AAAA,SAAQA,MAAR,EAAgBC,KAAhB,EAAuBC,OAAvB,EAAgCC,KAAhC,EAAuCC,aAAvC,QAA2D,oBAA3D;AAWA,OAAO,SAASC,YAAT,CAAsBC,SAAtB,EAA4CC,QAA5C,EAA8E;AACnF,QAAMC,MAAM,GAAGF,SAAS,CAACE,MAAzB;AAEA,QAAMC,MAAe,GAAG,EAAxB;;AAEA,MAAID,MAAM,CAACE,CAAP,KAAaC,SAAjB,EAA4B;AAC1BF,IAAAA,MAAM,CAACG,IAAP,CACE,IAAIX,KAAJ,CAAU,UAAV,EAAsB,IAAIG,aAAJ,CAAkB,CAAlB,EAAqB,IAAIH,KAAJ,CAAU,KAAV,EAAiB,IAAIC,OAAJ,EAAjB,CAArB,CAAtB,EAA6E,KAA7E,CADF;AAGD;;AAED,MAAIM,MAAM,CAACK,QAAP,KAAoBF,SAAxB,EAAmC;AACjCF,IAAAA,MAAM,CAACG,IAAP,CAAY,IAAIX,KAAJ,CAAU,QAAV,EAAoB,IAAIG,aAAJ,CAAkB,CAAlB,EAAqB,IAAIH,KAAJ,CAAU,KAAV,EAAiB,IAAIC,OAAJ,EAAjB,CAArB,CAApB,EAA2E,KAA3E,CAAZ;AACD;;AAED,MAAIM,MAAM,CAACM,GAAP,KAAeH,SAAnB,EAA8B;AAC5BF,IAAAA,MAAM,CAACG,IAAP,CAAY,IAAIX,KAAJ,CAAU,SAAV,EAAqB,IAAIG,aAAJ,CAAkB,CAAlB,EAAqB,IAAIH,KAAJ,CAAU,KAAV,EAAiB,IAAIE,KAAJ,EAAjB,CAArB,CAArB,EAA0E,KAA1E,CAAZ;AACD;;AAED,SAAO,IAAIH,MAAJ,CAAWS,MAAX,EAAmBF,QAAnB,CAAP;AACD","sourcesContent":["import {Schema, Field, Float32, Uint8, FixedSizeList} from '@loaders.gl/schema';\nimport type {PCDHeader} from './pcd-types';\n\ntype SchemaMetadata = Map<string, any>;\n\n/**\n * Gets schema from PCD header\n * @param PCDheader\n * @param metadata\n * @returns Schema\n */\nexport function getPCDSchema(PCDheader: PCDHeader, metadata: SchemaMetadata): Schema {\n const offset = PCDheader.offset;\n\n const fields: Field[] = [];\n\n if (offset.x !== undefined) {\n fields.push(\n new Field('POSITION', new FixedSizeList(3, new Field('xyz', new Float32())), false)\n );\n }\n\n if (offset.normal_x !== undefined) {\n fields.push(new Field('NORMAL', new FixedSizeList(3, new Field('xyz', new Float32())), false));\n }\n\n if (offset.rgb !== undefined) {\n fields.push(new Field('COLOR_0', new FixedSizeList(3, new Field('rgb', new Uint8())), false));\n }\n\n return new Schema(fields, metadata);\n}\n"],"file":"get-pcd-schema.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/lib/parse-pcd.ts"],"names":["getMeshBoundingBox","decompressLZF","getPCDSchema","LITTLE_ENDIAN","parsePCD","data","textData","TextDecoder","decode","pcdHeader","parsePCDHeader","attributes","parsePCDASCII","parsePCDBinary","parsePCDBinaryCompressed","Error","getMeshAttributes","header","getMeshHeader","metadata","Map","JSON","stringify","boundingBox","schema","loaderData","mode","indices","width","height","pointCount","vertexCount","normalizedAttributes","POSITION","value","Float32Array","position","size","normal","length","NORMAL","color","COLOR_0","Uint8Array","result1","search","result2","exec","substr","headerLen","str","replace","version","fields","type","count","viewpoint","points","parseFloat","split","parseInt","map","x","i","push","offset","sizeSum","rowSize","pcdData","lines","line","undefined","y","z","rgb","floatValue","binaryColor","dataview","DataView","buffer","getUint8","normal_x","normal_y","normal_z","row","getFloat32","PCDheader","sizes","Uint32Array","slice","compressedSize","decompressedSize","decompressed"],"mappings":"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","sourcesContent":["// PCD Loader, adapted from THREE.js (MIT license)\n// Description: A loader for PCD ascii and binary files.\n// Limitations: Compressed binary files are not supported.\n//\n// Attributions per original THREE.js source file:\n// @author Filipe Caixeta / http://filipecaixeta.com.br\n// @author Mugen87 / https://github.com/Mugen87\n\nimport type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport {decompressLZF} from './decompress-lzf';\nimport {getPCDSchema} from './get-pcd-schema';\nimport type {PCDHeader} from './pcd-types';\n\ntype NormalizedAttributes = {\n POSITION: {\n value: Float32Array;\n size: number;\n };\n NORMAL?: {\n value: Float32Array;\n size: number;\n };\n COLOR_0?: {\n value: Uint8Array;\n size: number;\n };\n};\n\ntype HeaderAttributes = {\n [attributeName: string]: number[];\n};\n\nconst LITTLE_ENDIAN: boolean = true;\n\n/**\n *\n * @param data\n * @returns\n */\nexport default function parsePCD(data: ArrayBufferLike) {\n // parse header (always ascii format)\n const textData = new TextDecoder().decode(data);\n const pcdHeader = parsePCDHeader(textData);\n\n let attributes: any = {};\n\n // parse data\n switch (pcdHeader.data) {\n case 'ascii':\n attributes = parsePCDASCII(pcdHeader, textData);\n break;\n\n case 'binary':\n attributes = parsePCDBinary(pcdHeader, data);\n break;\n\n case 'binary_compressed':\n attributes = parsePCDBinaryCompressed(pcdHeader, data);\n break;\n\n default:\n throw new Error(`PCD: ${pcdHeader.data} files are not supported`);\n }\n\n attributes = getMeshAttributes(attributes);\n\n const header = getMeshHeader(pcdHeader, attributes);\n\n const metadata = new Map([\n ['mode', '0'],\n ['boundingBox', JSON.stringify(header.boundingBox)]\n ]);\n\n const schema = getPCDSchema(pcdHeader, metadata);\n\n return {\n loaderData: {\n header: pcdHeader\n },\n header,\n schema,\n mode: 0, // POINTS\n indices: null,\n attributes\n };\n}\n\n// Create a header that contains common data for PointCloud category loaders\nfunction getMeshHeader(pcdHeader: PCDHeader, attributes: NormalizedAttributes): Partial<PCDHeader> {\n if (typeof pcdHeader.width === 'number' && typeof pcdHeader.height === 'number') {\n const pointCount = pcdHeader.width * pcdHeader.height; // Supports \"organized\" point sets\n return {\n vertexCount: pointCount,\n boundingBox: getMeshBoundingBox(attributes)\n };\n }\n return pcdHeader;\n}\n\n/**\n * @param attributes\n * @returns Normalized attributes\n */\nfunction getMeshAttributes(attributes: HeaderAttributes): {[attributeName: string]: MeshAttribute} {\n const normalizedAttributes: MeshAttributes = {\n POSITION: {\n // Binary PCD is only 32 bit\n value: new Float32Array(attributes.position),\n size: 3\n }\n };\n\n if (attributes.normal && attributes.normal.length > 0) {\n normalizedAttributes.NORMAL = {\n value: new Float32Array(attributes.normal),\n size: 3\n };\n }\n\n if (attributes.color && attributes.color.length > 0) {\n // TODO - RGBA\n normalizedAttributes.COLOR_0 = {\n value: new Uint8Array(attributes.color),\n size: 3\n };\n }\n\n return normalizedAttributes;\n}\n\n/**\n * Incoming data parsing\n * @param data\n * @returns Header\n */\n/* eslint-disable complexity, max-statements */\nfunction parsePCDHeader(data: string): PCDHeader {\n const result1 = data.search(/[\\r\\n]DATA\\s(\\S*)\\s/i);\n const result2 = /[\\r\\n]DATA\\s(\\S*)\\s/i.exec(data.substr(result1 - 1));\n\n const pcdHeader: any = {};\n pcdHeader.data = result2 && result2[1];\n if (result2 !== null) {\n pcdHeader.headerLen = (result2 && result2[0].length) + result1;\n }\n pcdHeader.str = data.substr(0, pcdHeader.headerLen);\n\n // remove comments\n\n pcdHeader.str = pcdHeader.str.replace(/\\#.*/gi, '');\n\n // parse\n\n pcdHeader.version = /VERSION (.*)/i.exec(pcdHeader.str);\n pcdHeader.fields = /FIELDS (.*)/i.exec(pcdHeader.str);\n pcdHeader.size = /SIZE (.*)/i.exec(pcdHeader.str);\n pcdHeader.type = /TYPE (.*)/i.exec(pcdHeader.str);\n pcdHeader.count = /COUNT (.*)/i.exec(pcdHeader.str);\n pcdHeader.width = /WIDTH (.*)/i.exec(pcdHeader.str);\n pcdHeader.height = /HEIGHT (.*)/i.exec(pcdHeader.str);\n pcdHeader.viewpoint = /VIEWPOINT (.*)/i.exec(pcdHeader.str);\n pcdHeader.points = /POINTS (.*)/i.exec(pcdHeader.str);\n\n // evaluate\n\n if (pcdHeader.version !== null) {\n pcdHeader.version = parseFloat(pcdHeader.version[1]);\n }\n\n if (pcdHeader.fields !== null) {\n pcdHeader.fields = pcdHeader.fields[1].split(' ');\n }\n\n if (pcdHeader.type !== null) {\n pcdHeader.type = pcdHeader.type[1].split(' ');\n }\n\n if (pcdHeader.width !== null) {\n pcdHeader.width = parseInt(pcdHeader.width[1], 10);\n }\n\n if (pcdHeader.height !== null) {\n pcdHeader.height = parseInt(pcdHeader.height[1], 10);\n }\n\n if (pcdHeader.viewpoint !== null) {\n pcdHeader.viewpoint = pcdHeader.viewpoint[1];\n }\n\n if (pcdHeader.points !== null) {\n pcdHeader.points = parseInt(pcdHeader.points[1], 10);\n }\n\n if (\n pcdHeader.points === null &&\n typeof pcdHeader.width === 'number' &&\n typeof pcdHeader.height === 'number'\n ) {\n pcdHeader.points = pcdHeader.width * pcdHeader.height;\n }\n\n if (pcdHeader.size !== null) {\n pcdHeader.size = pcdHeader.size[1].split(' ').map((x) => parseInt(x, 10));\n }\n\n if (pcdHeader.count !== null) {\n pcdHeader.count = pcdHeader.count[1].split(' ').map((x) => parseInt(x, 10));\n } else {\n pcdHeader.count = [];\n if (pcdHeader.fields !== null) {\n for (let i = 0; i < pcdHeader.fields.length; i++) {\n pcdHeader.count.push(1);\n }\n }\n }\n\n pcdHeader.offset = {};\n\n let sizeSum = 0;\n if (pcdHeader.fields !== null && pcdHeader.size !== null) {\n for (let i = 0; i < pcdHeader.fields.length; i++) {\n if (pcdHeader.data === 'ascii') {\n pcdHeader.offset[pcdHeader.fields[i]] = i;\n } else {\n pcdHeader.offset[pcdHeader.fields[i]] = sizeSum;\n sizeSum += pcdHeader.size[i];\n }\n }\n }\n\n // for binary only\n pcdHeader.rowSize = sizeSum;\n\n return pcdHeader;\n}\n\n/**\n * @param pcdHeader\n * @param textData\n * @returns [attributes]\n */\n/* eslint-enable complexity, max-statements */\nfunction parsePCDASCII(pcdHeader: PCDHeader, textData: string): HeaderAttributes {\n const position: number[] = [];\n const normal: number[] = [];\n const color: number[] = [];\n\n const offset = pcdHeader.offset;\n const pcdData = textData.substr(pcdHeader.headerLen);\n const lines = pcdData.split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n if (lines[i] !== '') {\n const line = lines[i].split(' ');\n\n if (offset.x !== undefined) {\n position.push(parseFloat(line[offset.x]));\n position.push(parseFloat(line[offset.y]));\n position.push(parseFloat(line[offset.z]));\n }\n\n if (offset.rgb !== undefined) {\n const floatValue = parseFloat(line[offset.rgb]);\n const binaryColor = new Float32Array([floatValue]);\n const dataview = new DataView(binaryColor.buffer, 0);\n color.push(dataview.getUint8(0));\n color.push(dataview.getUint8(1));\n color.push(dataview.getUint8(2));\n // TODO - handle alpha channel / RGBA?\n }\n\n if (offset.normal_x !== undefined) {\n normal.push(parseFloat(line[offset.normal_x]));\n normal.push(parseFloat(line[offset.normal_y]));\n normal.push(parseFloat(line[offset.normal_z]));\n }\n }\n }\n\n return {position, normal, color};\n}\n\n/**\n * @param pcdHeader\n * @param data\n * @returns [attributes]\n */\nfunction parsePCDBinary(pcdHeader: PCDHeader, data: ArrayBufferLike): HeaderAttributes {\n const position: number[] = [];\n const normal: number[] = [];\n const color: number[] = [];\n\n const dataview = new DataView(data, pcdHeader.headerLen);\n const offset = pcdHeader.offset;\n\n for (let i = 0, row = 0; i < pcdHeader.points; i++, row += pcdHeader.rowSize) {\n if (offset.x !== undefined) {\n position.push(dataview.getFloat32(row + offset.x, LITTLE_ENDIAN));\n position.push(dataview.getFloat32(row + offset.y, LITTLE_ENDIAN));\n position.push(dataview.getFloat32(row + offset.z, LITTLE_ENDIAN));\n }\n\n if (offset.rgb !== undefined) {\n color.push(dataview.getUint8(row + offset.rgb + 0));\n color.push(dataview.getUint8(row + offset.rgb + 1));\n color.push(dataview.getUint8(row + offset.rgb + 2));\n }\n\n if (offset.normal_x !== undefined) {\n normal.push(dataview.getFloat32(row + offset.normal_x, LITTLE_ENDIAN));\n normal.push(dataview.getFloat32(row + offset.normal_y, LITTLE_ENDIAN));\n normal.push(dataview.getFloat32(row + offset.normal_z, LITTLE_ENDIAN));\n }\n }\n\n return {position, normal, color};\n}\n\n/** Parse compressed PCD data in in binary_compressed form ( https://pointclouds.org/documentation/tutorials/pcd_file_format.html)\n * from https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/PCDLoader.js\n * @license MIT (http://opensource.org/licenses/MIT)\n * @param pcdHeader\n * @param data\n * @returns [attributes]\n */\nfunction parsePCDBinaryCompressed(PCDheader: PCDHeader, data: ArrayBufferLike): HeaderAttributes {\n const position: number[] = [];\n const normal: number[] = [];\n const color: number[] = [];\n\n const sizes = new Uint32Array(data.slice(PCDheader.headerLen, PCDheader.headerLen + 8));\n const compressedSize = sizes[0];\n const decompressedSize = sizes[1];\n const decompressed = decompressLZF(\n new Uint8Array(data, PCDheader.headerLen + 8, compressedSize),\n decompressedSize\n );\n const dataview = new DataView(decompressed.buffer);\n\n const offset = PCDheader.offset;\n\n for (let i = 0; i < PCDheader.points; i++) {\n if (offset.x !== undefined) {\n position.push(\n dataview.getFloat32(\n (PCDheader.points as number) * offset.x + (PCDheader.size as number[])[0] * i,\n LITTLE_ENDIAN\n )\n );\n position.push(\n dataview.getFloat32(\n (PCDheader.points as number) * offset.y + (PCDheader.size as number[])[1] * i,\n LITTLE_ENDIAN\n )\n );\n position.push(\n dataview.getFloat32(\n (PCDheader.points as number) * offset.z + (PCDheader.size as number[])[2] * i,\n LITTLE_ENDIAN\n )\n );\n }\n\n if (offset.rgb !== undefined) {\n color.push(\n dataview.getUint8(\n (PCDheader.points as number) * offset.rgb + (PCDheader.size as number[])[3] * i + 0\n ) / 255.0\n );\n color.push(\n dataview.getUint8(\n (PCDheader.points as number) * offset.rgb + (PCDheader.size as number[])[3] * i + 1\n ) / 255.0\n );\n color.push(\n dataview.getUint8(\n (PCDheader.points as number) * offset.rgb + (PCDheader.size as number[])[3] * i + 2\n ) / 255.0\n );\n }\n\n if (offset.normal_x !== undefined) {\n normal.push(\n dataview.getFloat32(\n (PCDheader.points as number) * offset.normal_x + (PCDheader.size as number[])[4] * i,\n LITTLE_ENDIAN\n )\n );\n normal.push(\n dataview.getFloat32(\n (PCDheader.points as number) * offset.normal_y + (PCDheader.size as number[])[5] * i,\n LITTLE_ENDIAN\n )\n );\n normal.push(\n dataview.getFloat32(\n (PCDheader.points as number) * offset.normal_z + (PCDheader.size as number[])[6] * i,\n LITTLE_ENDIAN\n )\n );\n }\n }\n\n return {\n position,\n normal,\n color\n };\n}\n"],"file":"parse-pcd.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"pcd-types.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/pcd-loader.ts"],"names":["VERSION","PCDLoader","name","id","module","version","worker","extensions","mimeTypes","options","pcd","_typecheckPCDLoader"],"mappings":"AAIA,MAAMA,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,QAAnE;AAKA,OAAO,MAAMC,SAAS,GAAG;AACvBC,EAAAA,IAAI,EAAE,wBADiB;AAEvBC,EAAAA,EAAE,EAAE,KAFmB;AAGvBC,EAAAA,MAAM,EAAE,KAHe;AAIvBC,EAAAA,OAAO,EAAEL,OAJc;AAKvBM,EAAAA,MAAM,EAAE,IALe;AAMvBC,EAAAA,UAAU,EAAE,CAAC,KAAD,CANW;AAOvBC,EAAAA,SAAS,EAAE,CAAC,YAAD,CAPY;AAQvBC,EAAAA,OAAO,EAAE;AACPC,IAAAA,GAAG,EAAE;AADE;AARc,CAAlB;AAaP,OAAO,MAAMC,mBAA2B,GAAGV,SAApC","sourcesContent":["import type {Loader} from '@loaders.gl/loader-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * Worker loader for PCD - Point Cloud Data\n */\nexport const PCDLoader = {\n name: 'PCD (Point Cloud Data)',\n id: 'pcd',\n module: 'pcd',\n version: VERSION,\n worker: true,\n extensions: ['pcd'],\n mimeTypes: ['text/plain'],\n options: {\n pcd: {}\n }\n};\n\nexport const _typecheckPCDLoader: Loader = PCDLoader;\n"],"file":"pcd-loader.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/workers/pcd-worker.ts"],"names":["createLoaderWorker","PCDLoader"],"mappings":"AAAA,SAAQA,kBAAR,QAAiC,0BAAjC;AACA,SAAQC,SAAR,QAAwB,UAAxB;AAEAD,kBAAkB,CAACC,SAAD,CAAlB","sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {PCDLoader} from '../index';\n\ncreateLoaderWorker(PCDLoader);\n"],"file":"pcd-worker.js"}