@loaders.gl/ply 3.1.3 → 4.0.0-alpha.5
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.js +2 -2
- package/dist/bundle.js.map +1 -0
- package/dist/dist.min.js +3 -11
- package/dist/index.js +11 -21
- package/dist/index.js.map +1 -0
- package/dist/lib/get-ply-schema.js +24 -33
- package/dist/lib/get-ply-schema.js.map +1 -0
- package/dist/lib/normalize-ply.js +65 -54
- package/dist/lib/normalize-ply.js.map +1 -0
- package/dist/lib/parse-ply-in-batches.d.ts.map +1 -1
- package/dist/lib/parse-ply-in-batches.js +200 -235
- package/dist/lib/parse-ply-in-batches.js.map +1 -0
- package/dist/lib/parse-ply.js +297 -320
- package/dist/lib/parse-ply.js.map +1 -0
- package/dist/lib/ply-types.js +2 -2
- package/dist/{es5/lib → lib}/ply-types.js.map +0 -0
- package/dist/ply-loader.js +18 -27
- package/dist/ply-loader.js.map +1 -0
- package/dist/ply-worker.js +1 -1
- package/dist/workers/ply-worker.js +4 -5
- package/dist/workers/ply-worker.js.map +1 -0
- package/package.json +7 -10
- package/src/lib/parse-ply-in-batches.ts +3 -4
- package/dist/es5/bundle.js +0 -7
- package/dist/es5/bundle.js.map +0 -1
- package/dist/es5/index.js +0 -63
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/lib/get-ply-schema.js +0 -35
- package/dist/es5/lib/get-ply-schema.js.map +0 -1
- package/dist/es5/lib/normalize-ply.js +0 -78
- package/dist/es5/lib/normalize-ply.js.map +0 -1
- package/dist/es5/lib/parse-ply-in-batches.js +0 -370
- package/dist/es5/lib/parse-ply-in-batches.js.map +0 -1
- package/dist/es5/lib/parse-ply.js +0 -340
- package/dist/es5/lib/parse-ply.js.map +0 -1
- package/dist/es5/lib/ply-types.js +0 -2
- package/dist/es5/ply-loader.js +0 -27
- package/dist/es5/ply-loader.js.map +0 -1
- package/dist/es5/workers/ply-worker.js +0 -8
- package/dist/es5/workers/ply-worker.js.map +0 -1
- package/dist/esm/bundle.js +0 -5
- package/dist/esm/bundle.js.map +0 -1
- package/dist/esm/index.js +0 -12
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/lib/get-ply-schema.js +0 -27
- package/dist/esm/lib/get-ply-schema.js.map +0 -1
- package/dist/esm/lib/normalize-ply.js +0 -69
- package/dist/esm/lib/normalize-ply.js.map +0 -1
- package/dist/esm/lib/parse-ply-in-batches.js +0 -218
- package/dist/esm/lib/parse-ply-in-batches.js.map +0 -1
- package/dist/esm/lib/parse-ply.js +0 -327
- package/dist/esm/lib/parse-ply.js.map +0 -1
- package/dist/esm/lib/ply-types.js +0 -2
- package/dist/esm/lib/ply-types.js.map +0 -1
- package/dist/esm/ply-loader.js +0 -19
- package/dist/esm/ply-loader.js.map +0 -1
- package/dist/esm/workers/ply-worker.js +0 -4
- package/dist/esm/workers/ply-worker.js.map +0 -1
|
@@ -1,370 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.default = parsePLYInBatches;
|
|
9
|
-
|
|
10
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
-
|
|
12
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
-
|
|
14
|
-
var _asyncIterator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncIterator"));
|
|
15
|
-
|
|
16
|
-
var _awaitAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/awaitAsyncGenerator"));
|
|
17
|
-
|
|
18
|
-
var _wrapAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapAsyncGenerator"));
|
|
19
|
-
|
|
20
|
-
var _core = require("@loaders.gl/core");
|
|
21
|
-
|
|
22
|
-
var _normalizePly = _interopRequireDefault(require("./normalize-ply"));
|
|
23
|
-
|
|
24
|
-
var currentElement;
|
|
25
|
-
|
|
26
|
-
function parsePLYInBatches(_x, _x2) {
|
|
27
|
-
return _parsePLYInBatches.apply(this, arguments);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function _parsePLYInBatches() {
|
|
31
|
-
_parsePLYInBatches = (0, _wrapAsyncGenerator2.default)(_regenerator.default.mark(function _callee(iterator, options) {
|
|
32
|
-
var lineIterator, header, attributes;
|
|
33
|
-
return _regenerator.default.wrap(function _callee$(_context2) {
|
|
34
|
-
while (1) {
|
|
35
|
-
switch (_context2.prev = _context2.next) {
|
|
36
|
-
case 0:
|
|
37
|
-
lineIterator = (0, _core.makeLineIterator)((0, _core.makeTextDecoderIterator)(iterator));
|
|
38
|
-
_context2.next = 3;
|
|
39
|
-
return (0, _awaitAsyncGenerator2.default)(parsePLYHeader(lineIterator, options));
|
|
40
|
-
|
|
41
|
-
case 3:
|
|
42
|
-
header = _context2.sent;
|
|
43
|
-
_context2.t0 = header.format;
|
|
44
|
-
_context2.next = _context2.t0 === 'ascii' ? 7 : 11;
|
|
45
|
-
break;
|
|
46
|
-
|
|
47
|
-
case 7:
|
|
48
|
-
_context2.next = 9;
|
|
49
|
-
return (0, _awaitAsyncGenerator2.default)(parseASCII(lineIterator, header));
|
|
50
|
-
|
|
51
|
-
case 9:
|
|
52
|
-
attributes = _context2.sent;
|
|
53
|
-
return _context2.abrupt("break", 12);
|
|
54
|
-
|
|
55
|
-
case 11:
|
|
56
|
-
throw new Error('Binary PLY can not yet be parsed in streaming mode');
|
|
57
|
-
|
|
58
|
-
case 12:
|
|
59
|
-
_context2.next = 14;
|
|
60
|
-
return (0, _normalizePly.default)(header, attributes, options);
|
|
61
|
-
|
|
62
|
-
case 14:
|
|
63
|
-
case "end":
|
|
64
|
-
return _context2.stop();
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}, _callee);
|
|
68
|
-
}));
|
|
69
|
-
return _parsePLYInBatches.apply(this, arguments);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function parsePLYHeader(_x3, _x4) {
|
|
73
|
-
return _parsePLYHeader.apply(this, arguments);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function _parsePLYHeader() {
|
|
77
|
-
_parsePLYHeader = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(lineIterator, options) {
|
|
78
|
-
var header;
|
|
79
|
-
return _regenerator.default.wrap(function _callee2$(_context3) {
|
|
80
|
-
while (1) {
|
|
81
|
-
switch (_context3.prev = _context3.next) {
|
|
82
|
-
case 0:
|
|
83
|
-
header = {
|
|
84
|
-
comments: [],
|
|
85
|
-
elements: []
|
|
86
|
-
};
|
|
87
|
-
_context3.next = 3;
|
|
88
|
-
return (0, _core.forEach)(lineIterator, function (line) {
|
|
89
|
-
line = line.trim();
|
|
90
|
-
|
|
91
|
-
if (line === 'end_header') {
|
|
92
|
-
return true;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (line === '') {
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
var lineValues = line.split(/\s+/);
|
|
100
|
-
var lineType = lineValues.shift();
|
|
101
|
-
line = lineValues.join(' ');
|
|
102
|
-
|
|
103
|
-
switch (lineType) {
|
|
104
|
-
case 'ply':
|
|
105
|
-
break;
|
|
106
|
-
|
|
107
|
-
case 'format':
|
|
108
|
-
header.format = lineValues[0];
|
|
109
|
-
header.version = lineValues[1];
|
|
110
|
-
break;
|
|
111
|
-
|
|
112
|
-
case 'comment':
|
|
113
|
-
header.comments.push(line);
|
|
114
|
-
break;
|
|
115
|
-
|
|
116
|
-
case 'element':
|
|
117
|
-
if (currentElement) {
|
|
118
|
-
header.elements.push(currentElement);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
currentElement = {
|
|
122
|
-
name: lineValues[0],
|
|
123
|
-
count: parseInt(lineValues[1], 10),
|
|
124
|
-
properties: []
|
|
125
|
-
};
|
|
126
|
-
break;
|
|
127
|
-
|
|
128
|
-
case 'property':
|
|
129
|
-
var property = makePLYElementProperty(lineValues, options.propertyNameMapping);
|
|
130
|
-
currentElement.properties.push(property);
|
|
131
|
-
break;
|
|
132
|
-
|
|
133
|
-
default:
|
|
134
|
-
console.log('unhandled', lineType, lineValues);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return false;
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
case 3:
|
|
141
|
-
if (currentElement) {
|
|
142
|
-
header.elements.push(currentElement);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
return _context3.abrupt("return", header);
|
|
146
|
-
|
|
147
|
-
case 5:
|
|
148
|
-
case "end":
|
|
149
|
-
return _context3.stop();
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}, _callee2);
|
|
153
|
-
}));
|
|
154
|
-
return _parsePLYHeader.apply(this, arguments);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
function makePLYElementProperty(propertValues, propertyNameMapping) {
|
|
158
|
-
var property = {
|
|
159
|
-
type: propertValues[0]
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
if (property.type === 'list') {
|
|
163
|
-
property.name = propertValues[3];
|
|
164
|
-
property.countType = propertValues[1];
|
|
165
|
-
property.itemType = propertValues[2];
|
|
166
|
-
} else {
|
|
167
|
-
property.name = propertValues[1];
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
if (propertyNameMapping && property.name in propertyNameMapping) {
|
|
171
|
-
property.name = propertyNameMapping[property.name];
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
return property;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
function parseASCII(lineIterator, header) {
|
|
178
|
-
var attributes, currentElement, currentElementCount, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, line, element;
|
|
179
|
-
|
|
180
|
-
return _regenerator.default.async(function parseASCII$(_context) {
|
|
181
|
-
while (1) {
|
|
182
|
-
switch (_context.prev = _context.next) {
|
|
183
|
-
case 0:
|
|
184
|
-
attributes = {
|
|
185
|
-
indices: [],
|
|
186
|
-
vertices: [],
|
|
187
|
-
normals: [],
|
|
188
|
-
uvs: [],
|
|
189
|
-
colors: []
|
|
190
|
-
};
|
|
191
|
-
currentElement = 0;
|
|
192
|
-
currentElementCount = 0;
|
|
193
|
-
_iteratorNormalCompletion = true;
|
|
194
|
-
_didIteratorError = false;
|
|
195
|
-
_context.prev = 5;
|
|
196
|
-
_iterator = (0, _asyncIterator2.default)(lineIterator);
|
|
197
|
-
|
|
198
|
-
case 7:
|
|
199
|
-
_context.next = 9;
|
|
200
|
-
return _regenerator.default.awrap(_iterator.next());
|
|
201
|
-
|
|
202
|
-
case 9:
|
|
203
|
-
_step = _context.sent;
|
|
204
|
-
_iteratorNormalCompletion = _step.done;
|
|
205
|
-
_context.next = 13;
|
|
206
|
-
return _regenerator.default.awrap(_step.value);
|
|
207
|
-
|
|
208
|
-
case 13:
|
|
209
|
-
_value = _context.sent;
|
|
210
|
-
|
|
211
|
-
if (_iteratorNormalCompletion) {
|
|
212
|
-
_context.next = 21;
|
|
213
|
-
break;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
line = _value;
|
|
217
|
-
line = line.trim();
|
|
218
|
-
|
|
219
|
-
if (line !== '') {
|
|
220
|
-
if (currentElementCount >= header.elements[currentElement].count) {
|
|
221
|
-
currentElement++;
|
|
222
|
-
currentElementCount = 0;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
element = parseASCIIElement(header.elements[currentElement].properties, line);
|
|
226
|
-
handleElement(attributes, header.elements[currentElement].name, element);
|
|
227
|
-
currentElementCount++;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
case 18:
|
|
231
|
-
_iteratorNormalCompletion = true;
|
|
232
|
-
_context.next = 7;
|
|
233
|
-
break;
|
|
234
|
-
|
|
235
|
-
case 21:
|
|
236
|
-
_context.next = 27;
|
|
237
|
-
break;
|
|
238
|
-
|
|
239
|
-
case 23:
|
|
240
|
-
_context.prev = 23;
|
|
241
|
-
_context.t0 = _context["catch"](5);
|
|
242
|
-
_didIteratorError = true;
|
|
243
|
-
_iteratorError = _context.t0;
|
|
244
|
-
|
|
245
|
-
case 27:
|
|
246
|
-
_context.prev = 27;
|
|
247
|
-
_context.prev = 28;
|
|
248
|
-
|
|
249
|
-
if (!(!_iteratorNormalCompletion && _iterator.return != null)) {
|
|
250
|
-
_context.next = 32;
|
|
251
|
-
break;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
_context.next = 32;
|
|
255
|
-
return _regenerator.default.awrap(_iterator.return());
|
|
256
|
-
|
|
257
|
-
case 32:
|
|
258
|
-
_context.prev = 32;
|
|
259
|
-
|
|
260
|
-
if (!_didIteratorError) {
|
|
261
|
-
_context.next = 35;
|
|
262
|
-
break;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
throw _iteratorError;
|
|
266
|
-
|
|
267
|
-
case 35:
|
|
268
|
-
return _context.finish(32);
|
|
269
|
-
|
|
270
|
-
case 36:
|
|
271
|
-
return _context.finish(27);
|
|
272
|
-
|
|
273
|
-
case 37:
|
|
274
|
-
return _context.abrupt("return", attributes);
|
|
275
|
-
|
|
276
|
-
case 38:
|
|
277
|
-
case "end":
|
|
278
|
-
return _context.stop();
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
}, null, null, [[5, 23, 27, 37], [28,, 32, 36]], Promise);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
function parseASCIINumber(n, type) {
|
|
285
|
-
switch (type) {
|
|
286
|
-
case 'char':
|
|
287
|
-
case 'uchar':
|
|
288
|
-
case 'short':
|
|
289
|
-
case 'ushort':
|
|
290
|
-
case 'int':
|
|
291
|
-
case 'uint':
|
|
292
|
-
case 'int8':
|
|
293
|
-
case 'uint8':
|
|
294
|
-
case 'int16':
|
|
295
|
-
case 'uint16':
|
|
296
|
-
case 'int32':
|
|
297
|
-
case 'uint32':
|
|
298
|
-
return parseInt(n, 10);
|
|
299
|
-
|
|
300
|
-
case 'float':
|
|
301
|
-
case 'double':
|
|
302
|
-
case 'float32':
|
|
303
|
-
case 'float64':
|
|
304
|
-
return parseFloat(n);
|
|
305
|
-
|
|
306
|
-
default:
|
|
307
|
-
throw new Error(type);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
function parseASCIIElement(properties, line) {
|
|
312
|
-
var values = line.split(/\s+/);
|
|
313
|
-
var element = {};
|
|
314
|
-
|
|
315
|
-
for (var i = 0; i < properties.length; i++) {
|
|
316
|
-
if (properties[i].type === 'list') {
|
|
317
|
-
var list = [];
|
|
318
|
-
var n = parseASCIINumber(values.shift(), properties[i].countType);
|
|
319
|
-
|
|
320
|
-
for (var j = 0; j < n; j++) {
|
|
321
|
-
list.push(parseASCIINumber(values.shift(), properties[i].itemType));
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
element[properties[i].name] = list;
|
|
325
|
-
} else {
|
|
326
|
-
element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
return element;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
function handleElement(buffer, elementName) {
|
|
334
|
-
var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
335
|
-
|
|
336
|
-
switch (elementName) {
|
|
337
|
-
case 'vertex':
|
|
338
|
-
buffer.vertices.push(element.x, element.y, element.z);
|
|
339
|
-
|
|
340
|
-
if ('nx' in element && 'ny' in element && 'nz' in element) {
|
|
341
|
-
buffer.normals.push(element.nx, element.ny, element.nz);
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
if ('s' in element && 't' in element) {
|
|
345
|
-
buffer.uvs.push(element.s, element.t);
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
if ('red' in element && 'green' in element && 'blue' in element) {
|
|
349
|
-
buffer.colors.push(element.red / 255.0, element.green / 255.0, element.blue / 255.0);
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
break;
|
|
353
|
-
|
|
354
|
-
case 'face':
|
|
355
|
-
var vertexIndices = element.vertex_indices || element.vertex_index;
|
|
356
|
-
|
|
357
|
-
if (vertexIndices.length === 3) {
|
|
358
|
-
buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);
|
|
359
|
-
} else if (vertexIndices.length === 4) {
|
|
360
|
-
buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);
|
|
361
|
-
buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
break;
|
|
365
|
-
|
|
366
|
-
default:
|
|
367
|
-
break;
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
//# sourceMappingURL=parse-ply-in-batches.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/parse-ply-in-batches.ts"],"names":["currentElement","parsePLYInBatches","iterator","options","lineIterator","parsePLYHeader","header","format","parseASCII","attributes","Error","comments","elements","line","trim","lineValues","split","lineType","shift","join","version","push","name","count","parseInt","properties","property","makePLYElementProperty","propertyNameMapping","console","log","propertValues","type","countType","itemType","indices","vertices","normals","uvs","colors","currentElementCount","element","parseASCIIElement","handleElement","parseASCIINumber","n","parseFloat","values","i","length","list","j","buffer","elementName","x","y","z","nx","ny","nz","s","t","red","green","blue","vertexIndices","vertex_indices","vertex_index"],"mappings":";;;;;;;;;;;;;;;;;;;AAwBA;;AACA;;AAGA,IAAIA,cAAJ;;SAO+BC,iB;;;;;mFAAhB,iBACbC,QADa,EAEbC,OAFa;AAAA;AAAA;AAAA;AAAA;AAAA;AAIPC,YAAAA,YAJO,GAIQ,4BAAiB,mCAAwBF,QAAxB,CAAjB,CAJR;AAAA;AAAA,sDAKQG,cAAc,CAACD,YAAD,EAAeD,OAAf,CALtB;;AAAA;AAKPG,YAAAA,MALO;AAAA,2BAQLA,MAAM,CAACC,MARF;AAAA,8CASN,OATM;AAAA;;AAAA;AAAA;AAAA,sDAUUC,UAAU,CAACJ,YAAD,EAAeE,MAAf,CAVpB;;AAAA;AAUTG,YAAAA,UAVS;AAAA;;AAAA;AAAA,kBAaH,IAAIC,KAAJ,CAAU,oDAAV,CAbG;;AAAA;AAAA;AAiBb,mBAAM,2BAAaJ,MAAb,EAAqBG,UAArB,EAAiCN,OAAjC,CAAN;;AAjBa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;SA0BAE,c;;;;;8EAAf,kBACED,YADF,EAEED,OAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAIQG,YAAAA,MAJR,GAI4B;AACxBK,cAAAA,QAAQ,EAAE,EADc;AAExBC,cAAAA,QAAQ,EAAE;AAFc,aAJ5B;AAAA;AAAA,mBAYQ,mBAAQR,YAAR,EAAsB,UAACS,IAAD,EAAkB;AAC5CA,cAAAA,IAAI,GAAGA,IAAI,CAACC,IAAL,EAAP;;AAGA,kBAAID,IAAI,KAAK,YAAb,EAA2B;AACzB,uBAAO,IAAP;AACD;;AAGD,kBAAIA,IAAI,KAAK,EAAb,EAAiB;AAEf,uBAAO,KAAP;AACD;;AAED,kBAAME,UAAU,GAAGF,IAAI,CAACG,KAAL,CAAW,KAAX,CAAnB;AACA,kBAAMC,QAAQ,GAAGF,UAAU,CAACG,KAAX,EAAjB;AACAL,cAAAA,IAAI,GAAGE,UAAU,CAACI,IAAX,CAAgB,GAAhB,CAAP;;AAEA,sBAAQF,QAAR;AACE,qBAAK,KAAL;AAEE;;AAEF,qBAAK,QAAL;AACEX,kBAAAA,MAAM,CAACC,MAAP,GAAgBQ,UAAU,CAAC,CAAD,CAA1B;AACAT,kBAAAA,MAAM,CAACc,OAAP,GAAiBL,UAAU,CAAC,CAAD,CAA3B;AACA;;AAEF,qBAAK,SAAL;AACET,kBAAAA,MAAM,CAACK,QAAP,CAAgBU,IAAhB,CAAqBR,IAArB;AACA;;AAEF,qBAAK,SAAL;AACE,sBAAIb,cAAJ,EAAoB;AAClBM,oBAAAA,MAAM,CAACM,QAAP,CAAgBS,IAAhB,CAAqBrB,cAArB;AACD;;AAEDA,kBAAAA,cAAc,GAAG;AACfsB,oBAAAA,IAAI,EAAEP,UAAU,CAAC,CAAD,CADD;AAEfQ,oBAAAA,KAAK,EAAEC,QAAQ,CAACT,UAAU,CAAC,CAAD,CAAX,EAAgB,EAAhB,CAFA;AAGfU,oBAAAA,UAAU,EAAE;AAHG,mBAAjB;AAKA;;AAEF,qBAAK,UAAL;AACE,sBAAMC,QAAQ,GAAGC,sBAAsB,CAACZ,UAAD,EAAaZ,OAAO,CAACyB,mBAArB,CAAvC;AACA5B,kBAAAA,cAAc,CAACyB,UAAf,CAA0BJ,IAA1B,CAA+BK,QAA/B;AACA;;AAEF;AAEEG,kBAAAA,OAAO,CAACC,GAAR,CAAY,WAAZ,EAAyBb,QAAzB,EAAmCF,UAAnC;AAjCJ;;AAoCA,qBAAO,KAAP;AACD,aAvDK,CAZR;;AAAA;AAqEE,gBAAIf,cAAJ,EAAoB;AAClBM,cAAAA,MAAM,CAACM,QAAP,CAAgBS,IAAhB,CAAqBrB,cAArB;AACD;;AAvEH,8CAyESM,MAzET;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AA4EA,SAASqB,sBAAT,CAAgCI,aAAhC,EAAyDH,mBAAzD,EAAkF;AAChF,MAAMF,QAAmC,GAAG;AAC1CM,IAAAA,IAAI,EAAED,aAAa,CAAC,CAAD;AADuB,GAA5C;;AAIA,MAAIL,QAAQ,CAACM,IAAT,KAAkB,MAAtB,EAA8B;AAC5BN,IAAAA,QAAQ,CAACJ,IAAT,GAAgBS,aAAa,CAAC,CAAD,CAA7B;AACAL,IAAAA,QAAQ,CAACO,SAAT,GAAqBF,aAAa,CAAC,CAAD,CAAlC;AACAL,IAAAA,QAAQ,CAACQ,QAAT,GAAoBH,aAAa,CAAC,CAAD,CAAjC;AACD,GAJD,MAIO;AACLL,IAAAA,QAAQ,CAACJ,IAAT,GAAgBS,aAAa,CAAC,CAAD,CAA7B;AACD;;AAED,MAAIH,mBAAmB,IAAIF,QAAQ,CAACJ,IAAT,IAAiBM,mBAA5C,EAAiE;AAC/DF,IAAAA,QAAQ,CAACJ,IAAT,GAAgBM,mBAAmB,CAACF,QAAQ,CAACJ,IAAV,CAAnC;AACD;;AAED,SAAOI,QAAP;AACD;;AAQD,SAAelB,UAAf,CAA0BJ,YAA1B,EAAgDE,MAAhD;AAAA;;AAAA;AAAA;AAAA;AAAA;AAEQG,UAAAA,UAFR,GAEoC;AAChC0B,YAAAA,OAAO,EAAE,EADuB;AAEhCC,YAAAA,QAAQ,EAAE,EAFsB;AAGhCC,YAAAA,OAAO,EAAE,EAHuB;AAIhCC,YAAAA,GAAG,EAAE,EAJ2B;AAKhCC,YAAAA,MAAM,EAAE;AALwB,WAFpC;AAUMvC,UAAAA,cAVN,GAUuB,CAVvB;AAWMwC,UAAAA,mBAXN,GAW4B,CAX5B;AAAA;AAAA;AAAA;AAAA,mDAayBpC,YAbzB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAaiBS,UAAAA,IAbjB;AAcIA,UAAAA,IAAI,GAAGA,IAAI,CAACC,IAAL,EAAP;;AAEA,cAAID,IAAI,KAAK,EAAb,EAAiB;AACf,gBAAI2B,mBAAmB,IAAIlC,MAAM,CAACM,QAAP,CAAgBZ,cAAhB,EAAgCuB,KAA3D,EAAkE;AAChEvB,cAAAA,cAAc;AACdwC,cAAAA,mBAAmB,GAAG,CAAtB;AACD;;AAEKC,YAAAA,OANS,GAMCC,iBAAiB,CAACpC,MAAM,CAACM,QAAP,CAAgBZ,cAAhB,EAAgCyB,UAAjC,EAA6CZ,IAA7C,CANlB;AAOf8B,YAAAA,aAAa,CAAClC,UAAD,EAAaH,MAAM,CAACM,QAAP,CAAgBZ,cAAhB,EAAgCsB,IAA7C,EAAmDmB,OAAnD,CAAb;AACAD,YAAAA,mBAAmB;AACpB;;AAzBL;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA,2CA4BS/B,UA5BT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAqCA,SAASmC,gBAAT,CAA0BC,CAA1B,EAAqCb,IAArC,EAA2D;AACzD,UAAQA,IAAR;AACE,SAAK,MAAL;AACA,SAAK,OAAL;AACA,SAAK,OAAL;AACA,SAAK,QAAL;AACA,SAAK,KAAL;AACA,SAAK,MAAL;AACA,SAAK,MAAL;AACA,SAAK,OAAL;AACA,SAAK,OAAL;AACA,SAAK,QAAL;AACA,SAAK,OAAL;AACA,SAAK,QAAL;AACE,aAAOR,QAAQ,CAACqB,CAAD,EAAI,EAAJ,CAAf;;AAEF,SAAK,OAAL;AACA,SAAK,QAAL;AACA,SAAK,SAAL;AACA,SAAK,SAAL;AACE,aAAOC,UAAU,CAACD,CAAD,CAAjB;;AAEF;AACE,YAAM,IAAInC,KAAJ,CAAUsB,IAAV,CAAN;AAtBJ;AAwBD;;AAOD,SAASU,iBAAT,CAA2BjB,UAA3B,EAA8CZ,IAA9C,EAA4D;AAC1D,MAAMkC,MAAW,GAAGlC,IAAI,CAACG,KAAL,CAAW,KAAX,CAApB;AAEA,MAAMyB,OAAO,GAAG,EAAhB;;AAEA,OAAK,IAAIO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGvB,UAAU,CAACwB,MAA/B,EAAuCD,CAAC,EAAxC,EAA4C;AAC1C,QAAIvB,UAAU,CAACuB,CAAD,CAAV,CAAchB,IAAd,KAAuB,MAA3B,EAAmC;AACjC,UAAMkB,IAAS,GAAG,EAAlB;AACA,UAAML,CAAC,GAAGD,gBAAgB,CAACG,MAAM,CAAC7B,KAAP,EAAD,EAAiBO,UAAU,CAACuB,CAAD,CAAV,CAAcf,SAA/B,CAA1B;;AAEA,WAAK,IAAIkB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGN,CAApB,EAAuBM,CAAC,EAAxB,EAA4B;AAC1BD,QAAAA,IAAI,CAAC7B,IAAL,CAAUuB,gBAAgB,CAACG,MAAM,CAAC7B,KAAP,EAAD,EAAiBO,UAAU,CAACuB,CAAD,CAAV,CAAcd,QAA/B,CAA1B;AACD;;AAEDO,MAAAA,OAAO,CAAChB,UAAU,CAACuB,CAAD,CAAV,CAAc1B,IAAf,CAAP,GAA8B4B,IAA9B;AACD,KATD,MASO;AACLT,MAAAA,OAAO,CAAChB,UAAU,CAACuB,CAAD,CAAV,CAAc1B,IAAf,CAAP,GAA8BsB,gBAAgB,CAACG,MAAM,CAAC7B,KAAP,EAAD,EAAiBO,UAAU,CAACuB,CAAD,CAAV,CAAchB,IAA/B,CAA9C;AACD;AACF;;AAED,SAAOS,OAAP;AACD;;AAQD,SAASE,aAAT,CACES,MADF,EAEEC,WAFF,EAIE;AAAA,MADAZ,OACA,uEADe,EACf;;AACA,UAAQY,WAAR;AACE,SAAK,QAAL;AACED,MAAAA,MAAM,CAAChB,QAAP,CAAgBf,IAAhB,CAAqBoB,OAAO,CAACa,CAA7B,EAAgCb,OAAO,CAACc,CAAxC,EAA2Cd,OAAO,CAACe,CAAnD;;AACA,UAAI,QAAQf,OAAR,IAAmB,QAAQA,OAA3B,IAAsC,QAAQA,OAAlD,EAA2D;AACzDW,QAAAA,MAAM,CAACf,OAAP,CAAehB,IAAf,CAAoBoB,OAAO,CAACgB,EAA5B,EAAgChB,OAAO,CAACiB,EAAxC,EAA4CjB,OAAO,CAACkB,EAApD;AACD;;AACD,UAAI,OAAOlB,OAAP,IAAkB,OAAOA,OAA7B,EAAsC;AACpCW,QAAAA,MAAM,CAACd,GAAP,CAAWjB,IAAX,CAAgBoB,OAAO,CAACmB,CAAxB,EAA2BnB,OAAO,CAACoB,CAAnC;AACD;;AACD,UAAI,SAASpB,OAAT,IAAoB,WAAWA,OAA/B,IAA0C,UAAUA,OAAxD,EAAiE;AAC/DW,QAAAA,MAAM,CAACb,MAAP,CAAclB,IAAd,CAAmBoB,OAAO,CAACqB,GAAR,GAAc,KAAjC,EAAwCrB,OAAO,CAACsB,KAAR,GAAgB,KAAxD,EAA+DtB,OAAO,CAACuB,IAAR,GAAe,KAA9E;AACD;;AACD;;AAEF,SAAK,MAAL;AACE,UAAMC,aAAa,GAAGxB,OAAO,CAACyB,cAAR,IAA0BzB,OAAO,CAAC0B,YAAxD;;AACA,UAAIF,aAAa,CAAChB,MAAd,KAAyB,CAA7B,EAAgC;AAC9BG,QAAAA,MAAM,CAACjB,OAAP,CAAed,IAAf,CAAoB4C,aAAa,CAAC,CAAD,CAAjC,EAAsCA,aAAa,CAAC,CAAD,CAAnD,EAAwDA,aAAa,CAAC,CAAD,CAArE;AACD,OAFD,MAEO,IAAIA,aAAa,CAAChB,MAAd,KAAyB,CAA7B,EAAgC;AACrCG,QAAAA,MAAM,CAACjB,OAAP,CAAed,IAAf,CAAoB4C,aAAa,CAAC,CAAD,CAAjC,EAAsCA,aAAa,CAAC,CAAD,CAAnD,EAAwDA,aAAa,CAAC,CAAD,CAArE;AACAb,QAAAA,MAAM,CAACjB,OAAP,CAAed,IAAf,CAAoB4C,aAAa,CAAC,CAAD,CAAjC,EAAsCA,aAAa,CAAC,CAAD,CAAnD,EAAwDA,aAAa,CAAC,CAAD,CAArE;AACD;;AACD;;AAEF;AACE;AAzBJ;AA2BD","sourcesContent":["// PLY Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author Wei Meng / http://about.me/menway\n//\n// Description: A loader for PLY ASCII files (known as the Polygon File Format\n// or the Stanford Triangle Format).\n//\n// Limitations: ASCII decoding assumes file is UTF-8.\n//\n// If the PLY file uses non standard property names, they can be mapped while\n// loading. For example, the following maps the properties\n// “diffuse_(red|green|blue)” in the file to standard color names.\n//\n// parsePLY(data, {\n// propertyNameMapping: {\n// diffuse_red: 'red',\n// diffuse_green: 'green',\n// diffuse_blue: 'blue'\n// }\n// });\n// @ts-nocheck\n\nimport {makeLineIterator, makeTextDecoderIterator, forEach} from '@loaders.gl/core';\nimport normalizePLY from './normalize-ply';\nimport {PLYMesh, PLYHeader, ASCIIElement, PLYAttributes} from './ply-types';\n\nlet currentElement: ASCIIElement;\n\n/**\n * PARSER\n * @param iterator\n * @param options\n */\nexport default async function* parsePLYInBatches(\n iterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: any\n): AsyncIterable<PLYMesh> {\n const lineIterator = makeLineIterator(makeTextDecoderIterator(iterator));\n const header = await parsePLYHeader(lineIterator, options);\n\n let attributes: PLYAttributes;\n switch (header.format) {\n case 'ascii':\n attributes = await parseASCII(lineIterator, header);\n break;\n default:\n throw new Error('Binary PLY can not yet be parsed in streaming mode');\n // attributes = await parseBinary(lineIterator, header);\n }\n\n yield normalizePLY(header, attributes, options);\n}\n\n/**\n * Parses header\n * @param lineIterator\n * @param options\n * @returns\n */\nasync function parsePLYHeader(\n lineIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: {[key: string]: any}\n): Promise<PLYHeader> {\n const header: PLYHeader = {\n comments: [],\n elements: []\n // headerLength\n };\n\n // Note: forEach does not reset iterator if exiting loop prematurely\n // so that iteration can continue in a second loop\n await forEach(lineIterator, (line: string) => {\n line = line.trim();\n\n // End of header\n if (line === 'end_header') {\n return true; // Returning true cancels `forEach`\n }\n\n // Ignore empty lines\n if (line === '') {\n // eslint-disable-next-line\n return false; // Returning false does not cancel `forEach`\n }\n\n const lineValues = line.split(/\\s+/);\n const lineType = lineValues.shift();\n line = lineValues.join(' ');\n\n switch (lineType) {\n case 'ply':\n // First line magic characters, ignore\n break;\n\n case 'format':\n header.format = lineValues[0];\n header.version = lineValues[1];\n break;\n\n case 'comment':\n header.comments.push(line);\n break;\n\n case 'element':\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n currentElement = {\n name: lineValues[0],\n count: parseInt(lineValues[1], 10),\n properties: []\n };\n break;\n\n case 'property':\n const property = makePLYElementProperty(lineValues, options.propertyNameMapping);\n currentElement.properties.push(property);\n break;\n\n default:\n // eslint-disable-next-line\n console.log('unhandled', lineType, lineValues);\n }\n\n return false;\n });\n\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n return header;\n}\n\nfunction makePLYElementProperty(propertValues: string[], propertyNameMapping: []) {\n const property: {[index: string]: string} = {\n type: propertValues[0]\n };\n\n if (property.type === 'list') {\n property.name = propertValues[3];\n property.countType = propertValues[1];\n property.itemType = propertValues[2];\n } else {\n property.name = propertValues[1];\n }\n\n if (propertyNameMapping && property.name in propertyNameMapping) {\n property.name = propertyNameMapping[property.name];\n }\n\n return property;\n}\n\n// ASCII PARSING\n/**\n * @param lineIterator\n * @param header\n * @returns\n */\nasync function parseASCII(lineIterator: string, header: PLYHeader) {\n // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n const attributes: PLYAttributes = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n colors: []\n };\n\n let currentElement = 0;\n let currentElementCount = 0;\n\n for await (let line of lineIterator) {\n line = line.trim();\n\n if (line !== '') {\n if (currentElementCount >= header.elements[currentElement].count) {\n currentElement++;\n currentElementCount = 0;\n }\n\n const element = parseASCIIElement(header.elements[currentElement].properties, line);\n handleElement(attributes, header.elements[currentElement].name, element);\n currentElementCount++;\n }\n }\n\n return attributes;\n}\n/**\n * Parses ASCII number\n * @param n\n * @param type\n * @returns ASCII number\n */\n// eslint-disable-next-line complexity\nfunction parseASCIINumber(n: string, type: string): number {\n switch (type) {\n case 'char':\n case 'uchar':\n case 'short':\n case 'ushort':\n case 'int':\n case 'uint':\n case 'int8':\n case 'uint8':\n case 'int16':\n case 'uint16':\n case 'int32':\n case 'uint32':\n return parseInt(n, 10);\n\n case 'float':\n case 'double':\n case 'float32':\n case 'float64':\n return parseFloat(n);\n\n default:\n throw new Error(type);\n }\n}\n/**\n * Parses ASCII element\n * @param properties\n * @param line\n * @returns element\n */\nfunction parseASCIIElement(properties: any[], line: string) {\n const values: any = line.split(/\\s+/);\n\n const element = {};\n\n for (let i = 0; i < properties.length; i++) {\n if (properties[i].type === 'list') {\n const list: any = [];\n const n = parseASCIINumber(values.shift(), properties[i].countType);\n\n for (let j = 0; j < n; j++) {\n list.push(parseASCIINumber(values.shift(), properties[i].itemType));\n }\n\n element[properties[i].name] = list;\n } else {\n element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);\n }\n }\n\n return element;\n}\n/**\n * @param buffer\n * @param elementName\n * @param element\n */\n// HELPER FUNCTIONS\n// eslint-disable-next-line complexity\nfunction handleElement(\n buffer: {[index: string]: number[]},\n elementName: string,\n element: any = {}\n) {\n switch (elementName) {\n case 'vertex':\n buffer.vertices.push(element.x, element.y, element.z);\n if ('nx' in element && 'ny' in element && 'nz' in element) {\n buffer.normals.push(element.nx, element.ny, element.nz);\n }\n if ('s' in element && 't' in element) {\n buffer.uvs.push(element.s, element.t);\n }\n if ('red' in element && 'green' in element && 'blue' in element) {\n buffer.colors.push(element.red / 255.0, element.green / 255.0, element.blue / 255.0);\n }\n break;\n\n case 'face':\n const vertexIndices = element.vertex_indices || element.vertex_index; // issue #9338\n if (vertexIndices.length === 3) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);\n } else if (vertexIndices.length === 4) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);\n buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);\n }\n break;\n\n default:\n break;\n }\n}\n"],"file":"parse-ply-in-batches.js"}
|