@loaders.gl/ply 4.0.0-beta.2 → 4.0.0-beta.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.
- package/dist/{dist.min.js → dist.dev.js} +106 -134
- package/dist/index.cjs +644 -0
- package/dist/{esm/index.js → index.js} +3 -3
- package/dist/index.js.map +1 -0
- package/dist/lib/get-ply-schema.js.map +1 -0
- package/dist/{esm/lib → lib}/normalize-ply.js +1 -1
- package/dist/lib/normalize-ply.js.map +1 -0
- package/dist/{esm/lib → lib}/parse-ply-in-batches.js +1 -1
- package/dist/lib/parse-ply-in-batches.js.map +1 -0
- package/dist/{esm/lib → lib}/parse-ply.js +1 -1
- package/dist/lib/parse-ply.js.map +1 -0
- package/dist/lib/ply-types.js.map +1 -0
- package/dist/{esm/ply-loader.js → ply-loader.js} +1 -1
- package/dist/ply-loader.js.map +1 -0
- package/dist/ply-worker.js +24 -4
- package/dist/{esm/workers → workers}/ply-worker.js +1 -1
- package/dist/workers/ply-worker.js.map +1 -0
- package/package.json +16 -8
- package/dist/bundle.d.ts +0 -2
- package/dist/bundle.d.ts.map +0 -1
- package/dist/es5/bundle.js +0 -6
- package/dist/es5/bundle.js.map +0 -1
- package/dist/es5/index.js +0 -51
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/lib/get-ply-schema.js +0 -28
- package/dist/es5/lib/get-ply-schema.js.map +0 -1
- package/dist/es5/lib/normalize-ply.js +0 -93
- package/dist/es5/lib/normalize-ply.js.map +0 -1
- package/dist/es5/lib/parse-ply-in-batches.js +0 -289
- package/dist/es5/lib/parse-ply-in-batches.js.map +0 -1
- package/dist/es5/lib/parse-ply.js +0 -348
- package/dist/es5/lib/parse-ply.js.map +0 -1
- package/dist/es5/lib/ply-types.js +0 -2
- package/dist/es5/lib/ply-types.js.map +0 -1
- package/dist/es5/ply-loader.js +0 -24
- package/dist/es5/ply-loader.js.map +0 -1
- package/dist/es5/workers/ply-worker.js +0 -6
- package/dist/es5/workers/ply-worker.js.map +0 -1
- package/dist/esm/bundle.js +0 -4
- package/dist/esm/bundle.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/lib/get-ply-schema.js.map +0 -1
- package/dist/esm/lib/normalize-ply.js.map +0 -1
- package/dist/esm/lib/parse-ply-in-batches.js.map +0 -1
- package/dist/esm/lib/parse-ply.js.map +0 -1
- package/dist/esm/lib/ply-types.js.map +0 -1
- package/dist/esm/ply-loader.js.map +0 -1
- package/dist/esm/workers/ply-worker.js.map +0 -1
- package/src/bundle.ts +0 -4
- /package/dist/{esm/lib → lib}/get-ply-schema.js +0 -0
- /package/dist/{esm/lib → lib}/ply-types.js +0 -0
|
@@ -0,0 +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","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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"}
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
|
@@ -0,0 +1 @@
|
|
|
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":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ply-loader.js","names":["VERSION","__VERSION__","PLYLoader","name","id","module","version","worker","extensions","mimeTypes","text","binary","tests","options","ply"],"sources":["../src/ply-loader.ts"],"sourcesContent":["// PLY Loader\nimport type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {PLYMesh} from './lib/ply-types';\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: Loader<PLYMesh, never, LoaderOptions> = {\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"],"mappings":"AAMA,MAAMA,OAAO,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAGA,WAAW,GAAG,QAAQ;AAO3E,OAAO,MAAMC,SAAgD,GAAG;EAC9DC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EAEbC,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"}
|
package/dist/ply-worker.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
(() => {
|
|
2
3
|
// ../worker-utils/src/lib/worker-utils/get-transfer-list.ts
|
|
3
4
|
function getTransferList(object, recursive = true, transfers) {
|
|
4
|
-
const transfersSet = transfers || new Set();
|
|
5
|
+
const transfersSet = transfers || /* @__PURE__ */ new Set();
|
|
5
6
|
if (!object) {
|
|
6
7
|
} else if (isTransferable(object)) {
|
|
7
8
|
transfersSet.add(object);
|
|
@@ -44,11 +45,15 @@
|
|
|
44
45
|
}
|
|
45
46
|
return parentPort;
|
|
46
47
|
}
|
|
47
|
-
var onMessageWrapperMap = new Map();
|
|
48
|
+
var onMessageWrapperMap = /* @__PURE__ */ new Map();
|
|
48
49
|
var WorkerBody = class {
|
|
50
|
+
/** Check that we are actually in a worker thread */
|
|
49
51
|
static inWorkerThread() {
|
|
50
52
|
return typeof self !== "undefined" || Boolean(getParentPort());
|
|
51
53
|
}
|
|
54
|
+
/*
|
|
55
|
+
* (type: WorkerMessageType, payload: WorkerMessagePayload) => any
|
|
56
|
+
*/
|
|
52
57
|
static set onmessage(onMessage) {
|
|
53
58
|
function handleMessage(message) {
|
|
54
59
|
const parentPort3 = getParentPort();
|
|
@@ -92,6 +97,11 @@
|
|
|
92
97
|
globalThis.removeEventListener("message", onMessageWrapper);
|
|
93
98
|
}
|
|
94
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Send a message from a worker to creating thread (main thread)
|
|
102
|
+
* @param type
|
|
103
|
+
* @param payload
|
|
104
|
+
*/
|
|
95
105
|
static postMessage(type, payload) {
|
|
96
106
|
const data = { source: "loaders.gl", type, payload };
|
|
97
107
|
const transferList = getTransferList(payload);
|
|
@@ -123,6 +133,7 @@
|
|
|
123
133
|
loader,
|
|
124
134
|
arrayBuffer: input,
|
|
125
135
|
options,
|
|
136
|
+
// @ts-expect-error fetch missing
|
|
126
137
|
context: {
|
|
127
138
|
...context,
|
|
128
139
|
_parse: parseOnMainThread
|
|
@@ -227,11 +238,12 @@
|
|
|
227
238
|
}
|
|
228
239
|
|
|
229
240
|
// src/ply-loader.ts
|
|
230
|
-
var VERSION = true ? "4.0.0-beta.
|
|
241
|
+
var VERSION = true ? "4.0.0-beta.3" : "latest";
|
|
231
242
|
var PLYLoader = {
|
|
232
243
|
name: "PLY",
|
|
233
244
|
id: "ply",
|
|
234
245
|
module: "ply",
|
|
246
|
+
// shapes: ['mesh', 'gltf', 'columnar-table'],
|
|
235
247
|
version: VERSION,
|
|
236
248
|
worker: true,
|
|
237
249
|
extensions: ["ply"],
|
|
@@ -726,7 +738,12 @@
|
|
|
726
738
|
for (let currentElement2 = 0; currentElement2 < header.elements.length; currentElement2++) {
|
|
727
739
|
const count = header.elements[currentElement2].count;
|
|
728
740
|
for (let currentElementCount = 0; currentElementCount < count; currentElementCount++) {
|
|
729
|
-
result = binaryReadElement(
|
|
741
|
+
result = binaryReadElement(
|
|
742
|
+
body,
|
|
743
|
+
loc,
|
|
744
|
+
header.elements[currentElement2].properties,
|
|
745
|
+
littleEndian
|
|
746
|
+
);
|
|
730
747
|
loc += result[1];
|
|
731
748
|
const element = result[0];
|
|
732
749
|
handleElement(attributes, header.elements[currentElement2].name, element);
|
|
@@ -754,6 +771,7 @@
|
|
|
754
771
|
const header = {
|
|
755
772
|
comments: [],
|
|
756
773
|
elements: []
|
|
774
|
+
// headerLength
|
|
757
775
|
};
|
|
758
776
|
await forEach(lineIterator, (line) => {
|
|
759
777
|
line = line.trim();
|
|
@@ -913,7 +931,9 @@
|
|
|
913
931
|
// src/index.ts
|
|
914
932
|
var PLYLoader2 = {
|
|
915
933
|
...PLYLoader,
|
|
934
|
+
// Note: parsePLY supports both text and binary
|
|
916
935
|
parse: async (arrayBuffer, options) => parsePLY(arrayBuffer, options?.ply),
|
|
936
|
+
// TODO - this may not detect text correctly?
|
|
917
937
|
parseTextSync: (arrayBuffer, options) => parsePLY(arrayBuffer, options?.ply),
|
|
918
938
|
parseSync: (arrayBuffer, options) => parsePLY(arrayBuffer, options?.ply),
|
|
919
939
|
parseInBatches: (arrayBuffer, options) => parsePLYInBatches(arrayBuffer, options?.ply)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ply-worker.js","names":["createLoaderWorker","PLYLoader"],"sources":["../../src/workers/ply-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {PLYLoader} from '../index';\n\ncreateLoaderWorker(PLYLoader);\n"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,0BAA0B;AAAC,SACpDC,SAAS;AAEjBD,kBAAkB,CAACC,SAAS,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/ply",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.3",
|
|
4
4
|
"description": "Framework-independent loader for the PLY format",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
6
7
|
"publishConfig": {
|
|
7
8
|
"access": "public"
|
|
8
9
|
},
|
|
@@ -19,8 +20,15 @@
|
|
|
19
20
|
"PLY"
|
|
20
21
|
],
|
|
21
22
|
"types": "dist/index.d.ts",
|
|
22
|
-
"main": "dist/
|
|
23
|
-
"module": "dist/
|
|
23
|
+
"main": "dist/index.cjs",
|
|
24
|
+
"module": "dist/index.js",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"import": "./dist/index.js",
|
|
28
|
+
"require": "./dist/index.cjs",
|
|
29
|
+
"types": "./dist/index.d.ts"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
24
32
|
"sideEffects": false,
|
|
25
33
|
"files": [
|
|
26
34
|
"src",
|
|
@@ -28,14 +36,14 @@
|
|
|
28
36
|
"README.md"
|
|
29
37
|
],
|
|
30
38
|
"scripts": {
|
|
31
|
-
"pre-build": "npm run build-worker && npm run build-bundle",
|
|
32
|
-
"build-bundle": "
|
|
39
|
+
"pre-build": "npm run build-worker && npm run build-bundle && npm run build-bundle -- --env=dev",
|
|
40
|
+
"build-bundle": "ocular-bundle ./src/index.ts",
|
|
33
41
|
"build-worker": "esbuild src/workers/ply-worker.ts --bundle --outfile=dist/ply-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
|
|
34
42
|
},
|
|
35
43
|
"dependencies": {
|
|
36
44
|
"@babel/runtime": "^7.3.1",
|
|
37
|
-
"@loaders.gl/loader-utils": "4.0.0-beta.
|
|
38
|
-
"@loaders.gl/schema": "4.0.0-beta.
|
|
45
|
+
"@loaders.gl/loader-utils": "4.0.0-beta.3",
|
|
46
|
+
"@loaders.gl/schema": "4.0.0-beta.3"
|
|
39
47
|
},
|
|
40
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "7ba9621cc51c7a26c407086ac86171f35b8712af"
|
|
41
49
|
}
|
package/dist/bundle.d.ts
DELETED
package/dist/bundle.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,aAAa,KAAqB,CAAC"}
|
package/dist/es5/bundle.js
DELETED
package/dist/es5/bundle.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";;AACA,IAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
|
package/dist/es5/index.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.PLYLoader = void 0;
|
|
8
|
-
Object.defineProperty(exports, "PLYWorkerLoader", {
|
|
9
|
-
enumerable: true,
|
|
10
|
-
get: function get() {
|
|
11
|
-
return _plyLoader.PLYLoader;
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
15
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
16
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
-
var _plyLoader = require("./ply-loader");
|
|
18
|
-
var _parsePly = require("./lib/parse-ply");
|
|
19
|
-
var _parsePlyInBatches = require("./lib/parse-ply-in-batches");
|
|
20
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
21
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
22
|
-
var PLYLoader = _objectSpread(_objectSpread({}, _plyLoader.PLYLoader), {}, {
|
|
23
|
-
parse: function () {
|
|
24
|
-
var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
|
|
25
|
-
return _regenerator.default.wrap(function _callee$(_context) {
|
|
26
|
-
while (1) switch (_context.prev = _context.next) {
|
|
27
|
-
case 0:
|
|
28
|
-
return _context.abrupt("return", (0, _parsePly.parsePLY)(arrayBuffer, options === null || options === void 0 ? void 0 : options.ply));
|
|
29
|
-
case 1:
|
|
30
|
-
case "end":
|
|
31
|
-
return _context.stop();
|
|
32
|
-
}
|
|
33
|
-
}, _callee);
|
|
34
|
-
}));
|
|
35
|
-
function parse(_x, _x2) {
|
|
36
|
-
return _parse.apply(this, arguments);
|
|
37
|
-
}
|
|
38
|
-
return parse;
|
|
39
|
-
}(),
|
|
40
|
-
parseTextSync: function parseTextSync(arrayBuffer, options) {
|
|
41
|
-
return (0, _parsePly.parsePLY)(arrayBuffer, options === null || options === void 0 ? void 0 : options.ply);
|
|
42
|
-
},
|
|
43
|
-
parseSync: function parseSync(arrayBuffer, options) {
|
|
44
|
-
return (0, _parsePly.parsePLY)(arrayBuffer, options === null || options === void 0 ? void 0 : options.ply);
|
|
45
|
-
},
|
|
46
|
-
parseInBatches: function parseInBatches(arrayBuffer, options) {
|
|
47
|
-
return (0, _parsePlyInBatches.parsePLYInBatches)(arrayBuffer, options === null || options === void 0 ? void 0 : options.ply);
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
exports.PLYLoader = PLYLoader;
|
|
51
|
-
//# sourceMappingURL=index.js.map
|
package/dist/es5/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_plyLoader","require","_parsePly","_parsePlyInBatches","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","PLYLoader","PLYWorkerLoader","parse","_parse","_asyncToGenerator2","_regenerator","mark","_callee","arrayBuffer","options","wrap","_callee$","_context","prev","next","abrupt","parsePLY","ply","stop","_x","_x2","parseTextSync","parseSync","parseInBatches","parsePLYInBatches","exports"],"sources":["../../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {PLYMesh} from './lib/ply-types';\nimport {PLYLoader as PLYWorkerLoader} from './ply-loader';\nimport {ParsePLYOptions, parsePLY} from './lib/parse-ply';\nimport {parsePLYInBatches} from './lib/parse-ply-in-batches';\n\n// PLYLoader\n\nexport {PLYWorkerLoader};\n\nexport type PLYLoaderOptions = LoaderOptions & {\n ply?: ParsePLYOptions;\n};\n\n/**\n * Loader for PLY - Polygon File Format\n */\nexport const PLYLoader: LoaderWithParser<PLYMesh, any, PLYLoaderOptions> = {\n ...PLYWorkerLoader,\n // Note: parsePLY supports both text and binary\n parse: async (arrayBuffer, options) => parsePLY(arrayBuffer, options?.ply), // TODO - this may not detect text correctly?\n parseTextSync: (arrayBuffer, options) => parsePLY(arrayBuffer, options?.ply),\n parseSync: (arrayBuffer, options) => parsePLY(arrayBuffer, options?.ply),\n parseInBatches: (arrayBuffer, options) => parsePLYInBatches(arrayBuffer, options?.ply)\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAIA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,kBAAA,GAAAF,OAAA;AAA6D,SAAAG,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAC,MAAA,CAAAD,IAAA,CAAAF,MAAA,OAAAG,MAAA,CAAAC,qBAAA,QAAAC,OAAA,GAAAF,MAAA,CAAAC,qBAAA,CAAAJ,MAAA,GAAAC,cAAA,KAAAI,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAJ,MAAA,CAAAK,wBAAA,CAAAR,MAAA,EAAAO,GAAA,EAAAE,UAAA,OAAAP,IAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,IAAA,EAAAG,OAAA,YAAAH,IAAA;AAAA,SAAAU,cAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,WAAAF,SAAA,CAAAD,CAAA,IAAAC,SAAA,CAAAD,CAAA,QAAAA,CAAA,OAAAf,OAAA,CAAAI,MAAA,CAAAc,MAAA,OAAAC,OAAA,WAAAC,GAAA,QAAAC,gBAAA,CAAAC,OAAA,EAAAR,MAAA,EAAAM,GAAA,EAAAF,MAAA,CAAAE,GAAA,SAAAhB,MAAA,CAAAmB,yBAAA,GAAAnB,MAAA,CAAAoB,gBAAA,CAAAV,MAAA,EAAAV,MAAA,CAAAmB,yBAAA,CAAAL,MAAA,KAAAlB,OAAA,CAAAI,MAAA,CAAAc,MAAA,GAAAC,OAAA,WAAAC,GAAA,IAAAhB,MAAA,CAAAqB,cAAA,CAAAX,MAAA,EAAAM,GAAA,EAAAhB,MAAA,CAAAK,wBAAA,CAAAS,MAAA,EAAAE,GAAA,iBAAAN,MAAA;AAatD,IAAMY,SAA2D,GAAAb,aAAA,CAAAA,aAAA,KACnEc,oBAAe;EAElBC,KAAK;IAAA,IAAAC,MAAA,OAAAC,kBAAA,CAAAR,OAAA,EAAAS,YAAA,CAAAT,OAAA,CAAAU,IAAA,CAAE,SAAAC,QAAOC,WAAW,EAAEC,OAAO;MAAA,OAAAJ,YAAA,CAAAT,OAAA,CAAAc,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAA,OAAAF,QAAA,CAAAG,MAAA,WAAK,IAAAC,kBAAQ,EAACR,WAAW,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ,GAAG,CAAC;UAAA;UAAA;YAAA,OAAAL,QAAA,CAAAM,IAAA;QAAA;MAAA,GAAAX,OAAA;IAAA;IAAA,SAAAL,MAAAiB,EAAA,EAAAC,GAAA;MAAA,OAAAjB,MAAA,CAAAjB,KAAA,OAAAI,SAAA;IAAA;IAAA,OAAAY,KAAA;EAAA;EAC1EmB,aAAa,EAAE,SAAAA,cAACb,WAAW,EAAEC,OAAO;IAAA,OAAK,IAAAO,kBAAQ,EAACR,WAAW,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ,GAAG,CAAC;EAAA;EAC5EK,SAAS,EAAE,SAAAA,UAACd,WAAW,EAAEC,OAAO;IAAA,OAAK,IAAAO,kBAAQ,EAACR,WAAW,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ,GAAG,CAAC;EAAA;EACxEM,cAAc,EAAE,SAAAA,eAACf,WAAW,EAAEC,OAAO;IAAA,OAAK,IAAAe,oCAAiB,EAAChB,WAAW,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ,GAAG,CAAC;EAAA;AAAA,EACvF;AAACQ,OAAA,CAAAzB,SAAA,GAAAA,SAAA"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getPLYSchema = getPLYSchema;
|
|
7
|
-
var _schema = require("@loaders.gl/schema");
|
|
8
|
-
function getPLYSchema(plyHeader, attributes) {
|
|
9
|
-
var metadata = makeMetadataFromPlyHeader(plyHeader);
|
|
10
|
-
var schema = (0, _schema.deduceMeshSchema)(attributes, metadata);
|
|
11
|
-
return schema;
|
|
12
|
-
}
|
|
13
|
-
function makeMetadataFromPlyHeader(plyHeader) {
|
|
14
|
-
var metadata = {};
|
|
15
|
-
metadata.ply_comments = JSON.stringify(plyHeader.comments);
|
|
16
|
-
metadata.ply_elements = JSON.stringify(plyHeader.elements);
|
|
17
|
-
if (plyHeader.format !== undefined) {
|
|
18
|
-
metadata.ply_format = plyHeader.format;
|
|
19
|
-
}
|
|
20
|
-
if (plyHeader.version !== undefined) {
|
|
21
|
-
metadata.ply_version = plyHeader.version;
|
|
22
|
-
}
|
|
23
|
-
if (plyHeader.headerLength !== undefined) {
|
|
24
|
-
metadata.ply_headerLength = plyHeader.headerLength.toString(10);
|
|
25
|
-
}
|
|
26
|
-
return metadata;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=get-ply-schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-ply-schema.js","names":["_schema","require","getPLYSchema","plyHeader","attributes","metadata","makeMetadataFromPlyHeader","schema","deduceMeshSchema","ply_comments","JSON","stringify","comments","ply_elements","elements","format","undefined","ply_format","version","ply_version","headerLength","ply_headerLength","toString"],"sources":["../../../src/lib/get-ply-schema.ts"],"sourcesContent":["import {Schema, MeshAttributes, deduceMeshSchema} from '@loaders.gl/schema';\nimport type {PLYHeader} from './ply-types';\n\n/**\n * Gets schema from PLY header\n * @param plyHeader\n * @param metadata\n * @returns Schema\n */\nexport function getPLYSchema(plyHeader: PLYHeader, attributes: MeshAttributes): Schema {\n const metadata = makeMetadataFromPlyHeader(plyHeader);\n const schema = deduceMeshSchema(attributes, metadata);\n return schema;\n}\n\n/**\n * Make arrow like schema metadata by PlyHeader properties\n * @param plyHeader\n * @returns\n */\nfunction makeMetadataFromPlyHeader(plyHeader: PLYHeader): Record<string, string> {\n /* eslint-disable camelcase */\n const metadata: Record<string, string> = {};\n metadata.ply_comments = JSON.stringify(plyHeader.comments);\n metadata.ply_elements = JSON.stringify(plyHeader.elements);\n if (plyHeader.format !== undefined) {\n metadata.ply_format = plyHeader.format;\n }\n if (plyHeader.version !== undefined) {\n metadata.ply_version = plyHeader.version;\n }\n if (plyHeader.headerLength !== undefined) {\n metadata.ply_headerLength = plyHeader.headerLength.toString(10);\n }\n return metadata;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AASO,SAASC,YAAYA,CAACC,SAAoB,EAAEC,UAA0B,EAAU;EACrF,IAAMC,QAAQ,GAAGC,yBAAyB,CAACH,SAAS,CAAC;EACrD,IAAMI,MAAM,GAAG,IAAAC,wBAAgB,EAACJ,UAAU,EAAEC,QAAQ,CAAC;EACrD,OAAOE,MAAM;AACf;AAOA,SAASD,yBAAyBA,CAACH,SAAoB,EAA0B;EAE/E,IAAME,QAAgC,GAAG,CAAC,CAAC;EAC3CA,QAAQ,CAACI,YAAY,GAAGC,IAAI,CAACC,SAAS,CAACR,SAAS,CAACS,QAAQ,CAAC;EAC1DP,QAAQ,CAACQ,YAAY,GAAGH,IAAI,CAACC,SAAS,CAACR,SAAS,CAACW,QAAQ,CAAC;EAC1D,IAAIX,SAAS,CAACY,MAAM,KAAKC,SAAS,EAAE;IAClCX,QAAQ,CAACY,UAAU,GAAGd,SAAS,CAACY,MAAM;EACxC;EACA,IAAIZ,SAAS,CAACe,OAAO,KAAKF,SAAS,EAAE;IACnCX,QAAQ,CAACc,WAAW,GAAGhB,SAAS,CAACe,OAAO;EAC1C;EACA,IAAIf,SAAS,CAACiB,YAAY,KAAKJ,SAAS,EAAE;IACxCX,QAAQ,CAACgB,gBAAgB,GAAGlB,SAAS,CAACiB,YAAY,CAACE,QAAQ,CAAC,EAAE,CAAC;EACjE;EACA,OAAOjB,QAAQ;AACjB"}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = normalizePLY;
|
|
7
|
-
var _schema = require("@loaders.gl/schema");
|
|
8
|
-
var _getPlySchema = require("./get-ply-schema");
|
|
9
|
-
function normalizePLY(plyHeader, plyAttributes, options) {
|
|
10
|
-
var attributes = getMeshAttributes(plyAttributes);
|
|
11
|
-
var boundingBox = (0, _schema.getMeshBoundingBox)(attributes);
|
|
12
|
-
var vertexCount = plyAttributes.indices.length || plyAttributes.vertices.length / 3;
|
|
13
|
-
var isTriangles = plyAttributes.indices && plyAttributes.indices.length > 0;
|
|
14
|
-
var mode = isTriangles ? 4 : 0;
|
|
15
|
-
var topology = isTriangles ? 'triangle-list' : 'point-list';
|
|
16
|
-
var schema = (0, _getPlySchema.getPLYSchema)(plyHeader, attributes);
|
|
17
|
-
var plyMesh = {
|
|
18
|
-
loader: 'ply',
|
|
19
|
-
loaderData: plyHeader,
|
|
20
|
-
header: {
|
|
21
|
-
vertexCount: vertexCount,
|
|
22
|
-
boundingBox: boundingBox
|
|
23
|
-
},
|
|
24
|
-
schema: schema,
|
|
25
|
-
attributes: attributes,
|
|
26
|
-
indices: {
|
|
27
|
-
value: new Uint32Array(0),
|
|
28
|
-
size: 0
|
|
29
|
-
},
|
|
30
|
-
mode: mode,
|
|
31
|
-
topology: topology
|
|
32
|
-
};
|
|
33
|
-
if (plyAttributes.indices.length > 0) {
|
|
34
|
-
plyMesh.indices = {
|
|
35
|
-
value: new Uint32Array(plyAttributes.indices),
|
|
36
|
-
size: 1
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
return plyMesh;
|
|
40
|
-
}
|
|
41
|
-
function getMeshAttributes(attributes) {
|
|
42
|
-
var accessors = {};
|
|
43
|
-
for (var _i = 0, _Object$keys = Object.keys(attributes); _i < _Object$keys.length; _i++) {
|
|
44
|
-
var attributeName = _Object$keys[_i];
|
|
45
|
-
switch (attributeName) {
|
|
46
|
-
case 'vertices':
|
|
47
|
-
if (attributes.vertices.length > 0) {
|
|
48
|
-
accessors.POSITION = {
|
|
49
|
-
value: new Float32Array(attributes.vertices),
|
|
50
|
-
size: 3
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
break;
|
|
54
|
-
case 'normals':
|
|
55
|
-
if (attributes.normals.length > 0) {
|
|
56
|
-
accessors.NORMAL = {
|
|
57
|
-
value: new Float32Array(attributes.normals),
|
|
58
|
-
size: 3
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
break;
|
|
62
|
-
case 'uvs':
|
|
63
|
-
if (attributes.uvs.length > 0) {
|
|
64
|
-
accessors.TEXCOORD_0 = {
|
|
65
|
-
value: new Float32Array(attributes.uvs),
|
|
66
|
-
size: 2
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
break;
|
|
70
|
-
case 'colors':
|
|
71
|
-
if (attributes.colors.length > 0) {
|
|
72
|
-
accessors.COLOR_0 = {
|
|
73
|
-
value: new Uint8Array(attributes.colors),
|
|
74
|
-
size: 3,
|
|
75
|
-
normalized: true
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
break;
|
|
79
|
-
case 'indices':
|
|
80
|
-
break;
|
|
81
|
-
default:
|
|
82
|
-
if (attributes[attributeName].length > 0) {
|
|
83
|
-
accessors[attributeName] = {
|
|
84
|
-
value: new Float32Array(attributes[attributeName]),
|
|
85
|
-
size: 1
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
break;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return accessors;
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=normalize-ply.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-ply.js","names":["_schema","require","_getPlySchema","normalizePLY","plyHeader","plyAttributes","options","attributes","getMeshAttributes","boundingBox","getMeshBoundingBox","vertexCount","indices","length","vertices","isTriangles","mode","topology","schema","getPLYSchema","plyMesh","loader","loaderData","header","value","Uint32Array","size","accessors","_i","_Object$keys","Object","keys","attributeName","POSITION","Float32Array","normals","NORMAL","uvs","TEXCOORD_0","colors","COLOR_0","Uint8Array","normalized"],"sources":["../../../src/lib/normalize-ply.ts"],"sourcesContent":["import type {MeshAttributes} from '@loaders.gl/schema';\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport type {PLYMesh, PLYHeader, PLYAttributes, MeshHeader} from './ply-types';\nimport {getPLYSchema} from './get-ply-schema';\n\n/**\n * @param header\n * @param attributes\n * @returns data and header\n */\nexport default function normalizePLY(\n plyHeader: MeshHeader & PLYHeader,\n plyAttributes: PLYAttributes,\n options?: {}\n): PLYMesh {\n const attributes = getMeshAttributes(plyAttributes);\n const boundingBox = getMeshBoundingBox(attributes);\n const vertexCount = plyAttributes.indices.length || plyAttributes.vertices.length / 3;\n\n // TODO - how to detect POINT CLOUDS vs MESHES?\n // TODO - For Meshes, PLY quadrangles must be split?\n const isTriangles = plyAttributes.indices && plyAttributes.indices.length > 0;\n const mode = isTriangles ? 4 : 0; // TRIANGLES vs POINTS\n const topology = isTriangles ? 'triangle-list' : 'point-list';\n\n const schema = getPLYSchema(plyHeader, attributes);\n\n const plyMesh: PLYMesh = {\n loader: 'ply',\n loaderData: plyHeader,\n header: {\n vertexCount,\n boundingBox\n },\n schema,\n attributes,\n indices: {value: new Uint32Array(0), size: 0},\n mode,\n topology\n };\n\n if (plyAttributes.indices.length > 0) {\n plyMesh.indices = {value: new Uint32Array(plyAttributes.indices), size: 1};\n }\n\n return plyMesh;\n}\n\n/**\n * @param attributes\n * @returns accessors []\n */\n// eslint-disable-next-line complexity\nfunction getMeshAttributes(attributes: PLYAttributes): MeshAttributes {\n const accessors: MeshAttributes = {};\n\n for (const attributeName of Object.keys(attributes)) {\n switch (attributeName) {\n case 'vertices':\n if (attributes.vertices.length > 0) {\n accessors.POSITION = {value: new Float32Array(attributes.vertices), size: 3};\n }\n break;\n\n // optional attributes data\n case 'normals':\n if (attributes.normals.length > 0) {\n accessors.NORMAL = {value: new Float32Array(attributes.normals), size: 3};\n }\n break;\n\n case 'uvs':\n if (attributes.uvs.length > 0) {\n accessors.TEXCOORD_0 = {value: new Float32Array(attributes.uvs), size: 2};\n }\n break;\n\n case 'colors':\n if (attributes.colors.length > 0) {\n // TODO - normalized shoud be based on `uchar` flag in source data?\n accessors.COLOR_0 = {value: new Uint8Array(attributes.colors), size: 3, normalized: true};\n }\n break;\n\n case 'indices':\n break;\n\n default:\n if (attributes[attributeName].length > 0) {\n accessors[attributeName] = {value: new Float32Array(attributes[attributeName]), size: 1};\n }\n break;\n }\n }\n return accessors;\n}\n"],"mappings":"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"}
|