@loaders.gl/pcd 3.1.0-alpha.4 → 3.1.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +778 -0
- package/dist/es5/bundle.js +1 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +5 -37
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/get-pcd-schema.js +2 -2
- package/dist/es5/lib/get-pcd-schema.js.map +1 -1
- package/dist/es5/lib/parse-pcd.js +47 -51
- package/dist/es5/lib/parse-pcd.js.map +1 -1
- package/dist/es5/pcd-loader.js +3 -3
- package/dist/es5/pcd-loader.js.map +1 -1
- package/dist/esm/lib/parse-pcd.js +1 -1
- package/dist/esm/lib/parse-pcd.js.map +1 -1
- package/dist/esm/pcd-loader.js +1 -1
- package/dist/esm/pcd-loader.js.map +1 -1
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/lib/get-pcd-schema.d.ts +12 -0
- package/dist/lib/get-pcd-schema.d.ts.map +1 -0
- package/dist/lib/get-pcd-schema.js +25 -0
- package/dist/lib/parse-pcd.d.ts +17 -0
- package/dist/lib/parse-pcd.d.ts.map +1 -0
- package/dist/lib/parse-pcd.js +245 -0
- package/dist/lib/pcd-types.d.ts +31 -0
- package/dist/lib/pcd-types.d.ts.map +1 -0
- package/dist/lib/pcd-types.js +2 -0
- package/dist/pcd-loader.d.ts +18 -0
- package/dist/pcd-loader.d.ts.map +1 -0
- package/dist/pcd-loader.js +22 -0
- package/dist/pcd-worker.js +832 -2
- package/dist/workers/pcd-worker.d.ts +2 -0
- package/dist/workers/pcd-worker.d.ts.map +1 -0
- package/dist/workers/pcd-worker.js +5 -0
- package/package.json +7 -7
- package/dist/dist.min.js +0 -2
- package/dist/dist.min.js.map +0 -1
- package/dist/pcd-worker.js.map +0 -1
package/dist/es5/bundle.js
CHANGED
package/dist/es5/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bundle.ts"],"names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"mappings":";;AACA,
|
|
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/es5/index.js
CHANGED
|
@@ -7,53 +7,21 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
Object.defineProperty(exports, "PCDWorkerLoader", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function
|
|
10
|
+
get: function () {
|
|
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
|
-
|
|
22
16
|
var _parsePcd = _interopRequireDefault(require("./lib/parse-pcd"));
|
|
23
17
|
|
|
24
18
|
var _pcdLoader = require("./pcd-loader");
|
|
25
19
|
|
|
26
|
-
|
|
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
|
-
}(),
|
|
20
|
+
const PCDLoader = { ..._pcdLoader.PCDLoader,
|
|
21
|
+
parse: async arrayBuffer => (0, _parsePcd.default)(arrayBuffer),
|
|
53
22
|
parseSync: _parsePcd.default
|
|
54
|
-
}
|
|
55
|
-
|
|
23
|
+
};
|
|
56
24
|
exports.PCDLoader = PCDLoader;
|
|
57
|
-
|
|
25
|
+
const _typecheckPCDLoader = PCDLoader;
|
|
58
26
|
exports._typecheckPCDLoader = _typecheckPCDLoader;
|
|
59
27
|
//# sourceMappingURL=index.js.map
|
package/dist/es5/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"names":["PCDLoader","PCDWorkerLoader","parse","arrayBuffer","parseSync","parsePCDSync","_typecheckPCDLoader"],"mappings":"
|
|
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"}
|
|
@@ -8,8 +8,8 @@ exports.getPCDSchema = getPCDSchema;
|
|
|
8
8
|
var _schema = require("@loaders.gl/schema");
|
|
9
9
|
|
|
10
10
|
function getPCDSchema(PCDheader, metadata) {
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
const offset = PCDheader.offset;
|
|
12
|
+
const 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,
|
|
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"}
|
|
@@ -9,12 +9,12 @@ var _schema = require("@loaders.gl/schema");
|
|
|
9
9
|
|
|
10
10
|
var _getPcdSchema = require("./get-pcd-schema");
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
const LITTLE_ENDIAN = true;
|
|
13
13
|
|
|
14
14
|
function parsePCD(data) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
const textData = new TextDecoder().decode(data);
|
|
16
|
+
const pcdHeader = parsePCDHeader(textData);
|
|
17
|
+
let attributes = {};
|
|
18
18
|
|
|
19
19
|
switch (pcdHeader.data) {
|
|
20
20
|
case 'ascii':
|
|
@@ -31,24 +31,24 @@ function parsePCD(data) {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
attributes = getMeshAttributes(attributes);
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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);
|
|
37
37
|
return {
|
|
38
38
|
loaderData: {
|
|
39
39
|
header: pcdHeader
|
|
40
40
|
},
|
|
41
|
-
header
|
|
42
|
-
schema
|
|
41
|
+
header,
|
|
42
|
+
schema,
|
|
43
43
|
mode: 0,
|
|
44
44
|
indices: null,
|
|
45
|
-
attributes
|
|
45
|
+
attributes
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
function getMeshHeader(pcdHeader, attributes) {
|
|
50
50
|
if (typeof pcdHeader.width === 'number' && typeof pcdHeader.height === 'number') {
|
|
51
|
-
|
|
51
|
+
const pointCount = pcdHeader.width * pcdHeader.height;
|
|
52
52
|
return {
|
|
53
53
|
vertexCount: pointCount,
|
|
54
54
|
boundingBox: (0, _schema.getMeshBoundingBox)(attributes)
|
|
@@ -59,7 +59,7 @@ function getMeshHeader(pcdHeader, attributes) {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
function getMeshAttributes(attributes) {
|
|
62
|
-
|
|
62
|
+
const normalizedAttributes = {
|
|
63
63
|
POSITION: {
|
|
64
64
|
value: new Float32Array(attributes.position),
|
|
65
65
|
size: 3
|
|
@@ -84,9 +84,9 @@ function getMeshAttributes(attributes) {
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
function parsePCDHeader(data) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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 = {};
|
|
90
90
|
pcdHeader.data = result2 && result2[1];
|
|
91
91
|
|
|
92
92
|
if (result2 !== null) {
|
|
@@ -138,35 +138,31 @@ function parsePCDHeader(data) {
|
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
if (pcdHeader.size !== null) {
|
|
141
|
-
pcdHeader.size = pcdHeader.size[1].split(' ').map(
|
|
142
|
-
return parseInt(x, 10);
|
|
143
|
-
});
|
|
141
|
+
pcdHeader.size = pcdHeader.size[1].split(' ').map(x => parseInt(x, 10));
|
|
144
142
|
}
|
|
145
143
|
|
|
146
144
|
if (pcdHeader.count !== null) {
|
|
147
|
-
pcdHeader.count = pcdHeader.count[1].split(' ').map(
|
|
148
|
-
return parseInt(x, 10);
|
|
149
|
-
});
|
|
145
|
+
pcdHeader.count = pcdHeader.count[1].split(' ').map(x => parseInt(x, 10));
|
|
150
146
|
} else {
|
|
151
147
|
pcdHeader.count = [];
|
|
152
148
|
|
|
153
149
|
if (pcdHeader.fields !== null) {
|
|
154
|
-
for (
|
|
150
|
+
for (let i = 0; i < pcdHeader.fields.length; i++) {
|
|
155
151
|
pcdHeader.count.push(1);
|
|
156
152
|
}
|
|
157
153
|
}
|
|
158
154
|
}
|
|
159
155
|
|
|
160
156
|
pcdHeader.offset = {};
|
|
161
|
-
|
|
157
|
+
let sizeSum = 0;
|
|
162
158
|
|
|
163
159
|
if (pcdHeader.fields !== null && pcdHeader.size !== null) {
|
|
164
|
-
for (
|
|
160
|
+
for (let i = 0; i < pcdHeader.fields.length; i++) {
|
|
165
161
|
if (pcdHeader.data === 'ascii') {
|
|
166
|
-
pcdHeader.offset[pcdHeader.fields[
|
|
162
|
+
pcdHeader.offset[pcdHeader.fields[i]] = i;
|
|
167
163
|
} else {
|
|
168
|
-
pcdHeader.offset[pcdHeader.fields[
|
|
169
|
-
sizeSum += pcdHeader.size[
|
|
164
|
+
pcdHeader.offset[pcdHeader.fields[i]] = sizeSum;
|
|
165
|
+
sizeSum += pcdHeader.size[i];
|
|
170
166
|
}
|
|
171
167
|
}
|
|
172
168
|
}
|
|
@@ -176,16 +172,16 @@ function parsePCDHeader(data) {
|
|
|
176
172
|
}
|
|
177
173
|
|
|
178
174
|
function parsePCDASCII(pcdHeader, textData) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
for (
|
|
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++) {
|
|
187
183
|
if (lines[i] !== '') {
|
|
188
|
-
|
|
184
|
+
const line = lines[i].split(' ');
|
|
189
185
|
|
|
190
186
|
if (offset.x !== undefined) {
|
|
191
187
|
position.push(parseFloat(line[offset.x]));
|
|
@@ -194,9 +190,9 @@ function parsePCDASCII(pcdHeader, textData) {
|
|
|
194
190
|
}
|
|
195
191
|
|
|
196
192
|
if (offset.rgb !== undefined) {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
193
|
+
const floatValue = parseFloat(line[offset.rgb]);
|
|
194
|
+
const binaryColor = new Float32Array([floatValue]);
|
|
195
|
+
const dataview = new DataView(binaryColor.buffer, 0);
|
|
200
196
|
color.push(dataview.getUint8(0));
|
|
201
197
|
color.push(dataview.getUint8(1));
|
|
202
198
|
color.push(dataview.getUint8(2));
|
|
@@ -211,20 +207,20 @@ function parsePCDASCII(pcdHeader, textData) {
|
|
|
211
207
|
}
|
|
212
208
|
|
|
213
209
|
return {
|
|
214
|
-
position
|
|
215
|
-
normal
|
|
216
|
-
color
|
|
210
|
+
position,
|
|
211
|
+
normal,
|
|
212
|
+
color
|
|
217
213
|
};
|
|
218
214
|
}
|
|
219
215
|
|
|
220
216
|
function parsePCDBinary(pcdHeader, data) {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
217
|
+
const position = [];
|
|
218
|
+
const normal = [];
|
|
219
|
+
const color = [];
|
|
220
|
+
const dataview = new DataView(data, pcdHeader.headerLen);
|
|
221
|
+
const offset = pcdHeader.offset;
|
|
226
222
|
|
|
227
|
-
for (
|
|
223
|
+
for (let i = 0, row = 0; i < pcdHeader.points; i++, row += pcdHeader.rowSize) {
|
|
228
224
|
if (offset.x !== undefined) {
|
|
229
225
|
position.push(dataview.getFloat32(row + offset.x, LITTLE_ENDIAN));
|
|
230
226
|
position.push(dataview.getFloat32(row + offset.y, LITTLE_ENDIAN));
|
|
@@ -245,9 +241,9 @@ function parsePCDBinary(pcdHeader, data) {
|
|
|
245
241
|
}
|
|
246
242
|
|
|
247
243
|
return {
|
|
248
|
-
position
|
|
249
|
-
normal
|
|
250
|
-
color
|
|
244
|
+
position,
|
|
245
|
+
normal,
|
|
246
|
+
color
|
|
251
247
|
};
|
|
252
248
|
}
|
|
253
249
|
//# 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","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"}
|
package/dist/es5/pcd-loader.js
CHANGED
|
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports._typecheckPCDLoader = exports.PCDLoader = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const VERSION = typeof "3.1.0-beta.3" !== 'undefined' ? "3.1.0-beta.3" : 'latest';
|
|
8
|
+
const PCDLoader = {
|
|
9
9
|
name: 'PCD (Point Cloud Data)',
|
|
10
10
|
id: 'pcd',
|
|
11
11
|
module: 'pcd',
|
|
@@ -18,6 +18,6 @@ var PCDLoader = {
|
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
20
|
exports.PCDLoader = PCDLoader;
|
|
21
|
-
|
|
21
|
+
const _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,
|
|
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"}
|
|
@@ -17,7 +17,7 @@ export default function parsePCD(data) {
|
|
|
17
17
|
|
|
18
18
|
case 'binary_compressed':
|
|
19
19
|
default:
|
|
20
|
-
throw new Error(
|
|
20
|
+
throw new Error("PCD: ".concat(pcdHeader.data, " files are not supported"));
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
attributes = getMeshAttributes(attributes);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/parse-pcd.ts"],"names":["getMeshBoundingBox","getPCDSchema","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":["getMeshBoundingBox","getPCDSchema","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"}
|
package/dist/esm/pcd-loader.js
CHANGED
|
@@ -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,
|
|
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;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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { LoaderWithParser } from '@loaders.gl/loader-utils';
|
|
2
|
+
import parsePCDSync from './lib/parse-pcd';
|
|
3
|
+
import { PCDLoader as PCDWorkerLoader } from './pcd-loader';
|
|
4
|
+
export { PCDWorkerLoader };
|
|
5
|
+
/**
|
|
6
|
+
* Loader for PCD - Point Cloud Data
|
|
7
|
+
*/
|
|
8
|
+
export declare const PCDLoader: {
|
|
9
|
+
parse: (arrayBuffer: any) => Promise<{
|
|
10
|
+
loaderData: {
|
|
11
|
+
header: import("./lib/pcd-types").PCDHeader;
|
|
12
|
+
};
|
|
13
|
+
header: Partial<import("./lib/pcd-types").PCDHeader>;
|
|
14
|
+
schema: import("@loaders.gl/schema").Schema;
|
|
15
|
+
mode: number;
|
|
16
|
+
indices: null;
|
|
17
|
+
attributes: any;
|
|
18
|
+
}>;
|
|
19
|
+
parseSync: typeof parsePCDSync;
|
|
20
|
+
name: string;
|
|
21
|
+
id: string;
|
|
22
|
+
module: string;
|
|
23
|
+
version: any;
|
|
24
|
+
worker: boolean;
|
|
25
|
+
extensions: string[];
|
|
26
|
+
mimeTypes: string[];
|
|
27
|
+
options: {
|
|
28
|
+
pcd: {};
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
export declare const _typecheckPCDLoader: LoaderWithParser;
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAC/D,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAC,SAAS,IAAI,eAAe,EAAC,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAC,eAAe,EAAC,CAAC;AAEzB;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;CAIrB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,gBAA4B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports._typecheckPCDLoader = exports.PCDLoader = exports.PCDWorkerLoader = void 0;
|
|
7
|
+
const parse_pcd_1 = __importDefault(require("./lib/parse-pcd"));
|
|
8
|
+
const pcd_loader_1 = require("./pcd-loader");
|
|
9
|
+
Object.defineProperty(exports, "PCDWorkerLoader", { enumerable: true, get: function () { return pcd_loader_1.PCDLoader; } });
|
|
10
|
+
/**
|
|
11
|
+
* Loader for PCD - Point Cloud Data
|
|
12
|
+
*/
|
|
13
|
+
exports.PCDLoader = {
|
|
14
|
+
...pcd_loader_1.PCDLoader,
|
|
15
|
+
parse: async (arrayBuffer) => (0, parse_pcd_1.default)(arrayBuffer),
|
|
16
|
+
parseSync: parse_pcd_1.default
|
|
17
|
+
};
|
|
18
|
+
exports._typecheckPCDLoader = exports.PCDLoader;
|