@loaders.gl/ply 3.1.0-beta.6 → 3.1.2

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/parse-ply-in-batches.ts"],"names":["currentElement","parsePLYInBatches","iterator","options","lineIterator","header","parsePLYHeader","attributes","format","parseASCII","Error","comments","elements","line","trim","lineValues","split","lineType","shift","join","version","push","name","count","parseInt","properties","property","makePLYElementProperty","propertyNameMapping","console","log","propertValues","type","countType","itemType","indices","vertices","normals","uvs","colors","currentElementCount","element","parseASCIIElement","handleElement","parseASCIINumber","n","parseFloat","values","i","length","list","j","buffer","elementName","x","y","z","nx","ny","nz","s","t","red","green","blue","vertexIndices","vertex_indices","vertex_index"],"mappings":"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","sourcesContent":["// PLY Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author Wei Meng / http://about.me/menway\n//\n// Description: A loader for PLY ASCII files (known as the Polygon File Format\n// or the Stanford Triangle Format).\n//\n// Limitations: ASCII decoding assumes file is UTF-8.\n//\n// If the PLY file uses non standard property names, they can be mapped while\n// loading. For example, the following maps the properties\n// “diffuse_(red|green|blue)” in the file to standard color names.\n//\n// parsePLY(data, {\n// propertyNameMapping: {\n// diffuse_red: 'red',\n// diffuse_green: 'green',\n// diffuse_blue: 'blue'\n// }\n// });\n// @ts-nocheck\n\nimport {makeLineIterator, makeTextDecoderIterator, forEach} from '@loaders.gl/core';\nimport normalizePLY from './normalize-ply';\nimport {PLYMesh, PLYHeader, ASCIIElement, PLYAttributes} from './ply-types';\n\nlet currentElement: ASCIIElement;\n\n/**\n * PARSER\n * @param iterator\n * @param options\n */\nexport default async function* parsePLYInBatches(\n iterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: any\n): AsyncIterable<PLYMesh> {\n const lineIterator = makeLineIterator(makeTextDecoderIterator(iterator));\n const header = await parsePLYHeader(lineIterator, options);\n\n let attributes: PLYAttributes;\n switch (header.format) {\n case 'ascii':\n attributes = await parseASCII(lineIterator, header);\n break;\n default:\n throw new Error('Binary PLY can not yet be parsed in streaming mode');\n // attributes = await parseBinary(lineIterator, header);\n }\n\n yield normalizePLY(header, attributes, options);\n}\n\n/**\n * Parses header\n * @param lineIterator\n * @param options\n * @returns\n */\nasync function parsePLYHeader(\n lineIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: {[key: string]: any}\n): Promise<PLYHeader> {\n const header: PLYHeader = {\n comments: [],\n elements: []\n // headerLength\n };\n\n // Note: forEach does not reset iterator if exiting loop prematurely\n // so that iteration can continue in a second loop\n await forEach(lineIterator, (line: string) => {\n line = line.trim();\n\n // End of header\n if (line === 'end_header') {\n return true; // Returning true cancels `forEach`\n }\n\n // Ignore empty lines\n if (line === '') {\n // eslint-disable-next-line\n return false; // Returning false does not cancel `forEach`\n }\n\n const lineValues = line.split(/\\s+/);\n const lineType = lineValues.shift();\n line = lineValues.join(' ');\n\n switch (lineType) {\n case 'ply':\n // First line magic characters, ignore\n break;\n\n case 'format':\n header.format = lineValues[0];\n header.version = lineValues[1];\n break;\n\n case 'comment':\n header.comments.push(line);\n break;\n\n case 'element':\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n currentElement = {\n name: lineValues[0],\n count: parseInt(lineValues[1], 10),\n properties: []\n };\n break;\n\n case 'property':\n const property = makePLYElementProperty(lineValues, options.propertyNameMapping);\n currentElement.properties.push(property);\n break;\n\n default:\n // eslint-disable-next-line\n console.log('unhandled', lineType, lineValues);\n }\n\n return false;\n });\n\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n return header;\n}\n\nfunction makePLYElementProperty(propertValues: string[], propertyNameMapping: []) {\n const property: {[index: string]: string} = {\n type: propertValues[0]\n };\n\n if (property.type === 'list') {\n property.name = propertValues[3];\n property.countType = propertValues[1];\n property.itemType = propertValues[2];\n } else {\n property.name = propertValues[1];\n }\n\n if (propertyNameMapping && property.name in propertyNameMapping) {\n property.name = propertyNameMapping[property.name];\n }\n\n return property;\n}\n\n// ASCII PARSING\n/**\n * @param lineIterator\n * @param header\n * @returns\n */\nasync function parseASCII(lineIterator: string, header: PLYHeader) {\n // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n const attributes: PLYAttributes = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n colors: []\n };\n\n let currentElement = 0;\n let currentElementCount = 0;\n\n for await (let line of lineIterator) {\n line = line.trim();\n\n if (line !== '') {\n if (currentElementCount >= header.elements[currentElement].count) {\n currentElement++;\n currentElementCount = 0;\n }\n\n const element = parseASCIIElement(header.elements[currentElement].properties, line);\n handleElement(attributes, header.elements[currentElement].name, element);\n currentElementCount++;\n }\n }\n\n return attributes;\n}\n/**\n * Parses ASCII number\n * @param n\n * @param type\n * @returns ASCII number\n */\n// eslint-disable-next-line complexity\nfunction parseASCIINumber(n: string, type: string): number {\n switch (type) {\n case 'char':\n case 'uchar':\n case 'short':\n case 'ushort':\n case 'int':\n case 'uint':\n case 'int8':\n case 'uint8':\n case 'int16':\n case 'uint16':\n case 'int32':\n case 'uint32':\n return parseInt(n, 10);\n\n case 'float':\n case 'double':\n case 'float32':\n case 'float64':\n return parseFloat(n);\n\n default:\n throw new Error(type);\n }\n}\n/**\n * Parses ASCII element\n * @param properties\n * @param line\n * @returns element\n */\nfunction parseASCIIElement(properties: any[], line: string) {\n const values: any = line.split(/\\s+/);\n\n const element = {};\n\n for (let i = 0; i < properties.length; i++) {\n if (properties[i].type === 'list') {\n const list: any = [];\n const n = parseASCIINumber(values.shift(), properties[i].countType);\n\n for (let j = 0; j < n; j++) {\n list.push(parseASCIINumber(values.shift(), properties[i].itemType));\n }\n\n element[properties[i].name] = list;\n } else {\n element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);\n }\n }\n\n return element;\n}\n/**\n * @param buffer\n * @param elementName\n * @param element\n */\n// HELPER FUNCTIONS\n// eslint-disable-next-line complexity\nfunction handleElement(\n buffer: {[index: string]: number[]},\n elementName: string,\n element: any = {}\n) {\n switch (elementName) {\n case 'vertex':\n buffer.vertices.push(element.x, element.y, element.z);\n if ('nx' in element && 'ny' in element && 'nz' in element) {\n buffer.normals.push(element.nx, element.ny, element.nz);\n }\n if ('s' in element && 't' in element) {\n buffer.uvs.push(element.s, element.t);\n }\n if ('red' in element && 'green' in element && 'blue' in element) {\n buffer.colors.push(element.red / 255.0, element.green / 255.0, element.blue / 255.0);\n }\n break;\n\n case 'face':\n const vertexIndices = element.vertex_indices || element.vertex_index; // issue #9338\n if (vertexIndices.length === 3) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);\n } else if (vertexIndices.length === 4) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);\n buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);\n }\n break;\n\n default:\n break;\n }\n}\n"],"file":"parse-ply-in-batches.js"}
1
+ {"version":3,"sources":["../../../src/lib/parse-ply-in-batches.ts"],"names":["currentElement","parsePLYInBatches","iterator","options","lineIterator","parsePLYHeader","header","format","parseASCII","attributes","Error","comments","elements","line","trim","lineValues","split","lineType","shift","join","version","push","name","count","parseInt","properties","property","makePLYElementProperty","propertyNameMapping","console","log","propertValues","type","countType","itemType","indices","vertices","normals","uvs","colors","currentElementCount","element","parseASCIIElement","handleElement","parseASCIINumber","n","parseFloat","values","i","length","list","j","buffer","elementName","x","y","z","nx","ny","nz","s","t","red","green","blue","vertexIndices","vertex_indices","vertex_index"],"mappings":"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","sourcesContent":["// PLY Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author Wei Meng / http://about.me/menway\n//\n// Description: A loader for PLY ASCII files (known as the Polygon File Format\n// or the Stanford Triangle Format).\n//\n// Limitations: ASCII decoding assumes file is UTF-8.\n//\n// If the PLY file uses non standard property names, they can be mapped while\n// loading. For example, the following maps the properties\n// “diffuse_(red|green|blue)” in the file to standard color names.\n//\n// parsePLY(data, {\n// propertyNameMapping: {\n// diffuse_red: 'red',\n// diffuse_green: 'green',\n// diffuse_blue: 'blue'\n// }\n// });\n// @ts-nocheck\n\nimport {makeLineIterator, makeTextDecoderIterator, forEach} from '@loaders.gl/core';\nimport normalizePLY from './normalize-ply';\nimport {PLYMesh, PLYHeader, ASCIIElement, PLYAttributes} from './ply-types';\n\nlet currentElement: ASCIIElement;\n\n/**\n * PARSER\n * @param iterator\n * @param options\n */\nexport default async function* parsePLYInBatches(\n iterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: any\n): AsyncIterable<PLYMesh> {\n const lineIterator = makeLineIterator(makeTextDecoderIterator(iterator));\n const header = await parsePLYHeader(lineIterator, options);\n\n let attributes: PLYAttributes;\n switch (header.format) {\n case 'ascii':\n attributes = await parseASCII(lineIterator, header);\n break;\n default:\n throw new Error('Binary PLY can not yet be parsed in streaming mode');\n // attributes = await parseBinary(lineIterator, header);\n }\n\n yield normalizePLY(header, attributes, options);\n}\n\n/**\n * Parses header\n * @param lineIterator\n * @param options\n * @returns\n */\nasync function parsePLYHeader(\n lineIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: {[key: string]: any}\n): Promise<PLYHeader> {\n const header: PLYHeader = {\n comments: [],\n elements: []\n // headerLength\n };\n\n // Note: forEach does not reset iterator if exiting loop prematurely\n // so that iteration can continue in a second loop\n await forEach(lineIterator, (line: string) => {\n line = line.trim();\n\n // End of header\n if (line === 'end_header') {\n return true; // Returning true cancels `forEach`\n }\n\n // Ignore empty lines\n if (line === '') {\n // eslint-disable-next-line\n return false; // Returning false does not cancel `forEach`\n }\n\n const lineValues = line.split(/\\s+/);\n const lineType = lineValues.shift();\n line = lineValues.join(' ');\n\n switch (lineType) {\n case 'ply':\n // First line magic characters, ignore\n break;\n\n case 'format':\n header.format = lineValues[0];\n header.version = lineValues[1];\n break;\n\n case 'comment':\n header.comments.push(line);\n break;\n\n case 'element':\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n currentElement = {\n name: lineValues[0],\n count: parseInt(lineValues[1], 10),\n properties: []\n };\n break;\n\n case 'property':\n const property = makePLYElementProperty(lineValues, options.propertyNameMapping);\n currentElement.properties.push(property);\n break;\n\n default:\n // eslint-disable-next-line\n console.log('unhandled', lineType, lineValues);\n }\n\n return false;\n });\n\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n return header;\n}\n\nfunction makePLYElementProperty(propertValues: string[], propertyNameMapping: []) {\n const property: {[index: string]: string} = {\n type: propertValues[0]\n };\n\n if (property.type === 'list') {\n property.name = propertValues[3];\n property.countType = propertValues[1];\n property.itemType = propertValues[2];\n } else {\n property.name = propertValues[1];\n }\n\n if (propertyNameMapping && property.name in propertyNameMapping) {\n property.name = propertyNameMapping[property.name];\n }\n\n return property;\n}\n\n// ASCII PARSING\n/**\n * @param lineIterator\n * @param header\n * @returns\n */\nasync function parseASCII(lineIterator: string, header: PLYHeader) {\n // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n const attributes: PLYAttributes = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n colors: []\n };\n\n let currentElement = 0;\n let currentElementCount = 0;\n\n for await (let line of lineIterator) {\n line = line.trim();\n\n if (line !== '') {\n if (currentElementCount >= header.elements[currentElement].count) {\n currentElement++;\n currentElementCount = 0;\n }\n\n const element = parseASCIIElement(header.elements[currentElement].properties, line);\n handleElement(attributes, header.elements[currentElement].name, element);\n currentElementCount++;\n }\n }\n\n return attributes;\n}\n/**\n * Parses ASCII number\n * @param n\n * @param type\n * @returns ASCII number\n */\n// eslint-disable-next-line complexity\nfunction parseASCIINumber(n: string, type: string): number {\n switch (type) {\n case 'char':\n case 'uchar':\n case 'short':\n case 'ushort':\n case 'int':\n case 'uint':\n case 'int8':\n case 'uint8':\n case 'int16':\n case 'uint16':\n case 'int32':\n case 'uint32':\n return parseInt(n, 10);\n\n case 'float':\n case 'double':\n case 'float32':\n case 'float64':\n return parseFloat(n);\n\n default:\n throw new Error(type);\n }\n}\n/**\n * Parses ASCII element\n * @param properties\n * @param line\n * @returns element\n */\nfunction parseASCIIElement(properties: any[], line: string) {\n const values: any = line.split(/\\s+/);\n\n const element = {};\n\n for (let i = 0; i < properties.length; i++) {\n if (properties[i].type === 'list') {\n const list: any = [];\n const n = parseASCIINumber(values.shift(), properties[i].countType);\n\n for (let j = 0; j < n; j++) {\n list.push(parseASCIINumber(values.shift(), properties[i].itemType));\n }\n\n element[properties[i].name] = list;\n } else {\n element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);\n }\n }\n\n return element;\n}\n/**\n * @param buffer\n * @param elementName\n * @param element\n */\n// HELPER FUNCTIONS\n// eslint-disable-next-line complexity\nfunction handleElement(\n buffer: {[index: string]: number[]},\n elementName: string,\n element: any = {}\n) {\n switch (elementName) {\n case 'vertex':\n buffer.vertices.push(element.x, element.y, element.z);\n if ('nx' in element && 'ny' in element && 'nz' in element) {\n buffer.normals.push(element.nx, element.ny, element.nz);\n }\n if ('s' in element && 't' in element) {\n buffer.uvs.push(element.s, element.t);\n }\n if ('red' in element && 'green' in element && 'blue' in element) {\n buffer.colors.push(element.red / 255.0, element.green / 255.0, element.blue / 255.0);\n }\n break;\n\n case 'face':\n const vertexIndices = element.vertex_indices || element.vertex_index; // issue #9338\n if (vertexIndices.length === 3) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);\n } else if (vertexIndices.length === 4) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);\n buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);\n }\n break;\n\n default:\n break;\n }\n}\n"],"file":"parse-ply-in-batches.js"}
@@ -9,12 +9,13 @@ exports.default = parsePLY;
9
9
 
10
10
  var _normalizePly = _interopRequireDefault(require("./normalize-ply"));
11
11
 
12
- function parsePLY(data, options = {}) {
13
- let header;
14
- let attributes;
12
+ function parsePLY(data) {
13
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
14
+ var header;
15
+ var attributes;
15
16
 
16
17
  if (data instanceof ArrayBuffer) {
17
- const text = new TextDecoder().decode(data);
18
+ var text = new TextDecoder().decode(data);
18
19
  header = parseHeader(text, options);
19
20
  attributes = header.format === 'ascii' ? parseASCII(text, header) : parseBinary(data, header);
20
21
  } else {
@@ -26,33 +27,33 @@ function parsePLY(data, options = {}) {
26
27
  }
27
28
 
28
29
  function parseHeader(data, options) {
29
- const PLY_HEADER_PATTERN = /ply([\s\S]*)end_header\s/;
30
- let headerText = '';
31
- let headerLength = 0;
32
- const result = PLY_HEADER_PATTERN.exec(data);
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);
33
34
 
34
35
  if (result !== null) {
35
36
  headerText = result[1];
36
37
  headerLength = result[0].length;
37
38
  }
38
39
 
39
- const lines = headerText.split('\n');
40
- const header = parseHeaderLines(lines, headerLength, options);
40
+ var lines = headerText.split('\n');
41
+ var header = parseHeaderLines(lines, headerLength, options);
41
42
  return header;
42
43
  }
43
44
 
44
45
  function parseHeaderLines(lines, headerLength, options) {
45
- const header = {
46
+ var header = {
46
47
  comments: [],
47
48
  elements: [],
48
- headerLength
49
+ headerLength: headerLength
49
50
  };
50
- let lineType;
51
- let lineValues;
52
- let currentElement = null;
51
+ var lineType;
52
+ var lineValues;
53
+ var currentElement = null;
53
54
 
54
- for (let i = 0; i < lines.length; i++) {
55
- let line = lines[i];
55
+ for (var i = 0; i < lines.length; i++) {
56
+ var line = lines[i];
56
57
  line = line.trim();
57
58
 
58
59
  if (line === '') {
@@ -106,7 +107,7 @@ function parseHeaderLines(lines, headerLength, options) {
106
107
  }
107
108
 
108
109
  function makePLYElementProperty(propertValues, propertyNameMapping) {
109
- const property = {
110
+ var property = {
110
111
  type: propertValues[0]
111
112
  };
112
113
 
@@ -153,15 +154,15 @@ function parseASCIINumber(n, type) {
153
154
  }
154
155
 
155
156
  function parseASCIIElement(properties, line) {
156
- const values = line.split(/\s+/);
157
- const element = {};
157
+ var values = line.split(/\s+/);
158
+ var element = {};
158
159
 
159
- for (let i = 0; i < properties.length; i++) {
160
+ for (var i = 0; i < properties.length; i++) {
160
161
  if (properties[i].type === 'list') {
161
- const list = [];
162
- const n = parseASCIINumber(values.shift(), properties[i].countType);
162
+ var list = [];
163
+ var n = parseASCIINumber(values.shift(), properties[i].countType);
163
164
 
164
- for (let j = 0; j < n; j++) {
165
+ for (var j = 0; j < n; j++) {
165
166
  list.push(parseASCIINumber(values.shift(), properties[i].itemType));
166
167
  }
167
168
 
@@ -175,27 +176,27 @@ function parseASCIIElement(properties, line) {
175
176
  }
176
177
 
177
178
  function parseASCII(data, header) {
178
- const attributes = {
179
+ var attributes = {
179
180
  indices: [],
180
181
  vertices: [],
181
182
  normals: [],
182
183
  uvs: [],
183
184
  colors: []
184
185
  };
185
- let result;
186
- const patternBody = /end_header\s([\s\S]*)$/;
187
- let body = '';
186
+ var result;
187
+ var patternBody = /end_header\s([\s\S]*)$/;
188
+ var body = '';
188
189
 
189
190
  if ((result = patternBody.exec(data)) !== null) {
190
191
  body = result[1];
191
192
  }
192
193
 
193
- const lines = body.split('\n');
194
- let currentElement = 0;
195
- let currentElementCount = 0;
194
+ var lines = body.split('\n');
195
+ var currentElement = 0;
196
+ var currentElementCount = 0;
196
197
 
197
- for (let i = 0; i < lines.length; i++) {
198
- let line = lines[i];
198
+ for (var i = 0; i < lines.length; i++) {
199
+ var line = lines[i];
199
200
  line = line.trim();
200
201
 
201
202
  if (line !== '') {
@@ -204,7 +205,7 @@ function parseASCII(data, header) {
204
205
  currentElementCount = 0;
205
206
  }
206
207
 
207
- const element = parseASCIIElement(header.elements[currentElement].properties, line);
208
+ var element = parseASCIIElement(header.elements[currentElement].properties, line);
208
209
  handleElement(attributes, header.elements[currentElement].name, element);
209
210
  currentElementCount++;
210
211
  }
@@ -213,7 +214,9 @@ function parseASCII(data, header) {
213
214
  return attributes;
214
215
  }
215
216
 
216
- function handleElement(buffer, elementName, element = {}) {
217
+ function handleElement(buffer, elementName) {
218
+ var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
219
+
217
220
  if (elementName === 'vertex') {
218
221
  buffer.vertices.push(element.x, element.y, element.z);
219
222
 
@@ -229,7 +232,7 @@ function handleElement(buffer, elementName, element = {}) {
229
232
  buffer.colors.push(element.red, element.green, element.blue);
230
233
  }
231
234
  } else if (elementName === 'face') {
232
- const vertexIndices = element.vertex_indices || element.vertex_index;
235
+ var vertexIndices = element.vertex_indices || element.vertex_index;
233
236
 
234
237
  if (vertexIndices.length === 3) {
235
238
  buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);
@@ -280,18 +283,18 @@ function binaryRead(dataview, at, type, littleEndian) {
280
283
  }
281
284
 
282
285
  function binaryReadElement(dataview, at, properties, littleEndian) {
283
- const element = {};
284
- let result;
285
- let read = 0;
286
+ var element = {};
287
+ var result;
288
+ var read = 0;
286
289
 
287
- for (let i = 0; i < properties.length; i++) {
290
+ for (var i = 0; i < properties.length; i++) {
288
291
  if (properties[i].type === 'list') {
289
- const list = [];
292
+ var list = [];
290
293
  result = binaryRead(dataview, at + read, properties[i].countType, littleEndian);
291
- const n = result[0];
294
+ var n = result[0];
292
295
  read += result[1];
293
296
 
294
- for (let j = 0; j < n; j++) {
297
+ for (var j = 0; j < n; j++) {
295
298
  result = binaryRead(dataview, at + read, properties[i].itemType, littleEndian);
296
299
  list.push(result[0]);
297
300
  read += result[1];
@@ -309,25 +312,25 @@ function binaryReadElement(dataview, at, properties, littleEndian) {
309
312
  }
310
313
 
311
314
  function parseBinary(data, header) {
312
- const attributes = {
315
+ var attributes = {
313
316
  indices: [],
314
317
  vertices: [],
315
318
  normals: [],
316
319
  uvs: [],
317
320
  colors: []
318
321
  };
319
- const littleEndian = header.format === 'binary_little_endian';
320
- const body = new DataView(data, header.headerLength);
321
- let result;
322
- let loc = 0;
322
+ var littleEndian = header.format === 'binary_little_endian';
323
+ var body = new DataView(data, header.headerLength);
324
+ var result;
325
+ var loc = 0;
323
326
 
324
- for (let currentElement = 0; currentElement < header.elements.length; currentElement++) {
325
- const count = header.elements[currentElement].count;
327
+ for (var currentElement = 0; currentElement < header.elements.length; currentElement++) {
328
+ var count = header.elements[currentElement].count;
326
329
 
327
- for (let currentElementCount = 0; currentElementCount < count; currentElementCount++) {
330
+ for (var currentElementCount = 0; currentElementCount < count; currentElementCount++) {
328
331
  result = binaryReadElement(body, loc, header.elements[currentElement].properties, littleEndian);
329
332
  loc += result[1];
330
- const element = result[0];
333
+ var element = result[0];
331
334
  handleElement(attributes, header.elements[currentElement].name, element);
332
335
  }
333
336
  }
@@ -1 +1 @@
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":"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","sourcesContent":["// PLY Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author Wei Meng / http://about.me/menway\n//\n// Description: A loader for PLY ASCII files (known as the Polygon File Format\n// or the Stanford Triangle Format).\n//\n// Limitations: ASCII decoding assumes file is UTF-8.\n//\n// If the PLY file uses non standard property names, they can be mapped while\n// loading. For example, the following maps the properties\n// “diffuse_(red|green|blue)” in the file to standard color names.\n//\n// parsePLY(data, {\n// propertyNameMapping: {\n// diffuse_red: 'red',\n// diffuse_green: 'green',\n// diffuse_blue: 'blue'\n// }\n// });\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
+ {"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":"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","sourcesContent":["// PLY Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author Wei Meng / http://about.me/menway\n//\n// Description: A loader for PLY ASCII files (known as the Polygon File Format\n// or the Stanford Triangle Format).\n//\n// Limitations: ASCII decoding assumes file is UTF-8.\n//\n// If the PLY file uses non standard property names, they can be mapped while\n// loading. For example, the following maps the properties\n// “diffuse_(red|green|blue)” in the file to standard color names.\n//\n// parsePLY(data, {\n// propertyNameMapping: {\n// diffuse_red: 'red',\n// diffuse_green: 'green',\n// diffuse_blue: 'blue'\n// }\n// });\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"}
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports._typecheckPLYLoader = exports.PLYLoader = void 0;
7
- const VERSION = typeof "3.1.0-beta.6" !== 'undefined' ? "3.1.0-beta.6" : 'latest';
8
- const PLYLoader = {
7
+ var VERSION = typeof "3.1.2" !== 'undefined' ? "3.1.2" : 'latest';
8
+ var PLYLoader = {
9
9
  name: 'PLY',
10
10
  id: 'ply',
11
11
  module: 'ply',
@@ -22,6 +22,6 @@ const PLYLoader = {
22
22
  }
23
23
  };
24
24
  exports.PLYLoader = PLYLoader;
25
- const _typecheckPLYLoader = PLYLoader;
25
+ var _typecheckPLYLoader = PLYLoader;
26
26
  exports._typecheckPLYLoader = _typecheckPLYLoader;
27
27
  //# sourceMappingURL=ply-loader.js.map
@@ -1 +1 @@
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,MAAMA,OAAO,GAAG,0BAAuB,WAAvB,oBAAmD,QAAnE;AAOO,MAAMC,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,MAAMC,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
+ {"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,4 +1,4 @@
1
- const VERSION = typeof "3.1.0-beta.6" !== 'undefined' ? "3.1.0-beta.6" : 'latest';
1
+ const VERSION = typeof "3.1.2" !== 'undefined' ? "3.1.2" : 'latest';
2
2
  export const PLYLoader = {
3
3
  name: 'PLY',
4
4
  id: 'ply',
@@ -1 +1 @@
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,MAAMA,OAAO,GAAG,0BAAuB,WAAvB,oBAAmD,QAAnE;AAOA,OAAO,MAAMC,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;AAiBP,OAAO,MAAMC,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
+ {"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,MAAMA,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,QAAnE;AAOA,OAAO,MAAMC,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;AAiBP,OAAO,MAAMC,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/ply",
3
- "version": "3.1.0-beta.6",
3
+ "version": "3.1.2",
4
4
  "description": "Framework-independent loader for the PLY format",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -29,16 +29,16 @@
29
29
  ],
30
30
  "scripts": {
31
31
  "pre-build": "npm run build-worker && npm run build-bundle",
32
- "build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/bundle.js",
32
+ "build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/dist.min.js",
33
33
  "build-worker": "esbuild src/workers/ply-worker.ts --bundle --outfile=dist/ply-worker.js"
34
34
  },
35
35
  "dependencies": {
36
36
  "@babel/runtime": "^7.3.1",
37
- "@loaders.gl/loader-utils": "3.1.0-beta.6",
38
- "@loaders.gl/schema": "3.1.0-beta.6"
37
+ "@loaders.gl/loader-utils": "3.1.2",
38
+ "@loaders.gl/schema": "3.1.2"
39
39
  },
40
40
  "peerDependencies": {
41
- "@loaders.gl/core": "3.1.0-beta.1"
41
+ "@loaders.gl/core": "3.1.0"
42
42
  },
43
- "gitHead": "e6fce1907a689f9199922e84bd493adacfefbbf6"
43
+ "gitHead": "5c25bb71a2ac8558ecedf2256cc925427b2a0506"
44
44
  }