@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.
Files changed (41) hide show
  1. package/dist/es5/bundle.js +0 -1
  2. package/dist/es5/bundle.js.map +1 -1
  3. package/dist/es5/index.js +4 -21
  4. package/dist/es5/index.js.map +1 -1
  5. package/dist/es5/lib/get-obj-schema.js +0 -10
  6. package/dist/es5/lib/get-obj-schema.js.map +1 -1
  7. package/dist/es5/lib/obj-types.js.map +1 -1
  8. package/dist/es5/lib/parse-mtl.js +3 -22
  9. package/dist/es5/lib/parse-mtl.js.map +1 -1
  10. package/dist/es5/lib/parse-obj-meshes.js +20 -74
  11. package/dist/es5/lib/parse-obj-meshes.js.map +1 -1
  12. package/dist/es5/lib/parse-obj.js +7 -24
  13. package/dist/es5/lib/parse-obj.js.map +1 -1
  14. package/dist/es5/mtl-loader.js +2 -1
  15. package/dist/es5/mtl-loader.js.map +1 -1
  16. package/dist/es5/obj-loader.js +1 -3
  17. package/dist/es5/obj-loader.js.map +1 -1
  18. package/dist/es5/workers/obj-worker.js +0 -2
  19. package/dist/es5/workers/obj-worker.js.map +1 -1
  20. package/dist/esm/bundle.js +1 -1
  21. package/dist/esm/bundle.js.map +1 -1
  22. package/dist/esm/index.js +7 -2
  23. package/dist/esm/index.js.map +1 -1
  24. package/dist/esm/lib/get-obj-schema.js +2 -9
  25. package/dist/esm/lib/get-obj-schema.js.map +1 -1
  26. package/dist/esm/lib/obj-types.js.map +1 -1
  27. package/dist/esm/lib/parse-mtl.js +5 -16
  28. package/dist/esm/lib/parse-mtl.js.map +1 -1
  29. package/dist/esm/lib/parse-obj-meshes.js +23 -76
  30. package/dist/esm/lib/parse-obj-meshes.js.map +1 -1
  31. package/dist/esm/lib/parse-obj.js +2 -10
  32. package/dist/esm/lib/parse-obj.js.map +1 -1
  33. package/dist/esm/mtl-loader.js +3 -1
  34. package/dist/esm/mtl-loader.js.map +1 -1
  35. package/dist/esm/obj-loader.js +2 -3
  36. package/dist/esm/obj-loader.js.map +1 -1
  37. package/dist/esm/workers/obj-worker.js.map +1 -1
  38. package/dist/index.d.ts +4 -4
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/obj-worker.js +2 -2
  41. 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
- _ref$name = _ref.name,
28
- name = _ref$name === void 0 ? '' : _ref$name,
29
- mtllib = _ref.mtllib,
30
- smooth = _ref.smooth,
31
- groupStart = _ref.groupStart;
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: function addFace(a, b, c, ua, ub, uc, na, nb, nc) {
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
- _step;
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
- _step2;
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
- _step3;
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
- _step4;
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
- _step5;
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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"}