@loaders.gl/obj 4.2.0-alpha.3 → 4.2.0-alpha.5

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 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['loader'] = factory();
6
- else root['loader'] = factory();})(globalThis, function () {
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
- // src/index.ts
28
- var src_exports = {};
29
- __export(src_exports, {
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 [[minX, minY, minZ], [maxX, maxY, maxZ]];
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 = true ? "4.2.0-alpha.3" : "latest";
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 = [parseFloat(rgb[0]), parseFloat(rgb[1]), parseFloat(rgb[2])];
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 = true ? "4.2.0-alpha.3" : "latest";
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(src_exports);
713
+ return __toCommonJS(bundle_exports);
752
714
  })();
753
715
  return __exports__;
754
716
  });
@@ -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.4",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.4",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
- // src/index.ts
21
- var src_exports = {};
22
- __export(src_exports, {
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(src_exports);
27
+ module.exports = __toCommonJS(dist_exports);
28
28
 
29
- // src/lib/parse-obj.ts
29
+ // dist/lib/parse-obj.js
30
30
  var import_schema2 = require("@loaders.gl/schema");
31
31
 
32
- // src/lib/parse-obj-meshes.ts
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
- // src/lib/get-obj-schema.ts
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
- // src/lib/parse-obj.ts
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
- // src/obj-loader.ts
497
- var VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
496
+ // dist/obj-loader.js
497
+ var VERSION = true ? "4.2.0-alpha.4" : "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
- // src/lib/parse-mtl.ts
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
- // src/mtl-loader.ts
585
- var VERSION2 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
584
+ // dist/mtl-loader.js
585
+ var VERSION2 = true ? "4.2.0-alpha.4" : "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
- // src/index.ts
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.4\" !== 'undefined' ? \"4.2.0-alpha.4\" : '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.4\" !== 'undefined' ? \"4.2.0-alpha.4\" : '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 './obj-loader';
4
- import { OBJLoader as OBJWorkerLoader } from './obj-loader';
5
- import type { MTLMaterial } from './lib/parse-mtl';
6
- import type { MTLLoaderOptions } from './mtl-loader';
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
@@ -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,MAAM,cAAc,CAAC;AACnD,OAAO,EAAC,SAAS,IAAI,eAAe,EAAC,MAAM,cAAc,CAAC;AAE1D,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,cAAc,CAAC;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"}
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
- ...OBJWorkerLoader,
8
- parse: async (arrayBuffer, options) => parseOBJ(new TextDecoder().decode(arrayBuffer), options),
9
- parseTextSync: (text, options) => parseOBJ(text, options)
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
- ...MTLWorkerLoader,
13
- parse: async (arrayBuffer, options) => parseMTL(new TextDecoder().decode(arrayBuffer), options === null || options === void 0 ? void 0 : options.mtl),
14
- parseTextSync: (text, options) => parseMTL(text, options === null || options === void 0 ? void 0 : options.mtl)
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