@loaders.gl/obj 3.1.0-beta.7 → 3.1.0
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 +1 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +37 -5
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/get-obj-schema.js +12 -11
- package/dist/es5/lib/get-obj-schema.js.map +1 -1
- package/dist/es5/lib/load-obj.js +59 -42
- package/dist/es5/lib/load-obj.js.map +1 -1
- package/dist/es5/lib/parse-obj.js +388 -293
- package/dist/es5/lib/parse-obj.js.map +1 -1
- package/dist/es5/obj-loader.js +3 -3
- package/dist/es5/obj-loader.js.map +1 -1
- package/dist/esm/obj-loader.js +1 -1
- package/dist/esm/obj-loader.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,21 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
6
8
|
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
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
|
+
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
|
+
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
|
+
|
|
20
|
+
var OBJECT_RE = /^[og]\s*(.+)?/;
|
|
21
|
+
var MATERIAL_RE = /^mtllib /;
|
|
22
|
+
var MATERIAL_USE_RE = /^usemtl /;
|
|
23
|
+
|
|
24
|
+
var MeshMaterial = function () {
|
|
25
|
+
function MeshMaterial(_ref) {
|
|
26
|
+
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;
|
|
32
|
+
(0, _classCallCheck2.default)(this, MeshMaterial);
|
|
19
33
|
this.index = index;
|
|
20
34
|
this.name = name;
|
|
21
35
|
this.mtllib = mtllib;
|
|
@@ -26,20 +40,26 @@ class MeshMaterial {
|
|
|
26
40
|
this.inherited = false;
|
|
27
41
|
}
|
|
28
42
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
(0, _createClass2.default)(MeshMaterial, [{
|
|
44
|
+
key: "clone",
|
|
45
|
+
value: function clone() {
|
|
46
|
+
var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.index;
|
|
47
|
+
return new MeshMaterial({
|
|
48
|
+
index: index,
|
|
49
|
+
name: this.name,
|
|
50
|
+
mtllib: this.mtllib,
|
|
51
|
+
smooth: this.smooth,
|
|
52
|
+
groupStart: 0
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}]);
|
|
56
|
+
return MeshMaterial;
|
|
57
|
+
}();
|
|
58
|
+
|
|
59
|
+
var MeshObject = function () {
|
|
60
|
+
function MeshObject() {
|
|
61
|
+
var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
62
|
+
(0, _classCallCheck2.default)(this, MeshObject);
|
|
43
63
|
this.name = name;
|
|
44
64
|
this.geometry = {
|
|
45
65
|
vertices: [],
|
|
@@ -52,63 +72,69 @@ class MeshObject {
|
|
|
52
72
|
this.fromDeclaration = null;
|
|
53
73
|
}
|
|
54
74
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
this.materials.splice(previous.index, 1);
|
|
60
|
-
}
|
|
75
|
+
(0, _createClass2.default)(MeshObject, [{
|
|
76
|
+
key: "startMaterial",
|
|
77
|
+
value: function startMaterial(name, libraries) {
|
|
78
|
+
var previous = this._finalize(false);
|
|
61
79
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',
|
|
66
|
-
smooth: previous !== undefined ? previous.smooth : this.smooth,
|
|
67
|
-
groupStart: previous !== undefined ? previous.groupEnd : 0
|
|
68
|
-
});
|
|
69
|
-
this.materials.push(material);
|
|
70
|
-
return material;
|
|
71
|
-
}
|
|
80
|
+
if (previous && (previous.inherited || previous.groupCount <= 0)) {
|
|
81
|
+
this.materials.splice(previous.index, 1);
|
|
82
|
+
}
|
|
72
83
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
84
|
+
var material = new MeshMaterial({
|
|
85
|
+
index: this.materials.length,
|
|
86
|
+
name: name,
|
|
87
|
+
mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',
|
|
88
|
+
smooth: previous !== undefined ? previous.smooth : this.smooth,
|
|
89
|
+
groupStart: previous !== undefined ? previous.groupEnd : 0
|
|
90
|
+
});
|
|
91
|
+
this.materials.push(material);
|
|
92
|
+
return material;
|
|
76
93
|
}
|
|
94
|
+
}, {
|
|
95
|
+
key: "currentMaterial",
|
|
96
|
+
value: function currentMaterial() {
|
|
97
|
+
if (this.materials.length > 0) {
|
|
98
|
+
return this.materials[this.materials.length - 1];
|
|
99
|
+
}
|
|
77
100
|
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
_finalize(end) {
|
|
82
|
-
const lastMultiMaterial = this.currentMaterial();
|
|
83
|
-
|
|
84
|
-
if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {
|
|
85
|
-
lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;
|
|
86
|
-
lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;
|
|
87
|
-
lastMultiMaterial.inherited = false;
|
|
101
|
+
return undefined;
|
|
88
102
|
}
|
|
103
|
+
}, {
|
|
104
|
+
key: "_finalize",
|
|
105
|
+
value: function _finalize(end) {
|
|
106
|
+
var lastMultiMaterial = this.currentMaterial();
|
|
107
|
+
|
|
108
|
+
if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {
|
|
109
|
+
lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;
|
|
110
|
+
lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;
|
|
111
|
+
lastMultiMaterial.inherited = false;
|
|
112
|
+
}
|
|
89
113
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
114
|
+
if (end && this.materials.length > 1) {
|
|
115
|
+
for (var mi = this.materials.length - 1; mi >= 0; mi--) {
|
|
116
|
+
if (this.materials[mi].groupCount <= 0) {
|
|
117
|
+
this.materials.splice(mi, 1);
|
|
118
|
+
}
|
|
94
119
|
}
|
|
95
120
|
}
|
|
96
|
-
}
|
|
97
121
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
return lastMultiMaterial;
|
|
106
|
-
}
|
|
122
|
+
if (end && this.materials.length === 0) {
|
|
123
|
+
this.materials.push({
|
|
124
|
+
name: '',
|
|
125
|
+
smooth: this.smooth
|
|
126
|
+
});
|
|
127
|
+
}
|
|
107
128
|
|
|
108
|
-
|
|
129
|
+
return lastMultiMaterial;
|
|
130
|
+
}
|
|
131
|
+
}]);
|
|
132
|
+
return MeshObject;
|
|
133
|
+
}();
|
|
109
134
|
|
|
110
|
-
|
|
111
|
-
|
|
135
|
+
var ParserState = function () {
|
|
136
|
+
function ParserState() {
|
|
137
|
+
(0, _classCallCheck2.default)(this, ParserState);
|
|
112
138
|
this.objects = [];
|
|
113
139
|
this.object = null;
|
|
114
140
|
this.vertices = [];
|
|
@@ -119,157 +145,206 @@ class ParserState {
|
|
|
119
145
|
this.startObject('', false);
|
|
120
146
|
}
|
|
121
147
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
148
|
+
(0, _createClass2.default)(ParserState, [{
|
|
149
|
+
key: "startObject",
|
|
150
|
+
value: function startObject(name) {
|
|
151
|
+
var fromDeclaration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
128
152
|
|
|
129
|
-
|
|
153
|
+
if (this.object && !this.object.fromDeclaration) {
|
|
154
|
+
this.object.name = name;
|
|
155
|
+
this.object.fromDeclaration = fromDeclaration;
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
130
158
|
|
|
131
|
-
|
|
132
|
-
this.object._finalize(true);
|
|
133
|
-
}
|
|
159
|
+
var previousMaterial = this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined;
|
|
134
160
|
|
|
135
|
-
|
|
136
|
-
|
|
161
|
+
if (this.object && typeof this.object._finalize === 'function') {
|
|
162
|
+
this.object._finalize(true);
|
|
163
|
+
}
|
|
137
164
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
declared.inherited = true;
|
|
141
|
-
this.object.materials.push(declared);
|
|
142
|
-
}
|
|
165
|
+
this.object = new MeshObject(name);
|
|
166
|
+
this.object.fromDeclaration = fromDeclaration;
|
|
143
167
|
|
|
144
|
-
|
|
145
|
-
|
|
168
|
+
if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {
|
|
169
|
+
var declared = previousMaterial.clone(0);
|
|
170
|
+
declared.inherited = true;
|
|
171
|
+
this.object.materials.push(declared);
|
|
172
|
+
}
|
|
146
173
|
|
|
147
|
-
|
|
148
|
-
if (this.object && typeof this.object._finalize === 'function') {
|
|
149
|
-
this.object._finalize(true);
|
|
174
|
+
this.objects.push(this.object);
|
|
150
175
|
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
parseNormalIndex(value, len) {
|
|
159
|
-
const index = parseInt(value);
|
|
160
|
-
return (index >= 0 ? index - 1 : index + len / 3) * 3;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
parseUVIndex(value, len) {
|
|
164
|
-
const index = parseInt(value);
|
|
165
|
-
return (index >= 0 ? index - 1 : index + len / 2) * 2;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
addVertex(a, b, c) {
|
|
169
|
-
const src = this.vertices;
|
|
170
|
-
const dst = this.object.geometry.vertices;
|
|
171
|
-
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
172
|
-
dst.push(src[b + 0], src[b + 1], src[b + 2]);
|
|
173
|
-
dst.push(src[c + 0], src[c + 1], src[c + 2]);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
addVertexPoint(a) {
|
|
177
|
-
const src = this.vertices;
|
|
178
|
-
const dst = this.object.geometry.vertices;
|
|
179
|
-
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
addVertexLine(a) {
|
|
183
|
-
const src = this.vertices;
|
|
184
|
-
const dst = this.object.geometry.vertices;
|
|
185
|
-
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
addNormal(a, b, c) {
|
|
189
|
-
const src = this.normals;
|
|
190
|
-
const dst = this.object.geometry.normals;
|
|
191
|
-
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
192
|
-
dst.push(src[b + 0], src[b + 1], src[b + 2]);
|
|
193
|
-
dst.push(src[c + 0], src[c + 1], src[c + 2]);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
addColor(a, b, c) {
|
|
197
|
-
const src = this.colors;
|
|
198
|
-
const dst = this.object.geometry.colors;
|
|
199
|
-
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
200
|
-
dst.push(src[b + 0], src[b + 1], src[b + 2]);
|
|
201
|
-
dst.push(src[c + 0], src[c + 1], src[c + 2]);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
addUV(a, b, c) {
|
|
205
|
-
const src = this.uvs;
|
|
206
|
-
const dst = this.object.geometry.uvs;
|
|
207
|
-
dst.push(src[a + 0], src[a + 1]);
|
|
208
|
-
dst.push(src[b + 0], src[b + 1]);
|
|
209
|
-
dst.push(src[c + 0], src[c + 1]);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
addUVLine(a) {
|
|
213
|
-
const src = this.uvs;
|
|
214
|
-
const dst = this.object.geometry.uvs;
|
|
215
|
-
dst.push(src[a + 0], src[a + 1]);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
addFace(a, b, c, ua, ub, uc, na, nb, nc) {
|
|
219
|
-
const vLen = this.vertices.length;
|
|
220
|
-
let ia = this.parseVertexIndex(a, vLen);
|
|
221
|
-
let ib = this.parseVertexIndex(b, vLen);
|
|
222
|
-
let ic = this.parseVertexIndex(c, vLen);
|
|
223
|
-
this.addVertex(ia, ib, ic);
|
|
224
|
-
|
|
225
|
-
if (ua !== undefined && ua !== '') {
|
|
226
|
-
const uvLen = this.uvs.length;
|
|
227
|
-
ia = this.parseUVIndex(ua, uvLen);
|
|
228
|
-
ib = this.parseUVIndex(ub, uvLen);
|
|
229
|
-
ic = this.parseUVIndex(uc, uvLen);
|
|
230
|
-
this.addUV(ia, ib, ic);
|
|
176
|
+
}, {
|
|
177
|
+
key: "finalize",
|
|
178
|
+
value: function finalize() {
|
|
179
|
+
if (this.object && typeof this.object._finalize === 'function') {
|
|
180
|
+
this.object._finalize(true);
|
|
181
|
+
}
|
|
231
182
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);
|
|
238
|
-
this.addNormal(ia, ib, ic);
|
|
183
|
+
}, {
|
|
184
|
+
key: "parseVertexIndex",
|
|
185
|
+
value: function parseVertexIndex(value, len) {
|
|
186
|
+
var index = parseInt(value);
|
|
187
|
+
return (index >= 0 ? index - 1 : index + len / 3) * 3;
|
|
239
188
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
189
|
+
}, {
|
|
190
|
+
key: "parseNormalIndex",
|
|
191
|
+
value: function parseNormalIndex(value, len) {
|
|
192
|
+
var index = parseInt(value);
|
|
193
|
+
return (index >= 0 ? index - 1 : index + len / 3) * 3;
|
|
243
194
|
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
for (const vertex of vertices) {
|
|
251
|
-
this.addVertexPoint(this.parseVertexIndex(vertex, vLen));
|
|
195
|
+
}, {
|
|
196
|
+
key: "parseUVIndex",
|
|
197
|
+
value: function parseUVIndex(value, len) {
|
|
198
|
+
var index = parseInt(value);
|
|
199
|
+
return (index >= 0 ? index - 1 : index + len / 2) * 2;
|
|
252
200
|
}
|
|
253
|
-
}
|
|
201
|
+
}, {
|
|
202
|
+
key: "addVertex",
|
|
203
|
+
value: function addVertex(a, b, c) {
|
|
204
|
+
var src = this.vertices;
|
|
205
|
+
var dst = this.object.geometry.vertices;
|
|
206
|
+
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
207
|
+
dst.push(src[b + 0], src[b + 1], src[b + 2]);
|
|
208
|
+
dst.push(src[c + 0], src[c + 1], src[c + 2]);
|
|
209
|
+
}
|
|
210
|
+
}, {
|
|
211
|
+
key: "addVertexPoint",
|
|
212
|
+
value: function addVertexPoint(a) {
|
|
213
|
+
var src = this.vertices;
|
|
214
|
+
var dst = this.object.geometry.vertices;
|
|
215
|
+
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
216
|
+
}
|
|
217
|
+
}, {
|
|
218
|
+
key: "addVertexLine",
|
|
219
|
+
value: function addVertexLine(a) {
|
|
220
|
+
var src = this.vertices;
|
|
221
|
+
var dst = this.object.geometry.vertices;
|
|
222
|
+
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
223
|
+
}
|
|
224
|
+
}, {
|
|
225
|
+
key: "addNormal",
|
|
226
|
+
value: function addNormal(a, b, c) {
|
|
227
|
+
var src = this.normals;
|
|
228
|
+
var dst = this.object.geometry.normals;
|
|
229
|
+
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
230
|
+
dst.push(src[b + 0], src[b + 1], src[b + 2]);
|
|
231
|
+
dst.push(src[c + 0], src[c + 1], src[c + 2]);
|
|
232
|
+
}
|
|
233
|
+
}, {
|
|
234
|
+
key: "addColor",
|
|
235
|
+
value: function addColor(a, b, c) {
|
|
236
|
+
var src = this.colors;
|
|
237
|
+
var dst = this.object.geometry.colors;
|
|
238
|
+
dst.push(src[a + 0], src[a + 1], src[a + 2]);
|
|
239
|
+
dst.push(src[b + 0], src[b + 1], src[b + 2]);
|
|
240
|
+
dst.push(src[c + 0], src[c + 1], src[c + 2]);
|
|
241
|
+
}
|
|
242
|
+
}, {
|
|
243
|
+
key: "addUV",
|
|
244
|
+
value: function addUV(a, b, c) {
|
|
245
|
+
var src = this.uvs;
|
|
246
|
+
var dst = this.object.geometry.uvs;
|
|
247
|
+
dst.push(src[a + 0], src[a + 1]);
|
|
248
|
+
dst.push(src[b + 0], src[b + 1]);
|
|
249
|
+
dst.push(src[c + 0], src[c + 1]);
|
|
250
|
+
}
|
|
251
|
+
}, {
|
|
252
|
+
key: "addUVLine",
|
|
253
|
+
value: function addUVLine(a) {
|
|
254
|
+
var src = this.uvs;
|
|
255
|
+
var dst = this.object.geometry.uvs;
|
|
256
|
+
dst.push(src[a + 0], src[a + 1]);
|
|
257
|
+
}
|
|
258
|
+
}, {
|
|
259
|
+
key: "addFace",
|
|
260
|
+
value: function addFace(a, b, c, ua, ub, uc, na, nb, nc) {
|
|
261
|
+
var vLen = this.vertices.length;
|
|
262
|
+
var ia = this.parseVertexIndex(a, vLen);
|
|
263
|
+
var ib = this.parseVertexIndex(b, vLen);
|
|
264
|
+
var ic = this.parseVertexIndex(c, vLen);
|
|
265
|
+
this.addVertex(ia, ib, ic);
|
|
266
|
+
|
|
267
|
+
if (ua !== undefined && ua !== '') {
|
|
268
|
+
var uvLen = this.uvs.length;
|
|
269
|
+
ia = this.parseUVIndex(ua, uvLen);
|
|
270
|
+
ib = this.parseUVIndex(ub, uvLen);
|
|
271
|
+
ic = this.parseUVIndex(uc, uvLen);
|
|
272
|
+
this.addUV(ia, ib, ic);
|
|
273
|
+
}
|
|
254
274
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
275
|
+
if (na !== undefined && na !== '') {
|
|
276
|
+
var nLen = this.normals.length;
|
|
277
|
+
ia = this.parseNormalIndex(na, nLen);
|
|
278
|
+
ib = na === nb ? ia : this.parseNormalIndex(nb, nLen);
|
|
279
|
+
ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);
|
|
280
|
+
this.addNormal(ia, ib, ic);
|
|
281
|
+
}
|
|
259
282
|
|
|
260
|
-
|
|
261
|
-
|
|
283
|
+
if (this.colors.length > 0) {
|
|
284
|
+
this.addColor(ia, ib, ic);
|
|
285
|
+
}
|
|
262
286
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
287
|
+
}, {
|
|
288
|
+
key: "addPointGeometry",
|
|
289
|
+
value: function addPointGeometry(vertices) {
|
|
290
|
+
this.object.geometry.type = 'Points';
|
|
291
|
+
var vLen = this.vertices.length;
|
|
292
|
+
|
|
293
|
+
var _iterator = _createForOfIteratorHelper(vertices),
|
|
294
|
+
_step;
|
|
295
|
+
|
|
296
|
+
try {
|
|
297
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
298
|
+
var vertex = _step.value;
|
|
299
|
+
this.addVertexPoint(this.parseVertexIndex(vertex, vLen));
|
|
300
|
+
}
|
|
301
|
+
} catch (err) {
|
|
302
|
+
_iterator.e(err);
|
|
303
|
+
} finally {
|
|
304
|
+
_iterator.f();
|
|
305
|
+
}
|
|
266
306
|
}
|
|
267
|
-
}
|
|
307
|
+
}, {
|
|
308
|
+
key: "addLineGeometry",
|
|
309
|
+
value: function addLineGeometry(vertices, uvs) {
|
|
310
|
+
this.object.geometry.type = 'Line';
|
|
311
|
+
var vLen = this.vertices.length;
|
|
312
|
+
var uvLen = this.uvs.length;
|
|
313
|
+
|
|
314
|
+
var _iterator2 = _createForOfIteratorHelper(vertices),
|
|
315
|
+
_step2;
|
|
316
|
+
|
|
317
|
+
try {
|
|
318
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
319
|
+
var vertex = _step2.value;
|
|
320
|
+
this.addVertexLine(this.parseVertexIndex(vertex, vLen));
|
|
321
|
+
}
|
|
322
|
+
} catch (err) {
|
|
323
|
+
_iterator2.e(err);
|
|
324
|
+
} finally {
|
|
325
|
+
_iterator2.f();
|
|
326
|
+
}
|
|
268
327
|
|
|
269
|
-
|
|
328
|
+
var _iterator3 = _createForOfIteratorHelper(uvs),
|
|
329
|
+
_step3;
|
|
330
|
+
|
|
331
|
+
try {
|
|
332
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
333
|
+
var uv = _step3.value;
|
|
334
|
+
this.addUVLine(this.parseUVIndex(uv, uvLen));
|
|
335
|
+
}
|
|
336
|
+
} catch (err) {
|
|
337
|
+
_iterator3.e(err);
|
|
338
|
+
} finally {
|
|
339
|
+
_iterator3.f();
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}]);
|
|
343
|
+
return ParserState;
|
|
344
|
+
}();
|
|
270
345
|
|
|
271
|
-
var _default = text
|
|
272
|
-
|
|
346
|
+
var _default = function _default(text) {
|
|
347
|
+
var state = new ParserState();
|
|
273
348
|
|
|
274
349
|
if (text.indexOf('\r\n') !== -1) {
|
|
275
350
|
text = text.replace(/\r\n/g, '\n');
|
|
@@ -279,14 +354,14 @@ var _default = text => {
|
|
|
279
354
|
text = text.replace(/\\\n/g, '');
|
|
280
355
|
}
|
|
281
356
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
357
|
+
var lines = text.split('\n');
|
|
358
|
+
var line = '';
|
|
359
|
+
var lineFirstChar = '';
|
|
360
|
+
var lineLength = 0;
|
|
361
|
+
var result = [];
|
|
362
|
+
var trimLeft = typeof ''.trimLeft === 'function';
|
|
288
363
|
|
|
289
|
-
for (
|
|
364
|
+
for (var i = 0, l = lines.length; i < l; i++) {
|
|
290
365
|
line = lines[i];
|
|
291
366
|
line = trimLeft ? line.trimLeft() : line.trim();
|
|
292
367
|
lineLength = line.length;
|
|
@@ -295,7 +370,7 @@ var _default = text => {
|
|
|
295
370
|
if (lineFirstChar === '#') continue;
|
|
296
371
|
|
|
297
372
|
if (lineFirstChar === 'v') {
|
|
298
|
-
|
|
373
|
+
var data = line.split(/\s+/);
|
|
299
374
|
|
|
300
375
|
switch (data[0]) {
|
|
301
376
|
case 'v':
|
|
@@ -318,38 +393,38 @@ var _default = text => {
|
|
|
318
393
|
default:
|
|
319
394
|
}
|
|
320
395
|
} else if (lineFirstChar === 'f') {
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
396
|
+
var lineData = line.substr(1).trim();
|
|
397
|
+
var vertexData = lineData.split(/\s+/);
|
|
398
|
+
var faceVertices = [];
|
|
324
399
|
|
|
325
|
-
for (
|
|
326
|
-
|
|
400
|
+
for (var j = 0, jl = vertexData.length; j < jl; j++) {
|
|
401
|
+
var vertex = vertexData[j];
|
|
327
402
|
|
|
328
403
|
if (vertex.length > 0) {
|
|
329
|
-
|
|
404
|
+
var vertexParts = vertex.split('/');
|
|
330
405
|
faceVertices.push(vertexParts);
|
|
331
406
|
}
|
|
332
407
|
}
|
|
333
408
|
|
|
334
|
-
|
|
409
|
+
var v1 = faceVertices[0];
|
|
335
410
|
|
|
336
|
-
for (
|
|
337
|
-
|
|
338
|
-
|
|
411
|
+
for (var _j = 1, _jl = faceVertices.length - 1; _j < _jl; _j++) {
|
|
412
|
+
var v2 = faceVertices[_j];
|
|
413
|
+
var v3 = faceVertices[_j + 1];
|
|
339
414
|
state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2]);
|
|
340
415
|
}
|
|
341
416
|
} else if (lineFirstChar === 'l') {
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
417
|
+
var lineParts = line.substring(1).trim().split(' ');
|
|
418
|
+
var lineVertices = void 0;
|
|
419
|
+
var lineUVs = [];
|
|
345
420
|
|
|
346
421
|
if (line.indexOf('/') === -1) {
|
|
347
422
|
lineVertices = lineParts;
|
|
348
423
|
} else {
|
|
349
424
|
lineVertices = [];
|
|
350
425
|
|
|
351
|
-
for (
|
|
352
|
-
|
|
426
|
+
for (var li = 0, llen = lineParts.length; li < llen; li++) {
|
|
427
|
+
var parts = lineParts[li].split('/');
|
|
353
428
|
if (parts[0] !== '') lineVertices.push(parts[0]);
|
|
354
429
|
if (parts[1] !== '') lineUVs.push(parts[1]);
|
|
355
430
|
}
|
|
@@ -357,11 +432,13 @@ var _default = text => {
|
|
|
357
432
|
|
|
358
433
|
state.addLineGeometry(lineVertices, lineUVs);
|
|
359
434
|
} else if (lineFirstChar === 'p') {
|
|
360
|
-
|
|
361
|
-
|
|
435
|
+
var _lineData = line.substr(1).trim();
|
|
436
|
+
|
|
437
|
+
var pointData = _lineData.split(' ');
|
|
438
|
+
|
|
362
439
|
state.addPointGeometry(pointData);
|
|
363
440
|
} else if ((result = OBJECT_RE.exec(line)) !== null) {
|
|
364
|
-
|
|
441
|
+
var name = (' ' + result[0].substr(1).trim()).substr(1);
|
|
365
442
|
state.startObject(name);
|
|
366
443
|
} else if (MATERIAL_USE_RE.test(line)) {
|
|
367
444
|
state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);
|
|
@@ -371,13 +448,13 @@ var _default = text => {
|
|
|
371
448
|
result = line.split(' ');
|
|
372
449
|
|
|
373
450
|
if (result.length > 1) {
|
|
374
|
-
|
|
451
|
+
var value = result[1].trim().toLowerCase();
|
|
375
452
|
state.object.smooth = value !== '0' && value !== 'off';
|
|
376
453
|
} else {
|
|
377
454
|
state.object.smooth = true;
|
|
378
455
|
}
|
|
379
456
|
|
|
380
|
-
|
|
457
|
+
var material = state.object.currentMaterial();
|
|
381
458
|
if (material) material.smooth = state.object.smooth;
|
|
382
459
|
} else {
|
|
383
460
|
if (line === '\0') continue;
|
|
@@ -386,79 +463,97 @@ var _default = text => {
|
|
|
386
463
|
}
|
|
387
464
|
|
|
388
465
|
state.finalize();
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
mesh.mode = 0;
|
|
407
|
-
break;
|
|
466
|
+
var meshes = [];
|
|
467
|
+
var materials = [];
|
|
468
|
+
|
|
469
|
+
var _iterator4 = _createForOfIteratorHelper(state.objects),
|
|
470
|
+
_step4;
|
|
471
|
+
|
|
472
|
+
try {
|
|
473
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
474
|
+
var object = _step4.value;
|
|
475
|
+
var geometry = object.geometry;
|
|
476
|
+
if (geometry.vertices.length === 0) continue;
|
|
477
|
+
var mesh = {
|
|
478
|
+
header: {
|
|
479
|
+
vertexCount: geometry.vertices.length / 3
|
|
480
|
+
},
|
|
481
|
+
attributes: {}
|
|
482
|
+
};
|
|
408
483
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
484
|
+
switch (geometry.type) {
|
|
485
|
+
case 'Points':
|
|
486
|
+
mesh.mode = 0;
|
|
487
|
+
break;
|
|
412
488
|
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
}
|
|
489
|
+
case 'Line':
|
|
490
|
+
mesh.mode = 1;
|
|
491
|
+
break;
|
|
417
492
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
493
|
+
default:
|
|
494
|
+
mesh.mode = 4;
|
|
495
|
+
break;
|
|
496
|
+
}
|
|
422
497
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
value: new Float32Array(geometry.normals),
|
|
498
|
+
mesh.attributes.POSITION = {
|
|
499
|
+
value: new Float32Array(geometry.vertices),
|
|
426
500
|
size: 3
|
|
427
501
|
};
|
|
428
|
-
}
|
|
429
502
|
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
503
|
+
if (geometry.normals.length > 0) {
|
|
504
|
+
mesh.attributes.NORMAL = {
|
|
505
|
+
value: new Float32Array(geometry.normals),
|
|
506
|
+
size: 3
|
|
507
|
+
};
|
|
508
|
+
}
|
|
436
509
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
510
|
+
if (geometry.colors.length > 0) {
|
|
511
|
+
mesh.attributes.COLOR_0 = {
|
|
512
|
+
value: new Float32Array(geometry.colors),
|
|
513
|
+
size: 3
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
if (geometry.uvs.length > 0) {
|
|
518
|
+
mesh.attributes.TEXCOORD_0 = {
|
|
519
|
+
value: new Float32Array(geometry.uvs),
|
|
520
|
+
size: 2
|
|
521
|
+
};
|
|
522
|
+
}
|
|
443
523
|
|
|
444
|
-
|
|
524
|
+
mesh.materials = [];
|
|
445
525
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
name: sourceMaterial.name,
|
|
449
|
-
flatShading: !sourceMaterial.smooth
|
|
450
|
-
};
|
|
451
|
-
mesh.materials.push(_material);
|
|
452
|
-
materials.push(_material);
|
|
453
|
-
}
|
|
526
|
+
var _iterator5 = _createForOfIteratorHelper(object.materials),
|
|
527
|
+
_step5;
|
|
454
528
|
|
|
455
|
-
|
|
456
|
-
|
|
529
|
+
try {
|
|
530
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
531
|
+
var sourceMaterial = _step5.value;
|
|
532
|
+
var _material = {
|
|
533
|
+
name: sourceMaterial.name,
|
|
534
|
+
flatShading: !sourceMaterial.smooth
|
|
535
|
+
};
|
|
536
|
+
mesh.materials.push(_material);
|
|
537
|
+
materials.push(_material);
|
|
538
|
+
}
|
|
539
|
+
} catch (err) {
|
|
540
|
+
_iterator5.e(err);
|
|
541
|
+
} finally {
|
|
542
|
+
_iterator5.f();
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
mesh.name = object.name;
|
|
546
|
+
meshes.push(mesh);
|
|
547
|
+
}
|
|
548
|
+
} catch (err) {
|
|
549
|
+
_iterator4.e(err);
|
|
550
|
+
} finally {
|
|
551
|
+
_iterator4.f();
|
|
457
552
|
}
|
|
458
553
|
|
|
459
554
|
return {
|
|
460
|
-
meshes,
|
|
461
|
-
materials
|
|
555
|
+
meshes: meshes,
|
|
556
|
+
materials: materials
|
|
462
557
|
};
|
|
463
558
|
};
|
|
464
559
|
|