@loaders.gl/ply 3.4.0-alpha.2 → 3.4.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/dist.min.js +142 -70
  2. package/dist/es5/index.js +17 -13
  3. package/dist/es5/index.js.map +1 -1
  4. package/dist/es5/lib/get-ply-schema.js +0 -1
  5. package/dist/es5/lib/get-ply-schema.js.map +1 -1
  6. package/dist/es5/lib/normalize-ply.js +47 -25
  7. package/dist/es5/lib/normalize-ply.js.map +1 -1
  8. package/dist/es5/lib/parse-ply-in-batches.js +162 -172
  9. package/dist/es5/lib/parse-ply-in-batches.js.map +1 -1
  10. package/dist/es5/lib/parse-ply.js +114 -54
  11. package/dist/es5/lib/parse-ply.js.map +1 -1
  12. package/dist/es5/lib/ply-types.js.map +1 -1
  13. package/dist/es5/ply-loader.js +1 -3
  14. package/dist/es5/ply-loader.js.map +1 -1
  15. package/dist/es5/workers/ply-worker.js.map +1 -1
  16. package/dist/esm/bundle.js +0 -1
  17. package/dist/esm/bundle.js.map +1 -1
  18. package/dist/esm/index.js +6 -8
  19. package/dist/esm/index.js.map +1 -1
  20. package/dist/esm/lib/get-ply-schema.js +0 -1
  21. package/dist/esm/lib/get-ply-schema.js.map +1 -1
  22. package/dist/esm/lib/normalize-ply.js +46 -26
  23. package/dist/esm/lib/normalize-ply.js.map +1 -1
  24. package/dist/esm/lib/parse-ply-in-batches.js +18 -27
  25. package/dist/esm/lib/parse-ply-in-batches.js.map +1 -1
  26. package/dist/esm/lib/parse-ply.js +92 -56
  27. package/dist/esm/lib/parse-ply.js.map +1 -1
  28. package/dist/esm/lib/ply-types.js.map +1 -1
  29. package/dist/esm/ply-loader.js +1 -4
  30. package/dist/esm/ply-loader.js.map +1 -1
  31. package/dist/index.d.ts +3 -5
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +6 -9
  34. package/dist/lib/normalize-ply.js +33 -11
  35. package/dist/lib/parse-ply-in-batches.d.ts +1 -1
  36. package/dist/lib/parse-ply-in-batches.d.ts.map +1 -1
  37. package/dist/lib/parse-ply-in-batches.js +19 -18
  38. package/dist/lib/parse-ply.d.ts +4 -1
  39. package/dist/lib/parse-ply.d.ts.map +1 -1
  40. package/dist/lib/parse-ply.js +103 -47
  41. package/dist/lib/ply-types.d.ts +19 -11
  42. package/dist/lib/ply-types.d.ts.map +1 -1
  43. package/dist/ply-worker.js +143 -71
  44. package/package.json +4 -4
  45. package/src/index.ts +6 -6
  46. package/src/lib/normalize-ply.ts +34 -12
  47. package/src/lib/parse-ply-in-batches.ts +20 -22
  48. package/src/lib/parse-ply.ts +114 -55
  49. package/src/lib/ply-types.ts +21 -12
@@ -4,9 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.default = parsePLY;
7
+ exports.parsePLY = parsePLY;
8
8
  var _normalizePly = _interopRequireDefault(require("./normalize-ply"));
9
-
9
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
10
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
11
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
10
12
  function parsePLY(data) {
11
13
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
12
14
  var header;
@@ -21,7 +23,6 @@ function parsePLY(data) {
21
23
  }
22
24
  return (0, _normalizePly.default)(header, attributes);
23
25
  }
24
-
25
26
  function parseHeader(data, options) {
26
27
  var PLY_HEADER_PATTERN = /ply([\s\S]*)end_header\s/;
27
28
  var headerText = '';
@@ -35,7 +36,6 @@ function parseHeader(data, options) {
35
36
  var header = parseHeaderLines(lines, headerLength, options);
36
37
  return header;
37
38
  }
38
-
39
39
  function parseHeaderLines(lines, headerLength, options) {
40
40
  var header = {
41
41
  comments: [],
@@ -73,38 +73,91 @@ function parseHeaderLines(lines, headerLength, options) {
73
73
  };
74
74
  break;
75
75
  case 'property':
76
- if (!currentElement) {
77
- break;
76
+ if (currentElement) {
77
+ var property = makePLYElementProperty(lineValues);
78
+ if (options !== null && options !== void 0 && options.propertyNameMapping && property.name in (options === null || options === void 0 ? void 0 : options.propertyNameMapping)) {
79
+ property.name = options === null || options === void 0 ? void 0 : options.propertyNameMapping[property.name];
80
+ }
81
+ currentElement.properties.push(property);
78
82
  }
79
- currentElement.properties.push(makePLYElementProperty(lineValues, options.propertyNameMapping));
80
83
  break;
81
84
  default:
82
85
  console.log('unhandled', lineType, lineValues);
83
86
  }
84
87
  }
85
- if (currentElement !== undefined) {
88
+ if (currentElement) {
86
89
  header.elements.push(currentElement);
87
90
  }
88
91
  return header;
89
92
  }
90
-
91
- function makePLYElementProperty(propertValues, propertyNameMapping) {
92
- var property = {
93
- type: propertValues[0]
93
+ function getPLYAttributes(header) {
94
+ var attributes = {
95
+ indices: [],
96
+ vertices: [],
97
+ normals: [],
98
+ uvs: [],
99
+ colors: []
94
100
  };
95
- if (property.type === 'list') {
96
- property.name = propertValues[3];
97
- property.countType = propertValues[1];
98
- property.itemType = propertValues[2];
99
- } else {
100
- property.name = propertValues[1];
101
+ var _iterator = _createForOfIteratorHelper(header.elements),
102
+ _step;
103
+ try {
104
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
105
+ var element = _step.value;
106
+ if (element.name === 'vertex') {
107
+ var _iterator2 = _createForOfIteratorHelper(element.properties),
108
+ _step2;
109
+ try {
110
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
111
+ var property = _step2.value;
112
+ switch (property.name) {
113
+ case 'x':
114
+ case 'y':
115
+ case 'z':
116
+ case 'nx':
117
+ case 'ny':
118
+ case 'nz':
119
+ case 's':
120
+ case 't':
121
+ case 'red':
122
+ case 'green':
123
+ case 'blue':
124
+ break;
125
+ default:
126
+ attributes[property.name] = [];
127
+ break;
128
+ }
129
+ }
130
+ } catch (err) {
131
+ _iterator2.e(err);
132
+ } finally {
133
+ _iterator2.f();
134
+ }
135
+ }
136
+ }
137
+ } catch (err) {
138
+ _iterator.e(err);
139
+ } finally {
140
+ _iterator.f();
101
141
  }
102
- if (propertyNameMapping && property.name in propertyNameMapping) {
103
- property.name = propertyNameMapping[property.name];
142
+ return attributes;
143
+ }
144
+ function makePLYElementProperty(propertyValues) {
145
+ var type = propertyValues[0];
146
+ switch (type) {
147
+ case 'list':
148
+ return {
149
+ type: type,
150
+ name: propertyValues[3],
151
+ countType: propertyValues[1],
152
+ itemType: propertyValues[2]
153
+ };
154
+ default:
155
+ return {
156
+ type: type,
157
+ name: propertyValues[1]
158
+ };
104
159
  }
105
- return property;
106
160
  }
107
-
108
161
  function parseASCIINumber(n, type) {
109
162
  switch (type) {
110
163
  case 'char':
@@ -129,8 +182,7 @@ function parseASCIINumber(n, type) {
129
182
  throw new Error(type);
130
183
  }
131
184
  }
132
-
133
- function parseASCIIElement(properties, line) {
185
+ function parsePLYElement(properties, line) {
134
186
  var values = line.split(/\s+/);
135
187
  var element = {};
136
188
  for (var i = 0; i < properties.length; i++) {
@@ -147,16 +199,8 @@ function parseASCIIElement(properties, line) {
147
199
  }
148
200
  return element;
149
201
  }
150
-
151
202
  function parseASCII(data, header) {
152
-
153
- var attributes = {
154
- indices: [],
155
- vertices: [],
156
- normals: [],
157
- uvs: [],
158
- colors: []
159
- };
203
+ var attributes = getPLYAttributes(header);
160
204
  var result;
161
205
  var patternBody = /end_header\s([\s\S]*)$/;
162
206
  var body = '';
@@ -174,30 +218,54 @@ function parseASCII(data, header) {
174
218
  currentElement++;
175
219
  currentElementCount = 0;
176
220
  }
177
- var element = parseASCIIElement(header.elements[currentElement].properties, line);
221
+ var element = parsePLYElement(header.elements[currentElement].properties, line);
178
222
  handleElement(attributes, header.elements[currentElement].name, element);
179
223
  currentElementCount++;
180
224
  }
181
225
  }
182
226
  return attributes;
183
227
  }
184
-
185
228
  function handleElement(buffer, elementName) {
186
229
  var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
187
230
  if (elementName === 'vertex') {
188
- buffer.vertices.push(element.x, element.y, element.z);
189
- if ('nx' in element && 'ny' in element && 'nz' in element) {
190
- buffer.normals.push(element.nx, element.ny, element.nz);
191
- }
192
- if ('s' in element && 't' in element) {
193
- buffer.uvs.push(element.s, element.t);
194
- }
195
- if ('red' in element && 'green' in element && 'blue' in element) {
196
- buffer.colors.push(element.red, element.green, element.blue);
231
+ for (var _i = 0, _Object$keys = Object.keys(element); _i < _Object$keys.length; _i++) {
232
+ var propertyName = _Object$keys[_i];
233
+ switch (propertyName) {
234
+ case 'x':
235
+ buffer.vertices.push(element.x, element.y, element.z);
236
+ break;
237
+ case 'y':
238
+ case 'z':
239
+ break;
240
+ case 'nx':
241
+ if ('nx' in element && 'ny' in element && 'nz' in element) {
242
+ buffer.normals.push(element.nx, element.ny, element.nz);
243
+ }
244
+ break;
245
+ case 'ny':
246
+ case 'nz':
247
+ break;
248
+ case 's':
249
+ if ('s' in element && 't' in element) {
250
+ buffer.uvs.push(element.s, element.t);
251
+ }
252
+ break;
253
+ case 't':
254
+ break;
255
+ case 'red':
256
+ if ('red' in element && 'green' in element && 'blue' in element) {
257
+ buffer.colors.push(element.red, element.green, element.blue);
258
+ }
259
+ break;
260
+ case 'green':
261
+ case 'blue':
262
+ break;
263
+ default:
264
+ buffer[propertyName].push(element[propertyName]);
265
+ }
197
266
  }
198
267
  } else if (elementName === 'face') {
199
268
  var vertexIndices = element.vertex_indices || element.vertex_index;
200
-
201
269
  if (vertexIndices.length === 3) {
202
270
  buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);
203
271
  } else if (vertexIndices.length === 4) {
@@ -206,7 +274,6 @@ function handleElement(buffer, elementName) {
206
274
  }
207
275
  }
208
276
  }
209
-
210
277
  function binaryRead(dataview, at, type, littleEndian) {
211
278
  switch (type) {
212
279
  case 'int8':
@@ -237,7 +304,6 @@ function binaryRead(dataview, at, type, littleEndian) {
237
304
  throw new Error(type);
238
305
  }
239
306
  }
240
-
241
307
  function binaryReadElement(dataview, at, properties, littleEndian) {
242
308
  var element = {};
243
309
  var result;
@@ -263,13 +329,7 @@ function binaryReadElement(dataview, at, properties, littleEndian) {
263
329
  return [element, read];
264
330
  }
265
331
  function parseBinary(data, header) {
266
- var attributes = {
267
- indices: [],
268
- vertices: [],
269
- normals: [],
270
- uvs: [],
271
- colors: []
272
- };
332
+ var attributes = getPLYAttributes(header);
273
333
  var littleEndian = header.format === 'binary_little_endian';
274
334
  var body = new DataView(data, header.headerLength);
275
335
  var result;
@@ -1 +1 @@
1
- {"version":3,"file":"parse-ply.js","names":["parsePLY","data","options","header","attributes","ArrayBuffer","text","TextDecoder","decode","parseHeader","format","parseASCII","parseBinary","normalizePLY","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"],"sources":["../../../src/lib/parse-ply.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// });\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"],"mappings":"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"}
1
+ {"version":3,"file":"parse-ply.js","names":["_normalizePly","_interopRequireDefault","require","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","parsePLY","data","options","arguments","undefined","header","attributes","ArrayBuffer","text","TextDecoder","decode","parseHeader","format","parseASCII","parseBinary","normalizePLY","PLY_HEADER_PATTERN","headerText","headerLength","result","exec","lines","split","parseHeaderLines","comments","elements","lineType","lineValues","currentElement","line","trim","shift","join","version","push","count","parseInt","properties","property","makePLYElementProperty","propertyNameMapping","console","log","getPLYAttributes","indices","vertices","normals","uvs","colors","_iterator","_step","element","_iterator2","_step2","propertyValues","type","countType","itemType","parseASCIINumber","parseFloat","Error","parsePLYElement","values","list","j","patternBody","body","currentElementCount","handleElement","buffer","elementName","_i","_Object$keys","keys","propertyName","x","y","z","nx","ny","nz","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"],"sources":["../../../src/lib/parse-ply.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// });\nimport type {\n PLYMesh,\n PLYHeader,\n PLYAttributes,\n MeshHeader,\n PLYElement,\n PLYProperty\n} from './ply-types';\nimport normalizePLY from './normalize-ply';\n\nexport type ParsePLYOptions = {\n propertyNameMapping?: Record<string, string>;\n};\n\n/**\n * @param data\n * @param options\n * @returns\n */\nexport function parsePLY(data: ArrayBuffer | string, options: ParsePLYOptions = {}): 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?: ParsePLYOptions): 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 */\n// eslint-disable-next-line complexity\nfunction parseHeaderLines(\n lines: string[],\n headerLength: number,\n options?: ParsePLYOptions\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: PLYElement | 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 // Start new element, store previous 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 const property = makePLYElementProperty(lineValues);\n if (options?.propertyNameMapping && property.name in options?.propertyNameMapping) {\n property.name = options?.propertyNameMapping[property.name];\n }\n currentElement.properties.push(property);\n }\n break;\n\n default:\n // eslint-disable-next-line\n console.log('unhandled', lineType, lineValues);\n }\n }\n\n // Store in-progress element\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n return header;\n}\n\n/** Generate attributes arrays from the header */\n// eslint-disable-next-line complexity\nfunction getPLYAttributes(header: PLYHeader): PLYAttributes {\n // TODO Generate only the attribute arrays actually in the header\n const attributes = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n colors: []\n };\n\n for (const element of header.elements) {\n if (element.name === 'vertex') {\n for (const property of element.properties) {\n switch (property.name) {\n case 'x':\n case 'y':\n case 'z':\n case 'nx':\n case 'ny':\n case 'nz':\n case 's':\n case 't':\n case 'red':\n case 'green':\n case 'blue':\n break;\n default:\n // Add any non-geometry attributes\n attributes[property.name] = [];\n break;\n }\n }\n }\n }\n\n return attributes;\n}\n\n/**\n * @param propertyValues\n * @returns property of ply element\n */\nfunction makePLYElementProperty(propertyValues: string[]): PLYProperty {\n const type = propertyValues[0];\n switch (type) {\n case 'list':\n return {\n type,\n name: propertyValues[3],\n countType: propertyValues[1],\n itemType: propertyValues[2]\n };\n default:\n return {\n type,\n name: propertyValues[1]\n };\n }\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 parsePLYElement(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 = getPLYAttributes(header);\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 = parsePLYElement(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 for (const propertyName of Object.keys(element)) {\n switch (propertyName) {\n case 'x':\n buffer.vertices.push(element.x, element.y, element.z);\n break;\n case 'y':\n case 'z':\n break;\n\n case 'nx':\n if ('nx' in element && 'ny' in element && 'nz' in element) {\n buffer.normals.push(element.nx, element.ny, element.nz);\n }\n break;\n case 'ny':\n case 'nz':\n break;\n\n case 's':\n if ('s' in element && 't' in element) {\n buffer.uvs.push(element.s, element.t);\n }\n break;\n case 't':\n break;\n\n case 'red':\n if ('red' in element && 'green' in element && 'blue' in element) {\n buffer.colors.push(element.red, element.green, element.blue);\n }\n break;\n case 'green':\n case 'blue':\n break;\n\n default:\n buffer[propertyName].push(element[propertyName]);\n }\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: PLYHeader): BinaryAttributes {\n const attributes = getPLYAttributes(header);\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"],"mappings":";;;;;;;AA8BA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA2C,SAAAC,2BAAAC,CAAA,EAAAC,cAAA,QAAAC,EAAA,UAAAC,MAAA,oBAAAH,CAAA,CAAAG,MAAA,CAAAC,QAAA,KAAAJ,CAAA,qBAAAE,EAAA,QAAAG,KAAA,CAAAC,OAAA,CAAAN,CAAA,MAAAE,EAAA,GAAAK,2BAAA,CAAAP,CAAA,MAAAC,cAAA,IAAAD,CAAA,WAAAA,CAAA,CAAAQ,MAAA,qBAAAN,EAAA,EAAAF,CAAA,GAAAE,EAAA,MAAAO,CAAA,UAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,QAAAH,CAAA,IAAAT,CAAA,CAAAQ,MAAA,WAAAK,IAAA,mBAAAA,IAAA,SAAAC,KAAA,EAAAd,CAAA,CAAAS,CAAA,UAAAM,CAAA,WAAAA,EAAAC,EAAA,UAAAA,EAAA,KAAAC,CAAA,EAAAP,CAAA,gBAAAQ,SAAA,iJAAAC,gBAAA,SAAAC,MAAA,UAAAC,GAAA,WAAAV,CAAA,WAAAA,EAAA,IAAAT,EAAA,GAAAA,EAAA,CAAAoB,IAAA,CAAAtB,CAAA,MAAAY,CAAA,WAAAA,EAAA,QAAAW,IAAA,GAAArB,EAAA,CAAAsB,IAAA,IAAAL,gBAAA,GAAAI,IAAA,CAAAV,IAAA,SAAAU,IAAA,KAAAR,CAAA,WAAAA,EAAAU,GAAA,IAAAL,MAAA,SAAAC,GAAA,GAAAI,GAAA,KAAAR,CAAA,WAAAA,EAAA,eAAAE,gBAAA,IAAAjB,EAAA,CAAAwB,MAAA,UAAAxB,EAAA,CAAAwB,MAAA,oBAAAN,MAAA,QAAAC,GAAA;AAAA,SAAAd,4BAAAP,CAAA,EAAA2B,MAAA,SAAA3B,CAAA,qBAAAA,CAAA,sBAAA4B,iBAAA,CAAA5B,CAAA,EAAA2B,MAAA,OAAAf,CAAA,GAAAiB,MAAA,CAAAC,SAAA,CAAAC,QAAA,CAAAT,IAAA,CAAAtB,CAAA,EAAAgC,KAAA,aAAApB,CAAA,iBAAAZ,CAAA,CAAAiC,WAAA,EAAArB,CAAA,GAAAZ,CAAA,CAAAiC,WAAA,CAAAC,IAAA,MAAAtB,CAAA,cAAAA,CAAA,mBAAAP,KAAA,CAAA8B,IAAA,CAAAnC,CAAA,OAAAY,CAAA,+DAAAwB,IAAA,CAAAxB,CAAA,UAAAgB,iBAAA,CAAA5B,CAAA,EAAA2B,MAAA;AAAA,SAAAC,kBAAAS,GAAA,EAAAC,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAD,GAAA,CAAA7B,MAAA,EAAA8B,GAAA,GAAAD,GAAA,CAAA7B,MAAA,WAAAC,CAAA,MAAA8B,IAAA,OAAAlC,KAAA,CAAAiC,GAAA,GAAA7B,CAAA,GAAA6B,GAAA,EAAA7B,CAAA,IAAA8B,IAAA,CAAA9B,CAAA,IAAA4B,GAAA,CAAA5B,CAAA,UAAA8B,IAAA;AAWpC,SAASC,QAAQA,CAACC,IAA0B,EAA0C;EAAA,IAAxCC,OAAwB,GAAAC,SAAA,CAAAnC,MAAA,QAAAmC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC,CAAC;EAChF,IAAIE,MAA8B;EAClC,IAAIC,UAAyB;EAE7B,IAAIL,IAAI,YAAYM,WAAW,EAAE;IAC/B,IAAMC,IAAI,GAAG,IAAIC,WAAW,EAAE,CAACC,MAAM,CAACT,IAAI,CAAC;IAC3CI,MAAM,GAAGM,WAAW,CAACH,IAAI,EAAEN,OAAO,CAAC;IACnCI,UAAU,GAAGD,MAAM,CAACO,MAAM,KAAK,OAAO,GAAGC,UAAU,CAACL,IAAI,EAAEH,MAAM,CAAC,GAAGS,WAAW,CAACb,IAAI,EAAEI,MAAM,CAAC;EAC/F,CAAC,MAAM;IACLA,MAAM,GAAGM,WAAW,CAACV,IAAI,EAAEC,OAAO,CAAC;IACnCI,UAAU,GAAGO,UAAU,CAACZ,IAAI,EAAEI,MAAM,CAAC;EACvC;EAEA,OAAO,IAAAU,qBAAY,EAACV,MAAM,EAAEC,UAAU,CAAC;AACzC;AAOA,SAASK,WAAWA,CAACV,IAAS,EAAEC,OAAyB,EAAa;EACpE,IAAMc,kBAAkB,GAAG,0BAA0B;EAErD,IAAIC,UAAU,GAAG,EAAE;EACnB,IAAIC,YAAY,GAAG,CAAC;EAEpB,IAAMC,MAAM,GAAGH,kBAAkB,CAACI,IAAI,CAACnB,IAAI,CAAC;EAE5C,IAAIkB,MAAM,KAAK,IAAI,EAAE;IACnBF,UAAU,GAAGE,MAAM,CAAC,CAAC,CAAC;IACtBD,YAAY,GAAGC,MAAM,CAAC,CAAC,CAAC,CAACnD,MAAM;EACjC;EACA,IAAMqD,KAAK,GAAGJ,UAAU,CAACK,KAAK,CAAC,IAAI,CAAC;EACpC,IAAMjB,MAAM,GAAGkB,gBAAgB,CAACF,KAAK,EAAEH,YAAY,EAAEhB,OAAO,CAAC;EAE7D,OAAOG,MAAM;AACf;AASA,SAASkB,gBAAgBA,CACvBF,KAAe,EACfH,YAAoB,EACpBhB,OAAyB,EACd;EACX,IAAMG,MAAiB,GAAG;IACxBmB,QAAQ,EAAE,EAAE;IACZC,QAAQ,EAAE,EAAE;IACZP,YAAY,EAAZA;EACF,CAAC;EAED,IAAIQ,QAA4B;EAChC,IAAIC,UAAoB;EACxB,IAAIC,cAAiC,GAAG,IAAI;EAE5C,KAAK,IAAI3D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGoD,KAAK,CAACrD,MAAM,EAAEC,CAAC,EAAE,EAAE;IACrC,IAAI4D,IAAY,GAAGR,KAAK,CAACpD,CAAC,CAAC;IAC3B4D,IAAI,GAAGA,IAAI,CAACC,IAAI,EAAE;IAElB,IAAID,IAAI,KAAK,EAAE,EAAE;MAEf;IACF;IAEAF,UAAU,GAAGE,IAAI,CAACP,KAAK,CAAC,KAAK,CAAC;IAC9BI,QAAQ,GAAGC,UAAU,CAACI,KAAK,EAAE;IAC7BF,IAAI,GAAGF,UAAU,CAACK,IAAI,CAAC,GAAG,CAAC;IAE3B,QAAQN,QAAQ;MACd,KAAK,QAAQ;QACXrB,MAAM,CAACO,MAAM,GAAGe,UAAU,CAAC,CAAC,CAAC;QAC7BtB,MAAM,CAAC4B,OAAO,GAAGN,UAAU,CAAC,CAAC,CAAC;QAC9B;MAEF,KAAK,SAAS;QACZtB,MAAM,CAACmB,QAAQ,CAACU,IAAI,CAACL,IAAI,CAAC;QAC1B;MAEF,KAAK,SAAS;QAEZ,IAAID,cAAc,EAAE;UAClBvB,MAAM,CAACoB,QAAQ,CAACS,IAAI,CAACN,cAAc,CAAC;QACtC;QAEAA,cAAc,GAAG;UACflC,IAAI,EAAEiC,UAAU,CAAC,CAAC,CAAC;UACnBQ,KAAK,EAAEC,QAAQ,CAACT,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;UAClCU,UAAU,EAAE;QACd,CAAC;QACD;MAEF,KAAK,UAAU;QACb,IAAIT,cAAc,EAAE;UAClB,IAAMU,QAAQ,GAAGC,sBAAsB,CAACZ,UAAU,CAAC;UACnD,IAAIzB,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEsC,mBAAmB,IAAIF,QAAQ,CAAC5C,IAAI,KAAIQ,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEsC,mBAAmB,GAAE;YACjFF,QAAQ,CAAC5C,IAAI,GAAGQ,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEsC,mBAAmB,CAACF,QAAQ,CAAC5C,IAAI,CAAC;UAC7D;UACAkC,cAAc,CAACS,UAAU,CAACH,IAAI,CAACI,QAAQ,CAAC;QAC1C;QACA;MAEF;QAEEG,OAAO,CAACC,GAAG,CAAC,WAAW,EAAEhB,QAAQ,EAAEC,UAAU,CAAC;IAAC;EAErD;EAGA,IAAIC,cAAc,EAAE;IAClBvB,MAAM,CAACoB,QAAQ,CAACS,IAAI,CAACN,cAAc,CAAC;EACtC;EAEA,OAAOvB,MAAM;AACf;AAIA,SAASsC,gBAAgBA,CAACtC,MAAiB,EAAiB;EAE1D,IAAMC,UAAU,GAAG;IACjBsC,OAAO,EAAE,EAAE;IACXC,QAAQ,EAAE,EAAE;IACZC,OAAO,EAAE,EAAE;IACXC,GAAG,EAAE,EAAE;IACPC,MAAM,EAAE;EACV,CAAC;EAAC,IAAAC,SAAA,GAAA1F,0BAAA,CAEoB8C,MAAM,CAACoB,QAAQ;IAAAyB,KAAA;EAAA;IAArC,KAAAD,SAAA,CAAA9E,CAAA,MAAA+E,KAAA,GAAAD,SAAA,CAAA7E,CAAA,IAAAC,IAAA,GAAuC;MAAA,IAA5B8E,OAAO,GAAAD,KAAA,CAAA5E,KAAA;MAChB,IAAI6E,OAAO,CAACzD,IAAI,KAAK,QAAQ,EAAE;QAAA,IAAA0D,UAAA,GAAA7F,0BAAA,CACN4F,OAAO,CAACd,UAAU;UAAAgB,MAAA;QAAA;UAAzC,KAAAD,UAAA,CAAAjF,CAAA,MAAAkF,MAAA,GAAAD,UAAA,CAAAhF,CAAA,IAAAC,IAAA,GAA2C;YAAA,IAAhCiE,QAAQ,GAAAe,MAAA,CAAA/E,KAAA;YACjB,QAAQgE,QAAQ,CAAC5C,IAAI;cACnB,KAAK,GAAG;cACR,KAAK,GAAG;cACR,KAAK,GAAG;cACR,KAAK,IAAI;cACT,KAAK,IAAI;cACT,KAAK,IAAI;cACT,KAAK,GAAG;cACR,KAAK,GAAG;cACR,KAAK,KAAK;cACV,KAAK,OAAO;cACZ,KAAK,MAAM;gBACT;cACF;gBAEEY,UAAU,CAACgC,QAAQ,CAAC5C,IAAI,CAAC,GAAG,EAAE;gBAC9B;YAAM;UAEZ;QAAC,SAAAb,GAAA;UAAAuE,UAAA,CAAA7E,CAAA,CAAAM,GAAA;QAAA;UAAAuE,UAAA,CAAA3E,CAAA;QAAA;MACH;IACF;EAAC,SAAAI,GAAA;IAAAoE,SAAA,CAAA1E,CAAA,CAAAM,GAAA;EAAA;IAAAoE,SAAA,CAAAxE,CAAA;EAAA;EAED,OAAO6B,UAAU;AACnB;AAMA,SAASiC,sBAAsBA,CAACe,cAAwB,EAAe;EACrE,IAAMC,IAAI,GAAGD,cAAc,CAAC,CAAC,CAAC;EAC9B,QAAQC,IAAI;IACV,KAAK,MAAM;MACT,OAAO;QACLA,IAAI,EAAJA,IAAI;QACJ7D,IAAI,EAAE4D,cAAc,CAAC,CAAC,CAAC;QACvBE,SAAS,EAAEF,cAAc,CAAC,CAAC,CAAC;QAC5BG,QAAQ,EAAEH,cAAc,CAAC,CAAC;MAC5B,CAAC;IACH;MACE,OAAO;QACLC,IAAI,EAAJA,IAAI;QACJ7D,IAAI,EAAE4D,cAAc,CAAC,CAAC;MACxB,CAAC;EAAC;AAER;AASA,SAASI,gBAAgBA,CAACtF,CAAS,EAAEmF,IAAY,EAAU;EACzD,QAAQA,IAAI;IACV,KAAK,MAAM;IACX,KAAK,OAAO;IACZ,KAAK,OAAO;IACZ,KAAK,QAAQ;IACb,KAAK,KAAK;IACV,KAAK,MAAM;IACX,KAAK,MAAM;IACX,KAAK,OAAO;IACZ,KAAK,OAAO;IACZ,KAAK,QAAQ;IACb,KAAK,OAAO;IACZ,KAAK,QAAQ;MACX,OAAOnB,QAAQ,CAAChE,CAAC,EAAE,EAAE,CAAC;IAExB,KAAK,OAAO;IACZ,KAAK,QAAQ;IACb,KAAK,SAAS;IACd,KAAK,SAAS;MACZ,OAAOuF,UAAU,CAACvF,CAAC,CAAC;IAEtB;MACE,MAAM,IAAIwF,KAAK,CAACL,IAAI,CAAC;EAAC;AAE5B;AAOA,SAASM,eAAeA,CAACxB,UAAiB,EAAER,IAAY,EAAE;EACxD,IAAMiC,MAAW,GAAGjC,IAAI,CAACP,KAAK,CAAC,KAAK,CAAC;EAErC,IAAM6B,OAAO,GAAG,CAAC,CAAC;EAElB,KAAK,IAAIlF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGoE,UAAU,CAACrE,MAAM,EAAEC,CAAC,EAAE,EAAE;IAC1C,IAAIoE,UAAU,CAACpE,CAAC,CAAC,CAACsF,IAAI,KAAK,MAAM,EAAE;MACjC,IAAMQ,IAAS,GAAG,EAAE;MACpB,IAAM3F,CAAC,GAAGsF,gBAAgB,CAACI,MAAM,CAAC/B,KAAK,EAAE,EAAEM,UAAU,CAACpE,CAAC,CAAC,CAACuF,SAAS,CAAC;MAEnE,KAAK,IAAIQ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG5F,CAAC,EAAE4F,CAAC,EAAE,EAAE;QAC1BD,IAAI,CAAC7B,IAAI,CAACwB,gBAAgB,CAACI,MAAM,CAAC/B,KAAK,EAAE,EAAEM,UAAU,CAACpE,CAAC,CAAC,CAACwF,QAAQ,CAAC,CAAC;MACrE;MAEAN,OAAO,CAACd,UAAU,CAACpE,CAAC,CAAC,CAACyB,IAAI,CAAC,GAAGqE,IAAI;IACpC,CAAC,MAAM;MACLZ,OAAO,CAACd,UAAU,CAACpE,CAAC,CAAC,CAACyB,IAAI,CAAC,GAAGgE,gBAAgB,CAACI,MAAM,CAAC/B,KAAK,EAAE,EAAEM,UAAU,CAACpE,CAAC,CAAC,CAACsF,IAAI,CAAC;IACpF;EACF;EAEA,OAAOJ,OAAO;AAChB;AAOA,SAAStC,UAAUA,CAACZ,IAAS,EAAEI,MAAiB,EAAiB;EAG/D,IAAMC,UAAU,GAAGqC,gBAAgB,CAACtC,MAAM,CAAC;EAE3C,IAAIc,MAA8B;EAElC,IAAM8C,WAAW,GAAG,wBAAwB;EAC5C,IAAIC,IAAI,GAAG,EAAE;EACb,IAAI,CAAC/C,MAAM,GAAG8C,WAAW,CAAC7C,IAAI,CAACnB,IAAI,CAAC,MAAM,IAAI,EAAE;IAC9CiE,IAAI,GAAG/C,MAAM,CAAC,CAAC,CAAC;EAClB;EAEA,IAAME,KAAK,GAAG6C,IAAI,CAAC5C,KAAK,CAAC,IAAI,CAAC;EAC9B,IAAIM,cAAc,GAAG,CAAC;EACtB,IAAIuC,mBAAmB,GAAG,CAAC;EAE3B,KAAK,IAAIlG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGoD,KAAK,CAACrD,MAAM,EAAEC,CAAC,EAAE,EAAE;IACrC,IAAI4D,IAAI,GAAGR,KAAK,CAACpD,CAAC,CAAC;IACnB4D,IAAI,GAAGA,IAAI,CAACC,IAAI,EAAE;IAElB,IAAID,IAAI,KAAK,EAAE,EAAE;MACf,IAAIsC,mBAAmB,IAAI9D,MAAM,CAACoB,QAAQ,CAACG,cAAc,CAAC,CAACO,KAAK,EAAE;QAChEP,cAAc,EAAE;QAChBuC,mBAAmB,GAAG,CAAC;MACzB;MAEA,IAAMhB,OAAO,GAAGU,eAAe,CAACxD,MAAM,CAACoB,QAAQ,CAACG,cAAc,CAAC,CAACS,UAAU,EAAER,IAAI,CAAC;MACjFuC,aAAa,CAAC9D,UAAU,EAAED,MAAM,CAACoB,QAAQ,CAACG,cAAc,CAAC,CAAClC,IAAI,EAAEyD,OAAO,CAAC;MACxEgB,mBAAmB,EAAE;IACvB;EACF;EAEA,OAAO7D,UAAU;AACnB;AAQA,SAAS8D,aAAaA,CACpBC,MAAmC,EACnCC,WAAmB,EAEnB;EAAA,IADAnB,OAAY,GAAAhD,SAAA,CAAAnC,MAAA,QAAAmC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC,CAAC;EAEjB,IAAImE,WAAW,KAAK,QAAQ,EAAE;IAC5B,SAAAC,EAAA,MAAAC,YAAA,GAA2BnF,MAAM,CAACoF,IAAI,CAACtB,OAAO,CAAC,EAAAoB,EAAA,GAAAC,YAAA,CAAAxG,MAAA,EAAAuG,EAAA,IAAE;MAA5C,IAAMG,YAAY,GAAAF,YAAA,CAAAD,EAAA;MACrB,QAAQG,YAAY;QAClB,KAAK,GAAG;UACNL,MAAM,CAACxB,QAAQ,CAACX,IAAI,CAACiB,OAAO,CAACwB,CAAC,EAAExB,OAAO,CAACyB,CAAC,EAAEzB,OAAO,CAAC0B,CAAC,CAAC;UACrD;QACF,KAAK,GAAG;QACR,KAAK,GAAG;UACN;QAEF,KAAK,IAAI;UACP,IAAI,IAAI,IAAI1B,OAAO,IAAI,IAAI,IAAIA,OAAO,IAAI,IAAI,IAAIA,OAAO,EAAE;YACzDkB,MAAM,CAACvB,OAAO,CAACZ,IAAI,CAACiB,OAAO,CAAC2B,EAAE,EAAE3B,OAAO,CAAC4B,EAAE,EAAE5B,OAAO,CAAC6B,EAAE,CAAC;UACzD;UACA;QACF,KAAK,IAAI;QACT,KAAK,IAAI;UACP;QAEF,KAAK,GAAG;UACN,IAAI,GAAG,IAAI7B,OAAO,IAAI,GAAG,IAAIA,OAAO,EAAE;YACpCkB,MAAM,CAACtB,GAAG,CAACb,IAAI,CAACiB,OAAO,CAAChF,CAAC,EAAEgF,OAAO,CAAC8B,CAAC,CAAC;UACvC;UACA;QACF,KAAK,GAAG;UACN;QAEF,KAAK,KAAK;UACR,IAAI,KAAK,IAAI9B,OAAO,IAAI,OAAO,IAAIA,OAAO,IAAI,MAAM,IAAIA,OAAO,EAAE;YAC/DkB,MAAM,CAACrB,MAAM,CAACd,IAAI,CAACiB,OAAO,CAAC+B,GAAG,EAAE/B,OAAO,CAACgC,KAAK,EAAEhC,OAAO,CAACiC,IAAI,CAAC;UAC9D;UACA;QACF,KAAK,OAAO;QACZ,KAAK,MAAM;UACT;QAEF;UACEf,MAAM,CAACK,YAAY,CAAC,CAACxC,IAAI,CAACiB,OAAO,CAACuB,YAAY,CAAC,CAAC;MAAC;IAEvD;EACF,CAAC,MAAM,IAAIJ,WAAW,KAAK,MAAM,EAAE;IACjC,IAAMe,aAAa,GAAGlC,OAAO,CAACmC,cAAc,IAAInC,OAAO,CAACoC,YAAY;IAEpE,IAAIF,aAAa,CAACrH,MAAM,KAAK,CAAC,EAAE;MAC9BqG,MAAM,CAACzB,OAAO,CAACV,IAAI,CAACmD,aAAa,CAAC,CAAC,CAAC,EAAEA,aAAa,CAAC,CAAC,CAAC,EAAEA,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC,MAAM,IAAIA,aAAa,CAACrH,MAAM,KAAK,CAAC,EAAE;MACrCqG,MAAM,CAACzB,OAAO,CAACV,IAAI,CAACmD,aAAa,CAAC,CAAC,CAAC,EAAEA,aAAa,CAAC,CAAC,CAAC,EAAEA,aAAa,CAAC,CAAC,CAAC,CAAC;MACzEhB,MAAM,CAACzB,OAAO,CAACV,IAAI,CAACmD,aAAa,CAAC,CAAC,CAAC,EAAEA,aAAa,CAAC,CAAC,CAAC,EAAEA,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3E;EACF;AACF;AAWA,SAASG,UAAUA,CAACC,QAAkB,EAAEC,EAAU,EAAEnC,IAAS,EAAEoC,YAAqB,EAAY;EAC9F,QAAQpC,IAAI;IAEV,KAAK,MAAM;IACX,KAAK,MAAM;MACT,OAAO,CAACkC,QAAQ,CAACG,OAAO,CAACF,EAAE,CAAC,EAAE,CAAC,CAAC;IAClC,KAAK,OAAO;IACZ,KAAK,OAAO;MACV,OAAO,CAACD,QAAQ,CAACI,QAAQ,CAACH,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,KAAK,OAAO;IACZ,KAAK,OAAO;MACV,OAAO,CAACD,QAAQ,CAACK,QAAQ,CAACJ,EAAE,EAAEC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjD,KAAK,QAAQ;IACb,KAAK,QAAQ;MACX,OAAO,CAACF,QAAQ,CAACM,SAAS,CAACL,EAAE,EAAEC,YAAY,CAAC,EAAE,CAAC,CAAC;IAClD,KAAK,OAAO;IACZ,KAAK,KAAK;MACR,OAAO,CAACF,QAAQ,CAACO,QAAQ,CAACN,EAAE,EAAEC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjD,KAAK,QAAQ;IACb,KAAK,MAAM;MACT,OAAO,CAACF,QAAQ,CAACQ,SAAS,CAACP,EAAE,EAAEC,YAAY,CAAC,EAAE,CAAC,CAAC;IAClD,KAAK,SAAS;IACd,KAAK,OAAO;MACV,OAAO,CAACF,QAAQ,CAACS,UAAU,CAACR,EAAE,EAAEC,YAAY,CAAC,EAAE,CAAC,CAAC;IACnD,KAAK,SAAS;IACd,KAAK,QAAQ;MACX,OAAO,CAACF,QAAQ,CAACU,UAAU,CAACT,EAAE,EAAEC,YAAY,CAAC,EAAE,CAAC,CAAC;IAEnD;MACE,MAAM,IAAI/B,KAAK,CAACL,IAAI,CAAC;EAAC;AAE5B;AAUA,SAAS6C,iBAAiBA,CACxBX,QAAkB,EAClBC,EAAU,EACVrD,UAAkC,EAClCsD,YAAqB,EACf;EACN,IAAMxC,OAAO,GAAG,CAAC,CAAC;EAClB,IAAIhC,MAAgB;EACpB,IAAIkF,IAAI,GAAG,CAAC;EAEZ,KAAK,IAAIpI,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGoE,UAAU,CAACrE,MAAM,EAAEC,CAAC,EAAE,EAAE;IAC1C,IAAIoE,UAAU,CAACpE,CAAC,CAAC,CAACsF,IAAI,KAAK,MAAM,EAAE;MACjC,IAAMQ,IAAI,GAAG,EAAE;MAEf5C,MAAM,GAAGqE,UAAU,CAACC,QAAQ,EAAEC,EAAE,GAAGW,IAAI,EAAEhE,UAAU,CAACpE,CAAC,CAAC,CAACuF,SAAS,EAAEmC,YAAY,CAAC;MAC/E,IAAMvH,CAAC,GAAG+C,MAAM,CAAC,CAAC,CAAC;MACnBkF,IAAI,IAAIlF,MAAM,CAAC,CAAC,CAAC;MAEjB,KAAK,IAAI6C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG5F,CAAC,EAAE4F,CAAC,EAAE,EAAE;QAC1B7C,MAAM,GAAGqE,UAAU,CAACC,QAAQ,EAAEC,EAAE,GAAGW,IAAI,EAAEhE,UAAU,CAACpE,CAAC,CAAC,CAACwF,QAAQ,EAAEkC,YAAY,CAAC;QAE9E5B,IAAI,CAAC7B,IAAI,CAACf,MAAM,CAAC,CAAC,CAAC,CAAC;QACpBkF,IAAI,IAAIlF,MAAM,CAAC,CAAC,CAAC;MACnB;MAEAgC,OAAO,CAACd,UAAU,CAACpE,CAAC,CAAC,CAACyB,IAAI,CAAC,GAAGqE,IAAI;IACpC,CAAC,MAAM;MACL5C,MAAM,GAAGqE,UAAU,CAACC,QAAQ,EAAEC,EAAE,GAAGW,IAAI,EAAEhE,UAAU,CAACpE,CAAC,CAAC,CAACsF,IAAI,EAAEoC,YAAY,CAAC;MAC1ExC,OAAO,CAACd,UAAU,CAACpE,CAAC,CAAC,CAACyB,IAAI,CAAC,GAAGyB,MAAM,CAAC,CAAC,CAAC;MACvCkF,IAAI,IAAIlF,MAAM,CAAC,CAAC,CAAC;IACnB;EACF;EAEA,OAAO,CAACgC,OAAO,EAAEkD,IAAI,CAAC;AACxB;AAYA,SAASvF,WAAWA,CAACb,IAAiB,EAAEI,MAAiB,EAAoB;EAC3E,IAAMC,UAAU,GAAGqC,gBAAgB,CAACtC,MAAM,CAAC;EAE3C,IAAMsF,YAAY,GAAGtF,MAAM,CAACO,MAAM,KAAK,sBAAsB;EAC7D,IAAMsD,IAAI,GAAG,IAAIoC,QAAQ,CAACrG,IAAI,EAAEI,MAAM,CAACa,YAAY,CAAC;EACpD,IAAIC,MAAa;EACjB,IAAIoF,GAAG,GAAG,CAAC;EAEX,KAAK,IAAI3E,cAAc,GAAG,CAAC,EAAEA,cAAc,GAAGvB,MAAM,CAACoB,QAAQ,CAACzD,MAAM,EAAE4D,cAAc,EAAE,EAAE;IACtF,IAAMO,KAAK,GAAG9B,MAAM,CAACoB,QAAQ,CAACG,cAAc,CAAC,CAACO,KAAK;IACnD,KAAK,IAAIgC,mBAAmB,GAAG,CAAC,EAAEA,mBAAmB,GAAGhC,KAAK,EAAEgC,mBAAmB,EAAE,EAAE;MACpFhD,MAAM,GAAGiF,iBAAiB,CACxBlC,IAAI,EACJqC,GAAG,EACHlG,MAAM,CAACoB,QAAQ,CAACG,cAAc,CAAC,CAACS,UAAU,EAC1CsD,YAAY,CACb;MACDY,GAAG,IAAIpF,MAAM,CAAC,CAAC,CAAC;MAChB,IAAMgC,OAAO,GAAGhC,MAAM,CAAC,CAAC,CAAC;MAEzBiD,aAAa,CAAC9D,UAAU,EAAED,MAAM,CAACoB,QAAQ,CAACG,cAAc,CAAC,CAAClC,IAAI,EAAEyD,OAAO,CAAC;IAC1E;EACF;EAEA,OAAO7C,UAAU;AACnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ply-types.js","names":[],"sources":["../../../src/lib/ply-types.ts"],"sourcesContent":["import type {Mesh} from '@loaders.gl/schema';\n\nexport type PLYHeader = {\n format?: string;\n comments: string[];\n elements: any[];\n version?: string;\n headerLength?: number;\n};\n\n/** A parsed PLY mesh */\nexport type PLYMesh = Mesh & {\n loader: 'ply';\n loaderData: PLYHeader;\n};\n\n// INTERNAL TYPES\n\nexport type MeshHeader = {\n vertexCount?: number;\n boundingBox?: [[number, number, number], [number, number, number]];\n};\n\nexport type PLYAttributes = {\n [index: string]: number[];\n};\n\nexport type PLYProperty = {\n [index: string]: string;\n};\n\nexport type ASCIIElement = {\n name: string;\n count: number;\n properties: any[];\n};\n"],"mappings":""}
1
+ {"version":3,"file":"ply-types.js","names":[],"sources":["../../../src/lib/ply-types.ts"],"sourcesContent":["// loaders.gl, MIT license\nimport type {Mesh} from '@loaders.gl/schema';\n\n/** A parsed PLY mesh */\nexport type PLYMesh = Mesh & {\n loader: 'ply';\n loaderData: PLYHeader;\n};\n\n/** A PLY header */\nexport type PLYHeader = {\n format?: string;\n comments: string[];\n elements: PLYElement[];\n version?: string;\n headerLength?: number;\n};\n\n// INTERNAL TYPES\n\n/** A general mesh header */\nexport type MeshHeader = {\n vertexCount?: number;\n boundingBox?: [[number, number, number], [number, number, number]];\n};\n\n/** The parsed columnar values */\nexport type PLYAttributes = {\n [index: string]: number[];\n};\n\n/** A top level PLY element (vertex, face, ...) */\nexport type PLYElement = {\n name: string;\n count: number;\n properties: PLYProperty[];\n};\n\n/** One property in a top-level PLY element */\nexport type PLYProperty = {\n name: string;\n type: string;\n countType?: string;\n itemType?: string;\n};\n"],"mappings":""}
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports._typecheckPLYLoader = exports.PLYLoader = void 0;
7
-
8
- var VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
9
-
7
+ var VERSION = typeof "3.4.0-alpha.3" !== 'undefined' ? "3.4.0-alpha.3" : 'latest';
10
8
  var PLYLoader = {
11
9
  name: 'PLY',
12
10
  id: 'ply',
@@ -1 +1 @@
1
- {"version":3,"file":"ply-loader.js","names":["VERSION","PLYLoader","name","id","module","shapes","version","worker","extensions","mimeTypes","text","binary","tests","options","ply","_typecheckPLYLoader"],"sources":["../../src/ply-loader.ts"],"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"],"mappings":";;;;;;;AAKA,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;;AAOpE,IAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC;EAC1CC,OAAO,EAAEN,OAAO;EAChBO,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,YAAY,EAAE,0BAA0B,CAAC;EACrDC,IAAI,EAAE,IAAI;EACVC,MAAM,EAAE,IAAI;EACZC,KAAK,EAAE,CAAC,KAAK,CAAC;EACdC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR;AACF,CAAC;AAAC;AAEK,IAAMC,mBAA2B,GAAGd,SAAS;AAAC"}
1
+ {"version":3,"file":"ply-loader.js","names":["VERSION","PLYLoader","name","id","module","shapes","version","worker","extensions","mimeTypes","text","binary","tests","options","ply","exports","_typecheckPLYLoader"],"sources":["../../src/ply-loader.ts"],"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"],"mappings":";;;;;;AAKA,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAOpE,IAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC;EAC1CC,OAAO,EAAEN,OAAO;EAChBO,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,YAAY,EAAE,0BAA0B,CAAC;EACrDC,IAAI,EAAE,IAAI;EACVC,MAAM,EAAE,IAAI;EACZC,KAAK,EAAE,CAAC,KAAK,CAAC;EACdC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR;AACF,CAAC;AAACC,OAAA,CAAAd,SAAA,GAAAA,SAAA;AAEK,IAAMe,mBAA2B,GAAGf,SAAS;AAACc,OAAA,CAAAC,mBAAA,GAAAA,mBAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ply-worker.js","names":["createLoaderWorker","PLYLoader"],"sources":["../../../src/workers/ply-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {PLYLoader} from '../index';\n\ncreateLoaderWorker(PLYLoader);\n"],"mappings":";;AAAA;AACA;AAEA,IAAAA,+BAAkB,EAACC,gBAAS,CAAC"}
1
+ {"version":3,"file":"ply-worker.js","names":["_loaderUtils","require","_index","createLoaderWorker","PLYLoader"],"sources":["../../../src/workers/ply-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {PLYLoader} from '../index';\n\ncreateLoaderWorker(PLYLoader);\n"],"mappings":";;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA,IAAAE,+BAAkB,EAACC,gBAAS,CAAC"}
@@ -1,4 +1,3 @@
1
-
2
1
  const moduleExports = require('./index');
3
2
  globalThis.loaders = globalThis.loaders || {};
4
3
  module.exports = Object.assign(globalThis.loaders, moduleExports);
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
1
+ {"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":"AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1,15 +1,13 @@
1
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
-
2
+ import { parsePLY } from './lib/parse-ply';
3
+ import { parsePLYInBatches } from './lib/parse-ply-in-batches';
5
4
  export { PLYWorkerLoader };
6
-
7
5
  export const PLYLoader = {
8
6
  ...PLYWorkerLoader,
9
- parse: async (arrayBuffer, options) => parsePLY(arrayBuffer, options),
10
- parseTextSync: parsePLY,
11
- parseSync: parsePLY,
12
- parseInBatches: parsePLYInBatches
7
+ parse: async (arrayBuffer, options) => parsePLY(arrayBuffer, options === null || options === void 0 ? void 0 : options.ply),
8
+ parseTextSync: (arrayBuffer, options) => parsePLY(arrayBuffer, options === null || options === void 0 ? void 0 : options.ply),
9
+ parseSync: (arrayBuffer, options) => parsePLY(arrayBuffer, options === null || options === void 0 ? void 0 : options.ply),
10
+ parseInBatches: (arrayBuffer, options) => parsePLYInBatches(arrayBuffer, options === null || options === void 0 ? void 0 : options.ply)
13
11
  };
14
12
  export const _typecheckPLYLoader = PLYLoader;
15
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["PLYLoader","PLYWorkerLoader","parsePLY","parsePLYInBatches","parse","arrayBuffer","options","parseTextSync","parseSync","parseInBatches","_typecheckPLYLoader"],"sources":["../../src/index.ts"],"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"],"mappings":"AACA,SAAQA,SAAS,IAAIC,eAAe,QAAO,cAAc;AACzD,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,OAAOC,iBAAiB,MAAM,4BAA4B;;AAI1D,SAAQF,eAAe;;AAKvB,OAAO,MAAMD,SAAS,GAAG;EACvB,GAAGC,eAAe;EAElBG,KAAK,EAAE,OAAOC,WAAW,EAAEC,OAAO,KAAKJ,QAAQ,CAACG,WAAW,EAAEC,OAAO,CAAC;EACrEC,aAAa,EAAEL,QAAQ;EACvBM,SAAS,EAAEN,QAAQ;EACnBO,cAAc,EAAEN;AAClB,CAAC;AAED,OAAO,MAAMO,mBAAqC,GAAGV,SAAS"}
1
+ {"version":3,"file":"index.js","names":["PLYLoader","PLYWorkerLoader","parsePLY","parsePLYInBatches","parse","arrayBuffer","options","ply","parseTextSync","parseSync","parseInBatches","_typecheckPLYLoader"],"sources":["../../src/index.ts"],"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?.ply), // TODO - this may not detect text correctly?\n parseTextSync: (arrayBuffer, options) => parsePLY(arrayBuffer, options?.ply),\n parseSync: (arrayBuffer, options) => parsePLY(arrayBuffer, options?.ply),\n parseInBatches: (arrayBuffer, options) => parsePLYInBatches(arrayBuffer, options?.ply)\n};\n\nexport const _typecheckPLYLoader: LoaderWithParser = PLYLoader;\n"],"mappings":"AACA,SAAQA,SAAS,IAAIC,eAAe,QAAO,cAAc;AACzD,SAAQC,QAAQ,QAAO,iBAAiB;AACxC,SAAQC,iBAAiB,QAAO,4BAA4B;AAI5D,SAAQF,eAAe;AAKvB,OAAO,MAAMD,SAAS,GAAG;EACvB,GAAGC,eAAe;EAElBG,KAAK,EAAE,MAAAA,CAAOC,WAAW,EAAEC,OAAO,KAAKJ,QAAQ,CAACG,WAAW,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,GAAG,CAAC;EAC1EC,aAAa,EAAEA,CAACH,WAAW,EAAEC,OAAO,KAAKJ,QAAQ,CAACG,WAAW,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,GAAG,CAAC;EAC5EE,SAAS,EAAEA,CAACJ,WAAW,EAAEC,OAAO,KAAKJ,QAAQ,CAACG,WAAW,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,GAAG,CAAC;EACxEG,cAAc,EAAEA,CAACL,WAAW,EAAEC,OAAO,KAAKH,iBAAiB,CAACE,WAAW,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,GAAG;AACvF,CAAC;AAED,OAAO,MAAMI,mBAAqC,GAAGX,SAAS"}
@@ -4,7 +4,6 @@ export function getPLYSchema(plyHeader, attributes) {
4
4
  const schema = deduceMeshSchema(attributes, metadataMap);
5
5
  return schema;
6
6
  }
7
-
8
7
  function makeMetadataFromPlyHeader(plyHeader) {
9
8
  const metadataMap = new Map();
10
9
  metadataMap.set('ply_comments', JSON.stringify(plyHeader.comments));
@@ -1 +1 @@
1
- {"version":3,"file":"get-ply-schema.js","names":["deduceMeshSchema","getPLYSchema","plyHeader","attributes","metadataMap","makeMetadataFromPlyHeader","schema","Map","set","JSON","stringify","comments","elements","format","undefined","version","headerLength","toString"],"sources":["../../../src/lib/get-ply-schema.ts"],"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"],"mappings":"AAAA,SAAgCA,gBAAgB,QAAO,oBAAoB;AAS3E,OAAO,SAASC,YAAY,CAACC,SAAoB,EAAEC,UAA0B,EAAU;EACrF,MAAMC,WAAW,GAAGC,yBAAyB,CAACH,SAAS,CAAC;EACxD,MAAMI,MAAM,GAAGN,gBAAgB,CAACG,UAAU,EAAEC,WAAW,CAAC;EACxD,OAAOE,MAAM;AACf;;AAOA,SAASD,yBAAyB,CAACH,SAAoB,EAAuB;EAC5E,MAAME,WAAW,GAAG,IAAIG,GAAG,EAAE;EAC7BH,WAAW,CAACI,GAAG,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAACR,SAAS,CAACS,QAAQ,CAAC,CAAC;EACnEP,WAAW,CAACI,GAAG,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAACR,SAAS,CAACU,QAAQ,CAAC,CAAC;EACnE,IAAIV,SAAS,CAACW,MAAM,KAAKC,SAAS,EAAE;IAClCV,WAAW,CAACI,GAAG,CAAC,YAAY,EAAEN,SAAS,CAACW,MAAM,CAAC;EACjD;EACA,IAAIX,SAAS,CAACa,OAAO,KAAKD,SAAS,EAAE;IACnCV,WAAW,CAACI,GAAG,CAAC,aAAa,EAAEN,SAAS,CAACa,OAAO,CAAC;EACnD;EACA,IAAIb,SAAS,CAACc,YAAY,KAAKF,SAAS,EAAE;IACxCV,WAAW,CAACI,GAAG,CAAC,kBAAkB,EAAEN,SAAS,CAACc,YAAY,CAACC,QAAQ,CAAC,EAAE,CAAC,CAAC;EAC1E;EACA,OAAOb,WAAW;AACpB"}
1
+ {"version":3,"file":"get-ply-schema.js","names":["deduceMeshSchema","getPLYSchema","plyHeader","attributes","metadataMap","makeMetadataFromPlyHeader","schema","Map","set","JSON","stringify","comments","elements","format","undefined","version","headerLength","toString"],"sources":["../../../src/lib/get-ply-schema.ts"],"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"],"mappings":"AAAA,SAAgCA,gBAAgB,QAAO,oBAAoB;AAS3E,OAAO,SAASC,YAAYA,CAACC,SAAoB,EAAEC,UAA0B,EAAU;EACrF,MAAMC,WAAW,GAAGC,yBAAyB,CAACH,SAAS,CAAC;EACxD,MAAMI,MAAM,GAAGN,gBAAgB,CAACG,UAAU,EAAEC,WAAW,CAAC;EACxD,OAAOE,MAAM;AACf;AAOA,SAASD,yBAAyBA,CAACH,SAAoB,EAAuB;EAC5E,MAAME,WAAW,GAAG,IAAIG,GAAG,EAAE;EAC7BH,WAAW,CAACI,GAAG,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAACR,SAAS,CAACS,QAAQ,CAAC,CAAC;EACnEP,WAAW,CAACI,GAAG,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAACR,SAAS,CAACU,QAAQ,CAAC,CAAC;EACnE,IAAIV,SAAS,CAACW,MAAM,KAAKC,SAAS,EAAE;IAClCV,WAAW,CAACI,GAAG,CAAC,YAAY,EAAEN,SAAS,CAACW,MAAM,CAAC;EACjD;EACA,IAAIX,SAAS,CAACa,OAAO,KAAKD,SAAS,EAAE;IACnCV,WAAW,CAACI,GAAG,CAAC,aAAa,EAAEN,SAAS,CAACa,OAAO,CAAC;EACnD;EACA,IAAIb,SAAS,CAACc,YAAY,KAAKF,SAAS,EAAE;IACxCV,WAAW,CAACI,GAAG,CAAC,kBAAkB,EAAEN,SAAS,CAACc,YAAY,CAACC,QAAQ,CAAC,EAAE,CAAC,CAAC;EAC1E;EACA,OAAOb,WAAW;AACpB"}
@@ -1,11 +1,9 @@
1
1
  import { getMeshBoundingBox } from '@loaders.gl/schema';
2
2
  import { getPLYSchema } from './get-ply-schema';
3
-
4
3
  export default function normalizePLY(plyHeader, plyAttributes, options) {
5
4
  const attributes = getMeshAttributes(plyAttributes);
6
5
  const boundingBox = getMeshBoundingBox(attributes);
7
6
  const vertexCount = plyAttributes.indices.length || plyAttributes.vertices.length / 3;
8
-
9
7
  const isTriangles = plyAttributes.indices && plyAttributes.indices.length > 0;
10
8
  const mode = isTriangles ? 4 : 0;
11
9
  const topology = isTriangles ? 'triangle-list' : 'point-list';
@@ -34,32 +32,54 @@ export default function normalizePLY(plyHeader, plyAttributes, options) {
34
32
  }
35
33
  return plyMesh;
36
34
  }
37
-
38
35
  function getMeshAttributes(attributes) {
39
36
  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
- if (attributes.uvs.length > 0) {
52
- accessors.TEXCOORD_0 = {
53
- value: new Float32Array(attributes.uvs),
54
- size: 2
55
- };
56
- }
57
- if (attributes.colors.length > 0) {
58
- accessors.COLOR_0 = {
59
- value: new Uint8Array(attributes.colors),
60
- size: 3,
61
- normalized: true
62
- };
37
+ for (const attributeName of Object.keys(attributes)) {
38
+ switch (attributeName) {
39
+ case 'vertices':
40
+ if (attributes.vertices.length > 0) {
41
+ accessors.POSITION = {
42
+ value: new Float32Array(attributes.vertices),
43
+ size: 3
44
+ };
45
+ }
46
+ break;
47
+ case 'normals':
48
+ if (attributes.normals.length > 0) {
49
+ accessors.NORMAL = {
50
+ value: new Float32Array(attributes.normals),
51
+ size: 3
52
+ };
53
+ }
54
+ break;
55
+ case 'uvs':
56
+ if (attributes.uvs.length > 0) {
57
+ accessors.TEXCOORD_0 = {
58
+ value: new Float32Array(attributes.uvs),
59
+ size: 2
60
+ };
61
+ }
62
+ break;
63
+ case 'colors':
64
+ if (attributes.colors.length > 0) {
65
+ accessors.COLOR_0 = {
66
+ value: new Uint8Array(attributes.colors),
67
+ size: 3,
68
+ normalized: true
69
+ };
70
+ }
71
+ break;
72
+ case 'indices':
73
+ break;
74
+ default:
75
+ if (attributes[attributeName].length > 0) {
76
+ accessors[attributeName] = {
77
+ value: new Float32Array(attributes[attributeName]),
78
+ size: 1
79
+ };
80
+ }
81
+ break;
82
+ }
63
83
  }
64
84
  return accessors;
65
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"normalize-ply.js","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"],"sources":["../../../src/lib/normalize-ply.ts"],"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"],"mappings":"AACA,SAAQA,kBAAkB,QAAO,oBAAoB;AAErD,SAAQC,YAAY,QAAO,kBAAkB;;AAO7C,eAAe,SAASC,YAAY,CAClCC,SAAiC,EACjCC,aAA4B,EAC5BC,OAAY,EACH;EACT,MAAMC,UAAU,GAAGC,iBAAiB,CAACH,aAAa,CAAC;EACnD,MAAMI,WAAW,GAAGR,kBAAkB,CAACM,UAAU,CAAC;EAClD,MAAMG,WAAW,GAAGL,aAAa,CAACM,OAAO,CAACC,MAAM,IAAIP,aAAa,CAACQ,QAAQ,CAACD,MAAM,GAAG,CAAC;;EAIrF,MAAME,WAAW,GAAGT,aAAa,CAACM,OAAO,IAAIN,aAAa,CAACM,OAAO,CAACC,MAAM,GAAG,CAAC;EAC7E,MAAMG,IAAI,GAAGD,WAAW,GAAG,CAAC,GAAG,CAAC;EAChC,MAAME,QAAQ,GAAGF,WAAW,GAAG,eAAe,GAAG,YAAY;EAE7D,MAAMG,MAAM,GAAGf,YAAY,CAACE,SAAS,EAAEG,UAAU,CAAC;EAElD,MAAMW,OAAgB,GAAG;IACvBC,MAAM,EAAE,KAAK;IACbC,UAAU,EAAEhB,SAAS;IACrBiB,MAAM,EAAE;MACNX,WAAW;MACXD;IACF,CAAC;IACDQ,MAAM;IACNV,UAAU;IACVI,OAAO,EAAE;MAACW,KAAK,EAAE,IAAIC,WAAW,CAAC,CAAC,CAAC;MAAEC,IAAI,EAAE;IAAC,CAAC;IAC7CT,IAAI;IACJC;EACF,CAAC;EAED,IAAIX,aAAa,CAACM,OAAO,CAACC,MAAM,GAAG,CAAC,EAAE;IACpCM,OAAO,CAACP,OAAO,GAAG;MAACW,KAAK,EAAE,IAAIC,WAAW,CAAClB,aAAa,CAACM,OAAO,CAAC;MAAEa,IAAI,EAAE;IAAC,CAAC;EAC5E;EAEA,OAAON,OAAO;AAChB;;AAMA,SAASV,iBAAiB,CAACD,UAAyB,EAAkB;EACpE,MAAMkB,SAAyB,GAAG,CAAC,CAAC;EAEpCA,SAAS,CAACC,QAAQ,GAAG;IAACJ,KAAK,EAAE,IAAIK,YAAY,CAACpB,UAAU,CAACM,QAAQ,CAAC;IAAEW,IAAI,EAAE;EAAC,CAAC;;EAI5E,IAAIjB,UAAU,CAACqB,OAAO,CAAChB,MAAM,GAAG,CAAC,EAAE;IACjCa,SAAS,CAACI,MAAM,GAAG;MAACP,KAAK,EAAE,IAAIK,YAAY,CAACpB,UAAU,CAACqB,OAAO,CAAC;MAAEJ,IAAI,EAAE;IAAC,CAAC;EAC3E;EAEA,IAAIjB,UAAU,CAACuB,GAAG,CAAClB,MAAM,GAAG,CAAC,EAAE;IAC7Ba,SAAS,CAACM,UAAU,GAAG;MAACT,KAAK,EAAE,IAAIK,YAAY,CAACpB,UAAU,CAACuB,GAAG,CAAC;MAAEN,IAAI,EAAE;IAAC,CAAC;EAC3E;EAEA,IAAIjB,UAAU,CAACyB,MAAM,CAACpB,MAAM,GAAG,CAAC,EAAE;IAEhCa,SAAS,CAACQ,OAAO,GAAG;MAACX,KAAK,EAAE,IAAIY,UAAU,CAAC3B,UAAU,CAACyB,MAAM,CAAC;MAAER,IAAI,EAAE,CAAC;MAAEW,UAAU,EAAE;IAAI,CAAC;EAC3F;EAEA,OAAOV,SAAS;AAClB"}
1
+ {"version":3,"file":"normalize-ply.js","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","attributeName","Object","keys","POSITION","Float32Array","normals","NORMAL","uvs","TEXCOORD_0","colors","COLOR_0","Uint8Array","normalized"],"sources":["../../../src/lib/normalize-ply.ts"],"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 */\n// eslint-disable-next-line complexity\nfunction getMeshAttributes(attributes: PLYAttributes): MeshAttributes {\n const accessors: MeshAttributes = {};\n\n for (const attributeName of Object.keys(attributes)) {\n switch (attributeName) {\n case 'vertices':\n if (attributes.vertices.length > 0) {\n accessors.POSITION = {value: new Float32Array(attributes.vertices), size: 3};\n }\n break;\n\n // optional attributes data\n case 'normals':\n if (attributes.normals.length > 0) {\n accessors.NORMAL = {value: new Float32Array(attributes.normals), size: 3};\n }\n break;\n\n case 'uvs':\n if (attributes.uvs.length > 0) {\n accessors.TEXCOORD_0 = {value: new Float32Array(attributes.uvs), size: 2};\n }\n break;\n\n case 'colors':\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 break;\n\n case 'indices':\n break;\n\n default:\n if (attributes[attributeName].length > 0) {\n accessors[attributeName] = {value: new Float32Array(attributes[attributeName]), size: 1};\n }\n break;\n }\n }\n return accessors;\n}\n"],"mappings":"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"}