@loaders.gl/ply 3.3.0-alpha.5 → 3.3.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +4 -17
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/get-ply-schema.js +0 -6
- package/dist/es5/lib/get-ply-schema.js.map +1 -1
- package/dist/es5/lib/normalize-ply.js +1 -8
- package/dist/es5/lib/normalize-ply.js.map +1 -1
- package/dist/es5/lib/parse-ply-in-batches.js +98 -169
- package/dist/es5/lib/parse-ply-in-batches.js.map +1 -1
- package/dist/es5/lib/parse-ply.js +1 -53
- package/dist/es5/lib/parse-ply.js.map +1 -1
- package/dist/es5/lib/ply-types.js.map +1 -1
- package/dist/es5/ply-loader.js +3 -1
- package/dist/es5/ply-loader.js.map +1 -1
- package/dist/es5/workers/ply-worker.js +0 -2
- package/dist/es5/workers/ply-worker.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/index.js +4 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/get-ply-schema.js +0 -4
- package/dist/esm/lib/get-ply-schema.js.map +1 -1
- package/dist/esm/lib/normalize-ply.js +2 -5
- package/dist/esm/lib/normalize-ply.js.map +1 -1
- package/dist/esm/lib/parse-ply-in-batches.js +6 -38
- package/dist/esm/lib/parse-ply-in-batches.js.map +1 -1
- package/dist/esm/lib/parse-ply.js +8 -52
- package/dist/esm/lib/parse-ply.js.map +1 -1
- package/dist/esm/lib/ply-types.js.map +1 -1
- package/dist/esm/ply-loader.js +4 -1
- package/dist/esm/ply-loader.js.map +1 -1
- package/dist/esm/workers/ply-worker.js.map +1 -1
- package/dist/ply-worker.js +1 -1
- 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$(
|
|
24
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
34
25
|
while (1) {
|
|
35
|
-
switch (
|
|
26
|
+
switch (_context.prev = _context.next) {
|
|
36
27
|
case 0:
|
|
37
28
|
lineIterator = (0, _loaderUtils.makeLineIterator)((0, _loaderUtils.makeTextDecoderIterator)(iterator));
|
|
38
|
-
|
|
29
|
+
_context.next = 3;
|
|
39
30
|
return (0, _awaitAsyncGenerator2.default)(parsePLYHeader(lineIterator, options));
|
|
40
|
-
|
|
41
31
|
case 3:
|
|
42
|
-
header =
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
37
|
+
_context.next = 9;
|
|
49
38
|
return (0, _awaitAsyncGenerator2.default)(parseASCII(lineIterator, header));
|
|
50
|
-
|
|
51
39
|
case 9:
|
|
52
|
-
attributes =
|
|
53
|
-
return
|
|
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
|
-
|
|
45
|
+
_context.next = 14;
|
|
60
46
|
return (0, _normalizePly.default)(header, attributes, options);
|
|
61
|
-
|
|
62
47
|
case 14:
|
|
63
48
|
case "end":
|
|
64
|
-
return
|
|
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$(
|
|
62
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
80
63
|
while (1) {
|
|
81
|
-
switch (
|
|
64
|
+
switch (_context2.prev = _context2.next) {
|
|
82
65
|
case 0:
|
|
83
66
|
header = {
|
|
84
67
|
comments: [],
|
|
85
68
|
elements: []
|
|
86
69
|
};
|
|
87
|
-
|
|
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
|
|
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(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
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
|
-
}
|
|
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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"}
|