@loaders.gl/pcd 3.1.0-beta.6 → 3.1.2

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.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- const moduleExports = require('./index');
3
+ var moduleExports = require('./index');
4
4
 
5
5
  globalThis.loaders = globalThis.loaders || {};
6
6
  module.exports = Object.assign(globalThis.loaders, moduleExports);
@@ -1 +1 @@
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"}
1
+ {"version":3,"sources":["../../src/bundle.ts"],"names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"mappings":";;AACA,IAAMA,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/es5/index.js CHANGED
@@ -7,21 +7,53 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  Object.defineProperty(exports, "PCDWorkerLoader", {
9
9
  enumerable: true,
10
- get: function () {
10
+ get: function get() {
11
11
  return _pcdLoader.PCDLoader;
12
12
  }
13
13
  });
14
14
  exports._typecheckPCDLoader = exports.PCDLoader = void 0;
15
15
 
16
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
17
+
18
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
19
+
20
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
21
+
16
22
  var _parsePcd = _interopRequireDefault(require("./lib/parse-pcd"));
17
23
 
18
24
  var _pcdLoader = require("./pcd-loader");
19
25
 
20
- const PCDLoader = { ..._pcdLoader.PCDLoader,
21
- parse: async arrayBuffer => (0, _parsePcd.default)(arrayBuffer),
26
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
27
+
28
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
29
+
30
+ var PCDLoader = _objectSpread(_objectSpread({}, _pcdLoader.PCDLoader), {}, {
31
+ parse: function () {
32
+ var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer) {
33
+ return _regenerator.default.wrap(function _callee$(_context) {
34
+ while (1) {
35
+ switch (_context.prev = _context.next) {
36
+ case 0:
37
+ return _context.abrupt("return", (0, _parsePcd.default)(arrayBuffer));
38
+
39
+ case 1:
40
+ case "end":
41
+ return _context.stop();
42
+ }
43
+ }
44
+ }, _callee);
45
+ }));
46
+
47
+ function parse(_x) {
48
+ return _parse.apply(this, arguments);
49
+ }
50
+
51
+ return parse;
52
+ }(),
22
53
  parseSync: _parsePcd.default
23
- };
54
+ });
55
+
24
56
  exports.PCDLoader = PCDLoader;
25
- const _typecheckPCDLoader = PCDLoader;
57
+ var _typecheckPCDLoader = PCDLoader;
26
58
  exports._typecheckPCDLoader = _typecheckPCDLoader;
27
59
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":["PCDLoader","PCDWorkerLoader","parse","arrayBuffer","parseSync","parsePCDSync","_typecheckPCDLoader"],"mappings":";;;;;;;;;;;;;;;AACA;;AACA;;AAOO,MAAMA,SAAS,GAAG,EACvB,GAAGC,oBADoB;AAEvBC,EAAAA,KAAK,EAAE,MAAOC,WAAP,IAAuB,uBAAaA,WAAb,CAFP;AAGvBC,EAAAA,SAAS,EAAEC;AAHY,CAAlB;;AAMA,MAAMC,mBAAqC,GAAGN,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
+ {"version":3,"sources":["../../src/index.ts"],"names":["PCDLoader","PCDWorkerLoader","parse","arrayBuffer","parseSync","parsePCDSync","_typecheckPCDLoader"],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA;;AACA;;;;;;AAOO,IAAMA,SAAS,mCACjBC,oBADiB;AAEpBC,EAAAA,KAAK;AAAA,2EAAE,iBAAOC,WAAP;AAAA;AAAA;AAAA;AAAA;AAAA,+CAAuB,uBAAaA,WAAb,CAAvB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAF;;AAAA;AAAA;AAAA;;AAAA;AAAA,KAFe;AAGpBC,EAAAA,SAAS,EAAEC;AAHS,EAAf;;;AAMA,IAAMC,mBAAqC,GAAGN,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"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.decompressLZF = decompressLZF;
7
+
8
+ function decompressLZF(inData, outLength) {
9
+ var inLength = inData.length;
10
+ var outData = new Uint8Array(outLength);
11
+ var inPtr = 0;
12
+ var outPtr = 0;
13
+ var ctrl;
14
+ var len;
15
+ var ref;
16
+
17
+ do {
18
+ ctrl = inData[inPtr++];
19
+
20
+ if (ctrl < 1 << 5) {
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');
24
+
25
+ do {
26
+ outData[outPtr++] = inData[inPtr++];
27
+ } while (--ctrl);
28
+ } else {
29
+ len = ctrl >> 5;
30
+ ref = outPtr - ((ctrl & 0x1f) << 8) - 1;
31
+ if (inPtr >= inLength) throw new Error('Invalid compressed data');
32
+
33
+ if (len === 7) {
34
+ len += inData[inPtr++];
35
+ if (inPtr >= inLength) throw new Error('Invalid compressed data');
36
+ }
37
+
38
+ 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');
42
+
43
+ do {
44
+ outData[outPtr++] = outData[ref++];
45
+ } while (--len + 2);
46
+ }
47
+ } while (inPtr < inLength);
48
+
49
+ return outData;
50
+ }
51
+ //# sourceMappingURL=decompress-lzf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/decompress-lzf.ts"],"names":["decompressLZF","inData","outLength","inLength","length","outData","Uint8Array","inPtr","outPtr","ctrl","len","ref","Error"],"mappings":";;;;;;;AAOO,SAASA,aAAT,CAAuBC,MAAvB,EAA2CC,SAA3C,EAA0E;AAC/E,MAAMC,QAAQ,GAAGF,MAAM,CAACG,MAAxB;AACA,MAAMC,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"}
@@ -8,8 +8,8 @@ exports.getPCDSchema = getPCDSchema;
8
8
  var _schema = require("@loaders.gl/schema");
9
9
 
10
10
  function getPCDSchema(PCDheader, metadata) {
11
- const offset = PCDheader.offset;
12
- const fields = [];
11
+ var offset = PCDheader.offset;
12
+ var fields = [];
13
13
 
14
14
  if (offset.x !== undefined) {
15
15
  fields.push(new _schema.Field('POSITION', new _schema.FixedSizeList(3, new _schema.Field('xyz', new _schema.Float32())), false));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/get-pcd-schema.ts"],"names":["getPCDSchema","PCDheader","metadata","offset","fields","x","undefined","push","Field","FixedSizeList","Float32","normal_x","rgb","Uint8","Schema"],"mappings":";;;;;;;AAAA;;AAWO,SAASA,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,IAAIC,aAAJ,CAAU,UAAV,EAAsB,IAAIC,qBAAJ,CAAkB,CAAlB,EAAqB,IAAID,aAAJ,CAAU,KAAV,EAAiB,IAAIE,eAAJ,EAAjB,CAArB,CAAtB,EAA6E,KAA7E,CADF;AAGD;;AAED,MAAIP,MAAM,CAACQ,QAAP,KAAoBL,SAAxB,EAAmC;AACjCF,IAAAA,MAAM,CAACG,IAAP,CAAY,IAAIC,aAAJ,CAAU,QAAV,EAAoB,IAAIC,qBAAJ,CAAkB,CAAlB,EAAqB,IAAID,aAAJ,CAAU,KAAV,EAAiB,IAAIE,eAAJ,EAAjB,CAArB,CAApB,EAA2E,KAA3E,CAAZ;AACD;;AAED,MAAIP,MAAM,CAACS,GAAP,KAAeN,SAAnB,EAA8B;AAC5BF,IAAAA,MAAM,CAACG,IAAP,CAAY,IAAIC,aAAJ,CAAU,SAAV,EAAqB,IAAIC,qBAAJ,CAAkB,CAAlB,EAAqB,IAAID,aAAJ,CAAU,KAAV,EAAiB,IAAIK,aAAJ,EAAjB,CAArB,CAArB,EAA0E,KAA1E,CAAZ;AACD;;AAED,SAAO,IAAIC,cAAJ,CAAWV,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
+ {"version":3,"sources":["../../../src/lib/get-pcd-schema.ts"],"names":["getPCDSchema","PCDheader","metadata","offset","fields","x","undefined","push","Field","FixedSizeList","Float32","normal_x","rgb","Uint8","Schema"],"mappings":";;;;;;;AAAA;;AAWO,SAASA,YAAT,CAAsBC,SAAtB,EAA4CC,QAA5C,EAA8E;AACnF,MAAMC,MAAM,GAAGF,SAAS,CAACE,MAAzB;AAEA,MAAMC,MAAe,GAAG,EAAxB;;AAEA,MAAID,MAAM,CAACE,CAAP,KAAaC,SAAjB,EAA4B;AAC1BF,IAAAA,MAAM,CAACG,IAAP,CACE,IAAIC,aAAJ,CAAU,UAAV,EAAsB,IAAIC,qBAAJ,CAAkB,CAAlB,EAAqB,IAAID,aAAJ,CAAU,KAAV,EAAiB,IAAIE,eAAJ,EAAjB,CAArB,CAAtB,EAA6E,KAA7E,CADF;AAGD;;AAED,MAAIP,MAAM,CAACQ,QAAP,KAAoBL,SAAxB,EAAmC;AACjCF,IAAAA,MAAM,CAACG,IAAP,CAAY,IAAIC,aAAJ,CAAU,QAAV,EAAoB,IAAIC,qBAAJ,CAAkB,CAAlB,EAAqB,IAAID,aAAJ,CAAU,KAAV,EAAiB,IAAIE,eAAJ,EAAjB,CAArB,CAApB,EAA2E,KAA3E,CAAZ;AACD;;AAED,MAAIP,MAAM,CAACS,GAAP,KAAeN,SAAnB,EAA8B;AAC5BF,IAAAA,MAAM,CAACG,IAAP,CAAY,IAAIC,aAAJ,CAAU,SAAV,EAAqB,IAAIC,qBAAJ,CAAkB,CAAlB,EAAqB,IAAID,aAAJ,CAAU,KAAV,EAAiB,IAAIK,aAAJ,EAAjB,CAArB,CAArB,EAA0E,KAA1E,CAAZ;AACD;;AAED,SAAO,IAAIC,cAAJ,CAAWV,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"}
@@ -7,14 +7,16 @@ exports.default = parsePCD;
7
7
 
8
8
  var _schema = require("@loaders.gl/schema");
9
9
 
10
+ var _decompressLzf = require("./decompress-lzf");
11
+
10
12
  var _getPcdSchema = require("./get-pcd-schema");
11
13
 
12
- const LITTLE_ENDIAN = true;
14
+ var LITTLE_ENDIAN = true;
13
15
 
14
16
  function parsePCD(data) {
15
- const textData = new TextDecoder().decode(data);
16
- const pcdHeader = parsePCDHeader(textData);
17
- let attributes = {};
17
+ var textData = new TextDecoder().decode(data);
18
+ var pcdHeader = parsePCDHeader(textData);
19
+ var attributes = {};
18
20
 
19
21
  switch (pcdHeader.data) {
20
22
  case 'ascii':
@@ -26,29 +28,32 @@ function parsePCD(data) {
26
28
  break;
27
29
 
28
30
  case 'binary_compressed':
31
+ attributes = parsePCDBinaryCompressed(pcdHeader, data);
32
+ break;
33
+
29
34
  default:
30
35
  throw new Error("PCD: ".concat(pcdHeader.data, " files are not supported"));
31
36
  }
32
37
 
33
38
  attributes = getMeshAttributes(attributes);
34
- const header = getMeshHeader(pcdHeader, attributes);
35
- const metadata = new Map([['mode', '0'], ['boundingBox', JSON.stringify(header.boundingBox)]]);
36
- const schema = (0, _getPcdSchema.getPCDSchema)(pcdHeader, metadata);
39
+ var header = getMeshHeader(pcdHeader, attributes);
40
+ var metadata = new Map([['mode', '0'], ['boundingBox', JSON.stringify(header.boundingBox)]]);
41
+ var schema = (0, _getPcdSchema.getPCDSchema)(pcdHeader, metadata);
37
42
  return {
38
43
  loaderData: {
39
44
  header: pcdHeader
40
45
  },
41
- header,
42
- schema,
46
+ header: header,
47
+ schema: schema,
43
48
  mode: 0,
44
49
  indices: null,
45
- attributes
50
+ attributes: attributes
46
51
  };
47
52
  }
48
53
 
49
54
  function getMeshHeader(pcdHeader, attributes) {
50
55
  if (typeof pcdHeader.width === 'number' && typeof pcdHeader.height === 'number') {
51
- const pointCount = pcdHeader.width * pcdHeader.height;
56
+ var pointCount = pcdHeader.width * pcdHeader.height;
52
57
  return {
53
58
  vertexCount: pointCount,
54
59
  boundingBox: (0, _schema.getMeshBoundingBox)(attributes)
@@ -59,7 +64,7 @@ function getMeshHeader(pcdHeader, attributes) {
59
64
  }
60
65
 
61
66
  function getMeshAttributes(attributes) {
62
- const normalizedAttributes = {
67
+ var normalizedAttributes = {
63
68
  POSITION: {
64
69
  value: new Float32Array(attributes.position),
65
70
  size: 3
@@ -84,9 +89,9 @@ function getMeshAttributes(attributes) {
84
89
  }
85
90
 
86
91
  function parsePCDHeader(data) {
87
- const result1 = data.search(/[\r\n]DATA\s(\S*)\s/i);
88
- const result2 = /[\r\n]DATA\s(\S*)\s/i.exec(data.substr(result1 - 1));
89
- const pcdHeader = {};
92
+ var result1 = data.search(/[\r\n]DATA\s(\S*)\s/i);
93
+ var result2 = /[\r\n]DATA\s(\S*)\s/i.exec(data.substr(result1 - 1));
94
+ var pcdHeader = {};
90
95
  pcdHeader.data = result2 && result2[1];
91
96
 
92
97
  if (result2 !== null) {
@@ -138,31 +143,35 @@ function parsePCDHeader(data) {
138
143
  }
139
144
 
140
145
  if (pcdHeader.size !== null) {
141
- pcdHeader.size = pcdHeader.size[1].split(' ').map(x => parseInt(x, 10));
146
+ pcdHeader.size = pcdHeader.size[1].split(' ').map(function (x) {
147
+ return parseInt(x, 10);
148
+ });
142
149
  }
143
150
 
144
151
  if (pcdHeader.count !== null) {
145
- pcdHeader.count = pcdHeader.count[1].split(' ').map(x => parseInt(x, 10));
152
+ pcdHeader.count = pcdHeader.count[1].split(' ').map(function (x) {
153
+ return parseInt(x, 10);
154
+ });
146
155
  } else {
147
156
  pcdHeader.count = [];
148
157
 
149
158
  if (pcdHeader.fields !== null) {
150
- for (let i = 0; i < pcdHeader.fields.length; i++) {
159
+ for (var i = 0; i < pcdHeader.fields.length; i++) {
151
160
  pcdHeader.count.push(1);
152
161
  }
153
162
  }
154
163
  }
155
164
 
156
165
  pcdHeader.offset = {};
157
- let sizeSum = 0;
166
+ var sizeSum = 0;
158
167
 
159
168
  if (pcdHeader.fields !== null && pcdHeader.size !== null) {
160
- for (let i = 0; i < pcdHeader.fields.length; i++) {
169
+ for (var _i = 0; _i < pcdHeader.fields.length; _i++) {
161
170
  if (pcdHeader.data === 'ascii') {
162
- pcdHeader.offset[pcdHeader.fields[i]] = i;
171
+ pcdHeader.offset[pcdHeader.fields[_i]] = _i;
163
172
  } else {
164
- pcdHeader.offset[pcdHeader.fields[i]] = sizeSum;
165
- sizeSum += pcdHeader.size[i];
173
+ pcdHeader.offset[pcdHeader.fields[_i]] = sizeSum;
174
+ sizeSum += pcdHeader.size[_i];
166
175
  }
167
176
  }
168
177
  }
@@ -172,16 +181,16 @@ function parsePCDHeader(data) {
172
181
  }
173
182
 
174
183
  function parsePCDASCII(pcdHeader, textData) {
175
- const position = [];
176
- const normal = [];
177
- const color = [];
178
- const offset = pcdHeader.offset;
179
- const pcdData = textData.substr(pcdHeader.headerLen);
180
- const lines = pcdData.split('\n');
181
-
182
- for (let i = 0; i < lines.length; i++) {
184
+ var position = [];
185
+ var normal = [];
186
+ var color = [];
187
+ var offset = pcdHeader.offset;
188
+ var pcdData = textData.substr(pcdHeader.headerLen);
189
+ var lines = pcdData.split('\n');
190
+
191
+ for (var i = 0; i < lines.length; i++) {
183
192
  if (lines[i] !== '') {
184
- const line = lines[i].split(' ');
193
+ var line = lines[i].split(' ');
185
194
 
186
195
  if (offset.x !== undefined) {
187
196
  position.push(parseFloat(line[offset.x]));
@@ -190,9 +199,9 @@ function parsePCDASCII(pcdHeader, textData) {
190
199
  }
191
200
 
192
201
  if (offset.rgb !== undefined) {
193
- const floatValue = parseFloat(line[offset.rgb]);
194
- const binaryColor = new Float32Array([floatValue]);
195
- const dataview = new DataView(binaryColor.buffer, 0);
202
+ var floatValue = parseFloat(line[offset.rgb]);
203
+ var binaryColor = new Float32Array([floatValue]);
204
+ var dataview = new DataView(binaryColor.buffer, 0);
196
205
  color.push(dataview.getUint8(0));
197
206
  color.push(dataview.getUint8(1));
198
207
  color.push(dataview.getUint8(2));
@@ -207,20 +216,20 @@ function parsePCDASCII(pcdHeader, textData) {
207
216
  }
208
217
 
209
218
  return {
210
- position,
211
- normal,
212
- color
219
+ position: position,
220
+ normal: normal,
221
+ color: color
213
222
  };
214
223
  }
215
224
 
216
225
  function parsePCDBinary(pcdHeader, data) {
217
- const position = [];
218
- const normal = [];
219
- const color = [];
220
- const dataview = new DataView(data, pcdHeader.headerLen);
221
- const offset = pcdHeader.offset;
226
+ var position = [];
227
+ var normal = [];
228
+ var color = [];
229
+ var dataview = new DataView(data, pcdHeader.headerLen);
230
+ var offset = pcdHeader.offset;
222
231
 
223
- for (let i = 0, row = 0; i < pcdHeader.points; i++, row += pcdHeader.rowSize) {
232
+ for (var i = 0, row = 0; i < pcdHeader.points; i++, row += pcdHeader.rowSize) {
224
233
  if (offset.x !== undefined) {
225
234
  position.push(dataview.getFloat32(row + offset.x, LITTLE_ENDIAN));
226
235
  position.push(dataview.getFloat32(row + offset.y, LITTLE_ENDIAN));
@@ -241,9 +250,55 @@ function parsePCDBinary(pcdHeader, data) {
241
250
  }
242
251
 
243
252
  return {
244
- position,
245
- normal,
246
- color
253
+ position: position,
254
+ normal: normal,
255
+ color: color
256
+ };
257
+ }
258
+ /** Parse compressed PCD data in in binary_compressed form ( https://pointclouds.org/documentation/tutorials/pcd_file_format.html)
259
+ * from https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/PCDLoader.js
260
+ * @license MIT (http://opensource.org/licenses/MIT)
261
+ * @param pcdHeader
262
+ * @param data
263
+ * @returns [attributes]
264
+ */
265
+
266
+
267
+ function parsePCDBinaryCompressed(PCDheader, data) {
268
+ var position = [];
269
+ var normal = [];
270
+ var color = [];
271
+ var sizes = new Uint32Array(data.slice(PCDheader.headerLen, PCDheader.headerLen + 8));
272
+ var compressedSize = sizes[0];
273
+ var decompressedSize = sizes[1];
274
+ var decompressed = (0, _decompressLzf.decompressLZF)(new Uint8Array(data, PCDheader.headerLen + 8, compressedSize), decompressedSize);
275
+ var dataview = new DataView(decompressed.buffer);
276
+ var offset = PCDheader.offset;
277
+
278
+ for (var i = 0; i < PCDheader.points; i++) {
279
+ if (offset.x !== undefined) {
280
+ position.push(dataview.getFloat32(PCDheader.points * offset.x + PCDheader.size[0] * i, LITTLE_ENDIAN));
281
+ position.push(dataview.getFloat32(PCDheader.points * offset.y + PCDheader.size[1] * i, LITTLE_ENDIAN));
282
+ position.push(dataview.getFloat32(PCDheader.points * offset.z + PCDheader.size[2] * i, LITTLE_ENDIAN));
283
+ }
284
+
285
+ if (offset.rgb !== undefined) {
286
+ color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 0) / 255.0);
287
+ color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 1) / 255.0);
288
+ color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 2) / 255.0);
289
+ }
290
+
291
+ if (offset.normal_x !== undefined) {
292
+ normal.push(dataview.getFloat32(PCDheader.points * offset.normal_x + PCDheader.size[4] * i, LITTLE_ENDIAN));
293
+ normal.push(dataview.getFloat32(PCDheader.points * offset.normal_y + PCDheader.size[5] * i, LITTLE_ENDIAN));
294
+ normal.push(dataview.getFloat32(PCDheader.points * offset.normal_z + PCDheader.size[6] * i, LITTLE_ENDIAN));
295
+ }
296
+ }
297
+
298
+ return {
299
+ position: position,
300
+ normal: normal,
301
+ color: color
247
302
  };
248
303
  }
249
304
  //# sourceMappingURL=parse-pcd.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/parse-pcd.ts"],"names":["LITTLE_ENDIAN","parsePCD","data","textData","TextDecoder","decode","pcdHeader","parsePCDHeader","attributes","parsePCDASCII","parsePCDBinary","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"],"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 {getMeshBoundingBox} from '@loaders.gl/schema';\nimport type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';\nimport type {PCDHeader} from './pcd-types';\nimport {getPCDSchema} from './get-pcd-schema';\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 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"],"file":"parse-pcd.js"}
1
+ {"version":3,"sources":["../../../src/lib/parse-pcd.ts"],"names":["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"}
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports._typecheckPCDLoader = exports.PCDLoader = void 0;
7
- const VERSION = typeof "3.1.0-beta.6" !== 'undefined' ? "3.1.0-beta.6" : 'latest';
8
- const PCDLoader = {
7
+ var VERSION = typeof "3.1.2" !== 'undefined' ? "3.1.2" : 'latest';
8
+ var PCDLoader = {
9
9
  name: 'PCD (Point Cloud Data)',
10
10
  id: 'pcd',
11
11
  module: 'pcd',
@@ -18,6 +18,6 @@ const PCDLoader = {
18
18
  }
19
19
  };
20
20
  exports.PCDLoader = PCDLoader;
21
- const _typecheckPCDLoader = PCDLoader;
21
+ var _typecheckPCDLoader = PCDLoader;
22
22
  exports._typecheckPCDLoader = _typecheckPCDLoader;
23
23
  //# sourceMappingURL=pcd-loader.js.map
@@ -1 +1 @@
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,0BAAuB,WAAvB,oBAAmD,QAAnE;AAKO,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;;AAaA,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
+ {"version":3,"sources":["../../src/pcd-loader.ts"],"names":["VERSION","PCDLoader","name","id","module","version","worker","extensions","mimeTypes","options","pcd","_typecheckPCDLoader"],"mappings":";;;;;;AAIA,IAAMA,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,QAAnE;AAKO,IAAMC,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;;AAaA,IAAMC,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"}
@@ -0,0 +1,44 @@
1
+ export function decompressLZF(inData, outLength) {
2
+ const inLength = inData.length;
3
+ const outData = new Uint8Array(outLength);
4
+ let inPtr = 0;
5
+ let outPtr = 0;
6
+ let ctrl;
7
+ let len;
8
+ let ref;
9
+
10
+ do {
11
+ ctrl = inData[inPtr++];
12
+
13
+ if (ctrl < 1 << 5) {
14
+ ctrl++;
15
+ if (outPtr + ctrl > outLength) throw new Error('Output buffer is not large enough');
16
+ if (inPtr + ctrl > inLength) throw new Error('Invalid compressed data');
17
+
18
+ do {
19
+ outData[outPtr++] = inData[inPtr++];
20
+ } while (--ctrl);
21
+ } else {
22
+ len = ctrl >> 5;
23
+ ref = outPtr - ((ctrl & 0x1f) << 8) - 1;
24
+ if (inPtr >= inLength) throw new Error('Invalid compressed data');
25
+
26
+ if (len === 7) {
27
+ len += inData[inPtr++];
28
+ if (inPtr >= inLength) throw new Error('Invalid compressed data');
29
+ }
30
+
31
+ ref -= inData[inPtr++];
32
+ if (outPtr + len + 2 > outLength) throw new Error('Output buffer is not large enough');
33
+ if (ref < 0) throw new Error('Invalid compressed data');
34
+ if (ref >= outPtr) throw new Error('Invalid compressed data');
35
+
36
+ do {
37
+ outData[outPtr++] = outData[ref++];
38
+ } while (--len + 2);
39
+ }
40
+ } while (inPtr < inLength);
41
+
42
+ return outData;
43
+ }
44
+ //# sourceMappingURL=decompress-lzf.js.map
@@ -0,0 +1 @@
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"}