@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.
Files changed (58) hide show
  1. package/dist/bundle.js +2 -2
  2. package/dist/bundle.js.map +1 -0
  3. package/dist/dist.min.js +3 -11
  4. package/dist/index.js +11 -21
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/get-ply-schema.js +24 -33
  7. package/dist/lib/get-ply-schema.js.map +1 -0
  8. package/dist/lib/normalize-ply.js +65 -54
  9. package/dist/lib/normalize-ply.js.map +1 -0
  10. package/dist/lib/parse-ply-in-batches.d.ts.map +1 -1
  11. package/dist/lib/parse-ply-in-batches.js +200 -235
  12. package/dist/lib/parse-ply-in-batches.js.map +1 -0
  13. package/dist/lib/parse-ply.js +297 -320
  14. package/dist/lib/parse-ply.js.map +1 -0
  15. package/dist/lib/ply-types.js +2 -2
  16. package/dist/{es5/lib → lib}/ply-types.js.map +0 -0
  17. package/dist/ply-loader.js +18 -27
  18. package/dist/ply-loader.js.map +1 -0
  19. package/dist/ply-worker.js +1 -1
  20. package/dist/workers/ply-worker.js +4 -5
  21. package/dist/workers/ply-worker.js.map +1 -0
  22. package/package.json +7 -10
  23. package/src/lib/parse-ply-in-batches.ts +3 -4
  24. package/dist/es5/bundle.js +0 -7
  25. package/dist/es5/bundle.js.map +0 -1
  26. package/dist/es5/index.js +0 -63
  27. package/dist/es5/index.js.map +0 -1
  28. package/dist/es5/lib/get-ply-schema.js +0 -35
  29. package/dist/es5/lib/get-ply-schema.js.map +0 -1
  30. package/dist/es5/lib/normalize-ply.js +0 -78
  31. package/dist/es5/lib/normalize-ply.js.map +0 -1
  32. package/dist/es5/lib/parse-ply-in-batches.js +0 -370
  33. package/dist/es5/lib/parse-ply-in-batches.js.map +0 -1
  34. package/dist/es5/lib/parse-ply.js +0 -340
  35. package/dist/es5/lib/parse-ply.js.map +0 -1
  36. package/dist/es5/lib/ply-types.js +0 -2
  37. package/dist/es5/ply-loader.js +0 -27
  38. package/dist/es5/ply-loader.js.map +0 -1
  39. package/dist/es5/workers/ply-worker.js +0 -8
  40. package/dist/es5/workers/ply-worker.js.map +0 -1
  41. package/dist/esm/bundle.js +0 -5
  42. package/dist/esm/bundle.js.map +0 -1
  43. package/dist/esm/index.js +0 -12
  44. package/dist/esm/index.js.map +0 -1
  45. package/dist/esm/lib/get-ply-schema.js +0 -27
  46. package/dist/esm/lib/get-ply-schema.js.map +0 -1
  47. package/dist/esm/lib/normalize-ply.js +0 -69
  48. package/dist/esm/lib/normalize-ply.js.map +0 -1
  49. package/dist/esm/lib/parse-ply-in-batches.js +0 -218
  50. package/dist/esm/lib/parse-ply-in-batches.js.map +0 -1
  51. package/dist/esm/lib/parse-ply.js +0 -327
  52. package/dist/esm/lib/parse-ply.js.map +0 -1
  53. package/dist/esm/lib/ply-types.js +0 -2
  54. package/dist/esm/lib/ply-types.js.map +0 -1
  55. package/dist/esm/ply-loader.js +0 -19
  56. package/dist/esm/ply-loader.js.map +0 -1
  57. package/dist/esm/workers/ply-worker.js +0 -4
  58. package/dist/esm/workers/ply-worker.js.map +0 -1
@@ -1,340 +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 = parsePLY;
9
-
10
- var _normalizePly = _interopRequireDefault(require("./normalize-ply"));
11
-
12
- function parsePLY(data) {
13
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
14
- var header;
15
- var attributes;
16
-
17
- if (data instanceof ArrayBuffer) {
18
- var text = new TextDecoder().decode(data);
19
- header = parseHeader(text, options);
20
- attributes = header.format === 'ascii' ? parseASCII(text, header) : parseBinary(data, header);
21
- } else {
22
- header = parseHeader(data, options);
23
- attributes = parseASCII(data, header);
24
- }
25
-
26
- return (0, _normalizePly.default)(header, attributes);
27
- }
28
-
29
- function parseHeader(data, options) {
30
- var PLY_HEADER_PATTERN = /ply([\s\S]*)end_header\s/;
31
- var headerText = '';
32
- var headerLength = 0;
33
- var result = PLY_HEADER_PATTERN.exec(data);
34
-
35
- if (result !== null) {
36
- headerText = result[1];
37
- headerLength = result[0].length;
38
- }
39
-
40
- var lines = headerText.split('\n');
41
- var header = parseHeaderLines(lines, headerLength, options);
42
- return header;
43
- }
44
-
45
- function parseHeaderLines(lines, headerLength, options) {
46
- var header = {
47
- comments: [],
48
- elements: [],
49
- headerLength: headerLength
50
- };
51
- var lineType;
52
- var lineValues;
53
- var currentElement = null;
54
-
55
- for (var i = 0; i < lines.length; i++) {
56
- var line = lines[i];
57
- line = line.trim();
58
-
59
- if (line === '') {
60
- continue;
61
- }
62
-
63
- lineValues = line.split(/\s+/);
64
- lineType = lineValues.shift();
65
- line = lineValues.join(' ');
66
-
67
- switch (lineType) {
68
- case 'format':
69
- header.format = lineValues[0];
70
- header.version = lineValues[1];
71
- break;
72
-
73
- case 'comment':
74
- header.comments.push(line);
75
- break;
76
-
77
- case 'element':
78
- if (currentElement) {
79
- header.elements.push(currentElement);
80
- }
81
-
82
- currentElement = {
83
- name: lineValues[0],
84
- count: parseInt(lineValues[1], 10),
85
- properties: []
86
- };
87
- break;
88
-
89
- case 'property':
90
- if (!currentElement) {
91
- break;
92
- }
93
-
94
- currentElement.properties.push(makePLYElementProperty(lineValues, options.propertyNameMapping));
95
- break;
96
-
97
- default:
98
- console.log('unhandled', lineType, lineValues);
99
- }
100
- }
101
-
102
- if (currentElement !== undefined) {
103
- header.elements.push(currentElement);
104
- }
105
-
106
- return header;
107
- }
108
-
109
- function makePLYElementProperty(propertValues, propertyNameMapping) {
110
- var property = {
111
- type: propertValues[0]
112
- };
113
-
114
- if (property.type === 'list') {
115
- property.name = propertValues[3];
116
- property.countType = propertValues[1];
117
- property.itemType = propertValues[2];
118
- } else {
119
- property.name = propertValues[1];
120
- }
121
-
122
- if (propertyNameMapping && property.name in propertyNameMapping) {
123
- property.name = propertyNameMapping[property.name];
124
- }
125
-
126
- return property;
127
- }
128
-
129
- function parseASCIINumber(n, type) {
130
- switch (type) {
131
- case 'char':
132
- case 'uchar':
133
- case 'short':
134
- case 'ushort':
135
- case 'int':
136
- case 'uint':
137
- case 'int8':
138
- case 'uint8':
139
- case 'int16':
140
- case 'uint16':
141
- case 'int32':
142
- case 'uint32':
143
- return parseInt(n, 10);
144
-
145
- case 'float':
146
- case 'double':
147
- case 'float32':
148
- case 'float64':
149
- return parseFloat(n);
150
-
151
- default:
152
- throw new Error(type);
153
- }
154
- }
155
-
156
- function parseASCIIElement(properties, line) {
157
- var values = line.split(/\s+/);
158
- var element = {};
159
-
160
- for (var i = 0; i < properties.length; i++) {
161
- if (properties[i].type === 'list') {
162
- var list = [];
163
- var n = parseASCIINumber(values.shift(), properties[i].countType);
164
-
165
- for (var j = 0; j < n; j++) {
166
- list.push(parseASCIINumber(values.shift(), properties[i].itemType));
167
- }
168
-
169
- element[properties[i].name] = list;
170
- } else {
171
- element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);
172
- }
173
- }
174
-
175
- return element;
176
- }
177
-
178
- function parseASCII(data, header) {
179
- var attributes = {
180
- indices: [],
181
- vertices: [],
182
- normals: [],
183
- uvs: [],
184
- colors: []
185
- };
186
- var result;
187
- var patternBody = /end_header\s([\s\S]*)$/;
188
- var body = '';
189
-
190
- if ((result = patternBody.exec(data)) !== null) {
191
- body = result[1];
192
- }
193
-
194
- var lines = body.split('\n');
195
- var currentElement = 0;
196
- var currentElementCount = 0;
197
-
198
- for (var i = 0; i < lines.length; i++) {
199
- var line = lines[i];
200
- line = line.trim();
201
-
202
- if (line !== '') {
203
- if (currentElementCount >= header.elements[currentElement].count) {
204
- currentElement++;
205
- currentElementCount = 0;
206
- }
207
-
208
- var element = parseASCIIElement(header.elements[currentElement].properties, line);
209
- handleElement(attributes, header.elements[currentElement].name, element);
210
- currentElementCount++;
211
- }
212
- }
213
-
214
- return attributes;
215
- }
216
-
217
- function handleElement(buffer, elementName) {
218
- var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
219
-
220
- if (elementName === 'vertex') {
221
- buffer.vertices.push(element.x, element.y, element.z);
222
-
223
- if ('nx' in element && 'ny' in element && 'nz' in element) {
224
- buffer.normals.push(element.nx, element.ny, element.nz);
225
- }
226
-
227
- if ('s' in element && 't' in element) {
228
- buffer.uvs.push(element.s, element.t);
229
- }
230
-
231
- if ('red' in element && 'green' in element && 'blue' in element) {
232
- buffer.colors.push(element.red, element.green, element.blue);
233
- }
234
- } else if (elementName === 'face') {
235
- var vertexIndices = element.vertex_indices || element.vertex_index;
236
-
237
- if (vertexIndices.length === 3) {
238
- buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);
239
- } else if (vertexIndices.length === 4) {
240
- buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);
241
- buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);
242
- }
243
- }
244
- }
245
-
246
- function binaryRead(dataview, at, type, littleEndian) {
247
- switch (type) {
248
- case 'int8':
249
- case 'char':
250
- return [dataview.getInt8(at), 1];
251
-
252
- case 'uint8':
253
- case 'uchar':
254
- return [dataview.getUint8(at), 1];
255
-
256
- case 'int16':
257
- case 'short':
258
- return [dataview.getInt16(at, littleEndian), 2];
259
-
260
- case 'uint16':
261
- case 'ushort':
262
- return [dataview.getUint16(at, littleEndian), 2];
263
-
264
- case 'int32':
265
- case 'int':
266
- return [dataview.getInt32(at, littleEndian), 4];
267
-
268
- case 'uint32':
269
- case 'uint':
270
- return [dataview.getUint32(at, littleEndian), 4];
271
-
272
- case 'float32':
273
- case 'float':
274
- return [dataview.getFloat32(at, littleEndian), 4];
275
-
276
- case 'float64':
277
- case 'double':
278
- return [dataview.getFloat64(at, littleEndian), 8];
279
-
280
- default:
281
- throw new Error(type);
282
- }
283
- }
284
-
285
- function binaryReadElement(dataview, at, properties, littleEndian) {
286
- var element = {};
287
- var result;
288
- var read = 0;
289
-
290
- for (var i = 0; i < properties.length; i++) {
291
- if (properties[i].type === 'list') {
292
- var list = [];
293
- result = binaryRead(dataview, at + read, properties[i].countType, littleEndian);
294
- var n = result[0];
295
- read += result[1];
296
-
297
- for (var j = 0; j < n; j++) {
298
- result = binaryRead(dataview, at + read, properties[i].itemType, littleEndian);
299
- list.push(result[0]);
300
- read += result[1];
301
- }
302
-
303
- element[properties[i].name] = list;
304
- } else {
305
- result = binaryRead(dataview, at + read, properties[i].type, littleEndian);
306
- element[properties[i].name] = result[0];
307
- read += result[1];
308
- }
309
- }
310
-
311
- return [element, read];
312
- }
313
-
314
- function parseBinary(data, header) {
315
- var attributes = {
316
- indices: [],
317
- vertices: [],
318
- normals: [],
319
- uvs: [],
320
- colors: []
321
- };
322
- var littleEndian = header.format === 'binary_little_endian';
323
- var body = new DataView(data, header.headerLength);
324
- var result;
325
- var loc = 0;
326
-
327
- for (var currentElement = 0; currentElement < header.elements.length; currentElement++) {
328
- var count = header.elements[currentElement].count;
329
-
330
- for (var currentElementCount = 0; currentElementCount < count; currentElementCount++) {
331
- result = binaryReadElement(body, loc, header.elements[currentElement].properties, littleEndian);
332
- loc += result[1];
333
- var element = result[0];
334
- handleElement(attributes, header.elements[currentElement].name, element);
335
- }
336
- }
337
-
338
- return attributes;
339
- }
340
- //# sourceMappingURL=parse-ply.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/parse-ply.ts"],"names":["parsePLY","data","options","header","attributes","ArrayBuffer","text","TextDecoder","decode","parseHeader","format","parseASCII","parseBinary","PLY_HEADER_PATTERN","headerText","headerLength","result","exec","length","lines","split","parseHeaderLines","comments","elements","lineType","lineValues","currentElement","i","line","trim","shift","join","version","push","name","count","parseInt","properties","makePLYElementProperty","propertyNameMapping","console","log","undefined","propertValues","property","type","countType","itemType","parseASCIINumber","n","parseFloat","Error","parseASCIIElement","values","element","list","j","indices","vertices","normals","uvs","colors","patternBody","body","currentElementCount","handleElement","buffer","elementName","x","y","z","nx","ny","nz","s","t","red","green","blue","vertexIndices","vertex_indices","vertex_index","binaryRead","dataview","at","littleEndian","getInt8","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","binaryReadElement","read","DataView","loc"],"mappings":";;;;;;;;;AA8BA;;AAOe,SAASA,QAAT,CAAkBC,IAAlB,EAAqE;AAAA,MAAvBC,OAAuB,uEAAb,EAAa;AAClF,MAAIC,MAAJ;AACA,MAAIC,UAAJ;;AAEA,MAAIH,IAAI,YAAYI,WAApB,EAAiC;AAC/B,QAAMC,IAAI,GAAG,IAAIC,WAAJ,GAAkBC,MAAlB,CAAyBP,IAAzB,CAAb;AACAE,IAAAA,MAAM,GAAGM,WAAW,CAACH,IAAD,EAAOJ,OAAP,CAApB;AACAE,IAAAA,UAAU,GAAGD,MAAM,CAACO,MAAP,KAAkB,OAAlB,GAA4BC,UAAU,CAACL,IAAD,EAAOH,MAAP,CAAtC,GAAuDS,WAAW,CAACX,IAAD,EAAOE,MAAP,CAA/E;AACD,GAJD,MAIO;AACLA,IAAAA,MAAM,GAAGM,WAAW,CAACR,IAAD,EAAOC,OAAP,CAApB;AACAE,IAAAA,UAAU,GAAGO,UAAU,CAACV,IAAD,EAAOE,MAAP,CAAvB;AACD;;AAED,SAAO,2BAAaA,MAAb,EAAqBC,UAArB,CAAP;AACD;;AAOD,SAASK,WAAT,CAAqBR,IAArB,EAAgCC,OAAhC,EAA4E;AAC1E,MAAMW,kBAAkB,GAAG,0BAA3B;AAEA,MAAIC,UAAU,GAAG,EAAjB;AACA,MAAIC,YAAY,GAAG,CAAnB;AAEA,MAAMC,MAAM,GAAGH,kBAAkB,CAACI,IAAnB,CAAwBhB,IAAxB,CAAf;;AAEA,MAAIe,MAAM,KAAK,IAAf,EAAqB;AACnBF,IAAAA,UAAU,GAAGE,MAAM,CAAC,CAAD,CAAnB;AACAD,IAAAA,YAAY,GAAGC,MAAM,CAAC,CAAD,CAAN,CAAUE,MAAzB;AACD;;AACD,MAAMC,KAAK,GAAGL,UAAU,CAACM,KAAX,CAAiB,IAAjB,CAAd;AACA,MAAMjB,MAAM,GAAGkB,gBAAgB,CAACF,KAAD,EAAQJ,YAAR,EAAsBb,OAAtB,CAA/B;AAEA,SAAOC,MAAP;AACD;;AAQD,SAASkB,gBAAT,CACEF,KADF,EAEEJ,YAFF,EAGEb,OAHF,EAIa;AACX,MAAMC,MAAiB,GAAG;AACxBmB,IAAAA,QAAQ,EAAE,EADc;AAExBC,IAAAA,QAAQ,EAAE,EAFc;AAGxBR,IAAAA,YAAY,EAAZA;AAHwB,GAA1B;AAMA,MAAIS,QAAJ;AACA,MAAIC,UAAJ;AACA,MAAIC,cAAmC,GAAG,IAA1C;;AAEA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGR,KAAK,CAACD,MAA1B,EAAkCS,CAAC,EAAnC,EAAuC;AACrC,QAAIC,IAAY,GAAGT,KAAK,CAACQ,CAAD,CAAxB;AACAC,IAAAA,IAAI,GAAGA,IAAI,CAACC,IAAL,EAAP;;AAEA,QAAID,IAAI,KAAK,EAAb,EAAiB;AAEf;AACD;;AAEDH,IAAAA,UAAU,GAAGG,IAAI,CAACR,KAAL,CAAW,KAAX,CAAb;AACAI,IAAAA,QAAQ,GAAGC,UAAU,CAACK,KAAX,EAAX;AACAF,IAAAA,IAAI,GAAGH,UAAU,CAACM,IAAX,CAAgB,GAAhB,CAAP;;AAEA,YAAQP,QAAR;AACE,WAAK,QAAL;AACErB,QAAAA,MAAM,CAACO,MAAP,GAAgBe,UAAU,CAAC,CAAD,CAA1B;AACAtB,QAAAA,MAAM,CAAC6B,OAAP,GAAiBP,UAAU,CAAC,CAAD,CAA3B;AACA;;AAEF,WAAK,SAAL;AACEtB,QAAAA,MAAM,CAACmB,QAAP,CAAgBW,IAAhB,CAAqBL,IAArB;AACA;;AAEF,WAAK,SAAL;AACE,YAAIF,cAAJ,EAAoB;AAClBvB,UAAAA,MAAM,CAACoB,QAAP,CAAgBU,IAAhB,CAAqBP,cAArB;AACD;;AAEDA,QAAAA,cAAc,GAAG;AACfQ,UAAAA,IAAI,EAAET,UAAU,CAAC,CAAD,CADD;AAEfU,UAAAA,KAAK,EAAEC,QAAQ,CAACX,UAAU,CAAC,CAAD,CAAX,EAAgB,EAAhB,CAFA;AAGfY,UAAAA,UAAU,EAAE;AAHG,SAAjB;AAKA;;AAEF,WAAK,UAAL;AACE,YAAI,CAACX,cAAL,EAAqB;AACnB;AACD;;AACDA,QAAAA,cAAc,CAACW,UAAf,CAA0BJ,IAA1B,CACEK,sBAAsB,CAACb,UAAD,EAAavB,OAAO,CAACqC,mBAArB,CADxB;AAGA;;AAEF;AAEEC,QAAAA,OAAO,CAACC,GAAR,CAAY,WAAZ,EAAyBjB,QAAzB,EAAmCC,UAAnC;AAjCJ;AAmCD;;AAED,MAAIC,cAAc,KAAKgB,SAAvB,EAAkC;AAChCvC,IAAAA,MAAM,CAACoB,QAAP,CAAgBU,IAAhB,CAAqBP,cAArB;AACD;;AAED,SAAOvB,MAAP;AACD;;AAOD,SAASmC,sBAAT,CAAgCK,aAAhC,EAAyDJ,mBAAzD,EAA+F;AAC7F,MAAMK,QAAqB,GAAG;AAC5BC,IAAAA,IAAI,EAAEF,aAAa,CAAC,CAAD;AADS,GAA9B;;AAIA,MAAIC,QAAQ,CAACC,IAAT,KAAkB,MAAtB,EAA8B;AAC5BD,IAAAA,QAAQ,CAACV,IAAT,GAAgBS,aAAa,CAAC,CAAD,CAA7B;AACAC,IAAAA,QAAQ,CAACE,SAAT,GAAqBH,aAAa,CAAC,CAAD,CAAlC;AACAC,IAAAA,QAAQ,CAACG,QAAT,GAAoBJ,aAAa,CAAC,CAAD,CAAjC;AACD,GAJD,MAIO;AACLC,IAAAA,QAAQ,CAACV,IAAT,GAAgBS,aAAa,CAAC,CAAD,CAA7B;AACD;;AAED,MAAIJ,mBAAmB,IAAIK,QAAQ,CAACV,IAAT,IAAiBK,mBAA5C,EAAiE;AAC/DK,IAAAA,QAAQ,CAACV,IAAT,GAAgBK,mBAAmB,CAACK,QAAQ,CAACV,IAAV,CAAnC;AACD;;AAED,SAAOU,QAAP;AACD;;AASD,SAASI,gBAAT,CAA0BC,CAA1B,EAAqCJ,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,aAAOT,QAAQ,CAACa,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,IAAIE,KAAJ,CAAUN,IAAV,CAAN;AAtBJ;AAwBD;;AAOD,SAASO,iBAAT,CAA2Bf,UAA3B,EAA8CT,IAA9C,EAA4D;AAC1D,MAAMyB,MAAW,GAAGzB,IAAI,CAACR,KAAL,CAAW,KAAX,CAApB;AAEA,MAAMkC,OAAO,GAAG,EAAhB;;AAEA,OAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGU,UAAU,CAACnB,MAA/B,EAAuCS,CAAC,EAAxC,EAA4C;AAC1C,QAAIU,UAAU,CAACV,CAAD,CAAV,CAAckB,IAAd,KAAuB,MAA3B,EAAmC;AACjC,UAAMU,IAAS,GAAG,EAAlB;AACA,UAAMN,CAAC,GAAGD,gBAAgB,CAACK,MAAM,CAACvB,KAAP,EAAD,EAAiBO,UAAU,CAACV,CAAD,CAAV,CAAcmB,SAA/B,CAA1B;;AAEA,WAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGP,CAApB,EAAuBO,CAAC,EAAxB,EAA4B;AAC1BD,QAAAA,IAAI,CAACtB,IAAL,CAAUe,gBAAgB,CAACK,MAAM,CAACvB,KAAP,EAAD,EAAiBO,UAAU,CAACV,CAAD,CAAV,CAAcoB,QAA/B,CAA1B;AACD;;AAEDO,MAAAA,OAAO,CAACjB,UAAU,CAACV,CAAD,CAAV,CAAcO,IAAf,CAAP,GAA8BqB,IAA9B;AACD,KATD,MASO;AACLD,MAAAA,OAAO,CAACjB,UAAU,CAACV,CAAD,CAAV,CAAcO,IAAf,CAAP,GAA8Bc,gBAAgB,CAACK,MAAM,CAACvB,KAAP,EAAD,EAAiBO,UAAU,CAACV,CAAD,CAAV,CAAckB,IAA/B,CAA9C;AACD;AACF;;AAED,SAAOS,OAAP;AACD;;AAOD,SAAS3C,UAAT,CAAoBV,IAApB,EAA+BE,MAA/B,EAAiE;AAG/D,MAAMC,UAAyB,GAAG;AAChCqD,IAAAA,OAAO,EAAE,EADuB;AAEhCC,IAAAA,QAAQ,EAAE,EAFsB;AAGhCC,IAAAA,OAAO,EAAE,EAHuB;AAIhCC,IAAAA,GAAG,EAAE,EAJ2B;AAKhCC,IAAAA,MAAM,EAAE;AALwB,GAAlC;AAQA,MAAI7C,MAAJ;AAEA,MAAM8C,WAAW,GAAG,wBAApB;AACA,MAAIC,IAAI,GAAG,EAAX;;AACA,MAAI,CAAC/C,MAAM,GAAG8C,WAAW,CAAC7C,IAAZ,CAAiBhB,IAAjB,CAAV,MAAsC,IAA1C,EAAgD;AAC9C8D,IAAAA,IAAI,GAAG/C,MAAM,CAAC,CAAD,CAAb;AACD;;AAED,MAAMG,KAAK,GAAG4C,IAAI,CAAC3C,KAAL,CAAW,IAAX,CAAd;AACA,MAAIM,cAAc,GAAG,CAArB;AACA,MAAIsC,mBAAmB,GAAG,CAA1B;;AAEA,OAAK,IAAIrC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGR,KAAK,CAACD,MAA1B,EAAkCS,CAAC,EAAnC,EAAuC;AACrC,QAAIC,IAAI,GAAGT,KAAK,CAACQ,CAAD,CAAhB;AACAC,IAAAA,IAAI,GAAGA,IAAI,CAACC,IAAL,EAAP;;AAEA,QAAID,IAAI,KAAK,EAAb,EAAiB;AACf,UAAIoC,mBAAmB,IAAI7D,MAAM,CAACoB,QAAP,CAAgBG,cAAhB,EAAgCS,KAA3D,EAAkE;AAChET,QAAAA,cAAc;AACdsC,QAAAA,mBAAmB,GAAG,CAAtB;AACD;;AAED,UAAMV,OAAO,GAAGF,iBAAiB,CAACjD,MAAM,CAACoB,QAAP,CAAgBG,cAAhB,EAAgCW,UAAjC,EAA6CT,IAA7C,CAAjC;AACAqC,MAAAA,aAAa,CAAC7D,UAAD,EAAaD,MAAM,CAACoB,QAAP,CAAgBG,cAAhB,EAAgCQ,IAA7C,EAAmDoB,OAAnD,CAAb;AACAU,MAAAA,mBAAmB;AACpB;AACF;;AAED,SAAO5D,UAAP;AACD;;AAQD,SAAS6D,aAAT,CACEC,MADF,EAEEC,WAFF,EAIE;AAAA,MADAb,OACA,uEADe,EACf;;AACA,MAAIa,WAAW,KAAK,QAApB,EAA8B;AAC5BD,IAAAA,MAAM,CAACR,QAAP,CAAgBzB,IAAhB,CAAqBqB,OAAO,CAACc,CAA7B,EAAgCd,OAAO,CAACe,CAAxC,EAA2Cf,OAAO,CAACgB,CAAnD;;AAEA,QAAI,QAAQhB,OAAR,IAAmB,QAAQA,OAA3B,IAAsC,QAAQA,OAAlD,EAA2D;AACzDY,MAAAA,MAAM,CAACP,OAAP,CAAe1B,IAAf,CAAoBqB,OAAO,CAACiB,EAA5B,EAAgCjB,OAAO,CAACkB,EAAxC,EAA4ClB,OAAO,CAACmB,EAApD;AACD;;AAED,QAAI,OAAOnB,OAAP,IAAkB,OAAOA,OAA7B,EAAsC;AACpCY,MAAAA,MAAM,CAACN,GAAP,CAAW3B,IAAX,CAAgBqB,OAAO,CAACoB,CAAxB,EAA2BpB,OAAO,CAACqB,CAAnC;AACD;;AAED,QAAI,SAASrB,OAAT,IAAoB,WAAWA,OAA/B,IAA0C,UAAUA,OAAxD,EAAiE;AAC/DY,MAAAA,MAAM,CAACL,MAAP,CAAc5B,IAAd,CAAmBqB,OAAO,CAACsB,GAA3B,EAAgCtB,OAAO,CAACuB,KAAxC,EAA+CvB,OAAO,CAACwB,IAAvD;AACD;AACF,GAdD,MAcO,IAAIX,WAAW,KAAK,MAApB,EAA4B;AACjC,QAAMY,aAAa,GAAGzB,OAAO,CAAC0B,cAAR,IAA0B1B,OAAO,CAAC2B,YAAxD;;AAEA,QAAIF,aAAa,CAAC7D,MAAd,KAAyB,CAA7B,EAAgC;AAC9BgD,MAAAA,MAAM,CAACT,OAAP,CAAexB,IAAf,CAAoB8C,aAAa,CAAC,CAAD,CAAjC,EAAsCA,aAAa,CAAC,CAAD,CAAnD,EAAwDA,aAAa,CAAC,CAAD,CAArE;AACD,KAFD,MAEO,IAAIA,aAAa,CAAC7D,MAAd,KAAyB,CAA7B,EAAgC;AACrCgD,MAAAA,MAAM,CAACT,OAAP,CAAexB,IAAf,CAAoB8C,aAAa,CAAC,CAAD,CAAjC,EAAsCA,aAAa,CAAC,CAAD,CAAnD,EAAwDA,aAAa,CAAC,CAAD,CAArE;AACAb,MAAAA,MAAM,CAACT,OAAP,CAAexB,IAAf,CAAoB8C,aAAa,CAAC,CAAD,CAAjC,EAAsCA,aAAa,CAAC,CAAD,CAAnD,EAAwDA,aAAa,CAAC,CAAD,CAArE;AACD;AACF;AACF;;AAWD,SAASG,UAAT,CAAoBC,QAApB,EAAwCC,EAAxC,EAAoDvC,IAApD,EAA+DwC,YAA/D,EAAgG;AAC9F,UAAQxC,IAAR;AAEE,SAAK,MAAL;AACA,SAAK,MAAL;AACE,aAAO,CAACsC,QAAQ,CAACG,OAAT,CAAiBF,EAAjB,CAAD,EAAuB,CAAvB,CAAP;;AACF,SAAK,OAAL;AACA,SAAK,OAAL;AACE,aAAO,CAACD,QAAQ,CAACI,QAAT,CAAkBH,EAAlB,CAAD,EAAwB,CAAxB,CAAP;;AACF,SAAK,OAAL;AACA,SAAK,OAAL;AACE,aAAO,CAACD,QAAQ,CAACK,QAAT,CAAkBJ,EAAlB,EAAsBC,YAAtB,CAAD,EAAsC,CAAtC,CAAP;;AACF,SAAK,QAAL;AACA,SAAK,QAAL;AACE,aAAO,CAACF,QAAQ,CAACM,SAAT,CAAmBL,EAAnB,EAAuBC,YAAvB,CAAD,EAAuC,CAAvC,CAAP;;AACF,SAAK,OAAL;AACA,SAAK,KAAL;AACE,aAAO,CAACF,QAAQ,CAACO,QAAT,CAAkBN,EAAlB,EAAsBC,YAAtB,CAAD,EAAsC,CAAtC,CAAP;;AACF,SAAK,QAAL;AACA,SAAK,MAAL;AACE,aAAO,CAACF,QAAQ,CAACQ,SAAT,CAAmBP,EAAnB,EAAuBC,YAAvB,CAAD,EAAuC,CAAvC,CAAP;;AACF,SAAK,SAAL;AACA,SAAK,OAAL;AACE,aAAO,CAACF,QAAQ,CAACS,UAAT,CAAoBR,EAApB,EAAwBC,YAAxB,CAAD,EAAwC,CAAxC,CAAP;;AACF,SAAK,SAAL;AACA,SAAK,QAAL;AACE,aAAO,CAACF,QAAQ,CAACU,UAAT,CAAoBT,EAApB,EAAwBC,YAAxB,CAAD,EAAwC,CAAxC,CAAP;;AAEF;AACE,YAAM,IAAIlC,KAAJ,CAAUN,IAAV,CAAN;AA5BJ;AA8BD;;AAUD,SAASiD,iBAAT,CACEX,QADF,EAEEC,EAFF,EAGE/C,UAHF,EAIEgD,YAJF,EAKQ;AACN,MAAM/B,OAAO,GAAG,EAAhB;AACA,MAAItC,MAAJ;AACA,MAAI+E,IAAI,GAAG,CAAX;;AAEA,OAAK,IAAIpE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGU,UAAU,CAACnB,MAA/B,EAAuCS,CAAC,EAAxC,EAA4C;AAC1C,QAAIU,UAAU,CAACV,CAAD,CAAV,CAAckB,IAAd,KAAuB,MAA3B,EAAmC;AACjC,UAAMU,IAAI,GAAG,EAAb;AAEAvC,MAAAA,MAAM,GAAGkE,UAAU,CAACC,QAAD,EAAWC,EAAE,GAAGW,IAAhB,EAAsB1D,UAAU,CAACV,CAAD,CAAV,CAAcmB,SAApC,EAA+CuC,YAA/C,CAAnB;AACA,UAAMpC,CAAC,GAAGjC,MAAM,CAAC,CAAD,CAAhB;AACA+E,MAAAA,IAAI,IAAI/E,MAAM,CAAC,CAAD,CAAd;;AAEA,WAAK,IAAIwC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGP,CAApB,EAAuBO,CAAC,EAAxB,EAA4B;AAC1BxC,QAAAA,MAAM,GAAGkE,UAAU,CAACC,QAAD,EAAWC,EAAE,GAAGW,IAAhB,EAAsB1D,UAAU,CAACV,CAAD,CAAV,CAAcoB,QAApC,EAA8CsC,YAA9C,CAAnB;AAEA9B,QAAAA,IAAI,CAACtB,IAAL,CAAUjB,MAAM,CAAC,CAAD,CAAhB;AACA+E,QAAAA,IAAI,IAAI/E,MAAM,CAAC,CAAD,CAAd;AACD;;AAEDsC,MAAAA,OAAO,CAACjB,UAAU,CAACV,CAAD,CAAV,CAAcO,IAAf,CAAP,GAA8BqB,IAA9B;AACD,KAfD,MAeO;AACLvC,MAAAA,MAAM,GAAGkE,UAAU,CAACC,QAAD,EAAWC,EAAE,GAAGW,IAAhB,EAAsB1D,UAAU,CAACV,CAAD,CAAV,CAAckB,IAApC,EAA0CwC,YAA1C,CAAnB;AACA/B,MAAAA,OAAO,CAACjB,UAAU,CAACV,CAAD,CAAV,CAAcO,IAAf,CAAP,GAA8BlB,MAAM,CAAC,CAAD,CAApC;AACA+E,MAAAA,IAAI,IAAI/E,MAAM,CAAC,CAAD,CAAd;AACD;AACF;;AAED,SAAO,CAACsC,OAAD,EAAUyC,IAAV,CAAP;AACD;;AAYD,SAASnF,WAAT,CAAqBX,IAArB,EAAwCE,MAAxC,EAA0F;AACxF,MAAMC,UAA4B,GAAG;AACnCqD,IAAAA,OAAO,EAAE,EAD0B;AAEnCC,IAAAA,QAAQ,EAAE,EAFyB;AAGnCC,IAAAA,OAAO,EAAE,EAH0B;AAInCC,IAAAA,GAAG,EAAE,EAJ8B;AAKnCC,IAAAA,MAAM,EAAE;AAL2B,GAArC;AAQA,MAAMwB,YAAY,GAAGlF,MAAM,CAACO,MAAP,KAAkB,sBAAvC;AACA,MAAMqD,IAAI,GAAG,IAAIiC,QAAJ,CAAa/F,IAAb,EAAmBE,MAAM,CAACY,YAA1B,CAAb;AACA,MAAIC,MAAJ;AACA,MAAIiF,GAAG,GAAG,CAAV;;AAEA,OAAK,IAAIvE,cAAc,GAAG,CAA1B,EAA6BA,cAAc,GAAGvB,MAAM,CAACoB,QAAP,CAAgBL,MAA9D,EAAsEQ,cAAc,EAApF,EAAwF;AACtF,QAAMS,KAAK,GAAGhC,MAAM,CAACoB,QAAP,CAAgBG,cAAhB,EAAgCS,KAA9C;;AACA,SAAK,IAAI6B,mBAAmB,GAAG,CAA/B,EAAkCA,mBAAmB,GAAG7B,KAAxD,EAA+D6B,mBAAmB,EAAlF,EAAsF;AACpFhD,MAAAA,MAAM,GAAG8E,iBAAiB,CACxB/B,IADwB,EAExBkC,GAFwB,EAGxB9F,MAAM,CAACoB,QAAP,CAAgBG,cAAhB,EAAgCW,UAHR,EAIxBgD,YAJwB,CAA1B;AAMAY,MAAAA,GAAG,IAAIjF,MAAM,CAAC,CAAD,CAAb;AACA,UAAMsC,OAAO,GAAGtC,MAAM,CAAC,CAAD,CAAtB;AAEAiD,MAAAA,aAAa,CAAC7D,UAAD,EAAaD,MAAM,CAACoB,QAAP,CAAgBG,cAAhB,EAAgCQ,IAA7C,EAAmDoB,OAAnD,CAAb;AACD;AACF;;AAED,SAAOlD,UAAP;AACD","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// });\nimport type {\n PLYMesh,\n PLYHeader,\n PLYAttributes,\n MeshHeader,\n ASCIIElement,\n PLYProperty\n} from './ply-types';\nimport normalizePLY from './normalize-ply';\n\n/**\n * @param data\n * @param options\n * @returns\n */\nexport default function parsePLY(data: ArrayBuffer | string, options = {}): PLYMesh {\n let header: PLYHeader & MeshHeader;\n let attributes: PLYAttributes;\n\n if (data instanceof ArrayBuffer) {\n const text = new TextDecoder().decode(data);\n header = parseHeader(text, options);\n attributes = header.format === 'ascii' ? parseASCII(text, header) : parseBinary(data, header);\n } else {\n header = parseHeader(data, options);\n attributes = parseASCII(data, header);\n }\n\n return normalizePLY(header, attributes);\n}\n\n/**\n * @param data\n * @param options\n * @returns header\n */\nfunction parseHeader(data: any, options: {[index: string]: any}): PLYHeader {\n const PLY_HEADER_PATTERN = /ply([\\s\\S]*)end_header\\s/;\n\n let headerText = '';\n let headerLength = 0;\n\n const result = PLY_HEADER_PATTERN.exec(data);\n\n if (result !== null) {\n headerText = result[1];\n headerLength = result[0].length;\n }\n const lines = headerText.split('\\n');\n const header = parseHeaderLines(lines, headerLength, options);\n\n return header;\n}\n\n/**\n * @param lines\n * @param headerLength\n * @param options\n * @returns header\n */\nfunction parseHeaderLines(\n lines: string[],\n headerLength: number,\n options: {[index: string]: any}\n): PLYHeader {\n const header: PLYHeader = {\n comments: [],\n elements: [],\n headerLength\n };\n\n let lineType: string | undefined;\n let lineValues: string[];\n let currentElement: ASCIIElement | null = null;\n\n for (let i = 0; i < lines.length; i++) {\n let line: string = lines[i];\n line = line.trim();\n\n if (line === '') {\n // eslint-disable-next-line\n continue;\n }\n\n lineValues = line.split(/\\s+/);\n lineType = lineValues.shift();\n line = lineValues.join(' ');\n\n switch (lineType) {\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 if (!currentElement) {\n break;\n }\n currentElement.properties.push(\n makePLYElementProperty(lineValues, options.propertyNameMapping)\n );\n break;\n\n default:\n // eslint-disable-next-line\n console.log('unhandled', lineType, lineValues);\n }\n }\n\n if (currentElement !== undefined) {\n header.elements.push(currentElement);\n }\n\n return header;\n}\n\n/**\n * @param propertValues\n * @param propertyNameMapping\n * @returns property of ply element\n */\nfunction makePLYElementProperty(propertValues: string[], propertyNameMapping: []): PLYProperty {\n const property: PLYProperty = {\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/**\n * Parses ASCII number\n * @param n\n * @param type\n * @returns\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/**\n * @param properties\n * @param line\n * @returns ASCII 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/**\n * @param data\n * @param header\n * @returns [attributes]\n */\nfunction parseASCII(data: any, header: PLYHeader): PLYAttributes {\n // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n\n const attributes: PLYAttributes = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n colors: []\n };\n\n let result: RegExpExecArray | null;\n\n const patternBody = /end_header\\s([\\s\\S]*)$/;\n let body = '';\n if ((result = patternBody.exec(data)) !== null) {\n body = result[1];\n }\n\n const lines = body.split('\\n');\n let currentElement = 0;\n let currentElementCount = 0;\n\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i];\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/**\n * @param buffer\n * @param elementName\n * @param element\n */\n// eslint-disable-next-line complexity\nfunction handleElement(\n buffer: {[index: string]: number[]},\n elementName: string,\n element: any = {}\n) {\n if (elementName === 'vertex') {\n buffer.vertices.push(element.x, element.y, element.z);\n\n if ('nx' in element && 'ny' in element && 'nz' in element) {\n buffer.normals.push(element.nx, element.ny, element.nz);\n }\n\n if ('s' in element && 't' in element) {\n buffer.uvs.push(element.s, element.t);\n }\n\n if ('red' in element && 'green' in element && 'blue' in element) {\n buffer.colors.push(element.red, element.green, element.blue);\n }\n } else if (elementName === 'face') {\n const vertexIndices = element.vertex_indices || element.vertex_index; // issue #9338\n\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 }\n}\n\n/**\n * Reads binary data\n * @param dataview\n * @param at\n * @param type\n * @param littleEndian\n * @returns [number, number]\n */\n// eslint-disable-next-line complexity\nfunction binaryRead(dataview: DataView, at: number, type: any, littleEndian: boolean): number[] {\n switch (type) {\n // corespondences for non-specific length types here match rply:\n case 'int8':\n case 'char':\n return [dataview.getInt8(at), 1];\n case 'uint8':\n case 'uchar':\n return [dataview.getUint8(at), 1];\n case 'int16':\n case 'short':\n return [dataview.getInt16(at, littleEndian), 2];\n case 'uint16':\n case 'ushort':\n return [dataview.getUint16(at, littleEndian), 2];\n case 'int32':\n case 'int':\n return [dataview.getInt32(at, littleEndian), 4];\n case 'uint32':\n case 'uint':\n return [dataview.getUint32(at, littleEndian), 4];\n case 'float32':\n case 'float':\n return [dataview.getFloat32(at, littleEndian), 4];\n case 'float64':\n case 'double':\n return [dataview.getFloat64(at, littleEndian), 8];\n\n default:\n throw new Error(type);\n }\n}\n\n/**\n * Reads binary data\n * @param dataview\n * @param at\n * @param properties\n * @param littleEndian\n * @returns [object, number]\n */\nfunction binaryReadElement(\n dataview: DataView,\n at: number,\n properties: {[index: string]: any},\n littleEndian: boolean\n): {}[] {\n const element = {};\n let result: number[];\n let read = 0;\n\n for (let i = 0; i < properties.length; i++) {\n if (properties[i].type === 'list') {\n const list = [];\n\n result = binaryRead(dataview, at + read, properties[i].countType, littleEndian);\n const n = result[0];\n read += result[1];\n\n for (let j = 0; j < n; j++) {\n result = binaryRead(dataview, at + read, properties[i].itemType, littleEndian);\n // @ts-ignore\n list.push(result[0]);\n read += result[1];\n }\n\n element[properties[i].name] = list;\n } else {\n result = binaryRead(dataview, at + read, properties[i].type, littleEndian);\n element[properties[i].name] = result[0];\n read += result[1];\n }\n }\n\n return [element, read];\n}\n\ntype BinaryAttributes = {\n [index: string]: number[];\n};\n\n/**\n * Parses binary data\n * @param data\n * @param header\n * @returns [attributes] of data\n */\nfunction parseBinary(data: ArrayBuffer, header: {[index: string]: any}): BinaryAttributes {\n const attributes: BinaryAttributes = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n colors: []\n };\n\n const littleEndian = header.format === 'binary_little_endian';\n const body = new DataView(data, header.headerLength);\n let result: any[];\n let loc = 0;\n\n for (let currentElement = 0; currentElement < header.elements.length; currentElement++) {\n const count = header.elements[currentElement].count;\n for (let currentElementCount = 0; currentElementCount < count; currentElementCount++) {\n result = binaryReadElement(\n body,\n loc,\n header.elements[currentElement].properties,\n littleEndian\n );\n loc += result[1];\n const element = result[0];\n\n handleElement(attributes, header.elements[currentElement].name, element);\n }\n }\n\n return attributes;\n}\n"],"file":"parse-ply.js"}
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=ply-types.js.map
@@ -1,27 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports._typecheckPLYLoader = exports.PLYLoader = void 0;
7
- var VERSION = typeof "3.1.3" !== 'undefined' ? "3.1.3" : 'latest';
8
- var PLYLoader = {
9
- name: 'PLY',
10
- id: 'ply',
11
- module: 'ply',
12
- shapes: ['mesh', 'gltf', 'columnar-table'],
13
- version: VERSION,
14
- worker: true,
15
- extensions: ['ply'],
16
- mimeTypes: ['text/plain', 'application/octet-stream'],
17
- text: true,
18
- binary: true,
19
- tests: ['ply'],
20
- options: {
21
- ply: {}
22
- }
23
- };
24
- exports.PLYLoader = PLYLoader;
25
- var _typecheckPLYLoader = PLYLoader;
26
- exports._typecheckPLYLoader = _typecheckPLYLoader;
27
- //# sourceMappingURL=ply-loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ply-loader.ts"],"names":["VERSION","PLYLoader","name","id","module","shapes","version","worker","extensions","mimeTypes","text","binary","tests","options","ply","_typecheckPLYLoader"],"mappings":";;;;;;AAKA,IAAMA,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,QAAnE;AAOO,IAAMC,SAAS,GAAG;AACvBC,EAAAA,IAAI,EAAE,KADiB;AAEvBC,EAAAA,EAAE,EAAE,KAFmB;AAGvBC,EAAAA,MAAM,EAAE,KAHe;AAIvBC,EAAAA,MAAM,EAAE,CAAC,MAAD,EAAS,MAAT,EAAiB,gBAAjB,CAJe;AAKvBC,EAAAA,OAAO,EAAEN,OALc;AAMvBO,EAAAA,MAAM,EAAE,IANe;AAOvBC,EAAAA,UAAU,EAAE,CAAC,KAAD,CAPW;AAQvBC,EAAAA,SAAS,EAAE,CAAC,YAAD,EAAe,0BAAf,CARY;AASvBC,EAAAA,IAAI,EAAE,IATiB;AAUvBC,EAAAA,MAAM,EAAE,IAVe;AAWvBC,EAAAA,KAAK,EAAE,CAAC,KAAD,CAXgB;AAYvBC,EAAAA,OAAO,EAAE;AACPC,IAAAA,GAAG,EAAE;AADE;AAZc,CAAlB;;AAiBA,IAAMC,mBAA2B,GAAGd,SAApC","sourcesContent":["// PLY Loader\nimport type {Loader} from '@loaders.gl/loader-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * Worker loader for PLY - Polygon File Format (aka Stanford Triangle Format)'\n * links: ['http://paulbourke.net/dataformats/ply/',\n * 'https://en.wikipedia.org/wiki/PLY_(file_format)']\n */\nexport const PLYLoader = {\n name: 'PLY',\n id: 'ply',\n module: 'ply',\n shapes: ['mesh', 'gltf', 'columnar-table'],\n version: VERSION,\n worker: true,\n extensions: ['ply'],\n mimeTypes: ['text/plain', 'application/octet-stream'],\n text: true,\n binary: true,\n tests: ['ply'],\n options: {\n ply: {}\n }\n};\n\nexport const _typecheckPLYLoader: Loader = PLYLoader;\n"],"file":"ply-loader.js"}
@@ -1,8 +0,0 @@
1
- "use strict";
2
-
3
- var _loaderUtils = require("@loaders.gl/loader-utils");
4
-
5
- var _index = require("../index");
6
-
7
- (0, _loaderUtils.createLoaderWorker)(_index.PLYLoader);
8
- //# sourceMappingURL=ply-worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/workers/ply-worker.ts"],"names":["PLYLoader"],"mappings":";;AAAA;;AACA;;AAEA,qCAAmBA,gBAAnB","sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {PLYLoader} from '../index';\n\ncreateLoaderWorker(PLYLoader);\n"],"file":"ply-worker.js"}
@@ -1,5 +0,0 @@
1
- const moduleExports = require('./index');
2
-
3
- globalThis.loaders = globalThis.loaders || {};
4
- module.exports = Object.assign(globalThis.loaders, moduleExports);
5
- //# sourceMappingURL=bundle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/bundle.ts"],"names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"mappings":"AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACAC,UAAU,CAACC,OAAX,GAAqBD,UAAU,CAACC,OAAX,IAAsB,EAA3C;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,OAAzB,EAAkCH,aAAlC,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"file":"bundle.js"}
package/dist/esm/index.js DELETED
@@ -1,12 +0,0 @@
1
- import { PLYLoader as PLYWorkerLoader } from './ply-loader';
2
- import parsePLY from './lib/parse-ply';
3
- import parsePLYInBatches from './lib/parse-ply-in-batches';
4
- export { PLYWorkerLoader };
5
- export const PLYLoader = { ...PLYWorkerLoader,
6
- parse: async (arrayBuffer, options) => parsePLY(arrayBuffer, options),
7
- parseTextSync: parsePLY,
8
- parseSync: parsePLY,
9
- parseInBatches: parsePLYInBatches
10
- };
11
- export const _typecheckPLYLoader = PLYLoader;
12
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":["PLYLoader","PLYWorkerLoader","parsePLY","parsePLYInBatches","parse","arrayBuffer","options","parseTextSync","parseSync","parseInBatches","_typecheckPLYLoader"],"mappings":"AACA,SAAQA,SAAS,IAAIC,eAArB,QAA2C,cAA3C;AACA,OAAOC,QAAP,MAAqB,iBAArB;AACA,OAAOC,iBAAP,MAA8B,4BAA9B;AAIA,SAAQF,eAAR;AAKA,OAAO,MAAMD,SAAS,GAAG,EACvB,GAAGC,eADoB;AAGvBG,EAAAA,KAAK,EAAE,OAAOC,WAAP,EAAoBC,OAApB,KAAgCJ,QAAQ,CAACG,WAAD,EAAcC,OAAd,CAHxB;AAIvBC,EAAAA,aAAa,EAAEL,QAJQ;AAKvBM,EAAAA,SAAS,EAAEN,QALY;AAMvBO,EAAAA,cAAc,EAAEN;AANO,CAAlB;AASP,OAAO,MAAMO,mBAAqC,GAAGV,SAA9C","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {PLYLoader as PLYWorkerLoader} from './ply-loader';\nimport parsePLY from './lib/parse-ply';\nimport parsePLYInBatches from './lib/parse-ply-in-batches';\n\n// PLYLoader\n\nexport {PLYWorkerLoader};\n\n/**\n * Loader for PLY - Polygon File Format\n */\nexport const PLYLoader = {\n ...PLYWorkerLoader,\n // Note: parsePLY supports both text and binary\n parse: async (arrayBuffer, options) => parsePLY(arrayBuffer, options), // TODO - this may not detect text correctly?\n parseTextSync: parsePLY,\n parseSync: parsePLY,\n parseInBatches: parsePLYInBatches\n};\n\nexport const _typecheckPLYLoader: LoaderWithParser = PLYLoader;\n"],"file":"index.js"}
@@ -1,27 +0,0 @@
1
- import { deduceMeshSchema } from '@loaders.gl/schema';
2
- export function getPLYSchema(plyHeader, attributes) {
3
- const metadataMap = makeMetadataFromPlyHeader(plyHeader);
4
- const schema = deduceMeshSchema(attributes, metadataMap);
5
- return schema;
6
- }
7
-
8
- function makeMetadataFromPlyHeader(plyHeader) {
9
- const metadataMap = new Map();
10
- metadataMap.set('ply_comments', JSON.stringify(plyHeader.comments));
11
- metadataMap.set('ply_elements', JSON.stringify(plyHeader.elements));
12
-
13
- if (plyHeader.format !== undefined) {
14
- metadataMap.set('ply_format', plyHeader.format);
15
- }
16
-
17
- if (plyHeader.version !== undefined) {
18
- metadataMap.set('ply_version', plyHeader.version);
19
- }
20
-
21
- if (plyHeader.headerLength !== undefined) {
22
- metadataMap.set('ply_headerLength', plyHeader.headerLength.toString(10));
23
- }
24
-
25
- return metadataMap;
26
- }
27
- //# sourceMappingURL=get-ply-schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/get-ply-schema.ts"],"names":["deduceMeshSchema","getPLYSchema","plyHeader","attributes","metadataMap","makeMetadataFromPlyHeader","schema","Map","set","JSON","stringify","comments","elements","format","undefined","version","headerLength","toString"],"mappings":"AAAA,SAAgCA,gBAAhC,QAAuD,oBAAvD;AASA,OAAO,SAASC,YAAT,CAAsBC,SAAtB,EAA4CC,UAA5C,EAAgF;AACrF,QAAMC,WAAW,GAAGC,yBAAyB,CAACH,SAAD,CAA7C;AACA,QAAMI,MAAM,GAAGN,gBAAgB,CAACG,UAAD,EAAaC,WAAb,CAA/B;AACA,SAAOE,MAAP;AACD;;AAOD,SAASD,yBAAT,CAAmCH,SAAnC,EAA8E;AAC5E,QAAME,WAAW,GAAG,IAAIG,GAAJ,EAApB;AACAH,EAAAA,WAAW,CAACI,GAAZ,CAAgB,cAAhB,EAAgCC,IAAI,CAACC,SAAL,CAAeR,SAAS,CAACS,QAAzB,CAAhC;AACAP,EAAAA,WAAW,CAACI,GAAZ,CAAgB,cAAhB,EAAgCC,IAAI,CAACC,SAAL,CAAeR,SAAS,CAACU,QAAzB,CAAhC;;AACA,MAAIV,SAAS,CAACW,MAAV,KAAqBC,SAAzB,EAAoC;AAClCV,IAAAA,WAAW,CAACI,GAAZ,CAAgB,YAAhB,EAA8BN,SAAS,CAACW,MAAxC;AACD;;AACD,MAAIX,SAAS,CAACa,OAAV,KAAsBD,SAA1B,EAAqC;AACnCV,IAAAA,WAAW,CAACI,GAAZ,CAAgB,aAAhB,EAA+BN,SAAS,CAACa,OAAzC;AACD;;AACD,MAAIb,SAAS,CAACc,YAAV,KAA2BF,SAA/B,EAA0C;AACxCV,IAAAA,WAAW,CAACI,GAAZ,CAAgB,kBAAhB,EAAoCN,SAAS,CAACc,YAAV,CAAuBC,QAAvB,CAAgC,EAAhC,CAApC;AACD;;AACD,SAAOb,WAAP;AACD","sourcesContent":["import {Schema, MeshAttributes, deduceMeshSchema} from '@loaders.gl/schema';\nimport type {PLYHeader} from './ply-types';\n\n/**\n * Gets schema from PLY header\n * @param plyHeader\n * @param metadata\n * @returns Schema\n */\nexport function getPLYSchema(plyHeader: PLYHeader, attributes: MeshAttributes): Schema {\n const metadataMap = makeMetadataFromPlyHeader(plyHeader);\n const schema = deduceMeshSchema(attributes, metadataMap);\n return schema;\n}\n\n/**\n * Make arrow like schema metadata by PlyHeader properties\n * @param plyHeader\n * @returns\n */\nfunction makeMetadataFromPlyHeader(plyHeader: PLYHeader): Map<string, string> {\n const metadataMap = new Map();\n metadataMap.set('ply_comments', JSON.stringify(plyHeader.comments));\n metadataMap.set('ply_elements', JSON.stringify(plyHeader.elements));\n if (plyHeader.format !== undefined) {\n metadataMap.set('ply_format', plyHeader.format);\n }\n if (plyHeader.version !== undefined) {\n metadataMap.set('ply_version', plyHeader.version);\n }\n if (plyHeader.headerLength !== undefined) {\n metadataMap.set('ply_headerLength', plyHeader.headerLength.toString(10));\n }\n return metadataMap;\n}\n"],"file":"get-ply-schema.js"}
@@ -1,69 +0,0 @@
1
- import { getMeshBoundingBox } from '@loaders.gl/schema';
2
- import { getPLYSchema } from './get-ply-schema';
3
- export default function normalizePLY(plyHeader, plyAttributes, options) {
4
- const attributes = getMeshAttributes(plyAttributes);
5
- const boundingBox = getMeshBoundingBox(attributes);
6
- const vertexCount = plyAttributes.indices.length || plyAttributes.vertices.length / 3;
7
- const isTriangles = plyAttributes.indices && plyAttributes.indices.length > 0;
8
- const mode = isTriangles ? 4 : 0;
9
- const topology = isTriangles ? 'triangle-list' : 'point-list';
10
- const schema = getPLYSchema(plyHeader, attributes);
11
- const plyMesh = {
12
- loader: 'ply',
13
- loaderData: plyHeader,
14
- header: {
15
- vertexCount,
16
- boundingBox
17
- },
18
- schema,
19
- attributes,
20
- indices: {
21
- value: new Uint32Array(0),
22
- size: 0
23
- },
24
- mode,
25
- topology
26
- };
27
-
28
- if (plyAttributes.indices.length > 0) {
29
- plyMesh.indices = {
30
- value: new Uint32Array(plyAttributes.indices),
31
- size: 1
32
- };
33
- }
34
-
35
- return plyMesh;
36
- }
37
-
38
- function getMeshAttributes(attributes) {
39
- const accessors = {};
40
- accessors.POSITION = {
41
- value: new Float32Array(attributes.vertices),
42
- size: 3
43
- };
44
-
45
- if (attributes.normals.length > 0) {
46
- accessors.NORMAL = {
47
- value: new Float32Array(attributes.normals),
48
- size: 3
49
- };
50
- }
51
-
52
- if (attributes.uvs.length > 0) {
53
- accessors.TEXCOORD_0 = {
54
- value: new Float32Array(attributes.uvs),
55
- size: 2
56
- };
57
- }
58
-
59
- if (attributes.colors.length > 0) {
60
- accessors.COLOR_0 = {
61
- value: new Uint8Array(attributes.colors),
62
- size: 3,
63
- normalized: true
64
- };
65
- }
66
-
67
- return accessors;
68
- }
69
- //# sourceMappingURL=normalize-ply.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/normalize-ply.ts"],"names":["getMeshBoundingBox","getPLYSchema","normalizePLY","plyHeader","plyAttributes","options","attributes","getMeshAttributes","boundingBox","vertexCount","indices","length","vertices","isTriangles","mode","topology","schema","plyMesh","loader","loaderData","header","value","Uint32Array","size","accessors","POSITION","Float32Array","normals","NORMAL","uvs","TEXCOORD_0","colors","COLOR_0","Uint8Array","normalized"],"mappings":"AACA,SAAQA,kBAAR,QAAiC,oBAAjC;AAEA,SAAQC,YAAR,QAA2B,kBAA3B;AAOA,eAAe,SAASC,YAAT,CACbC,SADa,EAEbC,aAFa,EAGbC,OAHa,EAIJ;AACT,QAAMC,UAAU,GAAGC,iBAAiB,CAACH,aAAD,CAApC;AACA,QAAMI,WAAW,GAAGR,kBAAkB,CAACM,UAAD,CAAtC;AACA,QAAMG,WAAW,GAAGL,aAAa,CAACM,OAAd,CAAsBC,MAAtB,IAAgCP,aAAa,CAACQ,QAAd,CAAuBD,MAAvB,GAAgC,CAApF;AAIA,QAAME,WAAW,GAAGT,aAAa,CAACM,OAAd,IAAyBN,aAAa,CAACM,OAAd,CAAsBC,MAAtB,GAA+B,CAA5E;AACA,QAAMG,IAAI,GAAGD,WAAW,GAAG,CAAH,GAAO,CAA/B;AACA,QAAME,QAAQ,GAAGF,WAAW,GAAG,eAAH,GAAqB,YAAjD;AAEA,QAAMG,MAAM,GAAGf,YAAY,CAACE,SAAD,EAAYG,UAAZ,CAA3B;AAEA,QAAMW,OAAgB,GAAG;AACvBC,IAAAA,MAAM,EAAE,KADe;AAEvBC,IAAAA,UAAU,EAAEhB,SAFW;AAGvBiB,IAAAA,MAAM,EAAE;AACNX,MAAAA,WADM;AAEND,MAAAA;AAFM,KAHe;AAOvBQ,IAAAA,MAPuB;AAQvBV,IAAAA,UARuB;AASvBI,IAAAA,OAAO,EAAE;AAACW,MAAAA,KAAK,EAAE,IAAIC,WAAJ,CAAgB,CAAhB,CAAR;AAA4BC,MAAAA,IAAI,EAAE;AAAlC,KATc;AAUvBT,IAAAA,IAVuB;AAWvBC,IAAAA;AAXuB,GAAzB;;AAcA,MAAIX,aAAa,CAACM,OAAd,CAAsBC,MAAtB,GAA+B,CAAnC,EAAsC;AACpCM,IAAAA,OAAO,CAACP,OAAR,GAAkB;AAACW,MAAAA,KAAK,EAAE,IAAIC,WAAJ,CAAgBlB,aAAa,CAACM,OAA9B,CAAR;AAAgDa,MAAAA,IAAI,EAAE;AAAtD,KAAlB;AACD;;AAED,SAAON,OAAP;AACD;;AAMD,SAASV,iBAAT,CAA2BD,UAA3B,EAAsE;AACpE,QAAMkB,SAAyB,GAAG,EAAlC;AAEAA,EAAAA,SAAS,CAACC,QAAV,GAAqB;AAACJ,IAAAA,KAAK,EAAE,IAAIK,YAAJ,CAAiBpB,UAAU,CAACM,QAA5B,CAAR;AAA+CW,IAAAA,IAAI,EAAE;AAArD,GAArB;;AAIA,MAAIjB,UAAU,CAACqB,OAAX,CAAmBhB,MAAnB,GAA4B,CAAhC,EAAmC;AACjCa,IAAAA,SAAS,CAACI,MAAV,GAAmB;AAACP,MAAAA,KAAK,EAAE,IAAIK,YAAJ,CAAiBpB,UAAU,CAACqB,OAA5B,CAAR;AAA8CJ,MAAAA,IAAI,EAAE;AAApD,KAAnB;AACD;;AAED,MAAIjB,UAAU,CAACuB,GAAX,CAAelB,MAAf,GAAwB,CAA5B,EAA+B;AAC7Ba,IAAAA,SAAS,CAACM,UAAV,GAAuB;AAACT,MAAAA,KAAK,EAAE,IAAIK,YAAJ,CAAiBpB,UAAU,CAACuB,GAA5B,CAAR;AAA0CN,MAAAA,IAAI,EAAE;AAAhD,KAAvB;AACD;;AAED,MAAIjB,UAAU,CAACyB,MAAX,CAAkBpB,MAAlB,GAA2B,CAA/B,EAAkC;AAEhCa,IAAAA,SAAS,CAACQ,OAAV,GAAoB;AAACX,MAAAA,KAAK,EAAE,IAAIY,UAAJ,CAAe3B,UAAU,CAACyB,MAA1B,CAAR;AAA2CR,MAAAA,IAAI,EAAE,CAAjD;AAAoDW,MAAAA,UAAU,EAAE;AAAhE,KAApB;AACD;;AAED,SAAOV,SAAP;AACD","sourcesContent":["import type {MeshAttributes} from '@loaders.gl/schema';\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport type {PLYMesh, PLYHeader, PLYAttributes, MeshHeader} from './ply-types';\nimport {getPLYSchema} from './get-ply-schema';\n\n/**\n * @param header\n * @param attributes\n * @returns data and header\n */\nexport default function normalizePLY(\n plyHeader: MeshHeader & PLYHeader,\n plyAttributes: PLYAttributes,\n options?: {}\n): PLYMesh {\n const attributes = getMeshAttributes(plyAttributes);\n const boundingBox = getMeshBoundingBox(attributes);\n const vertexCount = plyAttributes.indices.length || plyAttributes.vertices.length / 3;\n\n // TODO - how to detect POINT CLOUDS vs MESHES?\n // TODO - For Meshes, PLY quadrangles must be split?\n const isTriangles = plyAttributes.indices && plyAttributes.indices.length > 0;\n const mode = isTriangles ? 4 : 0; // TRIANGLES vs POINTS\n const topology = isTriangles ? 'triangle-list' : 'point-list';\n\n const schema = getPLYSchema(plyHeader, attributes);\n\n const plyMesh: PLYMesh = {\n loader: 'ply',\n loaderData: plyHeader,\n header: {\n vertexCount,\n boundingBox\n },\n schema,\n attributes,\n indices: {value: new Uint32Array(0), size: 0},\n mode,\n topology\n };\n\n if (plyAttributes.indices.length > 0) {\n plyMesh.indices = {value: new Uint32Array(plyAttributes.indices), size: 1};\n }\n\n return plyMesh;\n}\n\n/**\n * @param attributes\n * @returns accessors []\n */\nfunction getMeshAttributes(attributes: PLYAttributes): MeshAttributes {\n const accessors: MeshAttributes = {};\n\n accessors.POSITION = {value: new Float32Array(attributes.vertices), size: 3};\n\n // optional attributes data\n\n if (attributes.normals.length > 0) {\n accessors.NORMAL = {value: new Float32Array(attributes.normals), size: 3};\n }\n\n if (attributes.uvs.length > 0) {\n accessors.TEXCOORD_0 = {value: new Float32Array(attributes.uvs), size: 2};\n }\n\n if (attributes.colors.length > 0) {\n // TODO - normalized shoud be based on `uchar` flag in source data?\n accessors.COLOR_0 = {value: new Uint8Array(attributes.colors), size: 3, normalized: true};\n }\n\n return accessors;\n}\n"],"file":"normalize-ply.js"}