@loaders.gl/ply 3.3.0-alpha.5 → 3.3.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/es5/bundle.js +0 -1
  2. package/dist/es5/bundle.js.map +1 -1
  3. package/dist/es5/index.js +4 -17
  4. package/dist/es5/index.js.map +1 -1
  5. package/dist/es5/lib/get-ply-schema.js +0 -6
  6. package/dist/es5/lib/get-ply-schema.js.map +1 -1
  7. package/dist/es5/lib/normalize-ply.js +1 -8
  8. package/dist/es5/lib/normalize-ply.js.map +1 -1
  9. package/dist/es5/lib/parse-ply-in-batches.js +98 -169
  10. package/dist/es5/lib/parse-ply-in-batches.js.map +1 -1
  11. package/dist/es5/lib/parse-ply.js +1 -53
  12. package/dist/es5/lib/parse-ply.js.map +1 -1
  13. package/dist/es5/lib/ply-types.js.map +1 -1
  14. package/dist/es5/ply-loader.js +3 -1
  15. package/dist/es5/ply-loader.js.map +1 -1
  16. package/dist/es5/workers/ply-worker.js +0 -2
  17. package/dist/es5/workers/ply-worker.js.map +1 -1
  18. package/dist/esm/bundle.js +1 -1
  19. package/dist/esm/bundle.js.map +1 -1
  20. package/dist/esm/index.js +4 -1
  21. package/dist/esm/index.js.map +1 -1
  22. package/dist/esm/lib/get-ply-schema.js +0 -4
  23. package/dist/esm/lib/get-ply-schema.js.map +1 -1
  24. package/dist/esm/lib/normalize-ply.js +2 -5
  25. package/dist/esm/lib/normalize-ply.js.map +1 -1
  26. package/dist/esm/lib/parse-ply-in-batches.js +6 -38
  27. package/dist/esm/lib/parse-ply-in-batches.js.map +1 -1
  28. package/dist/esm/lib/parse-ply.js +8 -52
  29. package/dist/esm/lib/parse-ply.js.map +1 -1
  30. package/dist/esm/lib/ply-types.js.map +1 -1
  31. package/dist/esm/ply-loader.js +4 -1
  32. package/dist/esm/ply-loader.js.map +1 -1
  33. package/dist/esm/workers/ply-worker.js.map +1 -1
  34. package/dist/ply-worker.js +1 -1
  35. package/package.json +4 -4
@@ -1,90 +1,73 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = parsePLYInBatches;
9
-
10
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
-
14
- var _asyncIterator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncIterator"));
15
-
16
10
  var _awaitAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/awaitAsyncGenerator"));
17
-
18
11
  var _wrapAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapAsyncGenerator"));
19
-
20
12
  var _loaderUtils = require("@loaders.gl/loader-utils");
21
-
22
13
  var _normalizePly = _interopRequireDefault(require("./normalize-ply"));
23
-
14
+ function _asyncIterator(iterable) { var method, async, sync, retry = 2; for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) { if (async && null != (method = iterable[async])) return method.call(iterable); if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable)); async = "@@asyncIterator", sync = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
15
+ function AsyncFromSyncIterator(s) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); var done = r.done; return Promise.resolve(r.value).then(function (value) { return { value: value, done: done }; }); } return AsyncFromSyncIterator = function AsyncFromSyncIterator(s) { this.s = s, this.n = s.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function next() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, return: function _return(value) { var ret = this.s.return; return void 0 === ret ? Promise.resolve({ value: value, done: !0 }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments)); }, throw: function _throw(value) { var thr = this.s.return; return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(s); }
24
16
  var currentElement;
25
17
 
26
18
  function parsePLYInBatches(_x, _x2) {
27
19
  return _parsePLYInBatches.apply(this, arguments);
28
20
  }
29
-
30
21
  function _parsePLYInBatches() {
31
22
  _parsePLYInBatches = (0, _wrapAsyncGenerator2.default)(_regenerator.default.mark(function _callee(iterator, options) {
32
23
  var lineIterator, header, attributes;
33
- return _regenerator.default.wrap(function _callee$(_context2) {
24
+ return _regenerator.default.wrap(function _callee$(_context) {
34
25
  while (1) {
35
- switch (_context2.prev = _context2.next) {
26
+ switch (_context.prev = _context.next) {
36
27
  case 0:
37
28
  lineIterator = (0, _loaderUtils.makeLineIterator)((0, _loaderUtils.makeTextDecoderIterator)(iterator));
38
- _context2.next = 3;
29
+ _context.next = 3;
39
30
  return (0, _awaitAsyncGenerator2.default)(parsePLYHeader(lineIterator, options));
40
-
41
31
  case 3:
42
- header = _context2.sent;
43
- _context2.t0 = header.format;
44
- _context2.next = _context2.t0 === 'ascii' ? 7 : 11;
32
+ header = _context.sent;
33
+ _context.t0 = header.format;
34
+ _context.next = _context.t0 === 'ascii' ? 7 : 11;
45
35
  break;
46
-
47
36
  case 7:
48
- _context2.next = 9;
37
+ _context.next = 9;
49
38
  return (0, _awaitAsyncGenerator2.default)(parseASCII(lineIterator, header));
50
-
51
39
  case 9:
52
- attributes = _context2.sent;
53
- return _context2.abrupt("break", 12);
54
-
40
+ attributes = _context.sent;
41
+ return _context.abrupt("break", 12);
55
42
  case 11:
56
43
  throw new Error('Binary PLY can not yet be parsed in streaming mode');
57
-
58
44
  case 12:
59
- _context2.next = 14;
45
+ _context.next = 14;
60
46
  return (0, _normalizePly.default)(header, attributes, options);
61
-
62
47
  case 14:
63
48
  case "end":
64
- return _context2.stop();
49
+ return _context.stop();
65
50
  }
66
51
  }
67
52
  }, _callee);
68
53
  }));
69
54
  return _parsePLYInBatches.apply(this, arguments);
70
55
  }
71
-
72
56
  function parsePLYHeader(_x3, _x4) {
73
57
  return _parsePLYHeader.apply(this, arguments);
74
58
  }
75
-
76
59
  function _parsePLYHeader() {
77
60
  _parsePLYHeader = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(lineIterator, options) {
78
61
  var header;
79
- return _regenerator.default.wrap(function _callee2$(_context3) {
62
+ return _regenerator.default.wrap(function _callee2$(_context2) {
80
63
  while (1) {
81
- switch (_context3.prev = _context3.next) {
64
+ switch (_context2.prev = _context2.next) {
82
65
  case 0:
83
66
  header = {
84
67
  comments: [],
85
68
  elements: []
86
69
  };
87
- _context3.next = 3;
70
+ _context2.next = 3;
88
71
  return (0, _loaderUtils.forEach)(lineIterator, function (line) {
89
72
  line = line.trim();
90
73
 
@@ -99,66 +82,53 @@ function _parsePLYHeader() {
99
82
  var lineValues = line.split(/\s+/);
100
83
  var lineType = lineValues.shift();
101
84
  line = lineValues.join(' ');
102
-
103
85
  switch (lineType) {
104
86
  case 'ply':
105
87
  break;
106
-
107
88
  case 'format':
108
89
  header.format = lineValues[0];
109
90
  header.version = lineValues[1];
110
91
  break;
111
-
112
92
  case 'comment':
113
93
  header.comments.push(line);
114
94
  break;
115
-
116
95
  case 'element':
117
96
  if (currentElement) {
118
97
  header.elements.push(currentElement);
119
98
  }
120
-
121
99
  currentElement = {
122
100
  name: lineValues[0],
123
101
  count: parseInt(lineValues[1], 10),
124
102
  properties: []
125
103
  };
126
104
  break;
127
-
128
105
  case 'property':
129
106
  var property = makePLYElementProperty(lineValues, options.propertyNameMapping);
130
107
  currentElement.properties.push(property);
131
108
  break;
132
-
133
109
  default:
134
110
  console.log('unhandled', lineType, lineValues);
135
111
  }
136
-
137
112
  return false;
138
113
  });
139
-
140
114
  case 3:
141
115
  if (currentElement) {
142
116
  header.elements.push(currentElement);
143
117
  }
144
-
145
- return _context3.abrupt("return", header);
146
-
118
+ return _context2.abrupt("return", header);
147
119
  case 5:
148
120
  case "end":
149
- return _context3.stop();
121
+ return _context2.stop();
150
122
  }
151
123
  }
152
124
  }, _callee2);
153
125
  }));
154
126
  return _parsePLYHeader.apply(this, arguments);
155
127
  }
156
-
157
128
  function makePLYElementProperty(propertValues, propertyNameMapping) {
158
129
  var property = {
159
130
  type: propertValues[0]
160
131
  };
161
-
162
132
  if (property.type === 'list') {
163
133
  property.name = propertValues[3];
164
134
  property.countType = propertValues[1];
@@ -166,121 +136,97 @@ function makePLYElementProperty(propertValues, propertyNameMapping) {
166
136
  } else {
167
137
  property.name = propertValues[1];
168
138
  }
169
-
170
139
  if (propertyNameMapping && property.name in propertyNameMapping) {
171
140
  property.name = propertyNameMapping[property.name];
172
141
  }
173
-
174
142
  return property;
175
143
  }
176
144
 
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;
145
+ function parseASCII(_x5, _x6) {
146
+ return _parseASCII.apply(this, arguments);
147
+ }
148
+ function _parseASCII() {
149
+ _parseASCII = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(lineIterator, header) {
150
+ var attributes, currentElement, currentElementCount, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, line, element;
151
+ return _regenerator.default.wrap(function _callee3$(_context3) {
152
+ while (1) {
153
+ switch (_context3.prev = _context3.next) {
154
+ case 0:
155
+ attributes = {
156
+ indices: [],
157
+ vertices: [],
158
+ normals: [],
159
+ uvs: [],
160
+ colors: []
161
+ };
162
+ currentElement = 0;
163
+ currentElementCount = 0;
164
+ _iteratorAbruptCompletion = false;
165
+ _didIteratorError = false;
166
+ _context3.prev = 5;
167
+ _iterator = _asyncIterator(lineIterator);
168
+ case 7:
169
+ _context3.next = 9;
170
+ return _iterator.next();
171
+ case 9:
172
+ if (!(_iteratorAbruptCompletion = !(_step = _context3.sent).done)) {
173
+ _context3.next = 16;
174
+ break;
223
175
  }
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;
176
+ line = _step.value;
177
+ line = line.trim();
178
+ if (line !== '') {
179
+ if (currentElementCount >= header.elements[currentElement].count) {
180
+ currentElement++;
181
+ currentElementCount = 0;
182
+ }
183
+ element = parseASCIIElement(header.elements[currentElement].properties, line);
184
+ handleElement(attributes, header.elements[currentElement].name, element);
185
+ currentElementCount++;
186
+ }
187
+ case 13:
188
+ _iteratorAbruptCompletion = false;
189
+ _context3.next = 7;
251
190
  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;
191
+ case 16:
192
+ _context3.next = 22;
262
193
  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();
194
+ case 18:
195
+ _context3.prev = 18;
196
+ _context3.t0 = _context3["catch"](5);
197
+ _didIteratorError = true;
198
+ _iteratorError = _context3.t0;
199
+ case 22:
200
+ _context3.prev = 22;
201
+ _context3.prev = 23;
202
+ if (!(_iteratorAbruptCompletion && _iterator.return != null)) {
203
+ _context3.next = 27;
204
+ break;
205
+ }
206
+ _context3.next = 27;
207
+ return _iterator.return();
208
+ case 27:
209
+ _context3.prev = 27;
210
+ if (!_didIteratorError) {
211
+ _context3.next = 30;
212
+ break;
213
+ }
214
+ throw _iteratorError;
215
+ case 30:
216
+ return _context3.finish(27);
217
+ case 31:
218
+ return _context3.finish(22);
219
+ case 32:
220
+ return _context3.abrupt("return", attributes);
221
+ case 33:
222
+ case "end":
223
+ return _context3.stop();
224
+ }
279
225
  }
280
- }
281
- }, null, null, [[5, 23, 27, 37], [28,, 32, 36]], Promise);
226
+ }, _callee3, null, [[5, 18, 22, 32], [23,, 27, 31]]);
227
+ }));
228
+ return _parseASCII.apply(this, arguments);
282
229
  }
283
-
284
230
  function parseASCIINumber(n, type) {
285
231
  switch (type) {
286
232
  case 'char':
@@ -296,73 +242,56 @@ function parseASCIINumber(n, type) {
296
242
  case 'int32':
297
243
  case 'uint32':
298
244
  return parseInt(n, 10);
299
-
300
245
  case 'float':
301
246
  case 'double':
302
247
  case 'float32':
303
248
  case 'float64':
304
249
  return parseFloat(n);
305
-
306
250
  default:
307
251
  throw new Error(type);
308
252
  }
309
253
  }
310
-
311
254
  function parseASCIIElement(properties, line) {
312
255
  var values = line.split(/\s+/);
313
256
  var element = {};
314
-
315
257
  for (var i = 0; i < properties.length; i++) {
316
258
  if (properties[i].type === 'list') {
317
259
  var list = [];
318
260
  var n = parseASCIINumber(values.shift(), properties[i].countType);
319
-
320
261
  for (var j = 0; j < n; j++) {
321
262
  list.push(parseASCIINumber(values.shift(), properties[i].itemType));
322
263
  }
323
-
324
264
  element[properties[i].name] = list;
325
265
  } else {
326
266
  element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);
327
267
  }
328
268
  }
329
-
330
269
  return element;
331
270
  }
332
-
333
271
  function handleElement(buffer, elementName) {
334
272
  var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
335
-
336
273
  switch (elementName) {
337
274
  case 'vertex':
338
275
  buffer.vertices.push(element.x, element.y, element.z);
339
-
340
276
  if ('nx' in element && 'ny' in element && 'nz' in element) {
341
277
  buffer.normals.push(element.nx, element.ny, element.nz);
342
278
  }
343
-
344
279
  if ('s' in element && 't' in element) {
345
280
  buffer.uvs.push(element.s, element.t);
346
281
  }
347
-
348
282
  if ('red' in element && 'green' in element && 'blue' in element) {
349
283
  buffer.colors.push(element.red / 255.0, element.green / 255.0, element.blue / 255.0);
350
284
  }
351
-
352
285
  break;
353
-
354
286
  case 'face':
355
287
  var vertexIndices = element.vertex_indices || element.vertex_index;
356
-
357
288
  if (vertexIndices.length === 3) {
358
289
  buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);
359
290
  } else if (vertexIndices.length === 4) {
360
291
  buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);
361
292
  buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);
362
293
  }
363
-
364
294
  break;
365
-
366
295
  default:
367
296
  break;
368
297
  }
@@ -1 +1 @@
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":"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","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\nimport {makeLineIterator, makeTextDecoderIterator, forEach} from '@loaders.gl/loader-utils';\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<string> | Iterable<string>,\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: AsyncIterable<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"}
1
+ {"version":3,"file":"parse-ply-in-batches.js","names":["currentElement","parsePLYInBatches","iterator","options","lineIterator","makeLineIterator","makeTextDecoderIterator","parsePLYHeader","header","format","parseASCII","attributes","Error","normalizePLY","comments","elements","forEach","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"],"sources":["../../../src/lib/parse-ply-in-batches.ts"],"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\nimport {makeLineIterator, makeTextDecoderIterator, forEach} from '@loaders.gl/loader-utils';\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<string> | Iterable<string>,\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: AsyncIterable<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"],"mappings":"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"}