@loaders.gl/obj 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 -21
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/get-obj-schema.js +0 -10
- package/dist/es5/lib/get-obj-schema.js.map +1 -1
- package/dist/es5/lib/obj-types.js.map +1 -1
- package/dist/es5/lib/parse-mtl.js +3 -22
- package/dist/es5/lib/parse-mtl.js.map +1 -1
- package/dist/es5/lib/parse-obj-meshes.js +20 -74
- package/dist/es5/lib/parse-obj-meshes.js.map +1 -1
- package/dist/es5/lib/parse-obj.js +7 -24
- package/dist/es5/lib/parse-obj.js.map +1 -1
- package/dist/es5/mtl-loader.js +2 -1
- package/dist/es5/mtl-loader.js.map +1 -1
- package/dist/es5/obj-loader.js +1 -3
- package/dist/es5/obj-loader.js.map +1 -1
- package/dist/es5/workers/obj-worker.js +0 -2
- package/dist/es5/workers/obj-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 +7 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/get-obj-schema.js +2 -9
- package/dist/esm/lib/get-obj-schema.js.map +1 -1
- package/dist/esm/lib/obj-types.js.map +1 -1
- package/dist/esm/lib/parse-mtl.js +5 -16
- package/dist/esm/lib/parse-mtl.js.map +1 -1
- package/dist/esm/lib/parse-obj-meshes.js +23 -76
- package/dist/esm/lib/parse-obj-meshes.js.map +1 -1
- package/dist/esm/lib/parse-obj.js +2 -10
- package/dist/esm/lib/parse-obj.js.map +1 -1
- package/dist/esm/mtl-loader.js +3 -1
- package/dist/esm/mtl-loader.js.map +1 -1
- package/dist/esm/obj-loader.js +2 -3
- package/dist/esm/obj-loader.js.map +1 -1
- package/dist/esm/workers/obj-worker.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/obj-worker.js +2 -2
- package/package.json +4 -4
|
@@ -1,34 +1,27 @@
|
|
|
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.parseOBJMeshes = parseOBJMeshes;
|
|
9
|
-
|
|
10
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
-
|
|
12
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
10
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
15
|
-
|
|
16
11
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
17
|
-
|
|
18
12
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
19
13
|
|
|
20
14
|
var OBJECT_RE = /^[og]\s*(.+)?/;
|
|
21
15
|
var MATERIAL_RE = /^mtllib /;
|
|
22
16
|
var MATERIAL_USE_RE = /^usemtl /;
|
|
23
|
-
|
|
24
17
|
var MeshMaterial = function () {
|
|
25
18
|
function MeshMaterial(_ref) {
|
|
26
19
|
var index = _ref.index,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
20
|
+
_ref$name = _ref.name,
|
|
21
|
+
name = _ref$name === void 0 ? '' : _ref$name,
|
|
22
|
+
mtllib = _ref.mtllib,
|
|
23
|
+
smooth = _ref.smooth,
|
|
24
|
+
groupStart = _ref.groupStart;
|
|
32
25
|
(0, _classCallCheck2.default)(this, MeshMaterial);
|
|
33
26
|
this.index = index;
|
|
34
27
|
this.name = name;
|
|
@@ -39,7 +32,6 @@ var MeshMaterial = function () {
|
|
|
39
32
|
this.groupCount = -1;
|
|
40
33
|
this.inherited = false;
|
|
41
34
|
}
|
|
42
|
-
|
|
43
35
|
(0, _createClass2.default)(MeshMaterial, [{
|
|
44
36
|
key: "clone",
|
|
45
37
|
value: function clone() {
|
|
@@ -55,7 +47,6 @@ var MeshMaterial = function () {
|
|
|
55
47
|
}]);
|
|
56
48
|
return MeshMaterial;
|
|
57
49
|
}();
|
|
58
|
-
|
|
59
50
|
var MeshObject = function () {
|
|
60
51
|
function MeshObject() {
|
|
61
52
|
var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
@@ -71,7 +62,6 @@ var MeshObject = function () {
|
|
|
71
62
|
this.smooth = true;
|
|
72
63
|
this.fromDeclaration = null;
|
|
73
64
|
}
|
|
74
|
-
|
|
75
65
|
(0, _createClass2.default)(MeshObject, [{
|
|
76
66
|
key: "startMaterial",
|
|
77
67
|
value: function startMaterial(name, libraries) {
|
|
@@ -80,7 +70,6 @@ var MeshObject = function () {
|
|
|
80
70
|
if (previous && (previous.inherited || previous.groupCount <= 0)) {
|
|
81
71
|
this.materials.splice(previous.index, 1);
|
|
82
72
|
}
|
|
83
|
-
|
|
84
73
|
var material = new MeshMaterial({
|
|
85
74
|
index: this.materials.length,
|
|
86
75
|
name: name,
|
|
@@ -97,14 +86,12 @@ var MeshObject = function () {
|
|
|
97
86
|
if (this.materials.length > 0) {
|
|
98
87
|
return this.materials[this.materials.length - 1];
|
|
99
88
|
}
|
|
100
|
-
|
|
101
89
|
return undefined;
|
|
102
90
|
}
|
|
103
91
|
}, {
|
|
104
92
|
key: "_finalize",
|
|
105
93
|
value: function _finalize(end) {
|
|
106
94
|
var lastMultiMaterial = this.currentMaterial();
|
|
107
|
-
|
|
108
95
|
if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {
|
|
109
96
|
lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;
|
|
110
97
|
lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;
|
|
@@ -125,13 +112,11 @@ var MeshObject = function () {
|
|
|
125
112
|
smooth: this.smooth
|
|
126
113
|
});
|
|
127
114
|
}
|
|
128
|
-
|
|
129
115
|
return lastMultiMaterial;
|
|
130
116
|
}
|
|
131
117
|
}]);
|
|
132
118
|
return MeshObject;
|
|
133
119
|
}();
|
|
134
|
-
|
|
135
120
|
var ParserState = function () {
|
|
136
121
|
function ParserState() {
|
|
137
122
|
(0, _classCallCheck2.default)(this, ParserState);
|
|
@@ -144,24 +129,19 @@ var ParserState = function () {
|
|
|
144
129
|
this.materialLibraries = [];
|
|
145
130
|
this.startObject('', false);
|
|
146
131
|
}
|
|
147
|
-
|
|
148
132
|
(0, _createClass2.default)(ParserState, [{
|
|
149
133
|
key: "startObject",
|
|
150
134
|
value: function startObject(name) {
|
|
151
135
|
var fromDeclaration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
152
|
-
|
|
153
136
|
if (this.object && !this.object.fromDeclaration) {
|
|
154
137
|
this.object.name = name;
|
|
155
138
|
this.object.fromDeclaration = fromDeclaration;
|
|
156
139
|
return;
|
|
157
140
|
}
|
|
158
|
-
|
|
159
141
|
var previousMaterial = this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined;
|
|
160
|
-
|
|
161
142
|
if (this.object && typeof this.object._finalize === 'function') {
|
|
162
143
|
this.object._finalize(true);
|
|
163
144
|
}
|
|
164
|
-
|
|
165
145
|
this.object = new MeshObject(name);
|
|
166
146
|
this.object.fromDeclaration = fromDeclaration;
|
|
167
147
|
|
|
@@ -170,7 +150,6 @@ var ParserState = function () {
|
|
|
170
150
|
declared.inherited = true;
|
|
171
151
|
this.object.materials.push(declared);
|
|
172
152
|
}
|
|
173
|
-
|
|
174
153
|
this.objects.push(this.object);
|
|
175
154
|
}
|
|
176
155
|
}, {
|
|
@@ -255,15 +234,16 @@ var ParserState = function () {
|
|
|
255
234
|
var dst = this.object.geometry.uvs;
|
|
256
235
|
dst.push(src[a + 0], src[a + 1]);
|
|
257
236
|
}
|
|
237
|
+
|
|
258
238
|
}, {
|
|
259
239
|
key: "addFace",
|
|
260
|
-
value:
|
|
240
|
+
value:
|
|
241
|
+
function addFace(a, b, c, ua, ub, uc, na, nb, nc) {
|
|
261
242
|
var vLen = this.vertices.length;
|
|
262
243
|
var ia = this.parseVertexIndex(a, vLen);
|
|
263
244
|
var ib = this.parseVertexIndex(b, vLen);
|
|
264
245
|
var ic = this.parseVertexIndex(c, vLen);
|
|
265
246
|
this.addVertex(ia, ib, ic);
|
|
266
|
-
|
|
267
247
|
if (ua !== undefined && ua !== '') {
|
|
268
248
|
var uvLen = this.uvs.length;
|
|
269
249
|
ia = this.parseUVIndex(ua, uvLen);
|
|
@@ -271,7 +251,6 @@ var ParserState = function () {
|
|
|
271
251
|
ic = this.parseUVIndex(uc, uvLen);
|
|
272
252
|
this.addUV(ia, ib, ic);
|
|
273
253
|
}
|
|
274
|
-
|
|
275
254
|
if (na !== undefined && na !== '') {
|
|
276
255
|
var nLen = this.normals.length;
|
|
277
256
|
ia = this.parseNormalIndex(na, nLen);
|
|
@@ -279,7 +258,6 @@ var ParserState = function () {
|
|
|
279
258
|
ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);
|
|
280
259
|
this.addNormal(ia, ib, ic);
|
|
281
260
|
}
|
|
282
|
-
|
|
283
261
|
if (this.colors.length > 0) {
|
|
284
262
|
this.addColor(ia, ib, ic);
|
|
285
263
|
}
|
|
@@ -289,10 +267,8 @@ var ParserState = function () {
|
|
|
289
267
|
value: function addPointGeometry(vertices) {
|
|
290
268
|
this.object.geometry.type = 'Points';
|
|
291
269
|
var vLen = this.vertices.length;
|
|
292
|
-
|
|
293
270
|
var _iterator = _createForOfIteratorHelper(vertices),
|
|
294
|
-
|
|
295
|
-
|
|
271
|
+
_step;
|
|
296
272
|
try {
|
|
297
273
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
298
274
|
var vertex = _step.value;
|
|
@@ -310,10 +286,8 @@ var ParserState = function () {
|
|
|
310
286
|
this.object.geometry.type = 'Line';
|
|
311
287
|
var vLen = this.vertices.length;
|
|
312
288
|
var uvLen = this.uvs.length;
|
|
313
|
-
|
|
314
289
|
var _iterator2 = _createForOfIteratorHelper(vertices),
|
|
315
|
-
|
|
316
|
-
|
|
290
|
+
_step2;
|
|
317
291
|
try {
|
|
318
292
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
319
293
|
var vertex = _step2.value;
|
|
@@ -324,10 +298,8 @@ var ParserState = function () {
|
|
|
324
298
|
} finally {
|
|
325
299
|
_iterator2.f();
|
|
326
300
|
}
|
|
327
|
-
|
|
328
301
|
var _iterator3 = _createForOfIteratorHelper(uvs),
|
|
329
|
-
|
|
330
|
-
|
|
302
|
+
_step3;
|
|
331
303
|
try {
|
|
332
304
|
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
333
305
|
var uv = _step3.value;
|
|
@@ -342,23 +314,20 @@ var ParserState = function () {
|
|
|
342
314
|
}]);
|
|
343
315
|
return ParserState;
|
|
344
316
|
}();
|
|
345
|
-
|
|
346
317
|
function parseOBJMeshes(text) {
|
|
347
318
|
var state = new ParserState();
|
|
348
|
-
|
|
349
319
|
if (text.indexOf('\r\n') !== -1) {
|
|
350
320
|
text = text.replace(/\r\n/g, '\n');
|
|
351
321
|
}
|
|
352
|
-
|
|
353
322
|
if (text.indexOf('\\\n') !== -1) {
|
|
354
323
|
text = text.replace(/\\\n/g, '');
|
|
355
324
|
}
|
|
356
|
-
|
|
357
325
|
var lines = text.split('\n');
|
|
358
326
|
var line = '';
|
|
359
327
|
var lineFirstChar = '';
|
|
360
328
|
var lineLength = 0;
|
|
361
329
|
var result = [];
|
|
330
|
+
|
|
362
331
|
var trimLeft = typeof ''.trimLeft === 'function';
|
|
363
332
|
|
|
364
333
|
for (var i = 0, l = lines.length; i < l; i++) {
|
|
@@ -367,29 +336,23 @@ function parseOBJMeshes(text) {
|
|
|
367
336
|
lineLength = line.length;
|
|
368
337
|
if (lineLength === 0) continue;
|
|
369
338
|
lineFirstChar = line.charAt(0);
|
|
370
|
-
if (lineFirstChar === '#') continue;
|
|
371
339
|
|
|
340
|
+
if (lineFirstChar === '#') continue;
|
|
372
341
|
if (lineFirstChar === 'v') {
|
|
373
342
|
var data = line.split(/\s+/);
|
|
374
|
-
|
|
375
343
|
switch (data[0]) {
|
|
376
344
|
case 'v':
|
|
377
345
|
state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));
|
|
378
|
-
|
|
379
346
|
if (data.length === 8) {
|
|
380
347
|
state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]));
|
|
381
348
|
}
|
|
382
|
-
|
|
383
349
|
break;
|
|
384
|
-
|
|
385
350
|
case 'vn':
|
|
386
351
|
state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));
|
|
387
352
|
break;
|
|
388
|
-
|
|
389
353
|
case 'vt':
|
|
390
354
|
state.uvs.push(parseFloat(data[1]), parseFloat(data[2]));
|
|
391
355
|
break;
|
|
392
|
-
|
|
393
356
|
default:
|
|
394
357
|
}
|
|
395
358
|
} else if (lineFirstChar === 'f') {
|
|
@@ -399,7 +362,6 @@ function parseOBJMeshes(text) {
|
|
|
399
362
|
|
|
400
363
|
for (var j = 0, jl = vertexData.length; j < jl; j++) {
|
|
401
364
|
var vertex = vertexData[j];
|
|
402
|
-
|
|
403
365
|
if (vertex.length > 0) {
|
|
404
366
|
var vertexParts = vertex.split('/');
|
|
405
367
|
faceVertices.push(vertexParts);
|
|
@@ -407,7 +369,6 @@ function parseOBJMeshes(text) {
|
|
|
407
369
|
}
|
|
408
370
|
|
|
409
371
|
var v1 = faceVertices[0];
|
|
410
|
-
|
|
411
372
|
for (var _j = 1, _jl = faceVertices.length - 1; _j < _jl; _j++) {
|
|
412
373
|
var v2 = faceVertices[_j];
|
|
413
374
|
var v3 = faceVertices[_j + 1];
|
|
@@ -417,32 +378,31 @@ function parseOBJMeshes(text) {
|
|
|
417
378
|
var lineParts = line.substring(1).trim().split(' ');
|
|
418
379
|
var lineVertices = void 0;
|
|
419
380
|
var lineUVs = [];
|
|
420
|
-
|
|
421
381
|
if (line.indexOf('/') === -1) {
|
|
422
382
|
lineVertices = lineParts;
|
|
423
383
|
} else {
|
|
424
384
|
lineVertices = [];
|
|
425
|
-
|
|
426
385
|
for (var li = 0, llen = lineParts.length; li < llen; li++) {
|
|
427
386
|
var parts = lineParts[li].split('/');
|
|
428
387
|
if (parts[0] !== '') lineVertices.push(parts[0]);
|
|
429
388
|
if (parts[1] !== '') lineUVs.push(parts[1]);
|
|
430
389
|
}
|
|
431
390
|
}
|
|
432
|
-
|
|
433
391
|
state.addLineGeometry(lineVertices, lineUVs);
|
|
434
392
|
} else if (lineFirstChar === 'p') {
|
|
435
393
|
var _lineData = line.substr(1).trim();
|
|
436
|
-
|
|
437
394
|
var pointData = _lineData.split(' ');
|
|
438
|
-
|
|
439
395
|
state.addPointGeometry(pointData);
|
|
440
396
|
} else if ((result = OBJECT_RE.exec(line)) !== null) {
|
|
397
|
+
|
|
441
398
|
var name = (' ' + result[0].substr(1).trim()).substr(1);
|
|
399
|
+
|
|
442
400
|
state.startObject(name);
|
|
443
401
|
} else if (MATERIAL_USE_RE.test(line)) {
|
|
402
|
+
|
|
444
403
|
state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);
|
|
445
404
|
} else if (MATERIAL_RE.test(line)) {
|
|
405
|
+
|
|
446
406
|
state.materialLibraries.push(line.substring(7).trim());
|
|
447
407
|
} else if (lineFirstChar === 's') {
|
|
448
408
|
result = line.split(' ');
|
|
@@ -453,7 +413,6 @@ function parseOBJMeshes(text) {
|
|
|
453
413
|
} else {
|
|
454
414
|
state.object.smooth = true;
|
|
455
415
|
}
|
|
456
|
-
|
|
457
416
|
var material = state.object.currentMaterial();
|
|
458
417
|
if (material) material.smooth = state.object.smooth;
|
|
459
418
|
} else {
|
|
@@ -461,18 +420,16 @@ function parseOBJMeshes(text) {
|
|
|
461
420
|
throw new Error("Unexpected line: \"".concat(line, "\""));
|
|
462
421
|
}
|
|
463
422
|
}
|
|
464
|
-
|
|
465
423
|
state.finalize();
|
|
466
424
|
var meshes = [];
|
|
467
425
|
var materials = [];
|
|
468
|
-
|
|
469
426
|
var _iterator4 = _createForOfIteratorHelper(state.objects),
|
|
470
|
-
|
|
471
|
-
|
|
427
|
+
_step4;
|
|
472
428
|
try {
|
|
473
429
|
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
474
430
|
var object = _step4.value;
|
|
475
431
|
var geometry = object.geometry;
|
|
432
|
+
|
|
476
433
|
if (geometry.vertices.length === 0) continue;
|
|
477
434
|
var mesh = {
|
|
478
435
|
header: {
|
|
@@ -480,40 +437,33 @@ function parseOBJMeshes(text) {
|
|
|
480
437
|
},
|
|
481
438
|
attributes: {}
|
|
482
439
|
};
|
|
483
|
-
|
|
484
440
|
switch (geometry.type) {
|
|
485
441
|
case 'Points':
|
|
486
442
|
mesh.mode = 0;
|
|
487
443
|
break;
|
|
488
|
-
|
|
489
444
|
case 'Line':
|
|
490
445
|
mesh.mode = 1;
|
|
491
446
|
break;
|
|
492
|
-
|
|
493
447
|
default:
|
|
494
448
|
mesh.mode = 4;
|
|
495
449
|
break;
|
|
496
450
|
}
|
|
497
|
-
|
|
498
451
|
mesh.attributes.POSITION = {
|
|
499
452
|
value: new Float32Array(geometry.vertices),
|
|
500
453
|
size: 3
|
|
501
454
|
};
|
|
502
|
-
|
|
503
455
|
if (geometry.normals.length > 0) {
|
|
504
456
|
mesh.attributes.NORMAL = {
|
|
505
457
|
value: new Float32Array(geometry.normals),
|
|
506
458
|
size: 3
|
|
507
459
|
};
|
|
508
460
|
}
|
|
509
|
-
|
|
510
461
|
if (geometry.colors.length > 0) {
|
|
511
462
|
mesh.attributes.COLOR_0 = {
|
|
512
463
|
value: new Float32Array(geometry.colors),
|
|
513
464
|
size: 3
|
|
514
465
|
};
|
|
515
466
|
}
|
|
516
|
-
|
|
517
467
|
if (geometry.uvs.length > 0) {
|
|
518
468
|
mesh.attributes.TEXCOORD_0 = {
|
|
519
469
|
value: new Float32Array(geometry.uvs),
|
|
@@ -522,10 +472,8 @@ function parseOBJMeshes(text) {
|
|
|
522
472
|
}
|
|
523
473
|
|
|
524
474
|
mesh.materials = [];
|
|
525
|
-
|
|
526
475
|
var _iterator5 = _createForOfIteratorHelper(object.materials),
|
|
527
|
-
|
|
528
|
-
|
|
476
|
+
_step5;
|
|
529
477
|
try {
|
|
530
478
|
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
531
479
|
var sourceMaterial = _step5.value;
|
|
@@ -541,7 +489,6 @@ function parseOBJMeshes(text) {
|
|
|
541
489
|
} finally {
|
|
542
490
|
_iterator5.f();
|
|
543
491
|
}
|
|
544
|
-
|
|
545
492
|
mesh.name = object.name;
|
|
546
493
|
meshes.push(mesh);
|
|
547
494
|
}
|
|
@@ -550,7 +497,6 @@ function parseOBJMeshes(text) {
|
|
|
550
497
|
} finally {
|
|
551
498
|
_iterator4.f();
|
|
552
499
|
}
|
|
553
|
-
|
|
554
500
|
return {
|
|
555
501
|
meshes: meshes,
|
|
556
502
|
materials: materials
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/parse-obj-meshes.ts"],"names":["OBJECT_RE","MATERIAL_RE","MATERIAL_USE_RE","MeshMaterial","index","name","mtllib","smooth","groupStart","groupEnd","groupCount","inherited","MeshObject","geometry","vertices","normals","colors","uvs","materials","fromDeclaration","libraries","previous","_finalize","splice","material","length","Array","isArray","undefined","push","end","lastMultiMaterial","currentMaterial","mi","ParserState","objects","object","materialLibraries","startObject","previousMaterial","clone","declared","value","len","parseInt","a","b","c","src","dst","ua","ub","uc","na","nb","nc","vLen","ia","parseVertexIndex","ib","ic","addVertex","uvLen","parseUVIndex","addUV","nLen","parseNormalIndex","addNormal","addColor","type","vertex","addVertexPoint","addVertexLine","uv","addUVLine","parseOBJMeshes","text","state","indexOf","replace","lines","split","line","lineFirstChar","lineLength","result","trimLeft","i","l","trim","charAt","data","parseFloat","lineData","substr","vertexData","faceVertices","j","jl","vertexParts","v1","v2","v3","addFace","lineParts","substring","lineVertices","lineUVs","li","llen","parts","addLineGeometry","pointData","addPointGeometry","exec","test","startMaterial","toLowerCase","Error","finalize","meshes","mesh","header","vertexCount","attributes","mode","POSITION","Float32Array","size","NORMAL","COLOR_0","TEXCOORD_0","sourceMaterial","_material","flatShading"],"mappings":"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","sourcesContent":["// OBJ Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author mrdoob / http://mrdoob.com/\n\n// @ts-nocheck\n\n// o object_name | g group_name\nconst OBJECT_RE = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst MATERIAL_RE = /^mtllib /;\n// usemtl material_name\nconst MATERIAL_USE_RE = /^usemtl /;\n\nclass MeshMaterial {\n constructor({index, name = '', mtllib, smooth, groupStart}) {\n this.index = index;\n this.name = name;\n this.mtllib = mtllib;\n this.smooth = smooth;\n this.groupStart = groupStart;\n this.groupEnd = -1;\n this.groupCount = -1;\n this.inherited = false;\n }\n\n clone(index = this.index) {\n return new MeshMaterial({\n index,\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: 0\n });\n }\n}\n\nclass MeshObject {\n constructor(name = '') {\n this.name = name;\n\n this.geometry = {\n vertices: [],\n normals: [],\n colors: [],\n uvs: []\n };\n\n this.materials = [];\n this.smooth = true;\n\n this.fromDeclaration = null;\n }\n\n startMaterial(name, libraries) {\n const previous = this._finalize(false);\n\n // New usemtl declaration overwrites an inherited material, except if faces were declared\n // after the material, then it must be preserved for proper MultiMaterial continuation.\n if (previous && (previous.inherited || previous.groupCount <= 0)) {\n this.materials.splice(previous.index, 1);\n }\n\n const material = new MeshMaterial({\n index: this.materials.length,\n name,\n mtllib:\n Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',\n smooth: previous !== undefined ? previous.smooth : this.smooth,\n groupStart: previous !== undefined ? previous.groupEnd : 0\n });\n\n this.materials.push(material);\n\n return material;\n }\n\n currentMaterial() {\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1];\n }\n\n return undefined;\n }\n\n _finalize(end) {\n const lastMultiMaterial = this.currentMaterial();\n if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n lastMultiMaterial.inherited = false;\n }\n\n // Ignore objects tail materials if no face declarations followed them before a new o/g started.\n if (end && this.materials.length > 1) {\n for (let mi = this.materials.length - 1; mi >= 0; mi--) {\n if (this.materials[mi].groupCount <= 0) {\n this.materials.splice(mi, 1);\n }\n }\n }\n\n // Guarantee at least one empty material, this makes the creation later more straight forward.\n if (end && this.materials.length === 0) {\n this.materials.push({\n name: '',\n smooth: this.smooth\n });\n }\n\n return lastMultiMaterial;\n }\n}\n\nclass ParserState {\n constructor() {\n this.objects = [];\n this.object = null;\n\n this.vertices = [];\n this.normals = [];\n this.colors = [];\n this.uvs = [];\n\n this.materialLibraries = [];\n\n this.startObject('', false);\n }\n\n startObject(name, fromDeclaration = true) {\n // If the current object (initial from reset) is not from a g/o declaration in the parsed\n // file. We need to use it for the first parsed g/o to keep things in sync.\n if (this.object && !this.object.fromDeclaration) {\n this.object.name = name;\n this.object.fromDeclaration = fromDeclaration;\n return;\n }\n\n const previousMaterial =\n this.object && typeof this.object.currentMaterial === 'function'\n ? this.object.currentMaterial()\n : undefined;\n\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n\n this.object = new MeshObject(name);\n this.object.fromDeclaration = fromDeclaration;\n\n // Inherit previous objects material.\n // Spec tells us that a declared material must be set to all objects until a new material is declared.\n // If a usemtl declaration is encountered while this new object is being parsed, it will\n // overwrite the inherited material. Exception being that there was already face declarations\n // to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {\n const declared = previousMaterial.clone(0);\n declared.inherited = true;\n this.object.materials.push(declared);\n }\n\n this.objects.push(this.object);\n }\n\n finalize() {\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n }\n\n parseVertexIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n }\n\n parseNormalIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n }\n\n parseUVIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 2) * 2;\n }\n\n addVertex(a, b, c) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addVertexPoint(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n }\n\n addVertexLine(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n }\n\n addNormal(a, b, c) {\n const src = this.normals;\n const dst = this.object.geometry.normals;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addColor(a, b, c) {\n const src = this.colors;\n const dst = this.object.geometry.colors;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addUV(a, b, c) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0], src[a + 1]);\n dst.push(src[b + 0], src[b + 1]);\n dst.push(src[c + 0], src[c + 1]);\n }\n\n addUVLine(a) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0], src[a + 1]);\n }\n\n // eslint-disable-next-line max-params\n addFace(a, b, c, ua, ub, uc, na, nb, nc) {\n const vLen = this.vertices.length;\n\n let ia = this.parseVertexIndex(a, vLen);\n let ib = this.parseVertexIndex(b, vLen);\n let ic = this.parseVertexIndex(c, vLen);\n\n this.addVertex(ia, ib, ic);\n\n if (ua !== undefined && ua !== '') {\n const uvLen = this.uvs.length;\n ia = this.parseUVIndex(ua, uvLen);\n ib = this.parseUVIndex(ub, uvLen);\n ic = this.parseUVIndex(uc, uvLen);\n this.addUV(ia, ib, ic);\n }\n\n if (na !== undefined && na !== '') {\n // Normals are many times the same. If so, skip function call and parseInt.\n const nLen = this.normals.length;\n ia = this.parseNormalIndex(na, nLen);\n\n ib = na === nb ? ia : this.parseNormalIndex(nb, nLen);\n ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);\n\n this.addNormal(ia, ib, ic);\n }\n\n if (this.colors.length > 0) {\n this.addColor(ia, ib, ic);\n }\n }\n\n addPointGeometry(vertices) {\n this.object.geometry.type = 'Points';\n\n const vLen = this.vertices.length;\n\n for (const vertex of vertices) {\n this.addVertexPoint(this.parseVertexIndex(vertex, vLen));\n }\n }\n\n addLineGeometry(vertices, uvs) {\n this.object.geometry.type = 'Line';\n\n const vLen = this.vertices.length;\n const uvLen = this.uvs.length;\n\n for (const vertex of vertices) {\n this.addVertexLine(this.parseVertexIndex(vertex, vLen));\n }\n\n for (const uv of uvs) {\n this.addUVLine(this.parseUVIndex(uv, uvLen));\n }\n }\n}\n\n// eslint-disable-next-line max-statements, complexity\nexport function parseOBJMeshes(text) {\n const state = new ParserState();\n\n if (text.indexOf('\\r\\n') !== -1) {\n // This is faster than String.split with regex that splits on both\n text = text.replace(/\\r\\n/g, '\\n');\n }\n\n if (text.indexOf('\\\\\\n') !== -1) {\n // join lines separated by a line continuation character (\\)\n text = text.replace(/\\\\\\n/g, '');\n }\n\n const lines = text.split('\\n');\n let line = '';\n let lineFirstChar = '';\n let lineLength = 0;\n let result = [];\n\n // Faster to just trim left side of the line. Use if available.\n const trimLeft = typeof ''.trimLeft === 'function';\n\n /* eslint-disable no-continue, max-depth */\n for (let i = 0, l = lines.length; i < l; i++) {\n line = lines[i];\n line = trimLeft ? line.trimLeft() : line.trim();\n lineLength = line.length;\n\n if (lineLength === 0) continue;\n\n lineFirstChar = line.charAt(0);\n\n // @todo invoke passed in handler if any\n if (lineFirstChar === '#') continue;\n\n if (lineFirstChar === 'v') {\n const data = line.split(/\\s+/);\n\n switch (data[0]) {\n case 'v':\n state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n if (data.length === 8) {\n state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]));\n }\n break;\n case 'vn':\n state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n break;\n case 'vt':\n state.uvs.push(parseFloat(data[1]), parseFloat(data[2]));\n break;\n default:\n }\n } else if (lineFirstChar === 'f') {\n const lineData = line.substr(1).trim();\n const vertexData = lineData.split(/\\s+/);\n const faceVertices = [];\n\n // Parse the face vertex data into an easy to work with format\n\n for (let j = 0, jl = vertexData.length; j < jl; j++) {\n const vertex = vertexData[j];\n\n if (vertex.length > 0) {\n const vertexParts = vertex.split('/');\n faceVertices.push(vertexParts);\n }\n }\n\n // Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n const v1 = faceVertices[0];\n\n for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {\n const v2 = faceVertices[j];\n const v3 = faceVertices[j + 1];\n\n state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2]);\n }\n } else if (lineFirstChar === 'l') {\n const lineParts = line.substring(1).trim().split(' ');\n let lineVertices;\n const lineUVs = [];\n\n if (line.indexOf('/') === -1) {\n lineVertices = lineParts;\n } else {\n lineVertices = [];\n for (let li = 0, llen = lineParts.length; li < llen; li++) {\n const parts = lineParts[li].split('/');\n\n if (parts[0] !== '') lineVertices.push(parts[0]);\n if (parts[1] !== '') lineUVs.push(parts[1]);\n }\n }\n state.addLineGeometry(lineVertices, lineUVs);\n } else if (lineFirstChar === 'p') {\n const lineData = line.substr(1).trim();\n const pointData = lineData.split(' ');\n\n state.addPointGeometry(pointData);\n } else if ((result = OBJECT_RE.exec(line)) !== null) {\n // o object_name\n // or\n // g group_name\n\n // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n // var name = result[ 0 ].substr( 1 ).trim();\n const name = (' ' + result[0].substr(1).trim()).substr(1); // eslint-disable-line\n\n state.startObject(name);\n } else if (MATERIAL_USE_RE.test(line)) {\n // material\n\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);\n } else if (MATERIAL_RE.test(line)) {\n // mtl file\n\n state.materialLibraries.push(line.substring(7).trim());\n } else if (lineFirstChar === 's') {\n result = line.split(' ');\n\n // smooth shading\n\n // @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n // but does not define a usemtl for each face set.\n // This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n // This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n // where explicit usemtl defines geometry groups.\n // Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n /*\n * http://paulbourke.net/dataformats/obj/\n * or\n * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n *\n * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n * than 0.\"\n */\n if (result.length > 1) {\n const value = result[1].trim().toLowerCase();\n state.object.smooth = value !== '0' && value !== 'off';\n } else {\n // ZBrush can produce \"s\" lines #11707\n state.object.smooth = true;\n }\n const material = state.object.currentMaterial();\n if (material) material.smooth = state.object.smooth;\n } else {\n // Handle null terminated files without exception\n if (line === '\\0') continue;\n\n throw new Error(`Unexpected line: \"${line}\"`);\n }\n }\n\n state.finalize();\n\n const meshes = [];\n const materials = [];\n\n for (const object of state.objects) {\n const {geometry} = object;\n\n // Skip o/g line declarations that did not follow with any faces\n if (geometry.vertices.length === 0) continue;\n\n const mesh = {\n header: {\n vertexCount: geometry.vertices.length / 3\n },\n attributes: {}\n };\n\n switch (geometry.type) {\n case 'Points':\n mesh.mode = 0; // GL.POINTS\n break;\n case 'Line':\n mesh.mode = 1; // GL.LINES\n break;\n default:\n mesh.mode = 4; // GL.TRIANGLES\n break;\n }\n\n mesh.attributes.POSITION = {value: new Float32Array(geometry.vertices), size: 3};\n\n if (geometry.normals.length > 0) {\n mesh.attributes.NORMAL = {value: new Float32Array(geometry.normals), size: 3};\n }\n\n if (geometry.colors.length > 0) {\n mesh.attributes.COLOR_0 = {value: new Float32Array(geometry.colors), size: 3};\n }\n\n if (geometry.uvs.length > 0) {\n mesh.attributes.TEXCOORD_0 = {value: new Float32Array(geometry.uvs), size: 2};\n }\n\n // Create materials\n mesh.materials = [];\n for (const sourceMaterial of object.materials) {\n // TODO - support full spec\n const _material = {\n name: sourceMaterial.name,\n flatShading: !sourceMaterial.smooth\n };\n mesh.materials.push(_material);\n materials.push(_material);\n }\n\n mesh.name = object.name;\n meshes.push(mesh);\n }\n\n return {meshes, materials};\n}\n"],"file":"parse-obj-meshes.js"}
|
|
1
|
+
{"version":3,"file":"parse-obj-meshes.js","names":["OBJECT_RE","MATERIAL_RE","MATERIAL_USE_RE","MeshMaterial","index","name","mtllib","smooth","groupStart","groupEnd","groupCount","inherited","MeshObject","geometry","vertices","normals","colors","uvs","materials","fromDeclaration","libraries","previous","_finalize","splice","material","length","Array","isArray","undefined","push","end","lastMultiMaterial","currentMaterial","mi","ParserState","objects","object","materialLibraries","startObject","previousMaterial","clone","declared","value","len","parseInt","a","b","c","src","dst","ua","ub","uc","na","nb","nc","vLen","ia","parseVertexIndex","ib","ic","addVertex","uvLen","parseUVIndex","addUV","nLen","parseNormalIndex","addNormal","addColor","type","vertex","addVertexPoint","addVertexLine","uv","addUVLine","parseOBJMeshes","text","state","indexOf","replace","lines","split","line","lineFirstChar","lineLength","result","trimLeft","i","l","trim","charAt","data","parseFloat","lineData","substr","vertexData","faceVertices","j","jl","vertexParts","v1","v2","v3","addFace","lineParts","substring","lineVertices","lineUVs","li","llen","parts","addLineGeometry","pointData","addPointGeometry","exec","test","startMaterial","toLowerCase","Error","finalize","meshes","mesh","header","vertexCount","attributes","mode","POSITION","Float32Array","size","NORMAL","COLOR_0","TEXCOORD_0","sourceMaterial","_material","flatShading"],"sources":["../../../src/lib/parse-obj-meshes.ts"],"sourcesContent":["// OBJ Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author mrdoob / http://mrdoob.com/\n\n// @ts-nocheck\n\n// o object_name | g group_name\nconst OBJECT_RE = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst MATERIAL_RE = /^mtllib /;\n// usemtl material_name\nconst MATERIAL_USE_RE = /^usemtl /;\n\nclass MeshMaterial {\n constructor({index, name = '', mtllib, smooth, groupStart}) {\n this.index = index;\n this.name = name;\n this.mtllib = mtllib;\n this.smooth = smooth;\n this.groupStart = groupStart;\n this.groupEnd = -1;\n this.groupCount = -1;\n this.inherited = false;\n }\n\n clone(index = this.index) {\n return new MeshMaterial({\n index,\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: 0\n });\n }\n}\n\nclass MeshObject {\n constructor(name = '') {\n this.name = name;\n\n this.geometry = {\n vertices: [],\n normals: [],\n colors: [],\n uvs: []\n };\n\n this.materials = [];\n this.smooth = true;\n\n this.fromDeclaration = null;\n }\n\n startMaterial(name, libraries) {\n const previous = this._finalize(false);\n\n // New usemtl declaration overwrites an inherited material, except if faces were declared\n // after the material, then it must be preserved for proper MultiMaterial continuation.\n if (previous && (previous.inherited || previous.groupCount <= 0)) {\n this.materials.splice(previous.index, 1);\n }\n\n const material = new MeshMaterial({\n index: this.materials.length,\n name,\n mtllib:\n Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',\n smooth: previous !== undefined ? previous.smooth : this.smooth,\n groupStart: previous !== undefined ? previous.groupEnd : 0\n });\n\n this.materials.push(material);\n\n return material;\n }\n\n currentMaterial() {\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1];\n }\n\n return undefined;\n }\n\n _finalize(end) {\n const lastMultiMaterial = this.currentMaterial();\n if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n lastMultiMaterial.inherited = false;\n }\n\n // Ignore objects tail materials if no face declarations followed them before a new o/g started.\n if (end && this.materials.length > 1) {\n for (let mi = this.materials.length - 1; mi >= 0; mi--) {\n if (this.materials[mi].groupCount <= 0) {\n this.materials.splice(mi, 1);\n }\n }\n }\n\n // Guarantee at least one empty material, this makes the creation later more straight forward.\n if (end && this.materials.length === 0) {\n this.materials.push({\n name: '',\n smooth: this.smooth\n });\n }\n\n return lastMultiMaterial;\n }\n}\n\nclass ParserState {\n constructor() {\n this.objects = [];\n this.object = null;\n\n this.vertices = [];\n this.normals = [];\n this.colors = [];\n this.uvs = [];\n\n this.materialLibraries = [];\n\n this.startObject('', false);\n }\n\n startObject(name, fromDeclaration = true) {\n // If the current object (initial from reset) is not from a g/o declaration in the parsed\n // file. We need to use it for the first parsed g/o to keep things in sync.\n if (this.object && !this.object.fromDeclaration) {\n this.object.name = name;\n this.object.fromDeclaration = fromDeclaration;\n return;\n }\n\n const previousMaterial =\n this.object && typeof this.object.currentMaterial === 'function'\n ? this.object.currentMaterial()\n : undefined;\n\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n\n this.object = new MeshObject(name);\n this.object.fromDeclaration = fromDeclaration;\n\n // Inherit previous objects material.\n // Spec tells us that a declared material must be set to all objects until a new material is declared.\n // If a usemtl declaration is encountered while this new object is being parsed, it will\n // overwrite the inherited material. Exception being that there was already face declarations\n // to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {\n const declared = previousMaterial.clone(0);\n declared.inherited = true;\n this.object.materials.push(declared);\n }\n\n this.objects.push(this.object);\n }\n\n finalize() {\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n }\n\n parseVertexIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n }\n\n parseNormalIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n }\n\n parseUVIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 2) * 2;\n }\n\n addVertex(a, b, c) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addVertexPoint(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n }\n\n addVertexLine(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n }\n\n addNormal(a, b, c) {\n const src = this.normals;\n const dst = this.object.geometry.normals;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addColor(a, b, c) {\n const src = this.colors;\n const dst = this.object.geometry.colors;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addUV(a, b, c) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0], src[a + 1]);\n dst.push(src[b + 0], src[b + 1]);\n dst.push(src[c + 0], src[c + 1]);\n }\n\n addUVLine(a) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0], src[a + 1]);\n }\n\n // eslint-disable-next-line max-params\n addFace(a, b, c, ua, ub, uc, na, nb, nc) {\n const vLen = this.vertices.length;\n\n let ia = this.parseVertexIndex(a, vLen);\n let ib = this.parseVertexIndex(b, vLen);\n let ic = this.parseVertexIndex(c, vLen);\n\n this.addVertex(ia, ib, ic);\n\n if (ua !== undefined && ua !== '') {\n const uvLen = this.uvs.length;\n ia = this.parseUVIndex(ua, uvLen);\n ib = this.parseUVIndex(ub, uvLen);\n ic = this.parseUVIndex(uc, uvLen);\n this.addUV(ia, ib, ic);\n }\n\n if (na !== undefined && na !== '') {\n // Normals are many times the same. If so, skip function call and parseInt.\n const nLen = this.normals.length;\n ia = this.parseNormalIndex(na, nLen);\n\n ib = na === nb ? ia : this.parseNormalIndex(nb, nLen);\n ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);\n\n this.addNormal(ia, ib, ic);\n }\n\n if (this.colors.length > 0) {\n this.addColor(ia, ib, ic);\n }\n }\n\n addPointGeometry(vertices) {\n this.object.geometry.type = 'Points';\n\n const vLen = this.vertices.length;\n\n for (const vertex of vertices) {\n this.addVertexPoint(this.parseVertexIndex(vertex, vLen));\n }\n }\n\n addLineGeometry(vertices, uvs) {\n this.object.geometry.type = 'Line';\n\n const vLen = this.vertices.length;\n const uvLen = this.uvs.length;\n\n for (const vertex of vertices) {\n this.addVertexLine(this.parseVertexIndex(vertex, vLen));\n }\n\n for (const uv of uvs) {\n this.addUVLine(this.parseUVIndex(uv, uvLen));\n }\n }\n}\n\n// eslint-disable-next-line max-statements, complexity\nexport function parseOBJMeshes(text) {\n const state = new ParserState();\n\n if (text.indexOf('\\r\\n') !== -1) {\n // This is faster than String.split with regex that splits on both\n text = text.replace(/\\r\\n/g, '\\n');\n }\n\n if (text.indexOf('\\\\\\n') !== -1) {\n // join lines separated by a line continuation character (\\)\n text = text.replace(/\\\\\\n/g, '');\n }\n\n const lines = text.split('\\n');\n let line = '';\n let lineFirstChar = '';\n let lineLength = 0;\n let result = [];\n\n // Faster to just trim left side of the line. Use if available.\n const trimLeft = typeof ''.trimLeft === 'function';\n\n /* eslint-disable no-continue, max-depth */\n for (let i = 0, l = lines.length; i < l; i++) {\n line = lines[i];\n line = trimLeft ? line.trimLeft() : line.trim();\n lineLength = line.length;\n\n if (lineLength === 0) continue;\n\n lineFirstChar = line.charAt(0);\n\n // @todo invoke passed in handler if any\n if (lineFirstChar === '#') continue;\n\n if (lineFirstChar === 'v') {\n const data = line.split(/\\s+/);\n\n switch (data[0]) {\n case 'v':\n state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n if (data.length === 8) {\n state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]));\n }\n break;\n case 'vn':\n state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n break;\n case 'vt':\n state.uvs.push(parseFloat(data[1]), parseFloat(data[2]));\n break;\n default:\n }\n } else if (lineFirstChar === 'f') {\n const lineData = line.substr(1).trim();\n const vertexData = lineData.split(/\\s+/);\n const faceVertices = [];\n\n // Parse the face vertex data into an easy to work with format\n\n for (let j = 0, jl = vertexData.length; j < jl; j++) {\n const vertex = vertexData[j];\n\n if (vertex.length > 0) {\n const vertexParts = vertex.split('/');\n faceVertices.push(vertexParts);\n }\n }\n\n // Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n const v1 = faceVertices[0];\n\n for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {\n const v2 = faceVertices[j];\n const v3 = faceVertices[j + 1];\n\n state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2]);\n }\n } else if (lineFirstChar === 'l') {\n const lineParts = line.substring(1).trim().split(' ');\n let lineVertices;\n const lineUVs = [];\n\n if (line.indexOf('/') === -1) {\n lineVertices = lineParts;\n } else {\n lineVertices = [];\n for (let li = 0, llen = lineParts.length; li < llen; li++) {\n const parts = lineParts[li].split('/');\n\n if (parts[0] !== '') lineVertices.push(parts[0]);\n if (parts[1] !== '') lineUVs.push(parts[1]);\n }\n }\n state.addLineGeometry(lineVertices, lineUVs);\n } else if (lineFirstChar === 'p') {\n const lineData = line.substr(1).trim();\n const pointData = lineData.split(' ');\n\n state.addPointGeometry(pointData);\n } else if ((result = OBJECT_RE.exec(line)) !== null) {\n // o object_name\n // or\n // g group_name\n\n // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n // var name = result[ 0 ].substr( 1 ).trim();\n const name = (' ' + result[0].substr(1).trim()).substr(1); // eslint-disable-line\n\n state.startObject(name);\n } else if (MATERIAL_USE_RE.test(line)) {\n // material\n\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);\n } else if (MATERIAL_RE.test(line)) {\n // mtl file\n\n state.materialLibraries.push(line.substring(7).trim());\n } else if (lineFirstChar === 's') {\n result = line.split(' ');\n\n // smooth shading\n\n // @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n // but does not define a usemtl for each face set.\n // This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n // This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n // where explicit usemtl defines geometry groups.\n // Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n /*\n * http://paulbourke.net/dataformats/obj/\n * or\n * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n *\n * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n * than 0.\"\n */\n if (result.length > 1) {\n const value = result[1].trim().toLowerCase();\n state.object.smooth = value !== '0' && value !== 'off';\n } else {\n // ZBrush can produce \"s\" lines #11707\n state.object.smooth = true;\n }\n const material = state.object.currentMaterial();\n if (material) material.smooth = state.object.smooth;\n } else {\n // Handle null terminated files without exception\n if (line === '\\0') continue;\n\n throw new Error(`Unexpected line: \"${line}\"`);\n }\n }\n\n state.finalize();\n\n const meshes = [];\n const materials = [];\n\n for (const object of state.objects) {\n const {geometry} = object;\n\n // Skip o/g line declarations that did not follow with any faces\n if (geometry.vertices.length === 0) continue;\n\n const mesh = {\n header: {\n vertexCount: geometry.vertices.length / 3\n },\n attributes: {}\n };\n\n switch (geometry.type) {\n case 'Points':\n mesh.mode = 0; // GL.POINTS\n break;\n case 'Line':\n mesh.mode = 1; // GL.LINES\n break;\n default:\n mesh.mode = 4; // GL.TRIANGLES\n break;\n }\n\n mesh.attributes.POSITION = {value: new Float32Array(geometry.vertices), size: 3};\n\n if (geometry.normals.length > 0) {\n mesh.attributes.NORMAL = {value: new Float32Array(geometry.normals), size: 3};\n }\n\n if (geometry.colors.length > 0) {\n mesh.attributes.COLOR_0 = {value: new Float32Array(geometry.colors), size: 3};\n }\n\n if (geometry.uvs.length > 0) {\n mesh.attributes.TEXCOORD_0 = {value: new Float32Array(geometry.uvs), size: 2};\n }\n\n // Create materials\n mesh.materials = [];\n for (const sourceMaterial of object.materials) {\n // TODO - support full spec\n const _material = {\n name: sourceMaterial.name,\n flatShading: !sourceMaterial.smooth\n };\n mesh.materials.push(_material);\n materials.push(_material);\n }\n\n mesh.name = object.name;\n meshes.push(mesh);\n }\n\n return {meshes, materials};\n}\n"],"mappings":"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"}
|