@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
@@ -1,10 +1,7 @@
1
-
2
-
3
1
  import { makeLineIterator, makeTextDecoderIterator, forEach } from '@loaders.gl/loader-utils';
4
2
  import normalizePLY from './normalize-ply';
5
3
  let currentElement;
6
-
7
- export default async function* parsePLYInBatches(iterator, options) {
4
+ export async function* parsePLYInBatches(iterator, options) {
8
5
  const lineIterator = makeLineIterator(makeTextDecoderIterator(iterator));
9
6
  const header = await parsePLYHeader(lineIterator, options);
10
7
  let attributes;
@@ -15,27 +12,21 @@ export default async function* parsePLYInBatches(iterator, options) {
15
12
  default:
16
13
  throw new Error('Binary PLY can not yet be parsed in streaming mode');
17
14
  }
18
-
19
15
  yield normalizePLY(header, attributes, options);
20
16
  }
21
-
22
17
  async function parsePLYHeader(lineIterator, options) {
23
18
  const header = {
24
19
  comments: [],
25
20
  elements: []
26
21
  };
27
-
28
22
  await forEach(lineIterator, line => {
29
23
  line = line.trim();
30
-
31
24
  if (line === 'end_header') {
32
25
  return true;
33
26
  }
34
-
35
27
  if (line === '') {
36
28
  return false;
37
29
  }
38
-
39
30
  const lineValues = line.split(/\s+/);
40
31
  const lineType = lineValues.shift();
41
32
  line = lineValues.join(' ');
@@ -73,23 +64,23 @@ async function parsePLYHeader(lineIterator, options) {
73
64
  }
74
65
  return header;
75
66
  }
76
- function makePLYElementProperty(propertValues, propertyNameMapping) {
77
- const property = {
78
- type: propertValues[0]
79
- };
80
- if (property.type === 'list') {
81
- property.name = propertValues[3];
82
- property.countType = propertValues[1];
83
- property.itemType = propertValues[2];
84
- } else {
85
- property.name = propertValues[1];
86
- }
87
- if (propertyNameMapping && property.name in propertyNameMapping) {
88
- property.name = propertyNameMapping[property.name];
67
+ function makePLYElementProperty(propertyValues, propertyNameMapping) {
68
+ const type = propertyValues[0];
69
+ switch (type) {
70
+ case 'list':
71
+ return {
72
+ type,
73
+ name: propertyValues[3],
74
+ countType: propertyValues[1],
75
+ itemType: propertyValues[2]
76
+ };
77
+ default:
78
+ return {
79
+ type,
80
+ name: propertyValues[1]
81
+ };
89
82
  }
90
- return property;
91
83
  }
92
-
93
84
  async function parseASCII(lineIterator, header) {
94
85
  const attributes = {
95
86
  indices: [],
@@ -107,7 +98,7 @@ async function parseASCII(lineIterator, header) {
107
98
  currentElement++;
108
99
  currentElementCount = 0;
109
100
  }
110
- const element = parseASCIIElement(header.elements[currentElement].properties, line);
101
+ const element = parsePLYElement(header.elements[currentElement].properties, line);
111
102
  handleElement(attributes, header.elements[currentElement].name, element);
112
103
  currentElementCount++;
113
104
  }
@@ -138,7 +129,7 @@ function parseASCIINumber(n, type) {
138
129
  throw new Error(type);
139
130
  }
140
131
  }
141
- function parseASCIIElement(properties, line) {
132
+ function parsePLYElement(properties, line) {
142
133
  const values = line.split(/\s+/);
143
134
  const element = {};
144
135
  for (let i = 0; i < properties.length; i++) {
@@ -1 +1 @@
1
- {"version":3,"file":"parse-ply-in-batches.js","names":["makeLineIterator","makeTextDecoderIterator","forEach","normalizePLY","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"],"sources":["../../../src/lib/parse-ply-in-batches.ts"],"sourcesContent":["// PLY Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author Wei Meng / http://about.me/menway\n//\n// Description: A loader for PLY ASCII files (known as the Polygon File Format\n// or the Stanford Triangle Format).\n//\n// Limitations: ASCII decoding assumes file is UTF-8.\n//\n// If the PLY file uses non standard property names, they can be mapped while\n// loading. For example, the following maps the properties\n// “diffuse_(red|green|blue)” in the file to standard color names.\n//\n// parsePLY(data, {\n// propertyNameMapping: {\n// diffuse_red: 'red',\n// diffuse_green: 'green',\n// diffuse_blue: 'blue'\n// }\n// });\n\nimport {makeLineIterator, makeTextDecoderIterator, forEach} from '@loaders.gl/loader-utils';\nimport normalizePLY from './normalize-ply';\nimport {PLYMesh, PLYHeader, ASCIIElement, PLYAttributes} from './ply-types';\n\nlet currentElement: ASCIIElement;\n\n/**\n * PARSER\n * @param iterator\n * @param options\n */\nexport default async function* parsePLYInBatches(\n iterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: any\n): AsyncIterable<PLYMesh> {\n const lineIterator = makeLineIterator(makeTextDecoderIterator(iterator));\n const header = await parsePLYHeader(lineIterator, options);\n\n let attributes: PLYAttributes;\n switch (header.format) {\n case 'ascii':\n attributes = await parseASCII(lineIterator, header);\n break;\n default:\n throw new Error('Binary PLY can not yet be parsed in streaming mode');\n // attributes = await parseBinary(lineIterator, header);\n }\n\n yield normalizePLY(header, attributes, options);\n}\n\n/**\n * Parses header\n * @param lineIterator\n * @param options\n * @returns\n */\nasync function parsePLYHeader(\n lineIterator: AsyncIterable<string> | Iterable<string>,\n options: {[key: string]: any}\n): Promise<PLYHeader> {\n const header: PLYHeader = {\n comments: [],\n elements: []\n // headerLength\n };\n\n // Note: forEach does not reset iterator if exiting loop prematurely\n // so that iteration can continue in a second loop\n await forEach(lineIterator, (line: string) => {\n line = line.trim();\n\n // End of header\n if (line === 'end_header') {\n return true; // Returning true cancels `forEach`\n }\n\n // Ignore empty lines\n if (line === '') {\n // eslint-disable-next-line\n return false; // Returning false does not cancel `forEach`\n }\n\n const lineValues = line.split(/\\s+/);\n const lineType = lineValues.shift();\n line = lineValues.join(' ');\n\n switch (lineType) {\n case 'ply':\n // First line magic characters, ignore\n break;\n\n case 'format':\n header.format = lineValues[0];\n header.version = lineValues[1];\n break;\n\n case 'comment':\n header.comments.push(line);\n break;\n\n case 'element':\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n currentElement = {\n name: lineValues[0],\n count: parseInt(lineValues[1], 10),\n properties: []\n };\n break;\n\n case 'property':\n const property = makePLYElementProperty(lineValues, options.propertyNameMapping);\n currentElement.properties.push(property);\n break;\n\n default:\n // eslint-disable-next-line\n console.log('unhandled', lineType, lineValues);\n }\n\n return false;\n });\n\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n return header;\n}\n\nfunction makePLYElementProperty(propertValues: string[], propertyNameMapping: []) {\n const property: {[index: string]: string} = {\n type: propertValues[0]\n };\n\n if (property.type === 'list') {\n property.name = propertValues[3];\n property.countType = propertValues[1];\n property.itemType = propertValues[2];\n } else {\n property.name = propertValues[1];\n }\n\n if (propertyNameMapping && property.name in propertyNameMapping) {\n property.name = propertyNameMapping[property.name];\n }\n\n return property;\n}\n\n// ASCII PARSING\n/**\n * @param lineIterator\n * @param header\n * @returns\n */\nasync function parseASCII(lineIterator: AsyncIterable<string>, header: PLYHeader) {\n // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n const attributes: PLYAttributes = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n colors: []\n };\n\n let currentElement = 0;\n let currentElementCount = 0;\n\n for await (let line of lineIterator) {\n line = line.trim();\n\n if (line !== '') {\n if (currentElementCount >= header.elements[currentElement].count) {\n currentElement++;\n currentElementCount = 0;\n }\n\n const element = parseASCIIElement(header.elements[currentElement].properties, line);\n handleElement(attributes, header.elements[currentElement].name, element);\n currentElementCount++;\n }\n }\n\n return attributes;\n}\n/**\n * Parses ASCII number\n * @param n\n * @param type\n * @returns ASCII number\n */\n// eslint-disable-next-line complexity\nfunction parseASCIINumber(n: string, type: string): number {\n switch (type) {\n case 'char':\n case 'uchar':\n case 'short':\n case 'ushort':\n case 'int':\n case 'uint':\n case 'int8':\n case 'uint8':\n case 'int16':\n case 'uint16':\n case 'int32':\n case 'uint32':\n return parseInt(n, 10);\n\n case 'float':\n case 'double':\n case 'float32':\n case 'float64':\n return parseFloat(n);\n\n default:\n throw new Error(type);\n }\n}\n/**\n * Parses ASCII element\n * @param properties\n * @param line\n * @returns element\n */\nfunction parseASCIIElement(properties: any[], line: string) {\n const values: any = line.split(/\\s+/);\n\n const element = {};\n\n for (let i = 0; i < properties.length; i++) {\n if (properties[i].type === 'list') {\n const list: any = [];\n const n = parseASCIINumber(values.shift(), properties[i].countType);\n\n for (let j = 0; j < n; j++) {\n list.push(parseASCIINumber(values.shift(), properties[i].itemType));\n }\n\n element[properties[i].name] = list;\n } else {\n element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);\n }\n }\n\n return element;\n}\n/**\n * @param buffer\n * @param elementName\n * @param element\n */\n// HELPER FUNCTIONS\n// eslint-disable-next-line complexity\nfunction handleElement(\n buffer: {[index: string]: number[]},\n elementName: string,\n element: any = {}\n) {\n switch (elementName) {\n case 'vertex':\n buffer.vertices.push(element.x, element.y, element.z);\n if ('nx' in element && 'ny' in element && 'nz' in element) {\n buffer.normals.push(element.nx, element.ny, element.nz);\n }\n if ('s' in element && 't' in element) {\n buffer.uvs.push(element.s, element.t);\n }\n if ('red' in element && 'green' in element && 'blue' in element) {\n buffer.colors.push(element.red / 255.0, element.green / 255.0, element.blue / 255.0);\n }\n break;\n\n case 'face':\n const vertexIndices = element.vertex_indices || element.vertex_index; // issue #9338\n if (vertexIndices.length === 3) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);\n } else if (vertexIndices.length === 4) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);\n buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);\n }\n break;\n\n default:\n break;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-ply-in-batches.js","names":["makeLineIterator","makeTextDecoderIterator","forEach","normalizePLY","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","propertyValues","type","countType","itemType","indices","vertices","normals","uvs","colors","currentElementCount","element","parsePLYElement","handleElement","parseASCIINumber","n","parseFloat","values","i","length","list","j","buffer","elementName","arguments","undefined","x","y","z","nx","ny","nz","s","t","red","green","blue","vertexIndices","vertex_indices","vertex_index"],"sources":["../../../src/lib/parse-ply-in-batches.ts"],"sourcesContent":["// PLY Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author Wei Meng / http://about.me/menway\n//\n// Description: A loader for PLY ASCII files (known as the Polygon File Format\n// or the Stanford Triangle Format).\n//\n// Limitations: ASCII decoding assumes file is UTF-8.\n//\n// If the PLY file uses non standard property names, they can be mapped while\n// loading. For example, the following maps the properties\n// “diffuse_(red|green|blue)” in the file to standard color names.\n//\n// parsePLY(data, {\n// propertyNameMapping: {\n// diffuse_red: 'red',\n// diffuse_green: 'green',\n// diffuse_blue: 'blue'\n// }\n// });\n\nimport {makeLineIterator, makeTextDecoderIterator, forEach} from '@loaders.gl/loader-utils';\nimport normalizePLY from './normalize-ply';\nimport {PLYMesh, PLYHeader, PLYElement, PLYProperty, PLYAttributes} from './ply-types';\n\nlet currentElement: PLYElement;\n\n/**\n * PARSER\n * @param iterator\n * @param options\n */\nexport async function* parsePLYInBatches(\n iterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: any\n): AsyncIterable<PLYMesh> {\n const lineIterator = makeLineIterator(makeTextDecoderIterator(iterator));\n const header = await parsePLYHeader(lineIterator, options);\n\n let attributes: PLYAttributes;\n switch (header.format) {\n case 'ascii':\n attributes = await parseASCII(lineIterator, header);\n break;\n default:\n throw new Error('Binary PLY can not yet be parsed in streaming mode');\n // attributes = await parseBinary(lineIterator, header);\n }\n\n yield normalizePLY(header, attributes, options);\n}\n\n/**\n * Parses header\n * @param lineIterator\n * @param options\n * @returns\n */\nasync function parsePLYHeader(\n lineIterator: AsyncIterable<string> | Iterable<string>,\n options: {[key: string]: any}\n): Promise<PLYHeader> {\n const header: PLYHeader = {\n comments: [],\n elements: []\n // headerLength\n };\n\n // Note: forEach does not reset iterator if exiting loop prematurely\n // so that iteration can continue in a second loop\n await forEach(lineIterator, (line: string) => {\n line = line.trim();\n\n // End of header\n if (line === 'end_header') {\n return true; // Returning true cancels `forEach`\n }\n\n // Ignore empty lines\n if (line === '') {\n // eslint-disable-next-line\n return false; // Returning false does not cancel `forEach`\n }\n\n const lineValues = line.split(/\\s+/);\n const lineType = lineValues.shift();\n line = lineValues.join(' ');\n\n switch (lineType) {\n case 'ply':\n // First line magic characters, ignore\n break;\n\n case 'format':\n header.format = lineValues[0];\n header.version = lineValues[1];\n break;\n\n case 'comment':\n header.comments.push(line);\n break;\n\n case 'element':\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n currentElement = {\n name: lineValues[0],\n count: parseInt(lineValues[1], 10),\n properties: []\n };\n break;\n\n case 'property':\n const property = makePLYElementProperty(lineValues, options.propertyNameMapping);\n currentElement.properties.push(property);\n break;\n\n default:\n // eslint-disable-next-line\n console.log('unhandled', lineType, lineValues);\n }\n\n return false;\n });\n\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n return header;\n}\n\nfunction makePLYElementProperty(propertyValues: string[], propertyNameMapping: []): 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// ASCII PARSING\n/**\n * @param lineIterator\n * @param header\n * @returns\n */\nasync function parseASCII(lineIterator: AsyncIterable<string>, header: PLYHeader) {\n // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n const attributes: PLYAttributes = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n colors: []\n };\n\n let currentElement = 0;\n let currentElementCount = 0;\n\n for await (let line of lineIterator) {\n line = line.trim();\n\n if (line !== '') {\n if (currentElementCount >= header.elements[currentElement].count) {\n currentElement++;\n currentElementCount = 0;\n }\n\n const element = 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 * 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 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 * @param buffer\n * @param elementName\n * @param element\n */\n// HELPER FUNCTIONS\n// eslint-disable-next-line complexity\nfunction handleElement(\n buffer: {[index: string]: number[]},\n elementName: string,\n element: any = {}\n) {\n switch (elementName) {\n case 'vertex':\n buffer.vertices.push(element.x, element.y, element.z);\n if ('nx' in element && 'ny' in element && 'nz' in element) {\n buffer.normals.push(element.nx, element.ny, element.nz);\n }\n if ('s' in element && 't' in element) {\n buffer.uvs.push(element.s, element.t);\n }\n if ('red' in element && 'green' in element && 'blue' in element) {\n buffer.colors.push(element.red / 255.0, element.green / 255.0, element.blue / 255.0);\n }\n break;\n\n case 'face':\n const vertexIndices = element.vertex_indices || element.vertex_index; // issue #9338\n if (vertexIndices.length === 3) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);\n } else if (vertexIndices.length === 4) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);\n buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);\n }\n break;\n\n default:\n break;\n }\n}\n"],"mappings":"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"}
@@ -1,8 +1,5 @@
1
-
2
-
3
1
  import normalizePLY from './normalize-ply';
4
-
5
- export default function parsePLY(data) {
2
+ export function parsePLY(data) {
6
3
  let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7
4
  let header;
8
5
  let attributes;
@@ -16,7 +13,6 @@ export default function parsePLY(data) {
16
13
  }
17
14
  return normalizePLY(header, attributes);
18
15
  }
19
-
20
16
  function parseHeader(data, options) {
21
17
  const PLY_HEADER_PATTERN = /ply([\s\S]*)end_header\s/;
22
18
  let headerText = '';
@@ -30,7 +26,6 @@ function parseHeader(data, options) {
30
26
  const header = parseHeaderLines(lines, headerLength, options);
31
27
  return header;
32
28
  }
33
-
34
29
  function parseHeaderLines(lines, headerLength, options) {
35
30
  const header = {
36
31
  comments: [],
@@ -68,38 +63,73 @@ function parseHeaderLines(lines, headerLength, options) {
68
63
  };
69
64
  break;
70
65
  case 'property':
71
- if (!currentElement) {
72
- break;
66
+ if (currentElement) {
67
+ const property = makePLYElementProperty(lineValues);
68
+ if (options !== null && options !== void 0 && options.propertyNameMapping && property.name in (options === null || options === void 0 ? void 0 : options.propertyNameMapping)) {
69
+ property.name = options === null || options === void 0 ? void 0 : options.propertyNameMapping[property.name];
70
+ }
71
+ currentElement.properties.push(property);
73
72
  }
74
- currentElement.properties.push(makePLYElementProperty(lineValues, options.propertyNameMapping));
75
73
  break;
76
74
  default:
77
75
  console.log('unhandled', lineType, lineValues);
78
76
  }
79
77
  }
80
- if (currentElement !== undefined) {
78
+ if (currentElement) {
81
79
  header.elements.push(currentElement);
82
80
  }
83
81
  return header;
84
82
  }
85
-
86
- function makePLYElementProperty(propertValues, propertyNameMapping) {
87
- const property = {
88
- type: propertValues[0]
83
+ function getPLYAttributes(header) {
84
+ const attributes = {
85
+ indices: [],
86
+ vertices: [],
87
+ normals: [],
88
+ uvs: [],
89
+ colors: []
89
90
  };
90
- if (property.type === 'list') {
91
- property.name = propertValues[3];
92
- property.countType = propertValues[1];
93
- property.itemType = propertValues[2];
94
- } else {
95
- property.name = propertValues[1];
91
+ for (const element of header.elements) {
92
+ if (element.name === 'vertex') {
93
+ for (const property of element.properties) {
94
+ switch (property.name) {
95
+ case 'x':
96
+ case 'y':
97
+ case 'z':
98
+ case 'nx':
99
+ case 'ny':
100
+ case 'nz':
101
+ case 's':
102
+ case 't':
103
+ case 'red':
104
+ case 'green':
105
+ case 'blue':
106
+ break;
107
+ default:
108
+ attributes[property.name] = [];
109
+ break;
110
+ }
111
+ }
112
+ }
96
113
  }
97
- if (propertyNameMapping && property.name in propertyNameMapping) {
98
- property.name = propertyNameMapping[property.name];
114
+ return attributes;
115
+ }
116
+ function makePLYElementProperty(propertyValues) {
117
+ const type = propertyValues[0];
118
+ switch (type) {
119
+ case 'list':
120
+ return {
121
+ type,
122
+ name: propertyValues[3],
123
+ countType: propertyValues[1],
124
+ itemType: propertyValues[2]
125
+ };
126
+ default:
127
+ return {
128
+ type,
129
+ name: propertyValues[1]
130
+ };
99
131
  }
100
- return property;
101
132
  }
102
-
103
133
  function parseASCIINumber(n, type) {
104
134
  switch (type) {
105
135
  case 'char':
@@ -124,8 +154,7 @@ function parseASCIINumber(n, type) {
124
154
  throw new Error(type);
125
155
  }
126
156
  }
127
-
128
- function parseASCIIElement(properties, line) {
157
+ function parsePLYElement(properties, line) {
129
158
  const values = line.split(/\s+/);
130
159
  const element = {};
131
160
  for (let i = 0; i < properties.length; i++) {
@@ -142,16 +171,8 @@ function parseASCIIElement(properties, line) {
142
171
  }
143
172
  return element;
144
173
  }
145
-
146
174
  function parseASCII(data, header) {
147
-
148
- const attributes = {
149
- indices: [],
150
- vertices: [],
151
- normals: [],
152
- uvs: [],
153
- colors: []
154
- };
175
+ const attributes = getPLYAttributes(header);
155
176
  let result;
156
177
  const patternBody = /end_header\s([\s\S]*)$/;
157
178
  let body = '';
@@ -169,30 +190,53 @@ function parseASCII(data, header) {
169
190
  currentElement++;
170
191
  currentElementCount = 0;
171
192
  }
172
- const element = parseASCIIElement(header.elements[currentElement].properties, line);
193
+ const element = parsePLYElement(header.elements[currentElement].properties, line);
173
194
  handleElement(attributes, header.elements[currentElement].name, element);
174
195
  currentElementCount++;
175
196
  }
176
197
  }
177
198
  return attributes;
178
199
  }
179
-
180
200
  function handleElement(buffer, elementName) {
181
201
  let element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
182
202
  if (elementName === 'vertex') {
183
- buffer.vertices.push(element.x, element.y, element.z);
184
- if ('nx' in element && 'ny' in element && 'nz' in element) {
185
- buffer.normals.push(element.nx, element.ny, element.nz);
186
- }
187
- if ('s' in element && 't' in element) {
188
- buffer.uvs.push(element.s, element.t);
189
- }
190
- if ('red' in element && 'green' in element && 'blue' in element) {
191
- buffer.colors.push(element.red, element.green, element.blue);
203
+ for (const propertyName of Object.keys(element)) {
204
+ switch (propertyName) {
205
+ case 'x':
206
+ buffer.vertices.push(element.x, element.y, element.z);
207
+ break;
208
+ case 'y':
209
+ case 'z':
210
+ break;
211
+ case 'nx':
212
+ if ('nx' in element && 'ny' in element && 'nz' in element) {
213
+ buffer.normals.push(element.nx, element.ny, element.nz);
214
+ }
215
+ break;
216
+ case 'ny':
217
+ case 'nz':
218
+ break;
219
+ case 's':
220
+ if ('s' in element && 't' in element) {
221
+ buffer.uvs.push(element.s, element.t);
222
+ }
223
+ break;
224
+ case 't':
225
+ break;
226
+ case 'red':
227
+ if ('red' in element && 'green' in element && 'blue' in element) {
228
+ buffer.colors.push(element.red, element.green, element.blue);
229
+ }
230
+ break;
231
+ case 'green':
232
+ case 'blue':
233
+ break;
234
+ default:
235
+ buffer[propertyName].push(element[propertyName]);
236
+ }
192
237
  }
193
238
  } else if (elementName === 'face') {
194
239
  const vertexIndices = element.vertex_indices || element.vertex_index;
195
-
196
240
  if (vertexIndices.length === 3) {
197
241
  buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);
198
242
  } else if (vertexIndices.length === 4) {
@@ -201,7 +245,6 @@ function handleElement(buffer, elementName) {
201
245
  }
202
246
  }
203
247
  }
204
-
205
248
  function binaryRead(dataview, at, type, littleEndian) {
206
249
  switch (type) {
207
250
  case 'int8':
@@ -232,7 +275,6 @@ function binaryRead(dataview, at, type, littleEndian) {
232
275
  throw new Error(type);
233
276
  }
234
277
  }
235
-
236
278
  function binaryReadElement(dataview, at, properties, littleEndian) {
237
279
  const element = {};
238
280
  let result;
@@ -258,13 +300,7 @@ function binaryReadElement(dataview, at, properties, littleEndian) {
258
300
  return [element, read];
259
301
  }
260
302
  function parseBinary(data, header) {
261
- const attributes = {
262
- indices: [],
263
- vertices: [],
264
- normals: [],
265
- uvs: [],
266
- colors: []
267
- };
303
+ const attributes = getPLYAttributes(header);
268
304
  const littleEndian = header.format === 'binary_little_endian';
269
305
  const body = new DataView(data, header.headerLength);
270
306
  let result;
@@ -1 +1 @@
1
- {"version":3,"file":"parse-ply.js","names":["normalizePLY","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"],"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","parsePLY","data","options","arguments","length","undefined","header","attributes","ArrayBuffer","text","TextDecoder","decode","parseHeader","format","parseASCII","parseBinary","PLY_HEADER_PATTERN","headerText","headerLength","result","exec","lines","split","parseHeaderLines","comments","elements","lineType","lineValues","currentElement","i","line","trim","shift","join","version","push","name","count","parseInt","properties","property","makePLYElementProperty","propertyNameMapping","console","log","getPLYAttributes","indices","vertices","normals","uvs","colors","element","propertyValues","type","countType","itemType","parseASCIINumber","n","parseFloat","Error","parsePLYElement","values","list","j","patternBody","body","currentElementCount","handleElement","buffer","elementName","propertyName","Object","keys","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 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":"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"}
@@ -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":""}
@@ -1,7 +1,4 @@
1
-
2
-
3
- const VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
4
-
1
+ const VERSION = typeof "3.4.0-alpha.3" !== 'undefined' ? "3.4.0-alpha.3" : 'latest';
5
2
  export const PLYLoader = {
6
3
  name: 'PLY',
7
4
  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,MAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;;AAO3E,OAAO,MAAMC,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;AAED,OAAO,MAAMC,mBAA2B,GAAGd,SAAS"}
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,MAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAO3E,OAAO,MAAMC,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;AAED,OAAO,MAAMC,mBAA2B,GAAGd,SAAS"}
package/dist/index.d.ts CHANGED
@@ -1,16 +1,14 @@
1
1
  import type { LoaderWithParser } from '@loaders.gl/loader-utils';
2
2
  import { PLYLoader as PLYWorkerLoader } from './ply-loader';
3
- import parsePLY from './lib/parse-ply';
4
- import parsePLYInBatches from './lib/parse-ply-in-batches';
5
3
  export { PLYWorkerLoader };
6
4
  /**
7
5
  * Loader for PLY - Polygon File Format
8
6
  */
9
7
  export declare const PLYLoader: {
10
8
  parse: (arrayBuffer: any, options: any) => Promise<import("./lib/ply-types").PLYMesh>;
11
- parseTextSync: typeof parsePLY;
12
- parseSync: typeof parsePLY;
13
- parseInBatches: typeof parsePLYInBatches;
9
+ parseTextSync: (arrayBuffer: any, options: any) => import("./lib/ply-types").PLYMesh;
10
+ parseSync: (arrayBuffer: any, options: any) => import("./lib/ply-types").PLYMesh;
11
+ parseInBatches: (arrayBuffer: any, options: any) => AsyncIterable<import("./lib/ply-types").PLYMesh>;
14
12
  name: string;
15
13
  id: string;
16
14
  module: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAC,SAAS,IAAI,eAAe,EAAC,MAAM,cAAc,CAAC;AAC1D,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,iBAAiB,MAAM,4BAA4B,CAAC;AAI3D,OAAO,EAAC,eAAe,EAAC,CAAC;AAEzB;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;CAOrB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,gBAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAC,SAAS,IAAI,eAAe,EAAC,MAAM,cAAc,CAAC;AAM1D,OAAO,EAAC,eAAe,EAAC,CAAC;AAEzB;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;CAOrB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,gBAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -1,22 +1,19 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports._typecheckPLYLoader = exports.PLYLoader = exports.PLYWorkerLoader = void 0;
7
4
  const ply_loader_1 = require("./ply-loader");
8
5
  Object.defineProperty(exports, "PLYWorkerLoader", { enumerable: true, get: function () { return ply_loader_1.PLYLoader; } });
9
- const parse_ply_1 = __importDefault(require("./lib/parse-ply"));
10
- const parse_ply_in_batches_1 = __importDefault(require("./lib/parse-ply-in-batches"));
6
+ const parse_ply_1 = require("./lib/parse-ply");
7
+ const parse_ply_in_batches_1 = require("./lib/parse-ply-in-batches");
11
8
  /**
12
9
  * Loader for PLY - Polygon File Format
13
10
  */
14
11
  exports.PLYLoader = {
15
12
  ...ply_loader_1.PLYLoader,
16
13
  // Note: parsePLY supports both text and binary
17
- parse: async (arrayBuffer, options) => (0, parse_ply_1.default)(arrayBuffer, options),
18
- parseTextSync: parse_ply_1.default,
19
- parseSync: parse_ply_1.default,
20
- parseInBatches: parse_ply_in_batches_1.default
14
+ parse: async (arrayBuffer, options) => (0, parse_ply_1.parsePLY)(arrayBuffer, options?.ply),
15
+ parseTextSync: (arrayBuffer, options) => (0, parse_ply_1.parsePLY)(arrayBuffer, options?.ply),
16
+ parseSync: (arrayBuffer, options) => (0, parse_ply_1.parsePLY)(arrayBuffer, options?.ply),
17
+ parseInBatches: (arrayBuffer, options) => (0, parse_ply_in_batches_1.parsePLYInBatches)(arrayBuffer, options?.ply)
21
18
  };
22
19
  exports._typecheckPLYLoader = exports.PLYLoader;