@loaders.gl/ply 3.3.0-alpha.5 → 3.3.0-alpha.7
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/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +4 -17
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/get-ply-schema.js +0 -6
- package/dist/es5/lib/get-ply-schema.js.map +1 -1
- package/dist/es5/lib/normalize-ply.js +1 -8
- package/dist/es5/lib/normalize-ply.js.map +1 -1
- package/dist/es5/lib/parse-ply-in-batches.js +98 -169
- package/dist/es5/lib/parse-ply-in-batches.js.map +1 -1
- package/dist/es5/lib/parse-ply.js +1 -53
- package/dist/es5/lib/parse-ply.js.map +1 -1
- package/dist/es5/lib/ply-types.js.map +1 -1
- package/dist/es5/ply-loader.js +3 -1
- package/dist/es5/ply-loader.js.map +1 -1
- package/dist/es5/workers/ply-worker.js +0 -2
- package/dist/es5/workers/ply-worker.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/index.js +4 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/get-ply-schema.js +0 -4
- package/dist/esm/lib/get-ply-schema.js.map +1 -1
- package/dist/esm/lib/normalize-ply.js +2 -5
- package/dist/esm/lib/normalize-ply.js.map +1 -1
- package/dist/esm/lib/parse-ply-in-batches.js +6 -38
- package/dist/esm/lib/parse-ply-in-batches.js.map +1 -1
- package/dist/esm/lib/parse-ply.js +8 -52
- package/dist/esm/lib/parse-ply.js.map +1 -1
- package/dist/esm/lib/ply-types.js.map +1 -1
- package/dist/esm/ply-loader.js +4 -1
- package/dist/esm/ply-loader.js.map +1 -1
- package/dist/esm/workers/ply-worker.js.map +1 -1
- package/dist/ply-worker.js +1 -1
- package/package.json +4 -4
|
@@ -1,19 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = parsePLY;
|
|
9
|
-
|
|
10
8
|
var _normalizePly = _interopRequireDefault(require("./normalize-ply"));
|
|
11
9
|
|
|
12
10
|
function parsePLY(data) {
|
|
13
11
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
14
12
|
var header;
|
|
15
13
|
var attributes;
|
|
16
|
-
|
|
17
14
|
if (data instanceof ArrayBuffer) {
|
|
18
15
|
var text = new TextDecoder().decode(data);
|
|
19
16
|
header = parseHeader(text, options);
|
|
@@ -22,7 +19,6 @@ function parsePLY(data) {
|
|
|
22
19
|
header = parseHeader(data, options);
|
|
23
20
|
attributes = parseASCII(data, header);
|
|
24
21
|
}
|
|
25
|
-
|
|
26
22
|
return (0, _normalizePly.default)(header, attributes);
|
|
27
23
|
}
|
|
28
24
|
|
|
@@ -31,12 +27,10 @@ function parseHeader(data, options) {
|
|
|
31
27
|
var headerText = '';
|
|
32
28
|
var headerLength = 0;
|
|
33
29
|
var result = PLY_HEADER_PATTERN.exec(data);
|
|
34
|
-
|
|
35
30
|
if (result !== null) {
|
|
36
31
|
headerText = result[1];
|
|
37
32
|
headerLength = result[0].length;
|
|
38
33
|
}
|
|
39
|
-
|
|
40
34
|
var lines = headerText.split('\n');
|
|
41
35
|
var header = parseHeaderLines(lines, headerLength, options);
|
|
42
36
|
return header;
|
|
@@ -51,58 +45,46 @@ function parseHeaderLines(lines, headerLength, options) {
|
|
|
51
45
|
var lineType;
|
|
52
46
|
var lineValues;
|
|
53
47
|
var currentElement = null;
|
|
54
|
-
|
|
55
48
|
for (var i = 0; i < lines.length; i++) {
|
|
56
49
|
var line = lines[i];
|
|
57
50
|
line = line.trim();
|
|
58
|
-
|
|
59
51
|
if (line === '') {
|
|
60
52
|
continue;
|
|
61
53
|
}
|
|
62
|
-
|
|
63
54
|
lineValues = line.split(/\s+/);
|
|
64
55
|
lineType = lineValues.shift();
|
|
65
56
|
line = lineValues.join(' ');
|
|
66
|
-
|
|
67
57
|
switch (lineType) {
|
|
68
58
|
case 'format':
|
|
69
59
|
header.format = lineValues[0];
|
|
70
60
|
header.version = lineValues[1];
|
|
71
61
|
break;
|
|
72
|
-
|
|
73
62
|
case 'comment':
|
|
74
63
|
header.comments.push(line);
|
|
75
64
|
break;
|
|
76
|
-
|
|
77
65
|
case 'element':
|
|
78
66
|
if (currentElement) {
|
|
79
67
|
header.elements.push(currentElement);
|
|
80
68
|
}
|
|
81
|
-
|
|
82
69
|
currentElement = {
|
|
83
70
|
name: lineValues[0],
|
|
84
71
|
count: parseInt(lineValues[1], 10),
|
|
85
72
|
properties: []
|
|
86
73
|
};
|
|
87
74
|
break;
|
|
88
|
-
|
|
89
75
|
case 'property':
|
|
90
76
|
if (!currentElement) {
|
|
91
77
|
break;
|
|
92
78
|
}
|
|
93
|
-
|
|
94
79
|
currentElement.properties.push(makePLYElementProperty(lineValues, options.propertyNameMapping));
|
|
95
80
|
break;
|
|
96
|
-
|
|
97
81
|
default:
|
|
98
82
|
console.log('unhandled', lineType, lineValues);
|
|
99
83
|
}
|
|
100
84
|
}
|
|
101
|
-
|
|
102
85
|
if (currentElement !== undefined) {
|
|
103
86
|
header.elements.push(currentElement);
|
|
104
87
|
}
|
|
105
|
-
|
|
106
88
|
return header;
|
|
107
89
|
}
|
|
108
90
|
|
|
@@ -110,7 +92,6 @@ function makePLYElementProperty(propertValues, propertyNameMapping) {
|
|
|
110
92
|
var property = {
|
|
111
93
|
type: propertValues[0]
|
|
112
94
|
};
|
|
113
|
-
|
|
114
95
|
if (property.type === 'list') {
|
|
115
96
|
property.name = propertValues[3];
|
|
116
97
|
property.countType = propertValues[1];
|
|
@@ -118,11 +99,9 @@ function makePLYElementProperty(propertValues, propertyNameMapping) {
|
|
|
118
99
|
} else {
|
|
119
100
|
property.name = propertValues[1];
|
|
120
101
|
}
|
|
121
|
-
|
|
122
102
|
if (propertyNameMapping && property.name in propertyNameMapping) {
|
|
123
103
|
property.name = propertyNameMapping[property.name];
|
|
124
104
|
}
|
|
125
|
-
|
|
126
105
|
return property;
|
|
127
106
|
}
|
|
128
107
|
|
|
@@ -141,13 +120,11 @@ function parseASCIINumber(n, type) {
|
|
|
141
120
|
case 'int32':
|
|
142
121
|
case 'uint32':
|
|
143
122
|
return parseInt(n, 10);
|
|
144
|
-
|
|
145
123
|
case 'float':
|
|
146
124
|
case 'double':
|
|
147
125
|
case 'float32':
|
|
148
126
|
case 'float64':
|
|
149
127
|
return parseFloat(n);
|
|
150
|
-
|
|
151
128
|
default:
|
|
152
129
|
throw new Error(type);
|
|
153
130
|
}
|
|
@@ -156,26 +133,23 @@ function parseASCIINumber(n, type) {
|
|
|
156
133
|
function parseASCIIElement(properties, line) {
|
|
157
134
|
var values = line.split(/\s+/);
|
|
158
135
|
var element = {};
|
|
159
|
-
|
|
160
136
|
for (var i = 0; i < properties.length; i++) {
|
|
161
137
|
if (properties[i].type === 'list') {
|
|
162
138
|
var list = [];
|
|
163
139
|
var n = parseASCIINumber(values.shift(), properties[i].countType);
|
|
164
|
-
|
|
165
140
|
for (var j = 0; j < n; j++) {
|
|
166
141
|
list.push(parseASCIINumber(values.shift(), properties[i].itemType));
|
|
167
142
|
}
|
|
168
|
-
|
|
169
143
|
element[properties[i].name] = list;
|
|
170
144
|
} else {
|
|
171
145
|
element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);
|
|
172
146
|
}
|
|
173
147
|
}
|
|
174
|
-
|
|
175
148
|
return element;
|
|
176
149
|
}
|
|
177
150
|
|
|
178
151
|
function parseASCII(data, header) {
|
|
152
|
+
|
|
179
153
|
var attributes = {
|
|
180
154
|
indices: [],
|
|
181
155
|
vertices: [],
|
|
@@ -186,48 +160,38 @@ function parseASCII(data, header) {
|
|
|
186
160
|
var result;
|
|
187
161
|
var patternBody = /end_header\s([\s\S]*)$/;
|
|
188
162
|
var body = '';
|
|
189
|
-
|
|
190
163
|
if ((result = patternBody.exec(data)) !== null) {
|
|
191
164
|
body = result[1];
|
|
192
165
|
}
|
|
193
|
-
|
|
194
166
|
var lines = body.split('\n');
|
|
195
167
|
var currentElement = 0;
|
|
196
168
|
var currentElementCount = 0;
|
|
197
|
-
|
|
198
169
|
for (var i = 0; i < lines.length; i++) {
|
|
199
170
|
var line = lines[i];
|
|
200
171
|
line = line.trim();
|
|
201
|
-
|
|
202
172
|
if (line !== '') {
|
|
203
173
|
if (currentElementCount >= header.elements[currentElement].count) {
|
|
204
174
|
currentElement++;
|
|
205
175
|
currentElementCount = 0;
|
|
206
176
|
}
|
|
207
|
-
|
|
208
177
|
var element = parseASCIIElement(header.elements[currentElement].properties, line);
|
|
209
178
|
handleElement(attributes, header.elements[currentElement].name, element);
|
|
210
179
|
currentElementCount++;
|
|
211
180
|
}
|
|
212
181
|
}
|
|
213
|
-
|
|
214
182
|
return attributes;
|
|
215
183
|
}
|
|
216
184
|
|
|
217
185
|
function handleElement(buffer, elementName) {
|
|
218
186
|
var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
219
|
-
|
|
220
187
|
if (elementName === 'vertex') {
|
|
221
188
|
buffer.vertices.push(element.x, element.y, element.z);
|
|
222
|
-
|
|
223
189
|
if ('nx' in element && 'ny' in element && 'nz' in element) {
|
|
224
190
|
buffer.normals.push(element.nx, element.ny, element.nz);
|
|
225
191
|
}
|
|
226
|
-
|
|
227
192
|
if ('s' in element && 't' in element) {
|
|
228
193
|
buffer.uvs.push(element.s, element.t);
|
|
229
194
|
}
|
|
230
|
-
|
|
231
195
|
if ('red' in element && 'green' in element && 'blue' in element) {
|
|
232
196
|
buffer.colors.push(element.red, element.green, element.blue);
|
|
233
197
|
}
|
|
@@ -248,35 +212,27 @@ function binaryRead(dataview, at, type, littleEndian) {
|
|
|
248
212
|
case 'int8':
|
|
249
213
|
case 'char':
|
|
250
214
|
return [dataview.getInt8(at), 1];
|
|
251
|
-
|
|
252
215
|
case 'uint8':
|
|
253
216
|
case 'uchar':
|
|
254
217
|
return [dataview.getUint8(at), 1];
|
|
255
|
-
|
|
256
218
|
case 'int16':
|
|
257
219
|
case 'short':
|
|
258
220
|
return [dataview.getInt16(at, littleEndian), 2];
|
|
259
|
-
|
|
260
221
|
case 'uint16':
|
|
261
222
|
case 'ushort':
|
|
262
223
|
return [dataview.getUint16(at, littleEndian), 2];
|
|
263
|
-
|
|
264
224
|
case 'int32':
|
|
265
225
|
case 'int':
|
|
266
226
|
return [dataview.getInt32(at, littleEndian), 4];
|
|
267
|
-
|
|
268
227
|
case 'uint32':
|
|
269
228
|
case 'uint':
|
|
270
229
|
return [dataview.getUint32(at, littleEndian), 4];
|
|
271
|
-
|
|
272
230
|
case 'float32':
|
|
273
231
|
case 'float':
|
|
274
232
|
return [dataview.getFloat32(at, littleEndian), 4];
|
|
275
|
-
|
|
276
233
|
case 'float64':
|
|
277
234
|
case 'double':
|
|
278
235
|
return [dataview.getFloat64(at, littleEndian), 8];
|
|
279
|
-
|
|
280
236
|
default:
|
|
281
237
|
throw new Error(type);
|
|
282
238
|
}
|
|
@@ -286,20 +242,17 @@ function binaryReadElement(dataview, at, properties, littleEndian) {
|
|
|
286
242
|
var element = {};
|
|
287
243
|
var result;
|
|
288
244
|
var read = 0;
|
|
289
|
-
|
|
290
245
|
for (var i = 0; i < properties.length; i++) {
|
|
291
246
|
if (properties[i].type === 'list') {
|
|
292
247
|
var list = [];
|
|
293
248
|
result = binaryRead(dataview, at + read, properties[i].countType, littleEndian);
|
|
294
249
|
var n = result[0];
|
|
295
250
|
read += result[1];
|
|
296
|
-
|
|
297
251
|
for (var j = 0; j < n; j++) {
|
|
298
252
|
result = binaryRead(dataview, at + read, properties[i].itemType, littleEndian);
|
|
299
253
|
list.push(result[0]);
|
|
300
254
|
read += result[1];
|
|
301
255
|
}
|
|
302
|
-
|
|
303
256
|
element[properties[i].name] = list;
|
|
304
257
|
} else {
|
|
305
258
|
result = binaryRead(dataview, at + read, properties[i].type, littleEndian);
|
|
@@ -307,10 +260,8 @@ function binaryReadElement(dataview, at, properties, littleEndian) {
|
|
|
307
260
|
read += result[1];
|
|
308
261
|
}
|
|
309
262
|
}
|
|
310
|
-
|
|
311
263
|
return [element, read];
|
|
312
264
|
}
|
|
313
|
-
|
|
314
265
|
function parseBinary(data, header) {
|
|
315
266
|
var attributes = {
|
|
316
267
|
indices: [],
|
|
@@ -323,10 +274,8 @@ function parseBinary(data, header) {
|
|
|
323
274
|
var body = new DataView(data, header.headerLength);
|
|
324
275
|
var result;
|
|
325
276
|
var loc = 0;
|
|
326
|
-
|
|
327
277
|
for (var currentElement = 0; currentElement < header.elements.length; currentElement++) {
|
|
328
278
|
var count = header.elements[currentElement].count;
|
|
329
|
-
|
|
330
279
|
for (var currentElementCount = 0; currentElementCount < count; currentElementCount++) {
|
|
331
280
|
result = binaryReadElement(body, loc, header.elements[currentElement].properties, littleEndian);
|
|
332
281
|
loc += result[1];
|
|
@@ -334,7 +283,6 @@ function parseBinary(data, header) {
|
|
|
334
283
|
handleElement(attributes, header.elements[currentElement].name, element);
|
|
335
284
|
}
|
|
336
285
|
}
|
|
337
|
-
|
|
338
286
|
return attributes;
|
|
339
287
|
}
|
|
340
288
|
//# sourceMappingURL=parse-ply.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/parse-ply.ts"],"names":["parsePLY","data","options","header","attributes","ArrayBuffer","text","TextDecoder","decode","parseHeader","format","parseASCII","parseBinary","PLY_HEADER_PATTERN","headerText","headerLength","result","exec","length","lines","split","parseHeaderLines","comments","elements","lineType","lineValues","currentElement","i","line","trim","shift","join","version","push","name","count","parseInt","properties","makePLYElementProperty","propertyNameMapping","console","log","undefined","propertValues","property","type","countType","itemType","parseASCIINumber","n","parseFloat","Error","parseASCIIElement","values","element","list","j","indices","vertices","normals","uvs","colors","patternBody","body","currentElementCount","handleElement","buffer","elementName","x","y","z","nx","ny","nz","s","t","red","green","blue","vertexIndices","vertex_indices","vertex_index","binaryRead","dataview","at","littleEndian","getInt8","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","binaryReadElement","read","DataView","loc"],"mappings":"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","sourcesContent":["// PLY Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author Wei Meng / http://about.me/menway\n//\n// Description: A loader for PLY ASCII files (known as the Polygon File Format\n// or the Stanford Triangle Format).\n//\n// Limitations: ASCII decoding assumes file is UTF-8.\n//\n// If the PLY file uses non standard property names, they can be mapped while\n// loading. For example, the following maps the properties\n// “diffuse_(red|green|blue)” in the file to standard color names.\n//\n// parsePLY(data, {\n// propertyNameMapping: {\n// diffuse_red: 'red',\n// diffuse_green: 'green',\n// diffuse_blue: 'blue'\n// }\n// });\nimport type {\n PLYMesh,\n PLYHeader,\n PLYAttributes,\n MeshHeader,\n ASCIIElement,\n PLYProperty\n} from './ply-types';\nimport normalizePLY from './normalize-ply';\n\n/**\n * @param data\n * @param options\n * @returns\n */\nexport default function parsePLY(data: ArrayBuffer | string, options = {}): PLYMesh {\n let header: PLYHeader & MeshHeader;\n let attributes: PLYAttributes;\n\n if (data instanceof ArrayBuffer) {\n const text = new TextDecoder().decode(data);\n header = parseHeader(text, options);\n attributes = header.format === 'ascii' ? parseASCII(text, header) : parseBinary(data, header);\n } else {\n header = parseHeader(data, options);\n attributes = parseASCII(data, header);\n }\n\n return normalizePLY(header, attributes);\n}\n\n/**\n * @param data\n * @param options\n * @returns header\n */\nfunction parseHeader(data: any, options: {[index: string]: any}): PLYHeader {\n const PLY_HEADER_PATTERN = /ply([\\s\\S]*)end_header\\s/;\n\n let headerText = '';\n let headerLength = 0;\n\n const result = PLY_HEADER_PATTERN.exec(data);\n\n if (result !== null) {\n headerText = result[1];\n headerLength = result[0].length;\n }\n const lines = headerText.split('\\n');\n const header = parseHeaderLines(lines, headerLength, options);\n\n return header;\n}\n\n/**\n * @param lines\n * @param headerLength\n * @param options\n * @returns header\n */\nfunction parseHeaderLines(\n lines: string[],\n headerLength: number,\n options: {[index: string]: any}\n): PLYHeader {\n const header: PLYHeader = {\n comments: [],\n elements: [],\n headerLength\n };\n\n let lineType: string | undefined;\n let lineValues: string[];\n let currentElement: ASCIIElement | null = null;\n\n for (let i = 0; i < lines.length; i++) {\n let line: string = lines[i];\n line = line.trim();\n\n if (line === '') {\n // eslint-disable-next-line\n continue;\n }\n\n lineValues = line.split(/\\s+/);\n lineType = lineValues.shift();\n line = lineValues.join(' ');\n\n switch (lineType) {\n case 'format':\n header.format = lineValues[0];\n header.version = lineValues[1];\n break;\n\n case 'comment':\n header.comments.push(line);\n break;\n\n case 'element':\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n currentElement = {\n name: lineValues[0],\n count: parseInt(lineValues[1], 10),\n properties: []\n };\n break;\n\n case 'property':\n if (!currentElement) {\n break;\n }\n currentElement.properties.push(\n makePLYElementProperty(lineValues, options.propertyNameMapping)\n );\n break;\n\n default:\n // eslint-disable-next-line\n console.log('unhandled', lineType, lineValues);\n }\n }\n\n if (currentElement !== undefined) {\n header.elements.push(currentElement);\n }\n\n return header;\n}\n\n/**\n * @param propertValues\n * @param propertyNameMapping\n * @returns property of ply element\n */\nfunction makePLYElementProperty(propertValues: string[], propertyNameMapping: []): PLYProperty {\n const property: PLYProperty = {\n type: propertValues[0]\n };\n\n if (property.type === 'list') {\n property.name = propertValues[3];\n property.countType = propertValues[1];\n property.itemType = propertValues[2];\n } else {\n property.name = propertValues[1];\n }\n\n if (propertyNameMapping && property.name in propertyNameMapping) {\n property.name = propertyNameMapping[property.name];\n }\n\n return property;\n}\n\n/**\n * Parses ASCII number\n * @param n\n * @param type\n * @returns\n */\n// eslint-disable-next-line complexity\nfunction parseASCIINumber(n: string, type: string): number {\n switch (type) {\n case 'char':\n case 'uchar':\n case 'short':\n case 'ushort':\n case 'int':\n case 'uint':\n case 'int8':\n case 'uint8':\n case 'int16':\n case 'uint16':\n case 'int32':\n case 'uint32':\n return parseInt(n, 10);\n\n case 'float':\n case 'double':\n case 'float32':\n case 'float64':\n return parseFloat(n);\n\n default:\n throw new Error(type);\n }\n}\n\n/**\n * @param properties\n * @param line\n * @returns ASCII element\n */\nfunction parseASCIIElement(properties: any[], line: string) {\n const values: any = line.split(/\\s+/);\n\n const element = {};\n\n for (let i = 0; i < properties.length; i++) {\n if (properties[i].type === 'list') {\n const list: any = [];\n const n = parseASCIINumber(values.shift(), properties[i].countType);\n\n for (let j = 0; j < n; j++) {\n list.push(parseASCIINumber(values.shift(), properties[i].itemType));\n }\n\n element[properties[i].name] = list;\n } else {\n element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);\n }\n }\n\n return element;\n}\n\n/**\n * @param data\n * @param header\n * @returns [attributes]\n */\nfunction parseASCII(data: any, header: PLYHeader): PLYAttributes {\n // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n\n const attributes: PLYAttributes = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n colors: []\n };\n\n let result: RegExpExecArray | null;\n\n const patternBody = /end_header\\s([\\s\\S]*)$/;\n let body = '';\n if ((result = patternBody.exec(data)) !== null) {\n body = result[1];\n }\n\n const lines = body.split('\\n');\n let currentElement = 0;\n let currentElementCount = 0;\n\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i];\n line = line.trim();\n\n if (line !== '') {\n if (currentElementCount >= header.elements[currentElement].count) {\n currentElement++;\n currentElementCount = 0;\n }\n\n const element = parseASCIIElement(header.elements[currentElement].properties, line);\n handleElement(attributes, header.elements[currentElement].name, element);\n currentElementCount++;\n }\n }\n\n return attributes;\n}\n\n/**\n * @param buffer\n * @param elementName\n * @param element\n */\n// eslint-disable-next-line complexity\nfunction handleElement(\n buffer: {[index: string]: number[]},\n elementName: string,\n element: any = {}\n) {\n if (elementName === 'vertex') {\n buffer.vertices.push(element.x, element.y, element.z);\n\n if ('nx' in element && 'ny' in element && 'nz' in element) {\n buffer.normals.push(element.nx, element.ny, element.nz);\n }\n\n if ('s' in element && 't' in element) {\n buffer.uvs.push(element.s, element.t);\n }\n\n if ('red' in element && 'green' in element && 'blue' in element) {\n buffer.colors.push(element.red, element.green, element.blue);\n }\n } else if (elementName === 'face') {\n const vertexIndices = element.vertex_indices || element.vertex_index; // issue #9338\n\n if (vertexIndices.length === 3) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);\n } else if (vertexIndices.length === 4) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);\n buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);\n }\n }\n}\n\n/**\n * Reads binary data\n * @param dataview\n * @param at\n * @param type\n * @param littleEndian\n * @returns [number, number]\n */\n// eslint-disable-next-line complexity\nfunction binaryRead(dataview: DataView, at: number, type: any, littleEndian: boolean): number[] {\n switch (type) {\n // corespondences for non-specific length types here match rply:\n case 'int8':\n case 'char':\n return [dataview.getInt8(at), 1];\n case 'uint8':\n case 'uchar':\n return [dataview.getUint8(at), 1];\n case 'int16':\n case 'short':\n return [dataview.getInt16(at, littleEndian), 2];\n case 'uint16':\n case 'ushort':\n return [dataview.getUint16(at, littleEndian), 2];\n case 'int32':\n case 'int':\n return [dataview.getInt32(at, littleEndian), 4];\n case 'uint32':\n case 'uint':\n return [dataview.getUint32(at, littleEndian), 4];\n case 'float32':\n case 'float':\n return [dataview.getFloat32(at, littleEndian), 4];\n case 'float64':\n case 'double':\n return [dataview.getFloat64(at, littleEndian), 8];\n\n default:\n throw new Error(type);\n }\n}\n\n/**\n * Reads binary data\n * @param dataview\n * @param at\n * @param properties\n * @param littleEndian\n * @returns [object, number]\n */\nfunction binaryReadElement(\n dataview: DataView,\n at: number,\n properties: {[index: string]: any},\n littleEndian: boolean\n): {}[] {\n const element = {};\n let result: number[];\n let read = 0;\n\n for (let i = 0; i < properties.length; i++) {\n if (properties[i].type === 'list') {\n const list = [];\n\n result = binaryRead(dataview, at + read, properties[i].countType, littleEndian);\n const n = result[0];\n read += result[1];\n\n for (let j = 0; j < n; j++) {\n result = binaryRead(dataview, at + read, properties[i].itemType, littleEndian);\n // @ts-ignore\n list.push(result[0]);\n read += result[1];\n }\n\n element[properties[i].name] = list;\n } else {\n result = binaryRead(dataview, at + read, properties[i].type, littleEndian);\n element[properties[i].name] = result[0];\n read += result[1];\n }\n }\n\n return [element, read];\n}\n\ntype BinaryAttributes = {\n [index: string]: number[];\n};\n\n/**\n * Parses binary data\n * @param data\n * @param header\n * @returns [attributes] of data\n */\nfunction parseBinary(data: ArrayBuffer, header: {[index: string]: any}): BinaryAttributes {\n const attributes: BinaryAttributes = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n colors: []\n };\n\n const littleEndian = header.format === 'binary_little_endian';\n const body = new DataView(data, header.headerLength);\n let result: any[];\n let loc = 0;\n\n for (let currentElement = 0; currentElement < header.elements.length; currentElement++) {\n const count = header.elements[currentElement].count;\n for (let currentElementCount = 0; currentElementCount < count; currentElementCount++) {\n result = binaryReadElement(\n body,\n loc,\n header.elements[currentElement].properties,\n littleEndian\n );\n loc += result[1];\n const element = result[0];\n\n handleElement(attributes, header.elements[currentElement].name, element);\n }\n }\n\n return attributes;\n}\n"],"file":"parse-ply.js"}
|
|
1
|
+
{"version":3,"file":"parse-ply.js","names":["parsePLY","data","options","header","attributes","ArrayBuffer","text","TextDecoder","decode","parseHeader","format","parseASCII","parseBinary","normalizePLY","PLY_HEADER_PATTERN","headerText","headerLength","result","exec","length","lines","split","parseHeaderLines","comments","elements","lineType","lineValues","currentElement","i","line","trim","shift","join","version","push","name","count","parseInt","properties","makePLYElementProperty","propertyNameMapping","console","log","undefined","propertValues","property","type","countType","itemType","parseASCIINumber","n","parseFloat","Error","parseASCIIElement","values","element","list","j","indices","vertices","normals","uvs","colors","patternBody","body","currentElementCount","handleElement","buffer","elementName","x","y","z","nx","ny","nz","s","t","red","green","blue","vertexIndices","vertex_indices","vertex_index","binaryRead","dataview","at","littleEndian","getInt8","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","binaryReadElement","read","DataView","loc"],"sources":["../../../src/lib/parse-ply.ts"],"sourcesContent":["// PLY Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author Wei Meng / http://about.me/menway\n//\n// Description: A loader for PLY ASCII files (known as the Polygon File Format\n// or the Stanford Triangle Format).\n//\n// Limitations: ASCII decoding assumes file is UTF-8.\n//\n// If the PLY file uses non standard property names, they can be mapped while\n// loading. For example, the following maps the properties\n// “diffuse_(red|green|blue)” in the file to standard color names.\n//\n// parsePLY(data, {\n// propertyNameMapping: {\n// diffuse_red: 'red',\n// diffuse_green: 'green',\n// diffuse_blue: 'blue'\n// }\n// });\nimport type {\n PLYMesh,\n PLYHeader,\n PLYAttributes,\n MeshHeader,\n ASCIIElement,\n PLYProperty\n} from './ply-types';\nimport normalizePLY from './normalize-ply';\n\n/**\n * @param data\n * @param options\n * @returns\n */\nexport default function parsePLY(data: ArrayBuffer | string, options = {}): PLYMesh {\n let header: PLYHeader & MeshHeader;\n let attributes: PLYAttributes;\n\n if (data instanceof ArrayBuffer) {\n const text = new TextDecoder().decode(data);\n header = parseHeader(text, options);\n attributes = header.format === 'ascii' ? parseASCII(text, header) : parseBinary(data, header);\n } else {\n header = parseHeader(data, options);\n attributes = parseASCII(data, header);\n }\n\n return normalizePLY(header, attributes);\n}\n\n/**\n * @param data\n * @param options\n * @returns header\n */\nfunction parseHeader(data: any, options: {[index: string]: any}): PLYHeader {\n const PLY_HEADER_PATTERN = /ply([\\s\\S]*)end_header\\s/;\n\n let headerText = '';\n let headerLength = 0;\n\n const result = PLY_HEADER_PATTERN.exec(data);\n\n if (result !== null) {\n headerText = result[1];\n headerLength = result[0].length;\n }\n const lines = headerText.split('\\n');\n const header = parseHeaderLines(lines, headerLength, options);\n\n return header;\n}\n\n/**\n * @param lines\n * @param headerLength\n * @param options\n * @returns header\n */\nfunction parseHeaderLines(\n lines: string[],\n headerLength: number,\n options: {[index: string]: any}\n): PLYHeader {\n const header: PLYHeader = {\n comments: [],\n elements: [],\n headerLength\n };\n\n let lineType: string | undefined;\n let lineValues: string[];\n let currentElement: ASCIIElement | null = null;\n\n for (let i = 0; i < lines.length; i++) {\n let line: string = lines[i];\n line = line.trim();\n\n if (line === '') {\n // eslint-disable-next-line\n continue;\n }\n\n lineValues = line.split(/\\s+/);\n lineType = lineValues.shift();\n line = lineValues.join(' ');\n\n switch (lineType) {\n case 'format':\n header.format = lineValues[0];\n header.version = lineValues[1];\n break;\n\n case 'comment':\n header.comments.push(line);\n break;\n\n case 'element':\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n currentElement = {\n name: lineValues[0],\n count: parseInt(lineValues[1], 10),\n properties: []\n };\n break;\n\n case 'property':\n if (!currentElement) {\n break;\n }\n currentElement.properties.push(\n makePLYElementProperty(lineValues, options.propertyNameMapping)\n );\n break;\n\n default:\n // eslint-disable-next-line\n console.log('unhandled', lineType, lineValues);\n }\n }\n\n if (currentElement !== undefined) {\n header.elements.push(currentElement);\n }\n\n return header;\n}\n\n/**\n * @param propertValues\n * @param propertyNameMapping\n * @returns property of ply element\n */\nfunction makePLYElementProperty(propertValues: string[], propertyNameMapping: []): PLYProperty {\n const property: PLYProperty = {\n type: propertValues[0]\n };\n\n if (property.type === 'list') {\n property.name = propertValues[3];\n property.countType = propertValues[1];\n property.itemType = propertValues[2];\n } else {\n property.name = propertValues[1];\n }\n\n if (propertyNameMapping && property.name in propertyNameMapping) {\n property.name = propertyNameMapping[property.name];\n }\n\n return property;\n}\n\n/**\n * Parses ASCII number\n * @param n\n * @param type\n * @returns\n */\n// eslint-disable-next-line complexity\nfunction parseASCIINumber(n: string, type: string): number {\n switch (type) {\n case 'char':\n case 'uchar':\n case 'short':\n case 'ushort':\n case 'int':\n case 'uint':\n case 'int8':\n case 'uint8':\n case 'int16':\n case 'uint16':\n case 'int32':\n case 'uint32':\n return parseInt(n, 10);\n\n case 'float':\n case 'double':\n case 'float32':\n case 'float64':\n return parseFloat(n);\n\n default:\n throw new Error(type);\n }\n}\n\n/**\n * @param properties\n * @param line\n * @returns ASCII element\n */\nfunction parseASCIIElement(properties: any[], line: string) {\n const values: any = line.split(/\\s+/);\n\n const element = {};\n\n for (let i = 0; i < properties.length; i++) {\n if (properties[i].type === 'list') {\n const list: any = [];\n const n = parseASCIINumber(values.shift(), properties[i].countType);\n\n for (let j = 0; j < n; j++) {\n list.push(parseASCIINumber(values.shift(), properties[i].itemType));\n }\n\n element[properties[i].name] = list;\n } else {\n element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);\n }\n }\n\n return element;\n}\n\n/**\n * @param data\n * @param header\n * @returns [attributes]\n */\nfunction parseASCII(data: any, header: PLYHeader): PLYAttributes {\n // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n\n const attributes: PLYAttributes = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n colors: []\n };\n\n let result: RegExpExecArray | null;\n\n const patternBody = /end_header\\s([\\s\\S]*)$/;\n let body = '';\n if ((result = patternBody.exec(data)) !== null) {\n body = result[1];\n }\n\n const lines = body.split('\\n');\n let currentElement = 0;\n let currentElementCount = 0;\n\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i];\n line = line.trim();\n\n if (line !== '') {\n if (currentElementCount >= header.elements[currentElement].count) {\n currentElement++;\n currentElementCount = 0;\n }\n\n const element = parseASCIIElement(header.elements[currentElement].properties, line);\n handleElement(attributes, header.elements[currentElement].name, element);\n currentElementCount++;\n }\n }\n\n return attributes;\n}\n\n/**\n * @param buffer\n * @param elementName\n * @param element\n */\n// eslint-disable-next-line complexity\nfunction handleElement(\n buffer: {[index: string]: number[]},\n elementName: string,\n element: any = {}\n) {\n if (elementName === 'vertex') {\n buffer.vertices.push(element.x, element.y, element.z);\n\n if ('nx' in element && 'ny' in element && 'nz' in element) {\n buffer.normals.push(element.nx, element.ny, element.nz);\n }\n\n if ('s' in element && 't' in element) {\n buffer.uvs.push(element.s, element.t);\n }\n\n if ('red' in element && 'green' in element && 'blue' in element) {\n buffer.colors.push(element.red, element.green, element.blue);\n }\n } else if (elementName === 'face') {\n const vertexIndices = element.vertex_indices || element.vertex_index; // issue #9338\n\n if (vertexIndices.length === 3) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);\n } else if (vertexIndices.length === 4) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);\n buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);\n }\n }\n}\n\n/**\n * Reads binary data\n * @param dataview\n * @param at\n * @param type\n * @param littleEndian\n * @returns [number, number]\n */\n// eslint-disable-next-line complexity\nfunction binaryRead(dataview: DataView, at: number, type: any, littleEndian: boolean): number[] {\n switch (type) {\n // corespondences for non-specific length types here match rply:\n case 'int8':\n case 'char':\n return [dataview.getInt8(at), 1];\n case 'uint8':\n case 'uchar':\n return [dataview.getUint8(at), 1];\n case 'int16':\n case 'short':\n return [dataview.getInt16(at, littleEndian), 2];\n case 'uint16':\n case 'ushort':\n return [dataview.getUint16(at, littleEndian), 2];\n case 'int32':\n case 'int':\n return [dataview.getInt32(at, littleEndian), 4];\n case 'uint32':\n case 'uint':\n return [dataview.getUint32(at, littleEndian), 4];\n case 'float32':\n case 'float':\n return [dataview.getFloat32(at, littleEndian), 4];\n case 'float64':\n case 'double':\n return [dataview.getFloat64(at, littleEndian), 8];\n\n default:\n throw new Error(type);\n }\n}\n\n/**\n * Reads binary data\n * @param dataview\n * @param at\n * @param properties\n * @param littleEndian\n * @returns [object, number]\n */\nfunction binaryReadElement(\n dataview: DataView,\n at: number,\n properties: {[index: string]: any},\n littleEndian: boolean\n): {}[] {\n const element = {};\n let result: number[];\n let read = 0;\n\n for (let i = 0; i < properties.length; i++) {\n if (properties[i].type === 'list') {\n const list = [];\n\n result = binaryRead(dataview, at + read, properties[i].countType, littleEndian);\n const n = result[0];\n read += result[1];\n\n for (let j = 0; j < n; j++) {\n result = binaryRead(dataview, at + read, properties[i].itemType, littleEndian);\n // @ts-ignore\n list.push(result[0]);\n read += result[1];\n }\n\n element[properties[i].name] = list;\n } else {\n result = binaryRead(dataview, at + read, properties[i].type, littleEndian);\n element[properties[i].name] = result[0];\n read += result[1];\n }\n }\n\n return [element, read];\n}\n\ntype BinaryAttributes = {\n [index: string]: number[];\n};\n\n/**\n * Parses binary data\n * @param data\n * @param header\n * @returns [attributes] of data\n */\nfunction parseBinary(data: ArrayBuffer, header: {[index: string]: any}): BinaryAttributes {\n const attributes: BinaryAttributes = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n colors: []\n };\n\n const littleEndian = header.format === 'binary_little_endian';\n const body = new DataView(data, header.headerLength);\n let result: any[];\n let loc = 0;\n\n for (let currentElement = 0; currentElement < header.elements.length; currentElement++) {\n const count = header.elements[currentElement].count;\n for (let currentElementCount = 0; currentElementCount < count; currentElementCount++) {\n result = binaryReadElement(\n body,\n loc,\n header.elements[currentElement].properties,\n littleEndian\n );\n loc += result[1];\n const element = result[0];\n\n handleElement(attributes, header.elements[currentElement].name, element);\n }\n }\n\n return attributes;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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":""}
|
package/dist/es5/ply-loader.js
CHANGED
|
@@ -4,7 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports._typecheckPLYLoader = exports.PLYLoader = void 0;
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
var VERSION = typeof "3.3.0-alpha.7" !== 'undefined' ? "3.3.0-alpha.7" : 'latest';
|
|
9
|
+
|
|
8
10
|
var PLYLoader = {
|
|
9
11
|
name: 'PLY',
|
|
10
12
|
id: 'ply',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"ply-loader.js","names":["VERSION","PLYLoader","name","id","module","shapes","version","worker","extensions","mimeTypes","text","binary","tests","options","ply","_typecheckPLYLoader"],"sources":["../../src/ply-loader.ts"],"sourcesContent":["// PLY Loader\nimport type {Loader} from '@loaders.gl/loader-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * Worker loader for PLY - Polygon File Format (aka Stanford Triangle Format)'\n * links: ['http://paulbourke.net/dataformats/ply/',\n * 'https://en.wikipedia.org/wiki/PLY_(file_format)']\n */\nexport const PLYLoader = {\n name: 'PLY',\n id: 'ply',\n module: 'ply',\n shapes: ['mesh', 'gltf', 'columnar-table'],\n version: VERSION,\n worker: true,\n extensions: ['ply'],\n mimeTypes: ['text/plain', 'application/octet-stream'],\n text: true,\n binary: true,\n tests: ['ply'],\n options: {\n ply: {}\n }\n};\n\nexport const _typecheckPLYLoader: Loader = PLYLoader;\n"],"mappings":";;;;;;;AAKA,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;;AAOpE,IAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC;EAC1CC,OAAO,EAAEN,OAAO;EAChBO,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,YAAY,EAAE,0BAA0B,CAAC;EACrDC,IAAI,EAAE,IAAI;EACVC,MAAM,EAAE,IAAI;EACZC,KAAK,EAAE,CAAC,KAAK,CAAC;EACdC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR;AACF,CAAC;AAAC;AAEK,IAAMC,mBAA2B,GAAGd,SAAS;AAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"ply-worker.js","names":["createLoaderWorker","PLYLoader"],"sources":["../../../src/workers/ply-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {PLYLoader} from '../index';\n\ncreateLoaderWorker(PLYLoader);\n"],"mappings":";;AAAA;AACA;AAEA,IAAAA,+BAAkB,EAACC,gBAAS,CAAC"}
|
package/dist/esm/bundle.js
CHANGED
package/dist/esm/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { PLYLoader as PLYWorkerLoader } from './ply-loader';
|
|
2
2
|
import parsePLY from './lib/parse-ply';
|
|
3
3
|
import parsePLYInBatches from './lib/parse-ply-in-batches';
|
|
4
|
+
|
|
4
5
|
export { PLYWorkerLoader };
|
|
5
|
-
|
|
6
|
+
|
|
7
|
+
export const PLYLoader = {
|
|
8
|
+
...PLYWorkerLoader,
|
|
6
9
|
parse: async (arrayBuffer, options) => parsePLY(arrayBuffer, options),
|
|
7
10
|
parseTextSync: parsePLY,
|
|
8
11
|
parseSync: parsePLY,
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","names":["PLYLoader","PLYWorkerLoader","parsePLY","parsePLYInBatches","parse","arrayBuffer","options","parseTextSync","parseSync","parseInBatches","_typecheckPLYLoader"],"sources":["../../src/index.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {PLYLoader as PLYWorkerLoader} from './ply-loader';\nimport parsePLY from './lib/parse-ply';\nimport parsePLYInBatches from './lib/parse-ply-in-batches';\n\n// PLYLoader\n\nexport {PLYWorkerLoader};\n\n/**\n * Loader for PLY - Polygon File Format\n */\nexport const PLYLoader = {\n ...PLYWorkerLoader,\n // Note: parsePLY supports both text and binary\n parse: async (arrayBuffer, options) => parsePLY(arrayBuffer, options), // TODO - this may not detect text correctly?\n parseTextSync: parsePLY,\n parseSync: parsePLY,\n parseInBatches: parsePLYInBatches\n};\n\nexport const _typecheckPLYLoader: LoaderWithParser = PLYLoader;\n"],"mappings":"AACA,SAAQA,SAAS,IAAIC,eAAe,QAAO,cAAc;AACzD,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,OAAOC,iBAAiB,MAAM,4BAA4B;;AAI1D,SAAQF,eAAe;;AAKvB,OAAO,MAAMD,SAAS,GAAG;EACvB,GAAGC,eAAe;EAElBG,KAAK,EAAE,OAAOC,WAAW,EAAEC,OAAO,KAAKJ,QAAQ,CAACG,WAAW,EAAEC,OAAO,CAAC;EACrEC,aAAa,EAAEL,QAAQ;EACvBM,SAAS,EAAEN,QAAQ;EACnBO,cAAc,EAAEN;AAClB,CAAC;AAED,OAAO,MAAMO,mBAAqC,GAAGV,SAAS"}
|
|
@@ -9,19 +9,15 @@ function makeMetadataFromPlyHeader(plyHeader) {
|
|
|
9
9
|
const metadataMap = new Map();
|
|
10
10
|
metadataMap.set('ply_comments', JSON.stringify(plyHeader.comments));
|
|
11
11
|
metadataMap.set('ply_elements', JSON.stringify(plyHeader.elements));
|
|
12
|
-
|
|
13
12
|
if (plyHeader.format !== undefined) {
|
|
14
13
|
metadataMap.set('ply_format', plyHeader.format);
|
|
15
14
|
}
|
|
16
|
-
|
|
17
15
|
if (plyHeader.version !== undefined) {
|
|
18
16
|
metadataMap.set('ply_version', plyHeader.version);
|
|
19
17
|
}
|
|
20
|
-
|
|
21
18
|
if (plyHeader.headerLength !== undefined) {
|
|
22
19
|
metadataMap.set('ply_headerLength', plyHeader.headerLength.toString(10));
|
|
23
20
|
}
|
|
24
|
-
|
|
25
21
|
return metadataMap;
|
|
26
22
|
}
|
|
27
23
|
//# sourceMappingURL=get-ply-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"get-ply-schema.js","names":["deduceMeshSchema","getPLYSchema","plyHeader","attributes","metadataMap","makeMetadataFromPlyHeader","schema","Map","set","JSON","stringify","comments","elements","format","undefined","version","headerLength","toString"],"sources":["../../../src/lib/get-ply-schema.ts"],"sourcesContent":["import {Schema, MeshAttributes, deduceMeshSchema} from '@loaders.gl/schema';\nimport type {PLYHeader} from './ply-types';\n\n/**\n * Gets schema from PLY header\n * @param plyHeader\n * @param metadata\n * @returns Schema\n */\nexport function getPLYSchema(plyHeader: PLYHeader, attributes: MeshAttributes): Schema {\n const metadataMap = makeMetadataFromPlyHeader(plyHeader);\n const schema = deduceMeshSchema(attributes, metadataMap);\n return schema;\n}\n\n/**\n * Make arrow like schema metadata by PlyHeader properties\n * @param plyHeader\n * @returns\n */\nfunction makeMetadataFromPlyHeader(plyHeader: PLYHeader): Map<string, string> {\n const metadataMap = new Map();\n metadataMap.set('ply_comments', JSON.stringify(plyHeader.comments));\n metadataMap.set('ply_elements', JSON.stringify(plyHeader.elements));\n if (plyHeader.format !== undefined) {\n metadataMap.set('ply_format', plyHeader.format);\n }\n if (plyHeader.version !== undefined) {\n metadataMap.set('ply_version', plyHeader.version);\n }\n if (plyHeader.headerLength !== undefined) {\n metadataMap.set('ply_headerLength', plyHeader.headerLength.toString(10));\n }\n return metadataMap;\n}\n"],"mappings":"AAAA,SAAgCA,gBAAgB,QAAO,oBAAoB;AAS3E,OAAO,SAASC,YAAY,CAACC,SAAoB,EAAEC,UAA0B,EAAU;EACrF,MAAMC,WAAW,GAAGC,yBAAyB,CAACH,SAAS,CAAC;EACxD,MAAMI,MAAM,GAAGN,gBAAgB,CAACG,UAAU,EAAEC,WAAW,CAAC;EACxD,OAAOE,MAAM;AACf;;AAOA,SAASD,yBAAyB,CAACH,SAAoB,EAAuB;EAC5E,MAAME,WAAW,GAAG,IAAIG,GAAG,EAAE;EAC7BH,WAAW,CAACI,GAAG,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAACR,SAAS,CAACS,QAAQ,CAAC,CAAC;EACnEP,WAAW,CAACI,GAAG,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAACR,SAAS,CAACU,QAAQ,CAAC,CAAC;EACnE,IAAIV,SAAS,CAACW,MAAM,KAAKC,SAAS,EAAE;IAClCV,WAAW,CAACI,GAAG,CAAC,YAAY,EAAEN,SAAS,CAACW,MAAM,CAAC;EACjD;EACA,IAAIX,SAAS,CAACa,OAAO,KAAKD,SAAS,EAAE;IACnCV,WAAW,CAACI,GAAG,CAAC,aAAa,EAAEN,SAAS,CAACa,OAAO,CAAC;EACnD;EACA,IAAIb,SAAS,CAACc,YAAY,KAAKF,SAAS,EAAE;IACxCV,WAAW,CAACI,GAAG,CAAC,kBAAkB,EAAEN,SAAS,CAACc,YAAY,CAACC,QAAQ,CAAC,EAAE,CAAC,CAAC;EAC1E;EACA,OAAOb,WAAW;AACpB"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { getMeshBoundingBox } from '@loaders.gl/schema';
|
|
2
2
|
import { getPLYSchema } from './get-ply-schema';
|
|
3
|
+
|
|
3
4
|
export default function normalizePLY(plyHeader, plyAttributes, options) {
|
|
4
5
|
const attributes = getMeshAttributes(plyAttributes);
|
|
5
6
|
const boundingBox = getMeshBoundingBox(attributes);
|
|
6
7
|
const vertexCount = plyAttributes.indices.length || plyAttributes.vertices.length / 3;
|
|
8
|
+
|
|
7
9
|
const isTriangles = plyAttributes.indices && plyAttributes.indices.length > 0;
|
|
8
10
|
const mode = isTriangles ? 4 : 0;
|
|
9
11
|
const topology = isTriangles ? 'triangle-list' : 'point-list';
|
|
@@ -24,14 +26,12 @@ export default function normalizePLY(plyHeader, plyAttributes, options) {
|
|
|
24
26
|
mode,
|
|
25
27
|
topology
|
|
26
28
|
};
|
|
27
|
-
|
|
28
29
|
if (plyAttributes.indices.length > 0) {
|
|
29
30
|
plyMesh.indices = {
|
|
30
31
|
value: new Uint32Array(plyAttributes.indices),
|
|
31
32
|
size: 1
|
|
32
33
|
};
|
|
33
34
|
}
|
|
34
|
-
|
|
35
35
|
return plyMesh;
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -48,14 +48,12 @@ function getMeshAttributes(attributes) {
|
|
|
48
48
|
size: 3
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
|
-
|
|
52
51
|
if (attributes.uvs.length > 0) {
|
|
53
52
|
accessors.TEXCOORD_0 = {
|
|
54
53
|
value: new Float32Array(attributes.uvs),
|
|
55
54
|
size: 2
|
|
56
55
|
};
|
|
57
56
|
}
|
|
58
|
-
|
|
59
57
|
if (attributes.colors.length > 0) {
|
|
60
58
|
accessors.COLOR_0 = {
|
|
61
59
|
value: new Uint8Array(attributes.colors),
|
|
@@ -63,7 +61,6 @@ function getMeshAttributes(attributes) {
|
|
|
63
61
|
normalized: true
|
|
64
62
|
};
|
|
65
63
|
}
|
|
66
|
-
|
|
67
64
|
return accessors;
|
|
68
65
|
}
|
|
69
66
|
//# sourceMappingURL=normalize-ply.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"normalize-ply.js","names":["getMeshBoundingBox","getPLYSchema","normalizePLY","plyHeader","plyAttributes","options","attributes","getMeshAttributes","boundingBox","vertexCount","indices","length","vertices","isTriangles","mode","topology","schema","plyMesh","loader","loaderData","header","value","Uint32Array","size","accessors","POSITION","Float32Array","normals","NORMAL","uvs","TEXCOORD_0","colors","COLOR_0","Uint8Array","normalized"],"sources":["../../../src/lib/normalize-ply.ts"],"sourcesContent":["import type {MeshAttributes} from '@loaders.gl/schema';\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport type {PLYMesh, PLYHeader, PLYAttributes, MeshHeader} from './ply-types';\nimport {getPLYSchema} from './get-ply-schema';\n\n/**\n * @param header\n * @param attributes\n * @returns data and header\n */\nexport default function normalizePLY(\n plyHeader: MeshHeader & PLYHeader,\n plyAttributes: PLYAttributes,\n options?: {}\n): PLYMesh {\n const attributes = getMeshAttributes(plyAttributes);\n const boundingBox = getMeshBoundingBox(attributes);\n const vertexCount = plyAttributes.indices.length || plyAttributes.vertices.length / 3;\n\n // TODO - how to detect POINT CLOUDS vs MESHES?\n // TODO - For Meshes, PLY quadrangles must be split?\n const isTriangles = plyAttributes.indices && plyAttributes.indices.length > 0;\n const mode = isTriangles ? 4 : 0; // TRIANGLES vs POINTS\n const topology = isTriangles ? 'triangle-list' : 'point-list';\n\n const schema = getPLYSchema(plyHeader, attributes);\n\n const plyMesh: PLYMesh = {\n loader: 'ply',\n loaderData: plyHeader,\n header: {\n vertexCount,\n boundingBox\n },\n schema,\n attributes,\n indices: {value: new Uint32Array(0), size: 0},\n mode,\n topology\n };\n\n if (plyAttributes.indices.length > 0) {\n plyMesh.indices = {value: new Uint32Array(plyAttributes.indices), size: 1};\n }\n\n return plyMesh;\n}\n\n/**\n * @param attributes\n * @returns accessors []\n */\nfunction getMeshAttributes(attributes: PLYAttributes): MeshAttributes {\n const accessors: MeshAttributes = {};\n\n accessors.POSITION = {value: new Float32Array(attributes.vertices), size: 3};\n\n // optional attributes data\n\n if (attributes.normals.length > 0) {\n accessors.NORMAL = {value: new Float32Array(attributes.normals), size: 3};\n }\n\n if (attributes.uvs.length > 0) {\n accessors.TEXCOORD_0 = {value: new Float32Array(attributes.uvs), size: 2};\n }\n\n if (attributes.colors.length > 0) {\n // TODO - normalized shoud be based on `uchar` flag in source data?\n accessors.COLOR_0 = {value: new Uint8Array(attributes.colors), size: 3, normalized: true};\n }\n\n return accessors;\n}\n"],"mappings":"AACA,SAAQA,kBAAkB,QAAO,oBAAoB;AAErD,SAAQC,YAAY,QAAO,kBAAkB;;AAO7C,eAAe,SAASC,YAAY,CAClCC,SAAiC,EACjCC,aAA4B,EAC5BC,OAAY,EACH;EACT,MAAMC,UAAU,GAAGC,iBAAiB,CAACH,aAAa,CAAC;EACnD,MAAMI,WAAW,GAAGR,kBAAkB,CAACM,UAAU,CAAC;EAClD,MAAMG,WAAW,GAAGL,aAAa,CAACM,OAAO,CAACC,MAAM,IAAIP,aAAa,CAACQ,QAAQ,CAACD,MAAM,GAAG,CAAC;;EAIrF,MAAME,WAAW,GAAGT,aAAa,CAACM,OAAO,IAAIN,aAAa,CAACM,OAAO,CAACC,MAAM,GAAG,CAAC;EAC7E,MAAMG,IAAI,GAAGD,WAAW,GAAG,CAAC,GAAG,CAAC;EAChC,MAAME,QAAQ,GAAGF,WAAW,GAAG,eAAe,GAAG,YAAY;EAE7D,MAAMG,MAAM,GAAGf,YAAY,CAACE,SAAS,EAAEG,UAAU,CAAC;EAElD,MAAMW,OAAgB,GAAG;IACvBC,MAAM,EAAE,KAAK;IACbC,UAAU,EAAEhB,SAAS;IACrBiB,MAAM,EAAE;MACNX,WAAW;MACXD;IACF,CAAC;IACDQ,MAAM;IACNV,UAAU;IACVI,OAAO,EAAE;MAACW,KAAK,EAAE,IAAIC,WAAW,CAAC,CAAC,CAAC;MAAEC,IAAI,EAAE;IAAC,CAAC;IAC7CT,IAAI;IACJC;EACF,CAAC;EAED,IAAIX,aAAa,CAACM,OAAO,CAACC,MAAM,GAAG,CAAC,EAAE;IACpCM,OAAO,CAACP,OAAO,GAAG;MAACW,KAAK,EAAE,IAAIC,WAAW,CAAClB,aAAa,CAACM,OAAO,CAAC;MAAEa,IAAI,EAAE;IAAC,CAAC;EAC5E;EAEA,OAAON,OAAO;AAChB;;AAMA,SAASV,iBAAiB,CAACD,UAAyB,EAAkB;EACpE,MAAMkB,SAAyB,GAAG,CAAC,CAAC;EAEpCA,SAAS,CAACC,QAAQ,GAAG;IAACJ,KAAK,EAAE,IAAIK,YAAY,CAACpB,UAAU,CAACM,QAAQ,CAAC;IAAEW,IAAI,EAAE;EAAC,CAAC;;EAI5E,IAAIjB,UAAU,CAACqB,OAAO,CAAChB,MAAM,GAAG,CAAC,EAAE;IACjCa,SAAS,CAACI,MAAM,GAAG;MAACP,KAAK,EAAE,IAAIK,YAAY,CAACpB,UAAU,CAACqB,OAAO,CAAC;MAAEJ,IAAI,EAAE;IAAC,CAAC;EAC3E;EAEA,IAAIjB,UAAU,CAACuB,GAAG,CAAClB,MAAM,GAAG,CAAC,EAAE;IAC7Ba,SAAS,CAACM,UAAU,GAAG;MAACT,KAAK,EAAE,IAAIK,YAAY,CAACpB,UAAU,CAACuB,GAAG,CAAC;MAAEN,IAAI,EAAE;IAAC,CAAC;EAC3E;EAEA,IAAIjB,UAAU,CAACyB,MAAM,CAACpB,MAAM,GAAG,CAAC,EAAE;IAEhCa,SAAS,CAACQ,OAAO,GAAG;MAACX,KAAK,EAAE,IAAIY,UAAU,CAAC3B,UAAU,CAACyB,MAAM,CAAC;MAAER,IAAI,EAAE,CAAC;MAAEW,UAAU,EAAE;IAAI,CAAC;EAC3F;EAEA,OAAOV,SAAS;AAClB"}
|