@loaders.gl/ply 4.0.0-alpha.4 → 4.0.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/dist.min.js +1241 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/lib/get-ply-schema.d.ts +10 -0
- package/dist/lib/get-ply-schema.d.ts.map +1 -0
- package/dist/lib/normalize-ply.d.ts +8 -0
- package/dist/lib/normalize-ply.d.ts.map +1 -0
- package/dist/lib/parse-ply-in-batches.d.ts +8 -0
- package/dist/lib/parse-ply-in-batches.d.ts.map +1 -0
- package/dist/lib/parse-ply-in-batches.js +1 -1
- package/dist/lib/parse-ply-in-batches.js.map +1 -1
- package/dist/lib/parse-ply.d.ts +8 -0
- package/dist/lib/parse-ply.d.ts.map +1 -0
- package/dist/lib/ply-types.d.ts +29 -0
- package/dist/lib/ply-types.d.ts.map +1 -0
- package/dist/ply-loader.d.ts +24 -0
- package/dist/ply-loader.d.ts.map +1 -0
- package/dist/ply-loader.js +1 -1
- package/dist/ply-worker.js +1 -1
- package/dist/workers/ply-worker.d.ts +2 -0
- package/dist/workers/ply-worker.d.ts.map +1 -0
- package/package.json +7 -10
- package/src/lib/parse-ply-in-batches.ts +3 -4
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { LoaderWithParser } from '@loaders.gl/loader-utils';
|
|
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
|
+
export { PLYWorkerLoader };
|
|
6
|
+
/**
|
|
7
|
+
* Loader for PLY - Polygon File Format
|
|
8
|
+
*/
|
|
9
|
+
export declare const PLYLoader: {
|
|
10
|
+
parse: (arrayBuffer: any, options: any) => Promise<import("./lib/ply-types").PLYMesh>;
|
|
11
|
+
parseTextSync: typeof parsePLY;
|
|
12
|
+
parseSync: typeof parsePLY;
|
|
13
|
+
parseInBatches: typeof parsePLYInBatches;
|
|
14
|
+
name: string;
|
|
15
|
+
id: string;
|
|
16
|
+
module: string;
|
|
17
|
+
shapes: string[];
|
|
18
|
+
version: any;
|
|
19
|
+
worker: boolean;
|
|
20
|
+
extensions: string[];
|
|
21
|
+
mimeTypes: string[];
|
|
22
|
+
text: boolean;
|
|
23
|
+
binary: boolean;
|
|
24
|
+
tests: string[];
|
|
25
|
+
options: {
|
|
26
|
+
ply: {};
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export declare const _typecheckPLYLoader: LoaderWithParser;
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Schema, MeshAttributes } from '@loaders.gl/schema';
|
|
2
|
+
import type { PLYHeader } from './ply-types';
|
|
3
|
+
/**
|
|
4
|
+
* Gets schema from PLY header
|
|
5
|
+
* @param plyHeader
|
|
6
|
+
* @param metadata
|
|
7
|
+
* @returns Schema
|
|
8
|
+
*/
|
|
9
|
+
export declare function getPLYSchema(plyHeader: PLYHeader, attributes: MeshAttributes): Schema;
|
|
10
|
+
//# sourceMappingURL=get-ply-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-ply-schema.d.ts","sourceRoot":"","sources":["../../src/lib/get-ply-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,cAAc,EAAmB,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAE3C;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,GAAG,MAAM,CAIrF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PLYMesh, PLYHeader, PLYAttributes, MeshHeader } from './ply-types';
|
|
2
|
+
/**
|
|
3
|
+
* @param header
|
|
4
|
+
* @param attributes
|
|
5
|
+
* @returns data and header
|
|
6
|
+
*/
|
|
7
|
+
export default function normalizePLY(plyHeader: MeshHeader & PLYHeader, plyAttributes: PLYAttributes, options?: {}): PLYMesh;
|
|
8
|
+
//# sourceMappingURL=normalize-ply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-ply.d.ts","sourceRoot":"","sources":["../../src/lib/normalize-ply.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAC,MAAM,aAAa,CAAC;AAG/E;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,SAAS,EAAE,UAAU,GAAG,SAAS,EACjC,aAAa,EAAE,aAAa,EAC5B,OAAO,CAAC,EAAE,EAAE,GACX,OAAO,CAgCT"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PLYMesh } from './ply-types';
|
|
2
|
+
/**
|
|
3
|
+
* PARSER
|
|
4
|
+
* @param iterator
|
|
5
|
+
* @param options
|
|
6
|
+
*/
|
|
7
|
+
export default function parsePLYInBatches(iterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>, options: any): AsyncIterable<PLYMesh>;
|
|
8
|
+
//# sourceMappingURL=parse-ply-in-batches.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-ply-in-batches.d.ts","sourceRoot":"","sources":["../../src/lib/parse-ply-in-batches.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAC,OAAO,EAAyC,MAAM,aAAa,CAAC;AAI5E;;;;GAIG;AACH,wBAA+B,iBAAiB,CAC9C,QAAQ,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,EAC5D,OAAO,EAAE,GAAG,GACX,aAAa,CAAC,OAAO,CAAC,CAexB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { makeLineIterator, makeTextDecoderIterator, forEach } from '@loaders.gl/
|
|
1
|
+
import { makeLineIterator, makeTextDecoderIterator, forEach } from '@loaders.gl/loader-utils';
|
|
2
2
|
import normalizePLY from './normalize-ply';
|
|
3
3
|
let currentElement;
|
|
4
4
|
export default async function* parsePLYInBatches(iterator, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/parse-ply-in-batches.ts"],"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"],"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":["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"],"mappings":"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","sourcesContent":["// PLY Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author Wei Meng / http://about.me/menway\n//\n// Description: A loader for PLY ASCII files (known as the Polygon File Format\n// or the Stanford Triangle Format).\n//\n// Limitations: ASCII decoding assumes file is UTF-8.\n//\n// If the PLY file uses non standard property names, they can be mapped while\n// loading. For example, the following maps the properties\n// “diffuse_(red|green|blue)” in the file to standard color names.\n//\n// parsePLY(data, {\n// propertyNameMapping: {\n// diffuse_red: 'red',\n// diffuse_green: 'green',\n// diffuse_blue: 'blue'\n// }\n// });\n\nimport {makeLineIterator, makeTextDecoderIterator, forEach} from '@loaders.gl/loader-utils';\nimport normalizePLY from './normalize-ply';\nimport {PLYMesh, PLYHeader, ASCIIElement, PLYAttributes} from './ply-types';\n\nlet currentElement: ASCIIElement;\n\n/**\n * PARSER\n * @param iterator\n * @param options\n */\nexport default async function* parsePLYInBatches(\n iterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: any\n): AsyncIterable<PLYMesh> {\n const lineIterator = makeLineIterator(makeTextDecoderIterator(iterator));\n const header = await parsePLYHeader(lineIterator, options);\n\n let attributes: PLYAttributes;\n switch (header.format) {\n case 'ascii':\n attributes = await parseASCII(lineIterator, header);\n break;\n default:\n throw new Error('Binary PLY can not yet be parsed in streaming mode');\n // attributes = await parseBinary(lineIterator, header);\n }\n\n yield normalizePLY(header, attributes, options);\n}\n\n/**\n * Parses header\n * @param lineIterator\n * @param options\n * @returns\n */\nasync function parsePLYHeader(\n lineIterator: AsyncIterable<string> | Iterable<string>,\n options: {[key: string]: any}\n): Promise<PLYHeader> {\n const header: PLYHeader = {\n comments: [],\n elements: []\n // headerLength\n };\n\n // Note: forEach does not reset iterator if exiting loop prematurely\n // so that iteration can continue in a second loop\n await forEach(lineIterator, (line: string) => {\n line = line.trim();\n\n // End of header\n if (line === 'end_header') {\n return true; // Returning true cancels `forEach`\n }\n\n // Ignore empty lines\n if (line === '') {\n // eslint-disable-next-line\n return false; // Returning false does not cancel `forEach`\n }\n\n const lineValues = line.split(/\\s+/);\n const lineType = lineValues.shift();\n line = lineValues.join(' ');\n\n switch (lineType) {\n case 'ply':\n // First line magic characters, ignore\n break;\n\n case 'format':\n header.format = lineValues[0];\n header.version = lineValues[1];\n break;\n\n case 'comment':\n header.comments.push(line);\n break;\n\n case 'element':\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n currentElement = {\n name: lineValues[0],\n count: parseInt(lineValues[1], 10),\n properties: []\n };\n break;\n\n case 'property':\n const property = makePLYElementProperty(lineValues, options.propertyNameMapping);\n currentElement.properties.push(property);\n break;\n\n default:\n // eslint-disable-next-line\n console.log('unhandled', lineType, lineValues);\n }\n\n return false;\n });\n\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n return header;\n}\n\nfunction makePLYElementProperty(propertValues: string[], propertyNameMapping: []) {\n const property: {[index: string]: string} = {\n type: propertValues[0]\n };\n\n if (property.type === 'list') {\n property.name = propertValues[3];\n property.countType = propertValues[1];\n property.itemType = propertValues[2];\n } else {\n property.name = propertValues[1];\n }\n\n if (propertyNameMapping && property.name in propertyNameMapping) {\n property.name = propertyNameMapping[property.name];\n }\n\n return property;\n}\n\n// ASCII PARSING\n/**\n * @param lineIterator\n * @param header\n * @returns\n */\nasync function parseASCII(lineIterator: AsyncIterable<string>, header: PLYHeader) {\n // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n const attributes: PLYAttributes = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n colors: []\n };\n\n let currentElement = 0;\n let currentElementCount = 0;\n\n for await (let line of lineIterator) {\n line = line.trim();\n\n if (line !== '') {\n if (currentElementCount >= header.elements[currentElement].count) {\n currentElement++;\n currentElementCount = 0;\n }\n\n const element = parseASCIIElement(header.elements[currentElement].properties, line);\n handleElement(attributes, header.elements[currentElement].name, element);\n currentElementCount++;\n }\n }\n\n return attributes;\n}\n/**\n * Parses ASCII number\n * @param n\n * @param type\n * @returns ASCII number\n */\n// eslint-disable-next-line complexity\nfunction parseASCIINumber(n: string, type: string): number {\n switch (type) {\n case 'char':\n case 'uchar':\n case 'short':\n case 'ushort':\n case 'int':\n case 'uint':\n case 'int8':\n case 'uint8':\n case 'int16':\n case 'uint16':\n case 'int32':\n case 'uint32':\n return parseInt(n, 10);\n\n case 'float':\n case 'double':\n case 'float32':\n case 'float64':\n return parseFloat(n);\n\n default:\n throw new Error(type);\n }\n}\n/**\n * Parses ASCII element\n * @param properties\n * @param line\n * @returns element\n */\nfunction parseASCIIElement(properties: any[], line: string) {\n const values: any = line.split(/\\s+/);\n\n const element = {};\n\n for (let i = 0; i < properties.length; i++) {\n if (properties[i].type === 'list') {\n const list: any = [];\n const n = parseASCIINumber(values.shift(), properties[i].countType);\n\n for (let j = 0; j < n; j++) {\n list.push(parseASCIINumber(values.shift(), properties[i].itemType));\n }\n\n element[properties[i].name] = list;\n } else {\n element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);\n }\n }\n\n return element;\n}\n/**\n * @param buffer\n * @param elementName\n * @param element\n */\n// HELPER FUNCTIONS\n// eslint-disable-next-line complexity\nfunction handleElement(\n buffer: {[index: string]: number[]},\n elementName: string,\n element: any = {}\n) {\n switch (elementName) {\n case 'vertex':\n buffer.vertices.push(element.x, element.y, element.z);\n if ('nx' in element && 'ny' in element && 'nz' in element) {\n buffer.normals.push(element.nx, element.ny, element.nz);\n }\n if ('s' in element && 't' in element) {\n buffer.uvs.push(element.s, element.t);\n }\n if ('red' in element && 'green' in element && 'blue' in element) {\n buffer.colors.push(element.red / 255.0, element.green / 255.0, element.blue / 255.0);\n }\n break;\n\n case 'face':\n const vertexIndices = element.vertex_indices || element.vertex_index; // issue #9338\n if (vertexIndices.length === 3) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);\n } else if (vertexIndices.length === 4) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);\n buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);\n }\n break;\n\n default:\n break;\n }\n}\n"],"file":"parse-ply-in-batches.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-ply.d.ts","sourceRoot":"","sources":["../../src/lib/parse-ply.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,OAAO,EAMR,MAAM,aAAa,CAAC;AAGrB;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,OAAO,KAAK,GAAG,OAAO,CAclF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Mesh } from '@loaders.gl/schema';
|
|
2
|
+
export declare type PLYHeader = {
|
|
3
|
+
format?: string;
|
|
4
|
+
comments: string[];
|
|
5
|
+
elements: any[];
|
|
6
|
+
version?: string;
|
|
7
|
+
headerLength?: number;
|
|
8
|
+
};
|
|
9
|
+
/** A parsed PLY mesh */
|
|
10
|
+
export declare type PLYMesh = Mesh & {
|
|
11
|
+
loader: 'ply';
|
|
12
|
+
loaderData: PLYHeader;
|
|
13
|
+
};
|
|
14
|
+
export declare type MeshHeader = {
|
|
15
|
+
vertexCount?: number;
|
|
16
|
+
boundingBox?: [[number, number, number], [number, number, number]];
|
|
17
|
+
};
|
|
18
|
+
export declare type PLYAttributes = {
|
|
19
|
+
[index: string]: number[];
|
|
20
|
+
};
|
|
21
|
+
export declare type PLYProperty = {
|
|
22
|
+
[index: string]: string;
|
|
23
|
+
};
|
|
24
|
+
export declare type ASCIIElement = {
|
|
25
|
+
name: string;
|
|
26
|
+
count: number;
|
|
27
|
+
properties: any[];
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=ply-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ply-types.d.ts","sourceRoot":"","sources":["../../src/lib/ply-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAC;AAE7C,oBAAY,SAAS,GAAG;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAwB;AACxB,oBAAY,OAAO,GAAG,IAAI,GAAG;IAC3B,MAAM,EAAE,KAAK,CAAC;IACd,UAAU,EAAE,SAAS,CAAC;CACvB,CAAC;AAIF,oBAAY,UAAU,GAAG;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpE,CAAC;AAEF,oBAAY,aAAa,GAAG;IAC1B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,oBAAY,WAAW,GAAG;IACxB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB,CAAC;AAEF,oBAAY,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,GAAG,EAAE,CAAC;CACnB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Loader } from '@loaders.gl/loader-utils';
|
|
2
|
+
/**
|
|
3
|
+
* Worker loader for PLY - Polygon File Format (aka Stanford Triangle Format)'
|
|
4
|
+
* links: ['http://paulbourke.net/dataformats/ply/',
|
|
5
|
+
* 'https://en.wikipedia.org/wiki/PLY_(file_format)']
|
|
6
|
+
*/
|
|
7
|
+
export declare const PLYLoader: {
|
|
8
|
+
name: string;
|
|
9
|
+
id: string;
|
|
10
|
+
module: string;
|
|
11
|
+
shapes: string[];
|
|
12
|
+
version: any;
|
|
13
|
+
worker: boolean;
|
|
14
|
+
extensions: string[];
|
|
15
|
+
mimeTypes: string[];
|
|
16
|
+
text: boolean;
|
|
17
|
+
binary: boolean;
|
|
18
|
+
tests: string[];
|
|
19
|
+
options: {
|
|
20
|
+
ply: {};
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export declare const _typecheckPLYLoader: Loader;
|
|
24
|
+
//# sourceMappingURL=ply-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ply-loader.d.ts","sourceRoot":"","sources":["../src/ply-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAC;AAMrD;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;CAerB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAkB,CAAC"}
|
package/dist/ply-loader.js
CHANGED
package/dist/ply-worker.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ply-worker.d.ts","sourceRoot":"","sources":["../../src/workers/ply-worker.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/ply",
|
|
3
|
-
"version": "4.0.0-alpha.
|
|
3
|
+
"version": "4.0.0-alpha.5",
|
|
4
4
|
"description": "Framework-independent loader for the PLY format",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"point cloud",
|
|
19
19
|
"PLY"
|
|
20
20
|
],
|
|
21
|
-
"types": "
|
|
21
|
+
"types": "dist/index.d.ts",
|
|
22
22
|
"main": "dist/index.js",
|
|
23
23
|
"module": "dist/index.js",
|
|
24
24
|
"sideEffects": false,
|
|
@@ -29,16 +29,13 @@
|
|
|
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/
|
|
33
|
-
"build-worker": "esbuild src/workers/ply-worker.ts --bundle --outfile=dist/ply-worker.js"
|
|
32
|
+
"build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/dist.min.js",
|
|
33
|
+
"build-worker": "esbuild src/workers/ply-worker.ts --bundle --outfile=dist/ply-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@babel/runtime": "^7.3.1",
|
|
37
|
-
"@loaders.gl/loader-utils": "4.0.0-alpha.
|
|
38
|
-
"@loaders.gl/schema": "4.0.0-alpha.
|
|
37
|
+
"@loaders.gl/loader-utils": "4.0.0-alpha.5",
|
|
38
|
+
"@loaders.gl/schema": "4.0.0-alpha.5"
|
|
39
39
|
},
|
|
40
|
-
"
|
|
41
|
-
"@loaders.gl/core": "^3.0.0"
|
|
42
|
-
},
|
|
43
|
-
"gitHead": "53026061b3c8871f7e96d3a5826125cc6613bddc"
|
|
40
|
+
"gitHead": "7a71a54bdf1ddf985cc3af3db90b82e7fa97d025"
|
|
44
41
|
}
|
|
@@ -20,9 +20,8 @@
|
|
|
20
20
|
// diffuse_blue: 'blue'
|
|
21
21
|
// }
|
|
22
22
|
// });
|
|
23
|
-
// @ts-nocheck
|
|
24
23
|
|
|
25
|
-
import {makeLineIterator, makeTextDecoderIterator, forEach} from '@loaders.gl/
|
|
24
|
+
import {makeLineIterator, makeTextDecoderIterator, forEach} from '@loaders.gl/loader-utils';
|
|
26
25
|
import normalizePLY from './normalize-ply';
|
|
27
26
|
import {PLYMesh, PLYHeader, ASCIIElement, PLYAttributes} from './ply-types';
|
|
28
27
|
|
|
@@ -60,7 +59,7 @@ export default async function* parsePLYInBatches(
|
|
|
60
59
|
* @returns
|
|
61
60
|
*/
|
|
62
61
|
async function parsePLYHeader(
|
|
63
|
-
lineIterator: AsyncIterable<
|
|
62
|
+
lineIterator: AsyncIterable<string> | Iterable<string>,
|
|
64
63
|
options: {[key: string]: any}
|
|
65
64
|
): Promise<PLYHeader> {
|
|
66
65
|
const header: PLYHeader = {
|
|
@@ -161,7 +160,7 @@ function makePLYElementProperty(propertValues: string[], propertyNameMapping: []
|
|
|
161
160
|
* @param header
|
|
162
161
|
* @returns
|
|
163
162
|
*/
|
|
164
|
-
async function parseASCII(lineIterator: string
|
|
163
|
+
async function parseASCII(lineIterator: AsyncIterable<string>, header: PLYHeader) {
|
|
165
164
|
// PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)
|
|
166
165
|
const attributes: PLYAttributes = {
|
|
167
166
|
indices: [],
|