@loaders.gl/obj 4.2.0-alpha.4 → 4.2.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +66 -104
- package/dist/dist.min.js +14 -0
- package/dist/index.cjs +15 -14
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -7
- package/dist/lib/get-obj-schema.js +29 -43
- package/dist/lib/obj-types.js +1 -2
- package/dist/lib/parse-mtl.js +193 -62
- package/dist/lib/parse-obj-meshes.js +404 -353
- package/dist/lib/parse-obj.js +58 -72
- package/dist/mtl-loader.d.ts +1 -1
- package/dist/mtl-loader.d.ts.map +1 -1
- package/dist/mtl-loader.js +18 -13
- package/dist/obj-loader.js +19 -14
- package/dist/obj-worker.js +5 -3
- package/dist/workers/obj-worker.js +0 -1
- package/package.json +10 -7
- package/dist/index.js.map +0 -1
- package/dist/lib/get-obj-schema.js.map +0 -1
- package/dist/lib/obj-types.js.map +0 -1
- package/dist/lib/parse-mtl.js.map +0 -1
- package/dist/lib/parse-obj-meshes.js.map +0 -1
- package/dist/lib/parse-obj.js.map +0 -1
- package/dist/mtl-loader.js.map +0 -1
- package/dist/obj-loader.js.map +0 -1
- package/dist/workers/obj-worker.js.map +0 -1
package/dist/dist.dev.js
CHANGED
|
@@ -2,14 +2,19 @@
|
|
|
2
2
|
if (typeof exports === 'object' && typeof module === 'object')
|
|
3
3
|
module.exports = factory();
|
|
4
4
|
else if (typeof define === 'function' && define.amd) define([], factory);
|
|
5
|
-
else if (typeof exports === 'object') exports['
|
|
6
|
-
else root['
|
|
5
|
+
else if (typeof exports === 'object') exports['loaders'] = factory();
|
|
6
|
+
else root['loaders'] = factory();})(globalThis, function () {
|
|
7
7
|
"use strict";
|
|
8
8
|
var __exports__ = (() => {
|
|
9
|
+
var __create = Object.create;
|
|
9
10
|
var __defProp = Object.defineProperty;
|
|
10
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
11
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
12
14
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
15
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
16
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
17
|
+
};
|
|
13
18
|
var __export = (target, all) => {
|
|
14
19
|
for (var name in all)
|
|
15
20
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -22,15 +27,32 @@ var __exports__ = (() => {
|
|
|
22
27
|
}
|
|
23
28
|
return to;
|
|
24
29
|
};
|
|
30
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
31
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
32
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
33
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
34
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
35
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
36
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
37
|
+
mod
|
|
38
|
+
));
|
|
25
39
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
26
40
|
|
|
27
|
-
//
|
|
28
|
-
var
|
|
29
|
-
|
|
41
|
+
// external-global-plugin:@loaders.gl/core
|
|
42
|
+
var require_core = __commonJS({
|
|
43
|
+
"external-global-plugin:@loaders.gl/core"(exports, module) {
|
|
44
|
+
module.exports = globalThis.loaders;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// bundle.ts
|
|
49
|
+
var bundle_exports = {};
|
|
50
|
+
__export(bundle_exports, {
|
|
30
51
|
MTLLoader: () => MTLLoader2,
|
|
31
52
|
OBJLoader: () => OBJLoader2,
|
|
32
53
|
OBJWorkerLoader: () => OBJLoader
|
|
33
54
|
});
|
|
55
|
+
__reExport(bundle_exports, __toESM(require_core(), 1));
|
|
34
56
|
|
|
35
57
|
// ../schema/src/lib/table/simple-table/data-type.ts
|
|
36
58
|
function getDataTypeFromValue(value, defaultNumberType = "float32") {
|
|
@@ -51,22 +73,13 @@ var __exports__ = (() => {
|
|
|
51
73
|
function getDataTypeFromArray(array) {
|
|
52
74
|
let type = getDataTypeFromTypedArray(array);
|
|
53
75
|
if (type !== "null") {
|
|
54
|
-
return {
|
|
55
|
-
type,
|
|
56
|
-
nullable: false
|
|
57
|
-
};
|
|
76
|
+
return { type, nullable: false };
|
|
58
77
|
}
|
|
59
78
|
if (array.length > 0) {
|
|
60
79
|
type = getDataTypeFromValue(array[0]);
|
|
61
|
-
return {
|
|
62
|
-
type,
|
|
63
|
-
nullable: true
|
|
64
|
-
};
|
|
80
|
+
return { type, nullable: true };
|
|
65
81
|
}
|
|
66
|
-
return {
|
|
67
|
-
type: "null",
|
|
68
|
-
nullable: true
|
|
69
|
-
};
|
|
82
|
+
return { type: "null", nullable: true };
|
|
70
83
|
}
|
|
71
84
|
function getDataTypeFromTypedArray(array) {
|
|
72
85
|
switch (array.constructor) {
|
|
@@ -113,7 +126,10 @@ var __exports__ = (() => {
|
|
|
113
126
|
maxY = y > maxY ? y : maxY;
|
|
114
127
|
maxZ = z > maxZ ? z : maxZ;
|
|
115
128
|
}
|
|
116
|
-
return [
|
|
129
|
+
return [
|
|
130
|
+
[minX, minY, minZ],
|
|
131
|
+
[maxX, maxY, maxZ]
|
|
132
|
+
];
|
|
117
133
|
}
|
|
118
134
|
|
|
119
135
|
// src/lib/parse-obj-meshes.ts
|
|
@@ -121,13 +137,7 @@ var __exports__ = (() => {
|
|
|
121
137
|
var MATERIAL_RE = /^mtllib /;
|
|
122
138
|
var MATERIAL_USE_RE = /^usemtl /;
|
|
123
139
|
var MeshMaterial = class {
|
|
124
|
-
constructor({
|
|
125
|
-
index,
|
|
126
|
-
name = "",
|
|
127
|
-
mtllib,
|
|
128
|
-
smooth,
|
|
129
|
-
groupStart
|
|
130
|
-
}) {
|
|
140
|
+
constructor({ index, name = "", mtllib, smooth, groupStart }) {
|
|
131
141
|
this.index = index;
|
|
132
142
|
this.name = name;
|
|
133
143
|
this.mtllib = mtllib;
|
|
@@ -294,6 +304,7 @@ var __exports__ = (() => {
|
|
|
294
304
|
const dst = this.object.geometry.uvs;
|
|
295
305
|
dst.push(src[a + 0], src[a + 1]);
|
|
296
306
|
}
|
|
307
|
+
// eslint-disable-next-line max-params
|
|
297
308
|
addFace(a, b, c, ua, ub, uc, na, nb, nc) {
|
|
298
309
|
const vLen = this.vertices.length;
|
|
299
310
|
let ia = this.parseVertexIndex(a, vLen);
|
|
@@ -443,9 +454,7 @@ var __exports__ = (() => {
|
|
|
443
454
|
const meshes = [];
|
|
444
455
|
const materials = [];
|
|
445
456
|
for (const object of state.objects) {
|
|
446
|
-
const {
|
|
447
|
-
geometry
|
|
448
|
-
} = object;
|
|
457
|
+
const { geometry } = object;
|
|
449
458
|
if (geometry.vertices.length === 0)
|
|
450
459
|
continue;
|
|
451
460
|
const mesh = {
|
|
@@ -465,27 +474,15 @@ var __exports__ = (() => {
|
|
|
465
474
|
mesh.mode = 4;
|
|
466
475
|
break;
|
|
467
476
|
}
|
|
468
|
-
mesh.attributes.POSITION = {
|
|
469
|
-
value: new Float32Array(geometry.vertices),
|
|
470
|
-
size: 3
|
|
471
|
-
};
|
|
477
|
+
mesh.attributes.POSITION = { value: new Float32Array(geometry.vertices), size: 3 };
|
|
472
478
|
if (geometry.normals.length > 0) {
|
|
473
|
-
mesh.attributes.NORMAL = {
|
|
474
|
-
value: new Float32Array(geometry.normals),
|
|
475
|
-
size: 3
|
|
476
|
-
};
|
|
479
|
+
mesh.attributes.NORMAL = { value: new Float32Array(geometry.normals), size: 3 };
|
|
477
480
|
}
|
|
478
481
|
if (geometry.colors.length > 0) {
|
|
479
|
-
mesh.attributes.COLOR_0 = {
|
|
480
|
-
value: new Float32Array(geometry.colors),
|
|
481
|
-
size: 3
|
|
482
|
-
};
|
|
482
|
+
mesh.attributes.COLOR_0 = { value: new Float32Array(geometry.colors), size: 3 };
|
|
483
483
|
}
|
|
484
484
|
if (geometry.uvs.length > 0) {
|
|
485
|
-
mesh.attributes.TEXCOORD_0 = {
|
|
486
|
-
value: new Float32Array(geometry.uvs),
|
|
487
|
-
size: 2
|
|
488
|
-
};
|
|
485
|
+
mesh.attributes.TEXCOORD_0 = { value: new Float32Array(geometry.uvs), size: 2 };
|
|
489
486
|
}
|
|
490
487
|
mesh.materials = [];
|
|
491
488
|
for (const sourceMaterial of object.materials) {
|
|
@@ -499,10 +496,7 @@ var __exports__ = (() => {
|
|
|
499
496
|
mesh.name = object.name;
|
|
500
497
|
meshes.push(mesh);
|
|
501
498
|
}
|
|
502
|
-
return {
|
|
503
|
-
meshes,
|
|
504
|
-
materials
|
|
505
|
-
};
|
|
499
|
+
return { meshes, materials };
|
|
506
500
|
}
|
|
507
501
|
|
|
508
502
|
// src/lib/get-obj-schema.ts
|
|
@@ -519,10 +513,7 @@ var __exports__ = (() => {
|
|
|
519
513
|
const field = getFieldFromAttribute(attributeName, attribute);
|
|
520
514
|
fields.push(field);
|
|
521
515
|
}
|
|
522
|
-
return {
|
|
523
|
-
fields,
|
|
524
|
-
metadata: stringMetadata
|
|
525
|
-
};
|
|
516
|
+
return { fields, metadata: stringMetadata };
|
|
526
517
|
}
|
|
527
518
|
function getFieldFromAttribute(name, attribute) {
|
|
528
519
|
const metadata = {};
|
|
@@ -531,37 +522,22 @@ var __exports__ = (() => {
|
|
|
531
522
|
metadata[key] = JSON.stringify(attribute[key]);
|
|
532
523
|
}
|
|
533
524
|
}
|
|
534
|
-
let {
|
|
535
|
-
type
|
|
536
|
-
} = getDataTypeFromArray(attribute.value);
|
|
525
|
+
let { type } = getDataTypeFromArray(attribute.value);
|
|
537
526
|
const isSingleValue = attribute.size === 1 || attribute.size === void 0;
|
|
538
527
|
if (!isSingleValue) {
|
|
539
|
-
type = {
|
|
540
|
-
type: "fixed-size-list",
|
|
541
|
-
listSize: attribute.size,
|
|
542
|
-
children: [{
|
|
543
|
-
name: "values",
|
|
544
|
-
type
|
|
545
|
-
}]
|
|
546
|
-
};
|
|
528
|
+
type = { type: "fixed-size-list", listSize: attribute.size, children: [{ name: "values", type }] };
|
|
547
529
|
}
|
|
548
|
-
return {
|
|
549
|
-
name,
|
|
550
|
-
type,
|
|
551
|
-
nullable: false,
|
|
552
|
-
metadata
|
|
553
|
-
};
|
|
530
|
+
return { name, type, nullable: false, metadata };
|
|
554
531
|
}
|
|
555
532
|
|
|
556
533
|
// src/lib/parse-obj.ts
|
|
557
534
|
function parseOBJ(text, options) {
|
|
558
|
-
const {
|
|
559
|
-
meshes
|
|
560
|
-
} = parseOBJMeshes(text);
|
|
535
|
+
const { meshes } = parseOBJMeshes(text);
|
|
561
536
|
const vertexCount = meshes.reduce((s, mesh) => s + mesh.header.vertexCount, 0);
|
|
562
537
|
const attributes = mergeAttributes(meshes, vertexCount);
|
|
563
538
|
const header = {
|
|
564
539
|
vertexCount,
|
|
540
|
+
// @ts-ignore Need to export Attributes type
|
|
565
541
|
boundingBox: getMeshBoundingBox(attributes)
|
|
566
542
|
};
|
|
567
543
|
const schema = getOBJSchema(attributes, {
|
|
@@ -569,12 +545,15 @@ var __exports__ = (() => {
|
|
|
569
545
|
boundingBox: header.boundingBox
|
|
570
546
|
});
|
|
571
547
|
return {
|
|
548
|
+
// Data return by this loader implementation
|
|
572
549
|
loaderData: {
|
|
573
550
|
header: {}
|
|
574
551
|
},
|
|
552
|
+
// Normalised data
|
|
575
553
|
schema,
|
|
576
554
|
header,
|
|
577
555
|
mode: 4,
|
|
556
|
+
// TRIANGLES
|
|
578
557
|
topology: "point-list",
|
|
579
558
|
attributes
|
|
580
559
|
};
|
|
@@ -586,12 +565,7 @@ var __exports__ = (() => {
|
|
|
586
565
|
let uvs;
|
|
587
566
|
let i = 0;
|
|
588
567
|
for (const mesh of meshes) {
|
|
589
|
-
const {
|
|
590
|
-
POSITION,
|
|
591
|
-
NORMAL,
|
|
592
|
-
COLOR_0,
|
|
593
|
-
TEXCOORD_0
|
|
594
|
-
} = mesh.attributes;
|
|
568
|
+
const { POSITION, NORMAL, COLOR_0, TEXCOORD_0 } = mesh.attributes;
|
|
595
569
|
positions.set(POSITION.value, i * 3);
|
|
596
570
|
if (NORMAL) {
|
|
597
571
|
normals = normals || new Float32Array(vertexCount * 3);
|
|
@@ -608,33 +582,21 @@ var __exports__ = (() => {
|
|
|
608
582
|
i += POSITION.value.length / 3;
|
|
609
583
|
}
|
|
610
584
|
const attributes = {};
|
|
611
|
-
attributes.POSITION = {
|
|
612
|
-
value: positions,
|
|
613
|
-
size: 3
|
|
614
|
-
};
|
|
585
|
+
attributes.POSITION = { value: positions, size: 3 };
|
|
615
586
|
if (normals) {
|
|
616
|
-
attributes.NORMAL = {
|
|
617
|
-
value: normals,
|
|
618
|
-
size: 3
|
|
619
|
-
};
|
|
587
|
+
attributes.NORMAL = { value: normals, size: 3 };
|
|
620
588
|
}
|
|
621
589
|
if (colors) {
|
|
622
|
-
attributes.COLOR_0 = {
|
|
623
|
-
value: colors,
|
|
624
|
-
size: 3
|
|
625
|
-
};
|
|
590
|
+
attributes.COLOR_0 = { value: colors, size: 3 };
|
|
626
591
|
}
|
|
627
592
|
if (uvs) {
|
|
628
|
-
attributes.TEXCOORD_0 = {
|
|
629
|
-
value: uvs,
|
|
630
|
-
size: 2
|
|
631
|
-
};
|
|
593
|
+
attributes.TEXCOORD_0 = { value: uvs, size: 2 };
|
|
632
594
|
}
|
|
633
595
|
return attributes;
|
|
634
596
|
}
|
|
635
597
|
|
|
636
598
|
// src/obj-loader.ts
|
|
637
|
-
var VERSION =
|
|
599
|
+
var VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
638
600
|
var OBJLoader = {
|
|
639
601
|
name: "OBJ",
|
|
640
602
|
id: "obj",
|
|
@@ -656,9 +618,7 @@ var __exports__ = (() => {
|
|
|
656
618
|
var DELIMITER_PATTERN = /\s+/;
|
|
657
619
|
function parseMTL(text, options) {
|
|
658
620
|
const materials = [];
|
|
659
|
-
let currentMaterial = {
|
|
660
|
-
name: "placeholder"
|
|
661
|
-
};
|
|
621
|
+
let currentMaterial = { name: "placeholder" };
|
|
662
622
|
const lines = text.split("\n");
|
|
663
623
|
for (let line of lines) {
|
|
664
624
|
line = line.trim();
|
|
@@ -672,9 +632,7 @@ var __exports__ = (() => {
|
|
|
672
632
|
value = value.trim();
|
|
673
633
|
switch (key) {
|
|
674
634
|
case "newmtl":
|
|
675
|
-
currentMaterial = {
|
|
676
|
-
name: value
|
|
677
|
-
};
|
|
635
|
+
currentMaterial = { name: value };
|
|
678
636
|
materials.push(currentMaterial);
|
|
679
637
|
break;
|
|
680
638
|
case "ka":
|
|
@@ -717,12 +675,16 @@ var __exports__ = (() => {
|
|
|
717
675
|
}
|
|
718
676
|
function parseColor(value, options) {
|
|
719
677
|
const rgb = value.split(DELIMITER_PATTERN, 3);
|
|
720
|
-
const color = [
|
|
678
|
+
const color = [
|
|
679
|
+
parseFloat(rgb[0]),
|
|
680
|
+
parseFloat(rgb[1]),
|
|
681
|
+
parseFloat(rgb[2])
|
|
682
|
+
];
|
|
721
683
|
return color;
|
|
722
684
|
}
|
|
723
685
|
|
|
724
686
|
// src/mtl-loader.ts
|
|
725
|
-
var VERSION2 =
|
|
687
|
+
var VERSION2 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
726
688
|
var MTLLoader = {
|
|
727
689
|
name: "MTL",
|
|
728
690
|
id: "mtl",
|
|
@@ -748,7 +710,7 @@ var __exports__ = (() => {
|
|
|
748
710
|
parse: async (arrayBuffer, options) => parseMTL(new TextDecoder().decode(arrayBuffer), options?.mtl),
|
|
749
711
|
parseTextSync: (text, options) => parseMTL(text, options?.mtl)
|
|
750
712
|
};
|
|
751
|
-
return __toCommonJS(
|
|
713
|
+
return __toCommonJS(bundle_exports);
|
|
752
714
|
})();
|
|
753
715
|
return __exports__;
|
|
754
716
|
});
|
package/dist/dist.min.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
|
2
|
+
if (typeof exports === 'object' && typeof module === 'object')
|
|
3
|
+
module.exports = factory();
|
|
4
|
+
else if (typeof define === 'function' && define.amd) define([], factory);
|
|
5
|
+
else if (typeof exports === 'object') exports['loaders'] = factory();
|
|
6
|
+
else root['loaders'] = factory();})(globalThis, function () {
|
|
7
|
+
"use strict";var __exports__=(()=>{var U=Object.create;var I=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var _=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var P=(o,e)=>()=>(e||o((e={exports:{}}).exports,e),e.exports),X=(o,e)=>{for(var r in e)I(o,r,{get:e[r],enumerable:!0})},A=(o,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of E(e))!J.call(o,s)&&s!==r&&I(o,s,{get:()=>e[s],enumerable:!(t=z(e,s))||t.enumerable});return o},L=(o,e,r)=>(A(o,e,"default"),r&&A(r,e,"default")),G=(o,e,r)=>(r=o!=null?U(_(o)):{},A(e||!o||!o.__esModule?I(r,"default",{value:o,enumerable:!0}):r,o)),Y=o=>A(I({},"__esModule",{value:!0}),o);var V=P((ae,D)=>{D.exports=globalThis.loaders});var T={};X(T,{MTLLoader:()=>ne,OBJLoader:()=>oe,OBJWorkerLoader:()=>S});L(T,G(V(),1));function W(o,e="float32"){return o instanceof Date?"date-millisecond":o instanceof Number?e:typeof o=="string"?"utf8":(o===null||o==="undefined","null")}function O(o){let e=Z(o);return e!=="null"?{type:e,nullable:!1}:o.length>0?(e=W(o[0]),{type:e,nullable:!0}):{type:"null",nullable:!0}}function Z(o){switch(o.constructor){case Int8Array:return"int8";case Uint8Array:case Uint8ClampedArray:return"uint8";case Int16Array:return"int16";case Uint16Array:return"uint16";case Int32Array:return"int32";case Uint32Array:return"uint32";case Float32Array:return"float32";case Float64Array:return"float64";default:return"null"}}function j(o){let e=1/0,r=1/0,t=1/0,s=-1/0,n=-1/0,l=-1/0,c=o.POSITION?o.POSITION.value:[],u=c&&c.length;for(let f=0;f<u;f+=3){let m=c[f],a=c[f+1],i=c[f+2];e=m<e?m:e,r=a<r?a:r,t=i<t?i:t,s=m>s?m:s,n=a>n?a:n,l=i>l?i:l}return[[e,r,t],[s,n,l]]}var Q=/^[og]\s*(.+)?/,$=/^mtllib /,q=/^usemtl /,v=class{constructor({index:e,name:r="",mtllib:t,smooth:s,groupStart:n}){this.index=e,this.name=r,this.mtllib=t,this.smooth=s,this.groupStart=n,this.groupEnd=-1,this.groupCount=-1,this.inherited=!1}clone(e=this.index){return new v({index:e,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0})}},k=class{constructor(e=""){this.name=e,this.geometry={vertices:[],normals:[],colors:[],uvs:[]},this.materials=[],this.smooth=!0,this.fromDeclaration=null}startMaterial(e,r){let t=this._finalize(!1);t&&(t.inherited||t.groupCount<=0)&&this.materials.splice(t.index,1);let s=new v({index:this.materials.length,name:e,mtllib:Array.isArray(r)&&r.length>0?r[r.length-1]:"",smooth:t!==void 0?t.smooth:this.smooth,groupStart:t!==void 0?t.groupEnd:0});return this.materials.push(s),s}currentMaterial(){if(this.materials.length>0)return this.materials[this.materials.length-1]}_finalize(e){let r=this.currentMaterial();if(r&&r.groupEnd===-1&&(r.groupEnd=this.geometry.vertices.length/3,r.groupCount=r.groupEnd-r.groupStart,r.inherited=!1),e&&this.materials.length>1)for(let t=this.materials.length-1;t>=0;t--)this.materials[t].groupCount<=0&&this.materials.splice(t,1);return e&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),r}},w=class{constructor(){this.objects=[],this.object=null,this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.materialLibraries=[],this.startObject("",!1)}startObject(e,r=!0){if(this.object&&!this.object.fromDeclaration){this.object.name=e,this.object.fromDeclaration=r;return}let t=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object=new k(e),this.object.fromDeclaration=r,t&&t.name&&typeof t.clone=="function"){let s=t.clone(0);s.inherited=!0,this.object.materials.push(s)}this.objects.push(this.object)}finalize(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)}parseVertexIndex(e,r){let t=parseInt(e);return(t>=0?t-1:t+r/3)*3}parseNormalIndex(e,r){let t=parseInt(e);return(t>=0?t-1:t+r/3)*3}parseUVIndex(e,r){let t=parseInt(e);return(t>=0?t-1:t+r/2)*2}addVertex(e,r,t){let s=this.vertices,n=this.object.geometry.vertices;n.push(s[e+0],s[e+1],s[e+2]),n.push(s[r+0],s[r+1],s[r+2]),n.push(s[t+0],s[t+1],s[t+2])}addVertexPoint(e){let r=this.vertices;this.object.geometry.vertices.push(r[e+0],r[e+1],r[e+2])}addVertexLine(e){let r=this.vertices;this.object.geometry.vertices.push(r[e+0],r[e+1],r[e+2])}addNormal(e,r,t){let s=this.normals,n=this.object.geometry.normals;n.push(s[e+0],s[e+1],s[e+2]),n.push(s[r+0],s[r+1],s[r+2]),n.push(s[t+0],s[t+1],s[t+2])}addColor(e,r,t){let s=this.colors,n=this.object.geometry.colors;n.push(s[e+0],s[e+1],s[e+2]),n.push(s[r+0],s[r+1],s[r+2]),n.push(s[t+0],s[t+1],s[t+2])}addUV(e,r,t){let s=this.uvs,n=this.object.geometry.uvs;n.push(s[e+0],s[e+1]),n.push(s[r+0],s[r+1]),n.push(s[t+0],s[t+1])}addUVLine(e){let r=this.uvs;this.object.geometry.uvs.push(r[e+0],r[e+1])}addFace(e,r,t,s,n,l,c,u,f){let m=this.vertices.length,a=this.parseVertexIndex(e,m),i=this.parseVertexIndex(r,m),h=this.parseVertexIndex(t,m);if(this.addVertex(a,i,h),s!==void 0&&s!==""){let p=this.uvs.length;a=this.parseUVIndex(s,p),i=this.parseUVIndex(n,p),h=this.parseUVIndex(l,p),this.addUV(a,i,h)}if(c!==void 0&&c!==""){let p=this.normals.length;a=this.parseNormalIndex(c,p),i=c===u?a:this.parseNormalIndex(u,p),h=c===f?a:this.parseNormalIndex(f,p),this.addNormal(a,i,h)}this.colors.length>0&&this.addColor(a,i,h)}addPointGeometry(e){this.object.geometry.type="Points";let r=this.vertices.length;for(let t of e)this.addVertexPoint(this.parseVertexIndex(t,r))}addLineGeometry(e,r){this.object.geometry.type="Line";let t=this.vertices.length,s=this.uvs.length;for(let n of e)this.addVertexLine(this.parseVertexIndex(n,t));for(let n of r)this.addUVLine(this.parseUVIndex(n,s))}};function R(o){let e=new w;o.indexOf(`\r
|
|
8
|
+
`)!==-1&&(o=o.replace(/\r\n/g,`
|
|
9
|
+
`)),o.indexOf(`\\
|
|
10
|
+
`)!==-1&&(o=o.replace(/\\\n/g,""));let r=o.split(`
|
|
11
|
+
`),t="",s="",n=0,l=[],c=typeof"".trimLeft=="function";for(let m=0,a=r.length;m<a;m++)if(t=r[m],t=c?t.trimLeft():t.trim(),n=t.length,n!==0&&(s=t.charAt(0),s!=="#"))if(s==="v"){let i=t.split(/\s+/);switch(i[0]){case"v":e.vertices.push(parseFloat(i[1]),parseFloat(i[2]),parseFloat(i[3])),i.length>=7&&e.colors.push(parseFloat(i[4]),parseFloat(i[5]),parseFloat(i[6]));break;case"vn":e.normals.push(parseFloat(i[1]),parseFloat(i[2]),parseFloat(i[3]));break;case"vt":e.uvs.push(parseFloat(i[1]),parseFloat(i[2]));break;default:}}else if(s==="f"){let h=t.substr(1).trim().split(/\s+/),p=[];for(let d=0,g=h.length;d<g;d++){let y=h[d];if(y.length>0){let x=y.split("/");p.push(x)}}let b=p[0];for(let d=1,g=p.length-1;d<g;d++){let y=p[d],x=p[d+1];e.addFace(b[0],y[0],x[0],b[1],y[1],x[1],b[2],y[2],x[2])}}else if(s==="l"){let i=t.substring(1).trim().split(" "),h,p=[];if(t.indexOf("/")===-1)h=i;else{h=[];for(let b=0,d=i.length;b<d;b++){let g=i[b].split("/");g[0]!==""&&h.push(g[0]),g[1]!==""&&p.push(g[1])}}e.addLineGeometry(h,p)}else if(s==="p"){let h=t.substr(1).trim().split(" ");e.addPointGeometry(h)}else if((l=Q.exec(t))!==null){let i=(" "+l[0].substr(1).trim()).substr(1);e.startObject(i)}else if(q.test(t))e.object.startMaterial(t.substring(7).trim(),e.materialLibraries);else if($.test(t))e.materialLibraries.push(t.substring(7).trim());else if(s==="s"){if(l=t.split(" "),l.length>1){let h=l[1].trim().toLowerCase();e.object.smooth=h!=="0"&&h!=="off"}else e.object.smooth=!0;let i=e.object.currentMaterial();i&&(i.smooth=e.object.smooth)}else{if(t==="\0")continue;throw new Error(`Unexpected line: "${t}"`)}e.finalize();let u=[],f=[];for(let m of e.objects){let{geometry:a}=m;if(a.vertices.length===0)continue;let i={header:{vertexCount:a.vertices.length/3},attributes:{}};switch(a.type){case"Points":i.mode=0;break;case"Line":i.mode=1;break;default:i.mode=4;break}i.attributes.POSITION={value:new Float32Array(a.vertices),size:3},a.normals.length>0&&(i.attributes.NORMAL={value:new Float32Array(a.normals),size:3}),a.colors.length>0&&(i.attributes.COLOR_0={value:new Float32Array(a.colors),size:3}),a.uvs.length>0&&(i.attributes.TEXCOORD_0={value:new Float32Array(a.uvs),size:2}),i.materials=[];for(let h of m.materials){let p={name:h.name,flatShading:!h.smooth};i.materials.push(p),f.push(p)}i.name=m.name,u.push(i)}return{meshes:u,materials:f}}function C(o,e={}){let r={};for(let s in e)s!=="value"&&(r[s]=JSON.stringify(e[s]));let t=[];for(let s in o){let n=o[s],l=H(s,n);t.push(l)}return{fields:t,metadata:r}}function H(o,e){let r={};for(let n in e)n!=="value"&&(r[n]=JSON.stringify(e[n]));let{type:t}=O(e.value);return e.size===1||e.size===void 0||(t={type:"fixed-size-list",listSize:e.size,children:[{name:"values",type:t}]}),{name:o,type:t,nullable:!1,metadata:r}}function M(o,e){let{meshes:r}=R(o),t=r.reduce((c,u)=>c+u.header.vertexCount,0),s=K(r,t),n={vertexCount:t,boundingBox:j(s)},l=C(s,{mode:4,boundingBox:n.boundingBox});return{loaderData:{header:{}},schema:l,header:n,mode:4,topology:"point-list",attributes:s}}function K(o,e){let r=new Float32Array(e*3),t,s,n,l=0;for(let u of o){let{POSITION:f,NORMAL:m,COLOR_0:a,TEXCOORD_0:i}=u.attributes;r.set(f.value,l*3),m&&(t=t||new Float32Array(e*3),t.set(m.value,l*3)),a&&(s=s||new Float32Array(e*3),s.set(a.value,l*3)),i&&(n=n||new Float32Array(e*2),n.set(i.value,l*2)),l+=f.value.length/3}let c={};return c.POSITION={value:r,size:3},t&&(c.NORMAL={value:t,size:3}),s&&(c.COLOR_0={value:s,size:3}),n&&(c.TEXCOORD_0={value:n,size:2}),c}var ee="4.2.0-alpha.5",S={name:"OBJ",id:"obj",module:"obj",version:ee,worker:!0,extensions:["obj"],mimeTypes:["text/plain"],testText:te,options:{obj:{}}};function te(o){return o[0]==="v"}var re=/\s+/;function B(o,e){let r=[],t={name:"placeholder"},s=o.split(`
|
|
12
|
+
`);for(let n of s){if(n=n.trim(),n.length===0||n.charAt(0)==="#")continue;let l=n.indexOf(" "),c=l>=0?n.substring(0,l):n;c=c.toLowerCase();let u=l>=0?n.substring(l+1):"";switch(u=u.trim(),c){case"newmtl":t={name:u},r.push(t);break;case"ka":t.ambientColor=F(u);break;case"kd":t.diffuseColor=F(u);break;case"map_kd":t.diffuseTextureUrl=u;break;case"ks":t.specularColor=F(u);break;case"map_ks":t.specularTextureUrl=u;break;case"ke":t.emissiveColor=F(u);break;case"map_ke":t.emissiveTextureUrl=u;break;case"ns":t.shininess=parseFloat(u);break;case"map_ns":break;case"ni":t.refraction=parseFloat(u);break;case"illum":t.illumination=parseFloat(u);break;default:break}}return r}function F(o,e){let r=o.split(re,3);return[parseFloat(r[0]),parseFloat(r[1]),parseFloat(r[2])]}var se="4.2.0-alpha.5",N={name:"MTL",id:"mtl",module:"mtl",version:se,worker:!0,extensions:["mtl"],mimeTypes:["text/plain"],testText:o=>o.includes("newmtl"),options:{mtl:{}}};var oe={...S,parse:async(o,e)=>M(new TextDecoder().decode(o),e),parseTextSync:(o,e)=>M(o,e)},ne={...N,parse:async(o,e)=>B(new TextDecoder().decode(o),e?.mtl),parseTextSync:(o,e)=>B(o,e?.mtl)};return Y(T);})();
|
|
13
|
+
return __exports__;
|
|
14
|
+
});
|
package/dist/index.cjs
CHANGED
|
@@ -17,19 +17,19 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
|
|
20
|
-
//
|
|
21
|
-
var
|
|
22
|
-
__export(
|
|
20
|
+
// dist/index.js
|
|
21
|
+
var dist_exports = {};
|
|
22
|
+
__export(dist_exports, {
|
|
23
23
|
MTLLoader: () => MTLLoader2,
|
|
24
24
|
OBJLoader: () => OBJLoader2,
|
|
25
25
|
OBJWorkerLoader: () => OBJLoader
|
|
26
26
|
});
|
|
27
|
-
module.exports = __toCommonJS(
|
|
27
|
+
module.exports = __toCommonJS(dist_exports);
|
|
28
28
|
|
|
29
|
-
//
|
|
29
|
+
// dist/lib/parse-obj.js
|
|
30
30
|
var import_schema2 = require("@loaders.gl/schema");
|
|
31
31
|
|
|
32
|
-
//
|
|
32
|
+
// dist/lib/parse-obj-meshes.js
|
|
33
33
|
var OBJECT_RE = /^[og]\s*(.+)?/;
|
|
34
34
|
var MATERIAL_RE = /^mtllib /;
|
|
35
35
|
var MATERIAL_USE_RE = /^usemtl /;
|
|
@@ -396,7 +396,7 @@ function parseOBJMeshes(text) {
|
|
|
396
396
|
return { meshes, materials };
|
|
397
397
|
}
|
|
398
398
|
|
|
399
|
-
//
|
|
399
|
+
// dist/lib/get-obj-schema.js
|
|
400
400
|
var import_schema = require("@loaders.gl/schema");
|
|
401
401
|
function getOBJSchema(attributes, metadata = {}) {
|
|
402
402
|
const stringMetadata = {};
|
|
@@ -428,7 +428,7 @@ function getFieldFromAttribute(name, attribute) {
|
|
|
428
428
|
return { name, type, nullable: false, metadata };
|
|
429
429
|
}
|
|
430
430
|
|
|
431
|
-
//
|
|
431
|
+
// dist/lib/parse-obj.js
|
|
432
432
|
function parseOBJ(text, options) {
|
|
433
433
|
const { meshes } = parseOBJMeshes(text);
|
|
434
434
|
const vertexCount = meshes.reduce((s, mesh) => s + mesh.header.vertexCount, 0);
|
|
@@ -493,8 +493,8 @@ function mergeAttributes(meshes, vertexCount) {
|
|
|
493
493
|
return attributes;
|
|
494
494
|
}
|
|
495
495
|
|
|
496
|
-
//
|
|
497
|
-
var VERSION =
|
|
496
|
+
// dist/obj-loader.js
|
|
497
|
+
var VERSION = true ? "4.2.0-alpha.5" : "latest";
|
|
498
498
|
var OBJLoader = {
|
|
499
499
|
name: "OBJ",
|
|
500
500
|
id: "obj",
|
|
@@ -512,7 +512,7 @@ function testOBJFile(text) {
|
|
|
512
512
|
return text[0] === "v";
|
|
513
513
|
}
|
|
514
514
|
|
|
515
|
-
//
|
|
515
|
+
// dist/lib/parse-mtl.js
|
|
516
516
|
var DELIMITER_PATTERN = /\s+/;
|
|
517
517
|
function parseMTL(text, options) {
|
|
518
518
|
const materials = [];
|
|
@@ -581,8 +581,8 @@ function parseColor(value, options) {
|
|
|
581
581
|
return color;
|
|
582
582
|
}
|
|
583
583
|
|
|
584
|
-
//
|
|
585
|
-
var VERSION2 =
|
|
584
|
+
// dist/mtl-loader.js
|
|
585
|
+
var VERSION2 = true ? "4.2.0-alpha.5" : "latest";
|
|
586
586
|
var MTLLoader = {
|
|
587
587
|
name: "MTL",
|
|
588
588
|
id: "mtl",
|
|
@@ -597,7 +597,7 @@ var MTLLoader = {
|
|
|
597
597
|
}
|
|
598
598
|
};
|
|
599
599
|
|
|
600
|
-
//
|
|
600
|
+
// dist/index.js
|
|
601
601
|
var OBJLoader2 = {
|
|
602
602
|
...OBJLoader,
|
|
603
603
|
parse: async (arrayBuffer, options) => parseOBJ(new TextDecoder().decode(arrayBuffer), options),
|
|
@@ -608,3 +608,4 @@ var MTLLoader2 = {
|
|
|
608
608
|
parse: async (arrayBuffer, options) => parseMTL(new TextDecoder().decode(arrayBuffer), options == null ? void 0 : options.mtl),
|
|
609
609
|
parseTextSync: (text, options) => parseMTL(text, options == null ? void 0 : options.mtl)
|
|
610
610
|
};
|
|
611
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["index.js", "lib/parse-obj.js", "lib/parse-obj-meshes.js", "lib/get-obj-schema.js", "obj-loader.js", "lib/parse-mtl.js", "mtl-loader.js"],
|
|
4
|
+
"sourcesContent": ["import { parseOBJ } from \"./lib/parse-obj.js\";\nimport { OBJLoader as OBJWorkerLoader } from \"./obj-loader.js\";\nimport { parseMTL } from \"./lib/parse-mtl.js\";\nimport { MTLLoader as MTLWorkerLoader } from \"./mtl-loader.js\";\n// OBJLoader\nexport { OBJWorkerLoader };\n/**\n * Loader for the OBJ geometry format\n */\nexport const OBJLoader = {\n ...OBJWorkerLoader,\n parse: async (arrayBuffer, options) => parseOBJ(new TextDecoder().decode(arrayBuffer), options),\n parseTextSync: (text, options) => parseOBJ(text, options)\n};\n// MTLLoader\n/**\n * Loader for the MTL material format\n */\nexport const MTLLoader = {\n ...MTLWorkerLoader,\n parse: async (arrayBuffer, options) => parseMTL(new TextDecoder().decode(arrayBuffer), options?.mtl),\n parseTextSync: (text, options) => parseMTL(text, options?.mtl)\n};\n", "import { getMeshBoundingBox } from '@loaders.gl/schema';\nimport { parseOBJMeshes } from \"./parse-obj-meshes.js\";\nimport { getOBJSchema } from \"./get-obj-schema.js\";\nexport function parseOBJ(text, options) {\n const { meshes } = parseOBJMeshes(text);\n // @ts-expect-error\n const vertexCount = meshes.reduce((s, mesh) => s + mesh.header.vertexCount, 0);\n // TODO - render objects separately\n const attributes = mergeAttributes(meshes, vertexCount);\n const header = {\n vertexCount,\n // @ts-ignore Need to export Attributes type\n boundingBox: getMeshBoundingBox(attributes)\n };\n const schema = getOBJSchema(attributes, {\n mode: 4,\n boundingBox: header.boundingBox\n });\n return {\n // Data return by this loader implementation\n loaderData: {\n header: {}\n },\n // Normalised data\n schema,\n header,\n mode: 4, // TRIANGLES\n topology: 'point-list',\n attributes\n };\n}\n// eslint-disable-next-line max-statements\nfunction mergeAttributes(meshes, vertexCount) {\n const positions = new Float32Array(vertexCount * 3);\n let normals;\n let colors;\n let uvs;\n let i = 0;\n for (const mesh of meshes) {\n const { POSITION, NORMAL, COLOR_0, TEXCOORD_0 } = mesh.attributes;\n positions.set(POSITION.value, i * 3);\n if (NORMAL) {\n normals = normals || new Float32Array(vertexCount * 3);\n normals.set(NORMAL.value, i * 3);\n }\n if (COLOR_0) {\n colors = colors || new Float32Array(vertexCount * 3);\n colors.set(COLOR_0.value, i * 3);\n }\n if (TEXCOORD_0) {\n uvs = uvs || new Float32Array(vertexCount * 2);\n uvs.set(TEXCOORD_0.value, i * 2);\n }\n i += POSITION.value.length / 3;\n }\n const attributes = {};\n attributes.POSITION = { value: positions, size: 3 };\n if (normals) {\n attributes.NORMAL = { value: normals, size: 3 };\n }\n if (colors) {\n attributes.COLOR_0 = { value: colors, size: 3 };\n }\n if (uvs) {\n attributes.TEXCOORD_0 = { value: uvs, size: 2 };\n }\n return attributes;\n}\n", "// 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// @ts-nocheck\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 /;\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 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}\nclass MeshObject {\n constructor(name = '') {\n this.name = name;\n this.geometry = {\n vertices: [],\n normals: [],\n colors: [],\n uvs: []\n };\n this.materials = [];\n this.smooth = true;\n this.fromDeclaration = null;\n }\n startMaterial(name, libraries) {\n const previous = this._finalize(false);\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 const material = new MeshMaterial({\n index: this.materials.length,\n name,\n mtllib: 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 this.materials.push(material);\n return material;\n }\n currentMaterial() {\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1];\n }\n return undefined;\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 // 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 // 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 return lastMultiMaterial;\n }\n}\nclass ParserState {\n constructor() {\n this.objects = [];\n this.object = null;\n this.vertices = [];\n this.normals = [];\n this.colors = [];\n this.uvs = [];\n this.materialLibraries = [];\n this.startObject('', false);\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 const previousMaterial = this.object && typeof this.object.currentMaterial === 'function'\n ? this.object.currentMaterial()\n : undefined;\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n this.object = new MeshObject(name);\n this.object.fromDeclaration = fromDeclaration;\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 this.objects.push(this.object);\n }\n finalize() {\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n }\n parseVertexIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n }\n parseNormalIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n }\n parseUVIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 2) * 2;\n }\n addVertex(a, b, c) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\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 addVertexPoint(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n }\n addVertexLine(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n }\n addNormal(a, b, c) {\n const src = this.normals;\n const dst = this.object.geometry.normals;\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 addColor(a, b, c) {\n const src = this.colors;\n const dst = this.object.geometry.colors;\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 addUV(a, b, c) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\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 addUVLine(a) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n dst.push(src[a + 0], src[a + 1]);\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 let ia = this.parseVertexIndex(a, vLen);\n let ib = this.parseVertexIndex(b, vLen);\n let ic = this.parseVertexIndex(c, vLen);\n this.addVertex(ia, ib, ic);\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 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 ib = na === nb ? ia : this.parseNormalIndex(nb, nLen);\n ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);\n this.addNormal(ia, ib, ic);\n }\n if (this.colors.length > 0) {\n this.addColor(ia, ib, ic);\n }\n }\n addPointGeometry(vertices) {\n this.object.geometry.type = 'Points';\n const vLen = this.vertices.length;\n for (const vertex of vertices) {\n this.addVertexPoint(this.parseVertexIndex(vertex, vLen));\n }\n }\n addLineGeometry(vertices, uvs) {\n this.object.geometry.type = 'Line';\n const vLen = this.vertices.length;\n const uvLen = this.uvs.length;\n for (const vertex of vertices) {\n this.addVertexLine(this.parseVertexIndex(vertex, vLen));\n }\n for (const uv of uvs) {\n this.addUVLine(this.parseUVIndex(uv, uvLen));\n }\n }\n}\n// eslint-disable-next-line max-statements, complexity\nexport function parseOBJMeshes(text) {\n const state = new ParserState();\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 if (text.indexOf('\\\\\\n') !== -1) {\n // join lines separated by a line continuation character (\\)\n text = text.replace(/\\\\\\n/g, '');\n }\n const lines = text.split('\\n');\n let line = '';\n let lineFirstChar = '';\n let lineLength = 0;\n let result = [];\n // Faster to just trim left side of the line. Use if available.\n const trimLeft = typeof ''.trimLeft === 'function';\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 if (lineLength === 0)\n continue;\n lineFirstChar = line.charAt(0);\n // @todo invoke passed in handler if any\n if (lineFirstChar === '#')\n continue;\n if (lineFirstChar === 'v') {\n const data = line.split(/\\s+/);\n switch (data[0]) {\n case 'v':\n state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n if (data.length >= 7) {\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 }\n else if (lineFirstChar === 'f') {\n const lineData = line.substr(1).trim();\n const vertexData = lineData.split(/\\s+/);\n const faceVertices = [];\n // Parse the face vertex data into an easy to work with format\n for (let j = 0, jl = vertexData.length; j < jl; j++) {\n const vertex = vertexData[j];\n if (vertex.length > 0) {\n const vertexParts = vertex.split('/');\n faceVertices.push(vertexParts);\n }\n }\n // Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n const v1 = faceVertices[0];\n for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {\n const v2 = faceVertices[j];\n const v3 = faceVertices[j + 1];\n state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2]);\n }\n }\n else if (lineFirstChar === 'l') {\n const lineParts = line.substring(1).trim().split(' ');\n let lineVertices;\n const lineUVs = [];\n if (line.indexOf('/') === -1) {\n lineVertices = lineParts;\n }\n else {\n lineVertices = [];\n for (let li = 0, llen = lineParts.length; li < llen; li++) {\n const parts = lineParts[li].split('/');\n if (parts[0] !== '')\n lineVertices.push(parts[0]);\n if (parts[1] !== '')\n lineUVs.push(parts[1]);\n }\n }\n state.addLineGeometry(lineVertices, lineUVs);\n }\n else if (lineFirstChar === 'p') {\n const lineData = line.substr(1).trim();\n const pointData = lineData.split(' ');\n state.addPointGeometry(pointData);\n }\n else if ((result = OBJECT_RE.exec(line)) !== null) {\n // o object_name\n // or\n // g group_name\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 state.startObject(name);\n }\n else if (MATERIAL_USE_RE.test(line)) {\n // material\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);\n }\n else if (MATERIAL_RE.test(line)) {\n // mtl file\n state.materialLibraries.push(line.substring(7).trim());\n }\n else if (lineFirstChar === 's') {\n result = line.split(' ');\n // smooth shading\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 * 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 }\n else {\n // ZBrush can produce \"s\" lines #11707\n state.object.smooth = true;\n }\n const material = state.object.currentMaterial();\n if (material)\n material.smooth = state.object.smooth;\n }\n else {\n // Handle null terminated files without exception\n if (line === '\\0')\n continue;\n throw new Error(`Unexpected line: \"${line}\"`);\n }\n }\n state.finalize();\n const meshes = [];\n const materials = [];\n for (const object of state.objects) {\n const { geometry } = object;\n // Skip o/g line declarations that did not follow with any faces\n if (geometry.vertices.length === 0)\n continue;\n const mesh = {\n header: {\n vertexCount: geometry.vertices.length / 3\n },\n attributes: {}\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 mesh.attributes.POSITION = { value: new Float32Array(geometry.vertices), size: 3 };\n if (geometry.normals.length > 0) {\n mesh.attributes.NORMAL = { value: new Float32Array(geometry.normals), size: 3 };\n }\n if (geometry.colors.length > 0) {\n mesh.attributes.COLOR_0 = { value: new Float32Array(geometry.colors), size: 3 };\n }\n if (geometry.uvs.length > 0) {\n mesh.attributes.TEXCOORD_0 = { value: new Float32Array(geometry.uvs), size: 2 };\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 mesh.name = object.name;\n meshes.push(mesh);\n }\n return { meshes, materials };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { getDataTypeFromArray } from '@loaders.gl/schema';\n/** Get Mesh Schema */\nexport function getOBJSchema(attributes, metadata = {}) {\n const stringMetadata = {};\n for (const key in metadata) {\n if (key !== 'value') {\n stringMetadata[key] = JSON.stringify(metadata[key]);\n }\n }\n const fields = [];\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const field = getFieldFromAttribute(attributeName, attribute);\n fields.push(field);\n }\n return { fields, metadata: stringMetadata };\n}\n/** Get a Field describing the column from an OBJ attribute */\nfunction getFieldFromAttribute(name, attribute) {\n const metadata = {};\n for (const key in attribute) {\n if (key !== 'value') {\n metadata[key] = JSON.stringify(attribute[key]);\n }\n }\n let { type } = getDataTypeFromArray(attribute.value);\n const isSingleValue = attribute.size === 1 || attribute.size === undefined;\n if (!isSingleValue) {\n type = { type: 'fixed-size-list', listSize: attribute.size, children: [{ name: 'values', type }] };\n }\n return { name, type, nullable: false, metadata };\n}\n", "// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof \"4.2.0-alpha.5\" !== 'undefined' ? \"4.2.0-alpha.5\" : 'latest';\n/**\n * Worker loader for the OBJ geometry format\n */\nexport const OBJLoader = {\n name: 'OBJ',\n id: 'obj',\n module: 'obj',\n version: VERSION,\n worker: true,\n extensions: ['obj'],\n mimeTypes: ['text/plain'],\n testText: testOBJFile,\n options: {\n obj: {}\n }\n};\nfunction testOBJFile(text) {\n // TODO - There could be comment line first\n return text[0] === 'v';\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Forked from THREE.js under MIT license\n// https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/MTLLoader.js\nconst DELIMITER_PATTERN = /\\s+/;\n/**\n * Parses a MTL file.\n * Parses a Wavefront .mtl file specifying materials\n * http://paulbourke.net/dataformats/mtl/\n * https://www.loc.gov/preservation/digital/formats/fdd/fdd000508.shtml\n *\n * @param text - Content of MTL file\n */\n// eslint-disable-next-line complexity\nexport function parseMTL(text, options) {\n // const materialsInfo: Record<string, MTLMaterial> = {};\n const materials = [];\n let currentMaterial = { name: 'placeholder' };\n const lines = text.split('\\n');\n for (let line of lines) {\n line = line.trim();\n if (line.length === 0 || line.charAt(0) === '#') {\n // Blank line or comment ignore\n continue; // eslint-disable-line no-continue\n }\n const pos = line.indexOf(' ');\n let key = pos >= 0 ? line.substring(0, pos) : line;\n key = key.toLowerCase();\n let value = pos >= 0 ? line.substring(pos + 1) : '';\n value = value.trim();\n switch (key) {\n case 'newmtl':\n // New material\n currentMaterial = { name: value };\n // insert into map\n materials.push(currentMaterial);\n break;\n case 'ka': // Ka\n currentMaterial.ambientColor = parseColor(value);\n break;\n case 'kd':\n // Kd: Diffuse color (color under white light) using RGB values\n currentMaterial.diffuseColor = parseColor(value);\n break;\n case 'map_kd':\n // Diffuse texture map\n currentMaterial.diffuseTextureUrl = value;\n // setMapForType('map', value);\n break;\n case 'ks':\n // Specular color (color when light is reflected from shiny surface) using RGB values\n currentMaterial.specularColor = parseColor(value);\n break;\n case 'map_ks':\n // Specular map\n currentMaterial.specularTextureUrl = value;\n // setMapForType('specularMap', value);\n break;\n case 'ke':\n // Emissive using RGB values\n currentMaterial.emissiveColor = parseColor(value);\n break;\n case 'map_ke':\n // Emissive map\n currentMaterial.emissiveTextureUrl = value;\n // setMapForType('emissiveMap', value);\n break;\n case 'ns':\n // Ns is material specular exponent (defines the focus of the specular highlight)\n // A high exponent results in a tight, concentrated highlight. Ns values normally range from 0 to 1000.\n currentMaterial.shininess = parseFloat(value);\n break;\n case 'map_ns':\n // Ns is material specular exponent\n // TODO?\n // currentMaterial.shininessMap = parseFloat(value);\n break;\n case 'ni':\n currentMaterial.refraction = parseFloat(value);\n break;\n case 'illum':\n currentMaterial.illumination = parseFloat(value);\n break;\n default:\n // log unknown message?\n break;\n /*\n case 'norm':\n setMapForType('normalMap', value);\n break;\n \n case 'map_bump':\n case 'bump':\n // Bump texture map\n setMapForType('bumpMap', value);\n break;\n \n case 'd':\n n = parseFloat(value);\n if (n < 1) {\n params.opacity = n;\n params.transparent = true;\n }\n break;\n \n case 'map_d':\n // Alpha map\n setMapForType('alphaMap', value);\n params.transparent = true;\n break;\n \n case 'tr':\n n = parseFloat(value);\n if (this.options && this.options.invertTrProperty) n = 1 - n;\n if (n > 0) {\n params.opacity = 1 - n;\n params.transparent = true;\n }\n */\n }\n }\n return materials;\n}\nfunction parseColor(value, options) {\n const rgb = value.split(DELIMITER_PATTERN, 3);\n const color = [\n parseFloat(rgb[0]),\n parseFloat(rgb[1]),\n parseFloat(rgb[2])\n ];\n // TODO auto detect big values?\n // if (this.options && this.options.normalizeRGB) {\n // value = [ value[ 0 ] / 255, value[ 1 ] / 255, value[ 2 ] / 255 ];\n // }\n // if (this.options && this.options.ignoreZeroRGBs) {\n // if (value[ 0 ] === 0 && value[ 1 ] === 0 && value[ 2 ] === 0) {\n // // ignore\n // save = false;\n // }\n // }\n return color;\n}\n/* TODO parse url options\nfunction parseTexture(value, matParams) {\n const texParams = {\n scale: new Vector2(1, 1),\n offset: new Vector2(0, 0)\n };\n\n const items = value.split(/\\s+/);\n let pos;\n\n pos = items.indexOf('-bm');\n if (pos >= 0) {\n matParams.bumpScale = parseFloat(items[ pos + 1 ]);\n items.splice(pos, 2);\n }\n\n pos = items.indexOf('-s');\n if (pos >= 0) {\n texParams.scale.set(parseFloat(items[ pos + 1 ]), parseFloat(items[ pos + 2 ]));\n items.splice(pos, 4); // we expect 3 parameters here!\n\n }\n\n pos = items.indexOf('-o');\n\n if (pos >= 0) {\n texParams.offset.set(parseFloat(items[ pos + 1 ]), parseFloat(items[ pos + 2 ]));\n items.splice(pos, 4); // we expect 3 parameters here!\n }\n\n texParams.url = items.join(' ').trim();\n return texParams;\n}\n\n *function resolveURL(baseUrl, url) {\n * baseUrl?: string;\n // Absolute URL\n if (/^https?:\\/\\//i.test(url)) return url;\n return baseUrl + url;\n }\n\n function setMapForType(mapType, value) {\n if (params[ mapType ]) return; // Keep the first encountered texture\n\n const texParams = scope.getTextureParams(value, params);\n const map = scope.loadTexture(resolveURL(scope.baseUrl, texParams.url));\n\n map.repeat.copy(texParams.scale);\n map.offset.copy(texParams.offset);\n\n map.wrapS = scope.wrap;\n map.wrapT = scope.wrap;\n\n params[ mapType ] = map;\n }\n*/\n", "// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof \"4.2.0-alpha.5\" !== 'undefined' ? \"4.2.0-alpha.5\" : 'latest';\n/**\n * Loader for the MTL material format\n * Parses a Wavefront .mtl file specifying materials\n */\nexport const MTLLoader = {\n name: 'MTL',\n id: 'mtl',\n module: 'mtl',\n version: VERSION,\n worker: true,\n extensions: ['mtl'],\n mimeTypes: ['text/plain'],\n testText: (text) => text.includes('newmtl'),\n options: {\n mtl: {}\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["MTLLoader", "OBJLoader", "import_schema", "VERSION", "OBJLoader", "MTLLoader"]
|
|
7
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { LoaderWithParser } from '@loaders.gl/loader-utils';
|
|
2
2
|
import type { Mesh } from '@loaders.gl/schema';
|
|
3
|
-
import type { OBJLoaderOptions } from
|
|
4
|
-
import { OBJLoader as OBJWorkerLoader } from
|
|
5
|
-
import type { MTLMaterial } from
|
|
6
|
-
import type { MTLLoaderOptions } from
|
|
3
|
+
import type { OBJLoaderOptions } from "./obj-loader.js";
|
|
4
|
+
import { OBJLoader as OBJWorkerLoader } from "./obj-loader.js";
|
|
5
|
+
import type { MTLMaterial } from "./lib/parse-mtl.js";
|
|
6
|
+
import type { MTLLoaderOptions } from "./mtl-loader.js";
|
|
7
7
|
export { OBJWorkerLoader };
|
|
8
8
|
/**
|
|
9
9
|
* Loader for the OBJ geometry format
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAC;AAE7C,OAAO,KAAK,EAAC,gBAAgB,EAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAC;AAE7C,OAAO,KAAK,EAAC,gBAAgB,EAAC,wBAAqB;AACnD,OAAO,EAAC,SAAS,IAAI,eAAe,EAAC,wBAAqB;AAE1D,OAAO,KAAK,EAAC,WAAW,EAAC,2BAAwB;AAEjD,OAAO,KAAK,EAAC,gBAAgB,EAAC,wBAAqB;AAKnD,OAAO,EAAC,eAAe,EAAC,CAAC;AAEzB;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,CAKrE,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,gBAAgB,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,gBAAgB,CAK9E,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,15 +2,22 @@ import { parseOBJ } from "./lib/parse-obj.js";
|
|
|
2
2
|
import { OBJLoader as OBJWorkerLoader } from "./obj-loader.js";
|
|
3
3
|
import { parseMTL } from "./lib/parse-mtl.js";
|
|
4
4
|
import { MTLLoader as MTLWorkerLoader } from "./mtl-loader.js";
|
|
5
|
+
// OBJLoader
|
|
5
6
|
export { OBJWorkerLoader };
|
|
7
|
+
/**
|
|
8
|
+
* Loader for the OBJ geometry format
|
|
9
|
+
*/
|
|
6
10
|
export const OBJLoader = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
11
|
+
...OBJWorkerLoader,
|
|
12
|
+
parse: async (arrayBuffer, options) => parseOBJ(new TextDecoder().decode(arrayBuffer), options),
|
|
13
|
+
parseTextSync: (text, options) => parseOBJ(text, options)
|
|
10
14
|
};
|
|
15
|
+
// MTLLoader
|
|
16
|
+
/**
|
|
17
|
+
* Loader for the MTL material format
|
|
18
|
+
*/
|
|
11
19
|
export const MTLLoader = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
20
|
+
...MTLWorkerLoader,
|
|
21
|
+
parse: async (arrayBuffer, options) => parseMTL(new TextDecoder().decode(arrayBuffer), options?.mtl),
|
|
22
|
+
parseTextSync: (text, options) => parseMTL(text, options?.mtl)
|
|
15
23
|
};
|
|
16
|
-
//# sourceMappingURL=index.js.map
|