@loaders.gl/obj 3.4.0-alpha.2 → 3.4.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/es5/index.js CHANGED
@@ -25,14 +25,12 @@ var OBJLoader = _objectSpread(_objectSpread({}, _objLoader.OBJLoader), {}, {
25
25
  parse: function () {
26
26
  var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
27
27
  return _regenerator.default.wrap(function _callee$(_context) {
28
- while (1) {
29
- switch (_context.prev = _context.next) {
30
- case 0:
31
- return _context.abrupt("return", (0, _parseObj.parseOBJ)(new TextDecoder().decode(arrayBuffer), options));
32
- case 1:
33
- case "end":
34
- return _context.stop();
35
- }
28
+ while (1) switch (_context.prev = _context.next) {
29
+ case 0:
30
+ return _context.abrupt("return", (0, _parseObj.parseOBJ)(new TextDecoder().decode(arrayBuffer), options));
31
+ case 1:
32
+ case "end":
33
+ return _context.stop();
36
34
  }
37
35
  }, _callee);
38
36
  }));
@@ -45,21 +43,17 @@ var OBJLoader = _objectSpread(_objectSpread({}, _objLoader.OBJLoader), {}, {
45
43
  return (0, _parseObj.parseOBJ)(text, options);
46
44
  }
47
45
  });
48
-
49
46
  exports.OBJLoader = OBJLoader;
50
-
51
47
  var MTLLoader = _objectSpread(_objectSpread({}, _mtlLoader.MTLLoader), {}, {
52
48
  parse: function () {
53
49
  var _parse2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(arrayBuffer, options) {
54
50
  return _regenerator.default.wrap(function _callee2$(_context2) {
55
- while (1) {
56
- switch (_context2.prev = _context2.next) {
57
- case 0:
58
- return _context2.abrupt("return", (0, _parseMtl.parseMTL)(new TextDecoder().decode(arrayBuffer), options === null || options === void 0 ? void 0 : options.mtl));
59
- case 1:
60
- case "end":
61
- return _context2.stop();
62
- }
51
+ while (1) switch (_context2.prev = _context2.next) {
52
+ case 0:
53
+ return _context2.abrupt("return", (0, _parseMtl.parseMTL)(new TextDecoder().decode(arrayBuffer), options === null || options === void 0 ? void 0 : options.mtl));
54
+ case 1:
55
+ case "end":
56
+ return _context2.stop();
63
57
  }
64
58
  }, _callee2);
65
59
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["OBJLoader","OBJWorkerLoader","parse","arrayBuffer","options","parseOBJ","TextDecoder","decode","parseTextSync","text","MTLLoader","MTLWorkerLoader","parseMTL","mtl","_typecheckOBJLoader","_typecheckMTLLoader"],"sources":["../../src/index.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseOBJ} from './lib/parse-obj';\nimport {parseMTL} from './lib/parse-mtl';\nimport type {OBJLoaderOptions} from './obj-loader';\nimport {OBJLoader as OBJWorkerLoader} from './obj-loader';\nimport type {MTLLoaderOptions} from './mtl-loader';\nimport {MTLLoader as MTLWorkerLoader} from './mtl-loader';\n\n// OBJLoader\n\nexport {OBJWorkerLoader};\n\n/**\n * Loader for the OBJ geometry format\n */\nexport const OBJLoader = {\n ...OBJWorkerLoader,\n parse: async (arrayBuffer: ArrayBuffer, options?: OBJLoaderOptions) =>\n parseOBJ(new TextDecoder().decode(arrayBuffer), options),\n parseTextSync: (text: string, options?: OBJLoaderOptions) => parseOBJ(text, options)\n};\n\n// MTLLoader\n\n/**\n * Loader for the MTL material format\n */\nexport const MTLLoader = {\n ...MTLWorkerLoader,\n parse: async (arrayBuffer: ArrayBuffer, options?: MTLLoaderOptions) =>\n parseMTL(new TextDecoder().decode(arrayBuffer), options?.mtl),\n parseTextSync: (text: string, options?: MTLLoaderOptions) => parseMTL(text, options?.mtl)\n};\n\nexport const _typecheckOBJLoader: LoaderWithParser = OBJLoader;\nexport const _typecheckMTLLoader: LoaderWithParser = MTLLoader;\n"],"mappings":";;;;;;;;;;;;;;;;;AACA;AACA;AAEA;AAEA;AAA0D;AAAA;AASnD,IAAMA,SAAS,mCACjBC,oBAAe;EAClBC,KAAK;IAAA,uEAAE,iBAAOC,WAAwB,EAAEC,OAA0B;MAAA;QAAA;UAAA;YAAA;cAAA,iCAChE,IAAAC,kBAAQ,EAAC,IAAIC,WAAW,EAAE,CAACC,MAAM,CAACJ,WAAW,CAAC,EAAEC,OAAO,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;IAAA;MAAA;IAAA;IAAA;EAAA;EAC1DI,aAAa,EAAE,uBAACC,IAAY,EAAEL,OAA0B;IAAA,OAAK,IAAAC,kBAAQ,EAACI,IAAI,EAAEL,OAAO,CAAC;EAAA;AAAA,EACrF;;AAAC;;AAOK,IAAMM,SAAS,mCACjBC,oBAAe;EAClBT,KAAK;IAAA,wEAAE,kBAAOC,WAAwB,EAAEC,OAA0B;MAAA;QAAA;UAAA;YAAA;cAAA,kCAChE,IAAAQ,kBAAQ,EAAC,IAAIN,WAAW,EAAE,CAACC,MAAM,CAACJ,WAAW,CAAC,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAES,GAAG,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;IAAA;MAAA;IAAA;IAAA;EAAA;EAC/DL,aAAa,EAAE,uBAACC,IAAY,EAAEL,OAA0B;IAAA,OAAK,IAAAQ,kBAAQ,EAACH,IAAI,EAAEL,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAES,GAAG,CAAC;EAAA;AAAA,EAC1F;AAAC;AAEK,IAAMC,mBAAqC,GAAGd,SAAS;AAAC;AACxD,IAAMe,mBAAqC,GAAGL,SAAS;AAAC"}
1
+ {"version":3,"file":"index.js","names":["_parseObj","require","_parseMtl","_objLoader","_mtlLoader","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","OBJLoader","OBJWorkerLoader","parse","_parse","_asyncToGenerator2","_regenerator","mark","_callee","arrayBuffer","options","wrap","_callee$","_context","prev","next","abrupt","parseOBJ","TextDecoder","decode","stop","_x","_x2","parseTextSync","text","exports","MTLLoader","MTLWorkerLoader","_parse2","_callee2","_callee2$","_context2","parseMTL","mtl","_x3","_x4","_typecheckOBJLoader","_typecheckMTLLoader"],"sources":["../../src/index.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseOBJ} from './lib/parse-obj';\nimport {parseMTL} from './lib/parse-mtl';\nimport type {OBJLoaderOptions} from './obj-loader';\nimport {OBJLoader as OBJWorkerLoader} from './obj-loader';\nimport type {MTLLoaderOptions} from './mtl-loader';\nimport {MTLLoader as MTLWorkerLoader} from './mtl-loader';\n\n// OBJLoader\n\nexport {OBJWorkerLoader};\n\n/**\n * Loader for the OBJ geometry format\n */\nexport const OBJLoader = {\n ...OBJWorkerLoader,\n parse: async (arrayBuffer: ArrayBuffer, options?: OBJLoaderOptions) =>\n parseOBJ(new TextDecoder().decode(arrayBuffer), options),\n parseTextSync: (text: string, options?: OBJLoaderOptions) => parseOBJ(text, options)\n};\n\n// MTLLoader\n\n/**\n * Loader for the MTL material format\n */\nexport const MTLLoader = {\n ...MTLWorkerLoader,\n parse: async (arrayBuffer: ArrayBuffer, options?: MTLLoaderOptions) =>\n parseMTL(new TextDecoder().decode(arrayBuffer), options?.mtl),\n parseTextSync: (text: string, options?: MTLLoaderOptions) => parseMTL(text, options?.mtl)\n};\n\nexport const _typecheckOBJLoader: LoaderWithParser = OBJLoader;\nexport const _typecheckMTLLoader: LoaderWithParser = MTLLoader;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-obj-schema.js","names":["getOBJSchema","attributes","metadata","metadataMap","key","Map","set","JSON","stringify","fields","attributeName","attribute","field","getArrowFieldFromAttribute","push","Schema","type","getArrowTypeFromTypedArray","value","isSingleValue","size","Field","FixedSizeList"],"sources":["../../../src/lib/get-obj-schema.ts"],"sourcesContent":["import {Schema, Field, FixedSizeList, getArrowTypeFromTypedArray} from '@loaders.gl/schema';\n\nexport function getOBJSchema(attributes, metadata = {}) {\n let metadataMap;\n for (const key in metadata) {\n metadataMap = metadataMap || new Map();\n if (key !== 'value') {\n metadataMap.set(key, JSON.stringify(metadata[key]));\n }\n }\n\n const fields: Field[] = [];\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const field = getArrowFieldFromAttribute(attributeName, attribute);\n fields.push(field);\n }\n return new Schema(fields, metadataMap);\n}\n\nfunction getArrowFieldFromAttribute(attributeName, attribute) {\n const metadataMap = new Map();\n for (const key in attribute) {\n if (key !== 'value') {\n metadataMap.set(key, JSON.stringify(attribute[key]));\n }\n }\n\n const type = getArrowTypeFromTypedArray(attribute.value);\n const isSingleValue = !('size' in attribute) || attribute.size === 1;\n return isSingleValue\n ? new Field(attributeName, type, false, metadataMap)\n : new Field(\n attributeName,\n new FixedSizeList(attribute.size, new Field('value', type)),\n false,\n metadataMap\n );\n}\n"],"mappings":";;;;;;AAAA;AAEO,SAASA,YAAY,CAACC,UAAU,EAAiB;EAAA,IAAfC,QAAQ,uEAAG,CAAC,CAAC;EACpD,IAAIC,WAAW;EACf,KAAK,IAAMC,GAAG,IAAIF,QAAQ,EAAE;IAC1BC,WAAW,GAAGA,WAAW,IAAI,IAAIE,GAAG,EAAE;IACtC,IAAID,GAAG,KAAK,OAAO,EAAE;MACnBD,WAAW,CAACG,GAAG,CAACF,GAAG,EAAEG,IAAI,CAACC,SAAS,CAACN,QAAQ,CAACE,GAAG,CAAC,CAAC,CAAC;IACrD;EACF;EAEA,IAAMK,MAAe,GAAG,EAAE;EAC1B,KAAK,IAAMC,aAAa,IAAIT,UAAU,EAAE;IACtC,IAAMU,SAAS,GAAGV,UAAU,CAACS,aAAa,CAAC;IAC3C,IAAME,KAAK,GAAGC,0BAA0B,CAACH,aAAa,EAAEC,SAAS,CAAC;IAClEF,MAAM,CAACK,IAAI,CAACF,KAAK,CAAC;EACpB;EACA,OAAO,IAAIG,cAAM,CAACN,MAAM,EAAEN,WAAW,CAAC;AACxC;AAEA,SAASU,0BAA0B,CAACH,aAAa,EAAEC,SAAS,EAAE;EAC5D,IAAMR,WAAW,GAAG,IAAIE,GAAG,EAAE;EAC7B,KAAK,IAAMD,GAAG,IAAIO,SAAS,EAAE;IAC3B,IAAIP,GAAG,KAAK,OAAO,EAAE;MACnBD,WAAW,CAACG,GAAG,CAACF,GAAG,EAAEG,IAAI,CAACC,SAAS,CAACG,SAAS,CAACP,GAAG,CAAC,CAAC,CAAC;IACtD;EACF;EAEA,IAAMY,IAAI,GAAG,IAAAC,kCAA0B,EAACN,SAAS,CAACO,KAAK,CAAC;EACxD,IAAMC,aAAa,GAAG,EAAE,MAAM,IAAIR,SAAS,CAAC,IAAIA,SAAS,CAACS,IAAI,KAAK,CAAC;EACpE,OAAOD,aAAa,GAChB,IAAIE,aAAK,CAACX,aAAa,EAAEM,IAAI,EAAE,KAAK,EAAEb,WAAW,CAAC,GAClD,IAAIkB,aAAK,CACTX,aAAa,EACb,IAAIY,qBAAa,CAACX,SAAS,CAACS,IAAI,EAAE,IAAIC,aAAK,CAAC,OAAO,EAAEL,IAAI,CAAC,CAAC,EAC3D,KAAK,EACLb,WAAW,CACZ;AACL"}
1
+ {"version":3,"file":"get-obj-schema.js","names":["_schema","require","getOBJSchema","attributes","metadata","arguments","length","undefined","metadataMap","key","Map","set","JSON","stringify","fields","attributeName","attribute","field","getArrowFieldFromAttribute","push","Schema","type","getArrowTypeFromTypedArray","value","isSingleValue","size","Field","FixedSizeList"],"sources":["../../../src/lib/get-obj-schema.ts"],"sourcesContent":["import {Schema, Field, FixedSizeList, getArrowTypeFromTypedArray} from '@loaders.gl/schema';\n\nexport function getOBJSchema(attributes, metadata = {}) {\n let metadataMap;\n for (const key in metadata) {\n metadataMap = metadataMap || new Map();\n if (key !== 'value') {\n metadataMap.set(key, JSON.stringify(metadata[key]));\n }\n }\n\n const fields: Field[] = [];\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const field = getArrowFieldFromAttribute(attributeName, attribute);\n fields.push(field);\n }\n return new Schema(fields, metadataMap);\n}\n\nfunction getArrowFieldFromAttribute(attributeName, attribute) {\n const metadataMap = new Map();\n for (const key in attribute) {\n if (key !== 'value') {\n metadataMap.set(key, JSON.stringify(attribute[key]));\n }\n }\n\n const type = getArrowTypeFromTypedArray(attribute.value);\n const isSingleValue = !('size' in attribute) || attribute.size === 1;\n return isSingleValue\n ? new Field(attributeName, type, false, metadataMap)\n : new Field(\n attributeName,\n new FixedSizeList(attribute.size, new Field('value', type)),\n false,\n metadataMap\n );\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEO,SAASC,YAAYA,CAACC,UAAU,EAAiB;EAAA,IAAfC,QAAQ,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EACpD,IAAIG,WAAW;EACf,KAAK,IAAMC,GAAG,IAAIL,QAAQ,EAAE;IAC1BI,WAAW,GAAGA,WAAW,IAAI,IAAIE,GAAG,EAAE;IACtC,IAAID,GAAG,KAAK,OAAO,EAAE;MACnBD,WAAW,CAACG,GAAG,CAACF,GAAG,EAAEG,IAAI,CAACC,SAAS,CAACT,QAAQ,CAACK,GAAG,CAAC,CAAC,CAAC;IACrD;EACF;EAEA,IAAMK,MAAe,GAAG,EAAE;EAC1B,KAAK,IAAMC,aAAa,IAAIZ,UAAU,EAAE;IACtC,IAAMa,SAAS,GAAGb,UAAU,CAACY,aAAa,CAAC;IAC3C,IAAME,KAAK,GAAGC,0BAA0B,CAACH,aAAa,EAAEC,SAAS,CAAC;IAClEF,MAAM,CAACK,IAAI,CAACF,KAAK,CAAC;EACpB;EACA,OAAO,IAAIG,cAAM,CAACN,MAAM,EAAEN,WAAW,CAAC;AACxC;AAEA,SAASU,0BAA0BA,CAACH,aAAa,EAAEC,SAAS,EAAE;EAC5D,IAAMR,WAAW,GAAG,IAAIE,GAAG,EAAE;EAC7B,KAAK,IAAMD,GAAG,IAAIO,SAAS,EAAE;IAC3B,IAAIP,GAAG,KAAK,OAAO,EAAE;MACnBD,WAAW,CAACG,GAAG,CAACF,GAAG,EAAEG,IAAI,CAACC,SAAS,CAACG,SAAS,CAACP,GAAG,CAAC,CAAC,CAAC;IACtD;EACF;EAEA,IAAMY,IAAI,GAAG,IAAAC,kCAA0B,EAACN,SAAS,CAACO,KAAK,CAAC;EACxD,IAAMC,aAAa,GAAG,EAAE,MAAM,IAAIR,SAAS,CAAC,IAAIA,SAAS,CAACS,IAAI,KAAK,CAAC;EACpE,OAAOD,aAAa,GAChB,IAAIE,aAAK,CAACX,aAAa,EAAEM,IAAI,EAAE,KAAK,EAAEb,WAAW,CAAC,GAClD,IAAIkB,aAAK,CACTX,aAAa,EACb,IAAIY,qBAAa,CAACX,SAAS,CAACS,IAAI,EAAE,IAAIC,aAAK,CAAC,OAAO,EAAEL,IAAI,CAAC,CAAC,EAC3D,KAAK,EACLb,WAAW,CACZ;AACL"}
@@ -6,10 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.parseMTL = parseMTL;
7
7
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
8
8
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
9
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
10
-
9
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
11
10
  var DELIMITER_PATTERN = /\s+/;
12
-
13
11
  function parseMTL(text, options) {
14
12
  var materials = [];
15
13
  var currentMaterial = {
@@ -25,7 +23,6 @@ function parseMTL(text, options) {
25
23
  if (line.length === 0 || line.charAt(0) === '#') {
26
24
  continue;
27
25
  }
28
-
29
26
  var pos = line.indexOf(' ');
30
27
  var key = pos >= 0 ? line.substring(0, pos) : line;
31
28
  key = key.toLowerCase();
@@ -72,7 +69,6 @@ function parseMTL(text, options) {
72
69
  break;
73
70
  default:
74
71
  break;
75
-
76
72
  }
77
73
  }
78
74
  } catch (err) {
@@ -85,7 +81,6 @@ function parseMTL(text, options) {
85
81
  function parseColor(value, options) {
86
82
  var rgb = value.split(DELIMITER_PATTERN, 3);
87
83
  var color = [parseFloat(rgb[0]), parseFloat(rgb[1]), parseFloat(rgb[2])];
88
-
89
84
  return color;
90
85
  }
91
86
  //# sourceMappingURL=parse-mtl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-mtl.js","names":["DELIMITER_PATTERN","parseMTL","text","options","materials","currentMaterial","name","lines","split","line","trim","length","charAt","pos","indexOf","key","substring","toLowerCase","value","push","ambientColor","parseColor","diffuseColor","diffuseTextureUrl","specularColor","specularTextureUrl","emissiveColor","emissiveTextureUrl","shininess","parseFloat","refraction","illumination","rgb","color"],"sources":["../../../src/lib/parse-mtl.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Forked from THREE.js under MIT license\n// https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/MTLLoader.js\n\n// import type {DiffuseMaterial} from '@loaders.gl/schema';\n\nexport type MTLMaterial = {\n name: string;\n ambientColor?: [number, number, number];\n diffuseColor?: [number, number, number];\n specularColor?: [number, number, number];\n emissiveColor?: [number, number, number];\n // specular?: number;\n shininess?: number;\n refraction?: number;\n illumination?: number;\n diffuseTextureUrl?: string;\n emissiveTextureUrl?: string;\n specularTextureUrl?: string;\n};\n\nconst DELIMITER_PATTERN = /\\s+/;\n\n/**\n * Set of options on how to construct materials\n * @param normalizeRGB: RGBs need to be normalized to 0-1 from 0-255 (Default: false, assumed to be already normalized)\n * @param ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's Default: false\n * @param baseUrl - Url relative to which textures are loaded\n */\nexport type ParseMTLOptions = {\n normalizeRGB?: boolean;\n ignoreZeroRGBs?: boolean;\n baseUrl?: string;\n};\n\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: string, options?: ParseMTLOptions): MTLMaterial[] {\n // const materialsInfo: Record<string, MTLMaterial> = {};\n const materials: MTLMaterial[] = [];\n\n let currentMaterial: MTLMaterial = {name: 'placeholder'};\n\n const lines = text.split('\\n');\n for (let line of lines) {\n line = line.trim();\n\n if (line.length === 0 || line.charAt(0) === '#') {\n // Blank line or comment ignore\n continue; // eslint-disable-line no-continue\n }\n\n const pos = line.indexOf(' ');\n\n let key = pos >= 0 ? line.substring(0, pos) : line;\n key = key.toLowerCase();\n\n let value = pos >= 0 ? line.substring(pos + 1) : '';\n value = value.trim();\n\n switch (key) {\n case 'newmtl':\n // New material\n currentMaterial = {name: value};\n // insert into map\n materials.push(currentMaterial);\n break;\n\n case 'ka': // Ka\n currentMaterial.ambientColor = parseColor(value);\n break;\n\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\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\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\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\n default:\n // log unknown message?\n break;\n\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\n return materials;\n}\n\nfunction parseColor(value: string, options?: ParseMTLOptions): [number, number, number] {\n const rgb = value.split(DELIMITER_PATTERN, 3);\n const color: [number, number, number] = [\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\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\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"],"mappings":";;;;;;;;;;AAqBA,IAAMA,iBAAiB,GAAG,KAAK;;AAuBxB,SAASC,QAAQ,CAACC,IAAY,EAAEC,OAAyB,EAAiB;EAE/E,IAAMC,SAAwB,GAAG,EAAE;EAEnC,IAAIC,eAA4B,GAAG;IAACC,IAAI,EAAE;EAAa,CAAC;EAExD,IAAMC,KAAK,GAAGL,IAAI,CAACM,KAAK,CAAC,IAAI,CAAC;EAAC,2CACdD,KAAK;IAAA;EAAA;IAAtB,oDAAwB;MAAA,IAAfE,IAAI;MACXA,IAAI,GAAGA,IAAI,CAACC,IAAI,EAAE;MAElB,IAAID,IAAI,CAACE,MAAM,KAAK,CAAC,IAAIF,IAAI,CAACG,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QAE/C;MACF;;MAEA,IAAMC,GAAG,GAAGJ,IAAI,CAACK,OAAO,CAAC,GAAG,CAAC;MAE7B,IAAIC,GAAG,GAAGF,GAAG,IAAI,CAAC,GAAGJ,IAAI,CAACO,SAAS,CAAC,CAAC,EAAEH,GAAG,CAAC,GAAGJ,IAAI;MAClDM,GAAG,GAAGA,GAAG,CAACE,WAAW,EAAE;MAEvB,IAAIC,KAAK,GAAGL,GAAG,IAAI,CAAC,GAAGJ,IAAI,CAACO,SAAS,CAACH,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE;MACnDK,KAAK,GAAGA,KAAK,CAACR,IAAI,EAAE;MAEpB,QAAQK,GAAG;QACT,KAAK,QAAQ;UAEXV,eAAe,GAAG;YAACC,IAAI,EAAEY;UAAK,CAAC;UAE/Bd,SAAS,CAACe,IAAI,CAACd,eAAe,CAAC;UAC/B;QAEF,KAAK,IAAI;UACPA,eAAe,CAACe,YAAY,GAAGC,UAAU,CAACH,KAAK,CAAC;UAChD;QAEF,KAAK,IAAI;UAEPb,eAAe,CAACiB,YAAY,GAAGD,UAAU,CAACH,KAAK,CAAC;UAChD;QACF,KAAK,QAAQ;UAEXb,eAAe,CAACkB,iBAAiB,GAAGL,KAAK;UAEzC;QAEF,KAAK,IAAI;UAEPb,eAAe,CAACmB,aAAa,GAAGH,UAAU,CAACH,KAAK,CAAC;UACjD;QACF,KAAK,QAAQ;UAEXb,eAAe,CAACoB,kBAAkB,GAAGP,KAAK;UAE1C;QAEF,KAAK,IAAI;UAEPb,eAAe,CAACqB,aAAa,GAAGL,UAAU,CAACH,KAAK,CAAC;UACjD;QACF,KAAK,QAAQ;UAEXb,eAAe,CAACsB,kBAAkB,GAAGT,KAAK;UAE1C;QAEF,KAAK,IAAI;UAGPb,eAAe,CAACuB,SAAS,GAAGC,UAAU,CAACX,KAAK,CAAC;UAC7C;QACF,KAAK,QAAQ;UAIX;QACF,KAAK,IAAI;UACPb,eAAe,CAACyB,UAAU,GAAGD,UAAU,CAACX,KAAK,CAAC;UAC9C;QACF,KAAK,OAAO;UACVb,eAAe,CAAC0B,YAAY,GAAGF,UAAU,CAACX,KAAK,CAAC;UAChD;QAEF;UAEE;;MAAM;IAoCZ;EAAC;IAAA;EAAA;IAAA;EAAA;EAED,OAAOd,SAAS;AAClB;AAEA,SAASiB,UAAU,CAACH,KAAa,EAAEf,OAAyB,EAA4B;EACtF,IAAM6B,GAAG,GAAGd,KAAK,CAACV,KAAK,CAACR,iBAAiB,EAAE,CAAC,CAAC;EAC7C,IAAMiC,KAA+B,GAAG,CACtCJ,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,EAClBH,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,EAClBH,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,CACnB;;EAYD,OAAOC,KAAK;AACd"}
1
+ {"version":3,"file":"parse-mtl.js","names":["DELIMITER_PATTERN","parseMTL","text","options","materials","currentMaterial","name","lines","split","_iterator","_createForOfIteratorHelper","_step","s","n","done","line","value","trim","length","charAt","pos","indexOf","key","substring","toLowerCase","push","ambientColor","parseColor","diffuseColor","diffuseTextureUrl","specularColor","specularTextureUrl","emissiveColor","emissiveTextureUrl","shininess","parseFloat","refraction","illumination","err","e","f","rgb","color"],"sources":["../../../src/lib/parse-mtl.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Forked from THREE.js under MIT license\n// https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/MTLLoader.js\n\n// import type {DiffuseMaterial} from '@loaders.gl/schema';\n\nexport type MTLMaterial = {\n name: string;\n ambientColor?: [number, number, number];\n diffuseColor?: [number, number, number];\n specularColor?: [number, number, number];\n emissiveColor?: [number, number, number];\n // specular?: number;\n shininess?: number;\n refraction?: number;\n illumination?: number;\n diffuseTextureUrl?: string;\n emissiveTextureUrl?: string;\n specularTextureUrl?: string;\n};\n\nconst DELIMITER_PATTERN = /\\s+/;\n\n/**\n * Set of options on how to construct materials\n * @param normalizeRGB: RGBs need to be normalized to 0-1 from 0-255 (Default: false, assumed to be already normalized)\n * @param ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's Default: false\n * @param baseUrl - Url relative to which textures are loaded\n */\nexport type ParseMTLOptions = {\n normalizeRGB?: boolean;\n ignoreZeroRGBs?: boolean;\n baseUrl?: string;\n};\n\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: string, options?: ParseMTLOptions): MTLMaterial[] {\n // const materialsInfo: Record<string, MTLMaterial> = {};\n const materials: MTLMaterial[] = [];\n\n let currentMaterial: MTLMaterial = {name: 'placeholder'};\n\n const lines = text.split('\\n');\n for (let line of lines) {\n line = line.trim();\n\n if (line.length === 0 || line.charAt(0) === '#') {\n // Blank line or comment ignore\n continue; // eslint-disable-line no-continue\n }\n\n const pos = line.indexOf(' ');\n\n let key = pos >= 0 ? line.substring(0, pos) : line;\n key = key.toLowerCase();\n\n let value = pos >= 0 ? line.substring(pos + 1) : '';\n value = value.trim();\n\n switch (key) {\n case 'newmtl':\n // New material\n currentMaterial = {name: value};\n // insert into map\n materials.push(currentMaterial);\n break;\n\n case 'ka': // Ka\n currentMaterial.ambientColor = parseColor(value);\n break;\n\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\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\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\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\n default:\n // log unknown message?\n break;\n\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\n return materials;\n}\n\nfunction parseColor(value: string, options?: ParseMTLOptions): [number, number, number] {\n const rgb = value.split(DELIMITER_PATTERN, 3);\n const color: [number, number, number] = [\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\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\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"],"mappings":"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"}
@@ -9,8 +9,7 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
9
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
10
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
11
11
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
12
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
13
-
12
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
14
13
  var OBJECT_RE = /^[og]\s*(.+)?/;
15
14
  var MATERIAL_RE = /^mtllib /;
16
15
  var MATERIAL_USE_RE = /^usemtl /;
@@ -66,7 +65,6 @@ var MeshObject = function () {
66
65
  key: "startMaterial",
67
66
  value: function startMaterial(name, libraries) {
68
67
  var previous = this._finalize(false);
69
-
70
68
  if (previous && (previous.inherited || previous.groupCount <= 0)) {
71
69
  this.materials.splice(previous.index, 1);
72
70
  }
@@ -97,7 +95,6 @@ var MeshObject = function () {
97
95
  lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;
98
96
  lastMultiMaterial.inherited = false;
99
97
  }
100
-
101
98
  if (end && this.materials.length > 1) {
102
99
  for (var mi = this.materials.length - 1; mi >= 0; mi--) {
103
100
  if (this.materials[mi].groupCount <= 0) {
@@ -105,7 +102,6 @@ var MeshObject = function () {
105
102
  }
106
103
  }
107
104
  }
108
-
109
105
  if (end && this.materials.length === 0) {
110
106
  this.materials.push({
111
107
  name: '',
@@ -144,7 +140,6 @@ var ParserState = function () {
144
140
  }
145
141
  this.object = new MeshObject(name);
146
142
  this.object.fromDeclaration = fromDeclaration;
147
-
148
143
  if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {
149
144
  var declared = previousMaterial.clone(0);
150
145
  declared.inherited = true;
@@ -234,11 +229,9 @@ var ParserState = function () {
234
229
  var dst = this.object.geometry.uvs;
235
230
  dst.push(src[a + 0], src[a + 1]);
236
231
  }
237
-
238
232
  }, {
239
233
  key: "addFace",
240
- value:
241
- function addFace(a, b, c, ua, ub, uc, na, nb, nc) {
234
+ value: function addFace(a, b, c, ua, ub, uc, na, nb, nc) {
242
235
  var vLen = this.vertices.length;
243
236
  var ia = this.parseVertexIndex(a, vLen);
244
237
  var ib = this.parseVertexIndex(b, vLen);
@@ -327,16 +320,13 @@ function parseOBJMeshes(text) {
327
320
  var lineFirstChar = '';
328
321
  var lineLength = 0;
329
322
  var result = [];
330
-
331
323
  var trimLeft = typeof ''.trimLeft === 'function';
332
-
333
324
  for (var i = 0, l = lines.length; i < l; i++) {
334
325
  line = lines[i];
335
326
  line = trimLeft ? line.trimLeft() : line.trim();
336
327
  lineLength = line.length;
337
328
  if (lineLength === 0) continue;
338
329
  lineFirstChar = line.charAt(0);
339
-
340
330
  if (lineFirstChar === '#') continue;
341
331
  if (lineFirstChar === 'v') {
342
332
  var data = line.split(/\s+/);
@@ -359,7 +349,6 @@ function parseOBJMeshes(text) {
359
349
  var lineData = line.substr(1).trim();
360
350
  var vertexData = lineData.split(/\s+/);
361
351
  var faceVertices = [];
362
-
363
352
  for (var j = 0, jl = vertexData.length; j < jl; j++) {
364
353
  var vertex = vertexData[j];
365
354
  if (vertex.length > 0) {
@@ -367,7 +356,6 @@ function parseOBJMeshes(text) {
367
356
  faceVertices.push(vertexParts);
368
357
  }
369
358
  }
370
-
371
359
  var v1 = faceVertices[0];
372
360
  for (var _j = 1, _jl = faceVertices.length - 1; _j < _jl; _j++) {
373
361
  var v2 = faceVertices[_j];
@@ -394,19 +382,14 @@ function parseOBJMeshes(text) {
394
382
  var pointData = _lineData.split(' ');
395
383
  state.addPointGeometry(pointData);
396
384
  } else if ((result = OBJECT_RE.exec(line)) !== null) {
397
-
398
385
  var name = (' ' + result[0].substr(1).trim()).substr(1);
399
-
400
386
  state.startObject(name);
401
387
  } else if (MATERIAL_USE_RE.test(line)) {
402
-
403
388
  state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);
404
389
  } else if (MATERIAL_RE.test(line)) {
405
-
406
390
  state.materialLibraries.push(line.substring(7).trim());
407
391
  } else if (lineFirstChar === 's') {
408
392
  result = line.split(' ');
409
-
410
393
  if (result.length > 1) {
411
394
  var value = result[1].trim().toLowerCase();
412
395
  state.object.smooth = value !== '0' && value !== 'off';
@@ -429,7 +412,6 @@ function parseOBJMeshes(text) {
429
412
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
430
413
  var object = _step4.value;
431
414
  var geometry = object.geometry;
432
-
433
415
  if (geometry.vertices.length === 0) continue;
434
416
  var mesh = {
435
417
  header: {
@@ -470,7 +452,6 @@ function parseOBJMeshes(text) {
470
452
  size: 2
471
453
  };
472
454
  }
473
-
474
455
  mesh.materials = [];
475
456
  var _iterator5 = _createForOfIteratorHelper(object.materials),
476
457
  _step5;
@@ -1 +1 @@
1
- {"version":3,"file":"parse-obj-meshes.js","names":["OBJECT_RE","MATERIAL_RE","MATERIAL_USE_RE","MeshMaterial","index","name","mtllib","smooth","groupStart","groupEnd","groupCount","inherited","MeshObject","geometry","vertices","normals","colors","uvs","materials","fromDeclaration","libraries","previous","_finalize","splice","material","length","Array","isArray","undefined","push","end","lastMultiMaterial","currentMaterial","mi","ParserState","objects","object","materialLibraries","startObject","previousMaterial","clone","declared","value","len","parseInt","a","b","c","src","dst","ua","ub","uc","na","nb","nc","vLen","ia","parseVertexIndex","ib","ic","addVertex","uvLen","parseUVIndex","addUV","nLen","parseNormalIndex","addNormal","addColor","type","vertex","addVertexPoint","addVertexLine","uv","addUVLine","parseOBJMeshes","text","state","indexOf","replace","lines","split","line","lineFirstChar","lineLength","result","trimLeft","i","l","trim","charAt","data","parseFloat","lineData","substr","vertexData","faceVertices","j","jl","vertexParts","v1","v2","v3","addFace","lineParts","substring","lineVertices","lineUVs","li","llen","parts","addLineGeometry","pointData","addPointGeometry","exec","test","startMaterial","toLowerCase","Error","finalize","meshes","mesh","header","vertexCount","attributes","mode","POSITION","Float32Array","size","NORMAL","COLOR_0","TEXCOORD_0","sourceMaterial","_material","flatShading"],"sources":["../../../src/lib/parse-obj-meshes.ts"],"sourcesContent":["// OBJ Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author mrdoob / http://mrdoob.com/\n\n// @ts-nocheck\n\n// o object_name | g group_name\nconst OBJECT_RE = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst MATERIAL_RE = /^mtllib /;\n// usemtl material_name\nconst MATERIAL_USE_RE = /^usemtl /;\n\nclass MeshMaterial {\n constructor({index, name = '', mtllib, smooth, groupStart}) {\n this.index = index;\n this.name = name;\n this.mtllib = mtllib;\n this.smooth = smooth;\n this.groupStart = groupStart;\n this.groupEnd = -1;\n this.groupCount = -1;\n this.inherited = false;\n }\n\n clone(index = this.index) {\n return new MeshMaterial({\n index,\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: 0\n });\n }\n}\n\nclass MeshObject {\n constructor(name = '') {\n this.name = name;\n\n this.geometry = {\n vertices: [],\n normals: [],\n colors: [],\n uvs: []\n };\n\n this.materials = [];\n this.smooth = true;\n\n this.fromDeclaration = null;\n }\n\n startMaterial(name, libraries) {\n const previous = this._finalize(false);\n\n // New usemtl declaration overwrites an inherited material, except if faces were declared\n // after the material, then it must be preserved for proper MultiMaterial continuation.\n if (previous && (previous.inherited || previous.groupCount <= 0)) {\n this.materials.splice(previous.index, 1);\n }\n\n const material = new MeshMaterial({\n index: this.materials.length,\n name,\n mtllib:\n Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',\n smooth: previous !== undefined ? previous.smooth : this.smooth,\n groupStart: previous !== undefined ? previous.groupEnd : 0\n });\n\n this.materials.push(material);\n\n return material;\n }\n\n currentMaterial() {\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1];\n }\n\n return undefined;\n }\n\n _finalize(end) {\n const lastMultiMaterial = this.currentMaterial();\n if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n lastMultiMaterial.inherited = false;\n }\n\n // Ignore objects tail materials if no face declarations followed them before a new o/g started.\n if (end && this.materials.length > 1) {\n for (let mi = this.materials.length - 1; mi >= 0; mi--) {\n if (this.materials[mi].groupCount <= 0) {\n this.materials.splice(mi, 1);\n }\n }\n }\n\n // Guarantee at least one empty material, this makes the creation later more straight forward.\n if (end && this.materials.length === 0) {\n this.materials.push({\n name: '',\n smooth: this.smooth\n });\n }\n\n return lastMultiMaterial;\n }\n}\n\nclass ParserState {\n constructor() {\n this.objects = [];\n this.object = null;\n\n this.vertices = [];\n this.normals = [];\n this.colors = [];\n this.uvs = [];\n\n this.materialLibraries = [];\n\n this.startObject('', false);\n }\n\n startObject(name, fromDeclaration = true) {\n // If the current object (initial from reset) is not from a g/o declaration in the parsed\n // file. We need to use it for the first parsed g/o to keep things in sync.\n if (this.object && !this.object.fromDeclaration) {\n this.object.name = name;\n this.object.fromDeclaration = fromDeclaration;\n return;\n }\n\n const previousMaterial =\n this.object && typeof this.object.currentMaterial === 'function'\n ? this.object.currentMaterial()\n : undefined;\n\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n\n this.object = new MeshObject(name);\n this.object.fromDeclaration = fromDeclaration;\n\n // Inherit previous objects material.\n // Spec tells us that a declared material must be set to all objects until a new material is declared.\n // If a usemtl declaration is encountered while this new object is being parsed, it will\n // overwrite the inherited material. Exception being that there was already face declarations\n // to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {\n const declared = previousMaterial.clone(0);\n declared.inherited = true;\n this.object.materials.push(declared);\n }\n\n this.objects.push(this.object);\n }\n\n finalize() {\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n }\n\n parseVertexIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n }\n\n parseNormalIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n }\n\n parseUVIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 2) * 2;\n }\n\n addVertex(a, b, c) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addVertexPoint(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n }\n\n addVertexLine(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n }\n\n addNormal(a, b, c) {\n const src = this.normals;\n const dst = this.object.geometry.normals;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addColor(a, b, c) {\n const src = this.colors;\n const dst = this.object.geometry.colors;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addUV(a, b, c) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0], src[a + 1]);\n dst.push(src[b + 0], src[b + 1]);\n dst.push(src[c + 0], src[c + 1]);\n }\n\n addUVLine(a) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0], src[a + 1]);\n }\n\n // eslint-disable-next-line max-params\n addFace(a, b, c, ua, ub, uc, na, nb, nc) {\n const vLen = this.vertices.length;\n\n let ia = this.parseVertexIndex(a, vLen);\n let ib = this.parseVertexIndex(b, vLen);\n let ic = this.parseVertexIndex(c, vLen);\n\n this.addVertex(ia, ib, ic);\n\n if (ua !== undefined && ua !== '') {\n const uvLen = this.uvs.length;\n ia = this.parseUVIndex(ua, uvLen);\n ib = this.parseUVIndex(ub, uvLen);\n ic = this.parseUVIndex(uc, uvLen);\n this.addUV(ia, ib, ic);\n }\n\n if (na !== undefined && na !== '') {\n // Normals are many times the same. If so, skip function call and parseInt.\n const nLen = this.normals.length;\n ia = this.parseNormalIndex(na, nLen);\n\n ib = na === nb ? ia : this.parseNormalIndex(nb, nLen);\n ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);\n\n this.addNormal(ia, ib, ic);\n }\n\n if (this.colors.length > 0) {\n this.addColor(ia, ib, ic);\n }\n }\n\n addPointGeometry(vertices) {\n this.object.geometry.type = 'Points';\n\n const vLen = this.vertices.length;\n\n for (const vertex of vertices) {\n this.addVertexPoint(this.parseVertexIndex(vertex, vLen));\n }\n }\n\n addLineGeometry(vertices, uvs) {\n this.object.geometry.type = 'Line';\n\n const vLen = this.vertices.length;\n const uvLen = this.uvs.length;\n\n for (const vertex of vertices) {\n this.addVertexLine(this.parseVertexIndex(vertex, vLen));\n }\n\n for (const uv of uvs) {\n this.addUVLine(this.parseUVIndex(uv, uvLen));\n }\n }\n}\n\n// eslint-disable-next-line max-statements, complexity\nexport function parseOBJMeshes(text) {\n const state = new ParserState();\n\n if (text.indexOf('\\r\\n') !== -1) {\n // This is faster than String.split with regex that splits on both\n text = text.replace(/\\r\\n/g, '\\n');\n }\n\n if (text.indexOf('\\\\\\n') !== -1) {\n // join lines separated by a line continuation character (\\)\n text = text.replace(/\\\\\\n/g, '');\n }\n\n const lines = text.split('\\n');\n let line = '';\n let lineFirstChar = '';\n let lineLength = 0;\n let result = [];\n\n // Faster to just trim left side of the line. Use if available.\n const trimLeft = typeof ''.trimLeft === 'function';\n\n /* eslint-disable no-continue, max-depth */\n for (let i = 0, l = lines.length; i < l; i++) {\n line = lines[i];\n line = trimLeft ? line.trimLeft() : line.trim();\n lineLength = line.length;\n\n if (lineLength === 0) continue;\n\n lineFirstChar = line.charAt(0);\n\n // @todo invoke passed in handler if any\n if (lineFirstChar === '#') continue;\n\n if (lineFirstChar === 'v') {\n const data = line.split(/\\s+/);\n\n switch (data[0]) {\n case 'v':\n state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n if (data.length === 8) {\n state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]));\n }\n break;\n case 'vn':\n state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n break;\n case 'vt':\n state.uvs.push(parseFloat(data[1]), parseFloat(data[2]));\n break;\n default:\n }\n } else if (lineFirstChar === 'f') {\n const lineData = line.substr(1).trim();\n const vertexData = lineData.split(/\\s+/);\n const faceVertices = [];\n\n // Parse the face vertex data into an easy to work with format\n\n for (let j = 0, jl = vertexData.length; j < jl; j++) {\n const vertex = vertexData[j];\n\n if (vertex.length > 0) {\n const vertexParts = vertex.split('/');\n faceVertices.push(vertexParts);\n }\n }\n\n // Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n const v1 = faceVertices[0];\n\n for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {\n const v2 = faceVertices[j];\n const v3 = faceVertices[j + 1];\n\n state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2]);\n }\n } else if (lineFirstChar === 'l') {\n const lineParts = line.substring(1).trim().split(' ');\n let lineVertices;\n const lineUVs = [];\n\n if (line.indexOf('/') === -1) {\n lineVertices = lineParts;\n } else {\n lineVertices = [];\n for (let li = 0, llen = lineParts.length; li < llen; li++) {\n const parts = lineParts[li].split('/');\n\n if (parts[0] !== '') lineVertices.push(parts[0]);\n if (parts[1] !== '') lineUVs.push(parts[1]);\n }\n }\n state.addLineGeometry(lineVertices, lineUVs);\n } else if (lineFirstChar === 'p') {\n const lineData = line.substr(1).trim();\n const pointData = lineData.split(' ');\n\n state.addPointGeometry(pointData);\n } else if ((result = OBJECT_RE.exec(line)) !== null) {\n // o object_name\n // or\n // g group_name\n\n // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n // var name = result[ 0 ].substr( 1 ).trim();\n const name = (' ' + result[0].substr(1).trim()).substr(1); // eslint-disable-line\n\n state.startObject(name);\n } else if (MATERIAL_USE_RE.test(line)) {\n // material\n\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);\n } else if (MATERIAL_RE.test(line)) {\n // mtl file\n\n state.materialLibraries.push(line.substring(7).trim());\n } else if (lineFirstChar === 's') {\n result = line.split(' ');\n\n // smooth shading\n\n // @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n // but does not define a usemtl for each face set.\n // This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n // This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n // where explicit usemtl defines geometry groups.\n // Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n /*\n * http://paulbourke.net/dataformats/obj/\n * or\n * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n *\n * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n * than 0.\"\n */\n if (result.length > 1) {\n const value = result[1].trim().toLowerCase();\n state.object.smooth = value !== '0' && value !== 'off';\n } else {\n // ZBrush can produce \"s\" lines #11707\n state.object.smooth = true;\n }\n const material = state.object.currentMaterial();\n if (material) material.smooth = state.object.smooth;\n } else {\n // Handle null terminated files without exception\n if (line === '\\0') continue;\n\n throw new Error(`Unexpected line: \"${line}\"`);\n }\n }\n\n state.finalize();\n\n const meshes = [];\n const materials = [];\n\n for (const object of state.objects) {\n const {geometry} = object;\n\n // Skip o/g line declarations that did not follow with any faces\n if (geometry.vertices.length === 0) continue;\n\n const mesh = {\n header: {\n vertexCount: geometry.vertices.length / 3\n },\n attributes: {}\n };\n\n switch (geometry.type) {\n case 'Points':\n mesh.mode = 0; // GL.POINTS\n break;\n case 'Line':\n mesh.mode = 1; // GL.LINES\n break;\n default:\n mesh.mode = 4; // GL.TRIANGLES\n break;\n }\n\n mesh.attributes.POSITION = {value: new Float32Array(geometry.vertices), size: 3};\n\n if (geometry.normals.length > 0) {\n mesh.attributes.NORMAL = {value: new Float32Array(geometry.normals), size: 3};\n }\n\n if (geometry.colors.length > 0) {\n mesh.attributes.COLOR_0 = {value: new Float32Array(geometry.colors), size: 3};\n }\n\n if (geometry.uvs.length > 0) {\n mesh.attributes.TEXCOORD_0 = {value: new Float32Array(geometry.uvs), size: 2};\n }\n\n // Create materials\n mesh.materials = [];\n for (const sourceMaterial of object.materials) {\n // TODO - support full spec\n const _material = {\n name: sourceMaterial.name,\n flatShading: !sourceMaterial.smooth\n };\n mesh.materials.push(_material);\n materials.push(_material);\n }\n\n mesh.name = object.name;\n meshes.push(mesh);\n }\n\n return {meshes, materials};\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-obj-meshes.js","names":["OBJECT_RE","MATERIAL_RE","MATERIAL_USE_RE","MeshMaterial","_ref","index","_ref$name","name","mtllib","smooth","groupStart","_classCallCheck2","default","groupEnd","groupCount","inherited","_createClass2","key","value","clone","arguments","length","undefined","MeshObject","geometry","vertices","normals","colors","uvs","materials","fromDeclaration","startMaterial","libraries","previous","_finalize","splice","material","Array","isArray","push","currentMaterial","end","lastMultiMaterial","mi","ParserState","objects","object","materialLibraries","startObject","previousMaterial","declared","finalize","parseVertexIndex","len","parseInt","parseNormalIndex","parseUVIndex","addVertex","a","b","c","src","dst","addVertexPoint","addVertexLine","addNormal","addColor","addUV","addUVLine","addFace","ua","ub","uc","na","nb","nc","vLen","ia","ib","ic","uvLen","nLen","addPointGeometry","type","_iterator","_createForOfIteratorHelper","_step","s","n","done","vertex","err","e","f","addLineGeometry","_iterator2","_step2","_iterator3","_step3","uv","parseOBJMeshes","text","state","indexOf","replace","lines","split","line","lineFirstChar","lineLength","result","trimLeft","i","l","trim","charAt","data","parseFloat","lineData","substr","vertexData","faceVertices","j","jl","vertexParts","v1","v2","v3","lineParts","substring","lineVertices","lineUVs","li","llen","parts","pointData","exec","test","toLowerCase","Error","concat","meshes","_iterator4","_step4","mesh","header","vertexCount","attributes","mode","POSITION","Float32Array","size","NORMAL","COLOR_0","TEXCOORD_0","_iterator5","_step5","sourceMaterial","_material","flatShading"],"sources":["../../../src/lib/parse-obj-meshes.ts"],"sourcesContent":["// OBJ Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author mrdoob / http://mrdoob.com/\n\n// @ts-nocheck\n\n// o object_name | g group_name\nconst OBJECT_RE = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst MATERIAL_RE = /^mtllib /;\n// usemtl material_name\nconst MATERIAL_USE_RE = /^usemtl /;\n\nclass MeshMaterial {\n constructor({index, name = '', mtllib, smooth, groupStart}) {\n this.index = index;\n this.name = name;\n this.mtllib = mtllib;\n this.smooth = smooth;\n this.groupStart = groupStart;\n this.groupEnd = -1;\n this.groupCount = -1;\n this.inherited = false;\n }\n\n clone(index = this.index) {\n return new MeshMaterial({\n index,\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: 0\n });\n }\n}\n\nclass MeshObject {\n constructor(name = '') {\n this.name = name;\n\n this.geometry = {\n vertices: [],\n normals: [],\n colors: [],\n uvs: []\n };\n\n this.materials = [];\n this.smooth = true;\n\n this.fromDeclaration = null;\n }\n\n startMaterial(name, libraries) {\n const previous = this._finalize(false);\n\n // New usemtl declaration overwrites an inherited material, except if faces were declared\n // after the material, then it must be preserved for proper MultiMaterial continuation.\n if (previous && (previous.inherited || previous.groupCount <= 0)) {\n this.materials.splice(previous.index, 1);\n }\n\n const material = new MeshMaterial({\n index: this.materials.length,\n name,\n mtllib:\n Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',\n smooth: previous !== undefined ? previous.smooth : this.smooth,\n groupStart: previous !== undefined ? previous.groupEnd : 0\n });\n\n this.materials.push(material);\n\n return material;\n }\n\n currentMaterial() {\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1];\n }\n\n return undefined;\n }\n\n _finalize(end) {\n const lastMultiMaterial = this.currentMaterial();\n if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n lastMultiMaterial.inherited = false;\n }\n\n // Ignore objects tail materials if no face declarations followed them before a new o/g started.\n if (end && this.materials.length > 1) {\n for (let mi = this.materials.length - 1; mi >= 0; mi--) {\n if (this.materials[mi].groupCount <= 0) {\n this.materials.splice(mi, 1);\n }\n }\n }\n\n // Guarantee at least one empty material, this makes the creation later more straight forward.\n if (end && this.materials.length === 0) {\n this.materials.push({\n name: '',\n smooth: this.smooth\n });\n }\n\n return lastMultiMaterial;\n }\n}\n\nclass ParserState {\n constructor() {\n this.objects = [];\n this.object = null;\n\n this.vertices = [];\n this.normals = [];\n this.colors = [];\n this.uvs = [];\n\n this.materialLibraries = [];\n\n this.startObject('', false);\n }\n\n startObject(name, fromDeclaration = true) {\n // If the current object (initial from reset) is not from a g/o declaration in the parsed\n // file. We need to use it for the first parsed g/o to keep things in sync.\n if (this.object && !this.object.fromDeclaration) {\n this.object.name = name;\n this.object.fromDeclaration = fromDeclaration;\n return;\n }\n\n const previousMaterial =\n this.object && typeof this.object.currentMaterial === 'function'\n ? this.object.currentMaterial()\n : undefined;\n\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n\n this.object = new MeshObject(name);\n this.object.fromDeclaration = fromDeclaration;\n\n // Inherit previous objects material.\n // Spec tells us that a declared material must be set to all objects until a new material is declared.\n // If a usemtl declaration is encountered while this new object is being parsed, it will\n // overwrite the inherited material. Exception being that there was already face declarations\n // to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {\n const declared = previousMaterial.clone(0);\n declared.inherited = true;\n this.object.materials.push(declared);\n }\n\n this.objects.push(this.object);\n }\n\n finalize() {\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n }\n\n parseVertexIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n }\n\n parseNormalIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n }\n\n parseUVIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 2) * 2;\n }\n\n addVertex(a, b, c) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addVertexPoint(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n }\n\n addVertexLine(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n }\n\n addNormal(a, b, c) {\n const src = this.normals;\n const dst = this.object.geometry.normals;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addColor(a, b, c) {\n const src = this.colors;\n const dst = this.object.geometry.colors;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addUV(a, b, c) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0], src[a + 1]);\n dst.push(src[b + 0], src[b + 1]);\n dst.push(src[c + 0], src[c + 1]);\n }\n\n addUVLine(a) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0], src[a + 1]);\n }\n\n // eslint-disable-next-line max-params\n addFace(a, b, c, ua, ub, uc, na, nb, nc) {\n const vLen = this.vertices.length;\n\n let ia = this.parseVertexIndex(a, vLen);\n let ib = this.parseVertexIndex(b, vLen);\n let ic = this.parseVertexIndex(c, vLen);\n\n this.addVertex(ia, ib, ic);\n\n if (ua !== undefined && ua !== '') {\n const uvLen = this.uvs.length;\n ia = this.parseUVIndex(ua, uvLen);\n ib = this.parseUVIndex(ub, uvLen);\n ic = this.parseUVIndex(uc, uvLen);\n this.addUV(ia, ib, ic);\n }\n\n if (na !== undefined && na !== '') {\n // Normals are many times the same. If so, skip function call and parseInt.\n const nLen = this.normals.length;\n ia = this.parseNormalIndex(na, nLen);\n\n ib = na === nb ? ia : this.parseNormalIndex(nb, nLen);\n ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);\n\n this.addNormal(ia, ib, ic);\n }\n\n if (this.colors.length > 0) {\n this.addColor(ia, ib, ic);\n }\n }\n\n addPointGeometry(vertices) {\n this.object.geometry.type = 'Points';\n\n const vLen = this.vertices.length;\n\n for (const vertex of vertices) {\n this.addVertexPoint(this.parseVertexIndex(vertex, vLen));\n }\n }\n\n addLineGeometry(vertices, uvs) {\n this.object.geometry.type = 'Line';\n\n const vLen = this.vertices.length;\n const uvLen = this.uvs.length;\n\n for (const vertex of vertices) {\n this.addVertexLine(this.parseVertexIndex(vertex, vLen));\n }\n\n for (const uv of uvs) {\n this.addUVLine(this.parseUVIndex(uv, uvLen));\n }\n }\n}\n\n// eslint-disable-next-line max-statements, complexity\nexport function parseOBJMeshes(text) {\n const state = new ParserState();\n\n if (text.indexOf('\\r\\n') !== -1) {\n // This is faster than String.split with regex that splits on both\n text = text.replace(/\\r\\n/g, '\\n');\n }\n\n if (text.indexOf('\\\\\\n') !== -1) {\n // join lines separated by a line continuation character (\\)\n text = text.replace(/\\\\\\n/g, '');\n }\n\n const lines = text.split('\\n');\n let line = '';\n let lineFirstChar = '';\n let lineLength = 0;\n let result = [];\n\n // Faster to just trim left side of the line. Use if available.\n const trimLeft = typeof ''.trimLeft === 'function';\n\n /* eslint-disable no-continue, max-depth */\n for (let i = 0, l = lines.length; i < l; i++) {\n line = lines[i];\n line = trimLeft ? line.trimLeft() : line.trim();\n lineLength = line.length;\n\n if (lineLength === 0) continue;\n\n lineFirstChar = line.charAt(0);\n\n // @todo invoke passed in handler if any\n if (lineFirstChar === '#') continue;\n\n if (lineFirstChar === 'v') {\n const data = line.split(/\\s+/);\n\n switch (data[0]) {\n case 'v':\n state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n if (data.length === 8) {\n state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]));\n }\n break;\n case 'vn':\n state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n break;\n case 'vt':\n state.uvs.push(parseFloat(data[1]), parseFloat(data[2]));\n break;\n default:\n }\n } else if (lineFirstChar === 'f') {\n const lineData = line.substr(1).trim();\n const vertexData = lineData.split(/\\s+/);\n const faceVertices = [];\n\n // Parse the face vertex data into an easy to work with format\n\n for (let j = 0, jl = vertexData.length; j < jl; j++) {\n const vertex = vertexData[j];\n\n if (vertex.length > 0) {\n const vertexParts = vertex.split('/');\n faceVertices.push(vertexParts);\n }\n }\n\n // Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n const v1 = faceVertices[0];\n\n for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {\n const v2 = faceVertices[j];\n const v3 = faceVertices[j + 1];\n\n state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2]);\n }\n } else if (lineFirstChar === 'l') {\n const lineParts = line.substring(1).trim().split(' ');\n let lineVertices;\n const lineUVs = [];\n\n if (line.indexOf('/') === -1) {\n lineVertices = lineParts;\n } else {\n lineVertices = [];\n for (let li = 0, llen = lineParts.length; li < llen; li++) {\n const parts = lineParts[li].split('/');\n\n if (parts[0] !== '') lineVertices.push(parts[0]);\n if (parts[1] !== '') lineUVs.push(parts[1]);\n }\n }\n state.addLineGeometry(lineVertices, lineUVs);\n } else if (lineFirstChar === 'p') {\n const lineData = line.substr(1).trim();\n const pointData = lineData.split(' ');\n\n state.addPointGeometry(pointData);\n } else if ((result = OBJECT_RE.exec(line)) !== null) {\n // o object_name\n // or\n // g group_name\n\n // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n // var name = result[ 0 ].substr( 1 ).trim();\n const name = (' ' + result[0].substr(1).trim()).substr(1); // eslint-disable-line\n\n state.startObject(name);\n } else if (MATERIAL_USE_RE.test(line)) {\n // material\n\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);\n } else if (MATERIAL_RE.test(line)) {\n // mtl file\n\n state.materialLibraries.push(line.substring(7).trim());\n } else if (lineFirstChar === 's') {\n result = line.split(' ');\n\n // smooth shading\n\n // @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n // but does not define a usemtl for each face set.\n // This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n // This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n // where explicit usemtl defines geometry groups.\n // Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n /*\n * http://paulbourke.net/dataformats/obj/\n * or\n * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n *\n * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n * than 0.\"\n */\n if (result.length > 1) {\n const value = result[1].trim().toLowerCase();\n state.object.smooth = value !== '0' && value !== 'off';\n } else {\n // ZBrush can produce \"s\" lines #11707\n state.object.smooth = true;\n }\n const material = state.object.currentMaterial();\n if (material) material.smooth = state.object.smooth;\n } else {\n // Handle null terminated files without exception\n if (line === '\\0') continue;\n\n throw new Error(`Unexpected line: \"${line}\"`);\n }\n }\n\n state.finalize();\n\n const meshes = [];\n const materials = [];\n\n for (const object of state.objects) {\n const {geometry} = object;\n\n // Skip o/g line declarations that did not follow with any faces\n if (geometry.vertices.length === 0) continue;\n\n const mesh = {\n header: {\n vertexCount: geometry.vertices.length / 3\n },\n attributes: {}\n };\n\n switch (geometry.type) {\n case 'Points':\n mesh.mode = 0; // GL.POINTS\n break;\n case 'Line':\n mesh.mode = 1; // GL.LINES\n break;\n default:\n mesh.mode = 4; // GL.TRIANGLES\n break;\n }\n\n mesh.attributes.POSITION = {value: new Float32Array(geometry.vertices), size: 3};\n\n if (geometry.normals.length > 0) {\n mesh.attributes.NORMAL = {value: new Float32Array(geometry.normals), size: 3};\n }\n\n if (geometry.colors.length > 0) {\n mesh.attributes.COLOR_0 = {value: new Float32Array(geometry.colors), size: 3};\n }\n\n if (geometry.uvs.length > 0) {\n mesh.attributes.TEXCOORD_0 = {value: new Float32Array(geometry.uvs), size: 2};\n }\n\n // Create materials\n mesh.materials = [];\n for (const sourceMaterial of object.materials) {\n // TODO - support full spec\n const _material = {\n name: sourceMaterial.name,\n flatShading: !sourceMaterial.smooth\n };\n mesh.materials.push(_material);\n materials.push(_material);\n }\n\n mesh.name = object.name;\n meshes.push(mesh);\n }\n\n return {meshes, materials};\n}\n"],"mappings":"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"}
@@ -9,11 +9,10 @@ var _parseObjMeshes = require("./parse-obj-meshes");
9
9
  var _getObjSchema = require("./get-obj-schema");
10
10
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
11
11
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
12
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
12
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
13
13
  function parseOBJ(text, options) {
14
14
  var _parseOBJMeshes = (0, _parseObjMeshes.parseOBJMeshes)(text),
15
15
  meshes = _parseOBJMeshes.meshes;
16
-
17
16
  var vertexCount = meshes.reduce(function (s, mesh) {
18
17
  return s + mesh.header.vertexCount;
19
18
  }, 0);
@@ -33,11 +32,9 @@ function parseOBJ(text, options) {
33
32
  schema: schema,
34
33
  header: header,
35
34
  mode: 4,
36
-
37
35
  attributes: attributes
38
36
  };
39
37
  }
40
-
41
38
  function mergeAttributes(meshes, vertexCount) {
42
39
  var positions = new Float32Array(vertexCount * 3);
43
40
  var normals;
@@ -1 +1 @@
1
- {"version":3,"file":"parse-obj.js","names":["parseOBJ","text","options","parseOBJMeshes","meshes","vertexCount","reduce","s","mesh","header","attributes","mergeAttributes","boundingBox","getMeshBoundingBox","schema","getOBJSchema","mode","loaderData","positions","Float32Array","normals","colors","uvs","i","POSITION","NORMAL","COLOR_0","TEXCOORD_0","set","value","length","size"],"sources":["../../../src/lib/parse-obj.ts"],"sourcesContent":["import type {MeshAttributes} from '@loaders.gl/schema';\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport {parseOBJMeshes} from './parse-obj-meshes';\nimport {getOBJSchema} from './get-obj-schema';\n\nexport function parseOBJ(text, options) {\n const {meshes} = parseOBJMeshes(text);\n\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\n const header = {\n vertexCount,\n // @ts-ignore Need to export Attributes type\n boundingBox: getMeshBoundingBox(attributes)\n };\n\n const schema = getOBJSchema(attributes, {\n mode: 4,\n boundingBox: header.boundingBox\n });\n\n return {\n // Data return by this loader implementation\n loaderData: {\n header: {}\n },\n\n // Normalised data\n schema,\n header,\n mode: 4, // TRIANGLES\n\n attributes\n };\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\n for (const mesh of meshes) {\n const {POSITION, NORMAL, COLOR_0, TEXCOORD_0} = mesh.attributes;\n\n positions.set(POSITION.value, i * 3);\n\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\n i += POSITION.value.length / 3;\n }\n\n const attributes: MeshAttributes = {};\n attributes.POSITION = {value: positions, size: 3};\n\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\n return attributes;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-obj.js","names":["_schema","require","_parseObjMeshes","_getObjSchema","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","parseOBJ","text","options","_parseOBJMeshes","parseOBJMeshes","meshes","vertexCount","reduce","mesh","header","attributes","mergeAttributes","boundingBox","getMeshBoundingBox","schema","getOBJSchema","mode","loaderData","positions","Float32Array","normals","colors","uvs","_iterator","_step","_mesh$attributes","POSITION","NORMAL","COLOR_0","TEXCOORD_0","set","size"],"sources":["../../../src/lib/parse-obj.ts"],"sourcesContent":["import type {MeshAttributes} from '@loaders.gl/schema';\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport {parseOBJMeshes} from './parse-obj-meshes';\nimport {getOBJSchema} from './get-obj-schema';\n\nexport function parseOBJ(text, options) {\n const {meshes} = parseOBJMeshes(text);\n\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\n const header = {\n vertexCount,\n // @ts-ignore Need to export Attributes type\n boundingBox: getMeshBoundingBox(attributes)\n };\n\n const schema = getOBJSchema(attributes, {\n mode: 4,\n boundingBox: header.boundingBox\n });\n\n return {\n // Data return by this loader implementation\n loaderData: {\n header: {}\n },\n\n // Normalised data\n schema,\n header,\n mode: 4, // TRIANGLES\n\n attributes\n };\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\n for (const mesh of meshes) {\n const {POSITION, NORMAL, COLOR_0, TEXCOORD_0} = mesh.attributes;\n\n positions.set(POSITION.value, i * 3);\n\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\n i += POSITION.value.length / 3;\n }\n\n const attributes: MeshAttributes = {};\n attributes.POSITION = {value: positions, size: 3};\n\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\n return attributes;\n}\n"],"mappings":"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"}
@@ -4,8 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports._typecheckMTLLoader = exports.MTLLoader = void 0;
7
-
8
- var VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
7
+ var VERSION = typeof "3.4.0-alpha.3" !== 'undefined' ? "3.4.0-alpha.3" : 'latest';
9
8
  var MTLLoader = {
10
9
  name: 'MTL',
11
10
  id: 'mtl',
@@ -1 +1 @@
1
- {"version":3,"file":"mtl-loader.js","names":["VERSION","MTLLoader","name","id","module","version","worker","extensions","mimeTypes","testText","text","includes","options","mtl","_typecheckMTLLoader"],"sources":["../../src/mtl-loader.ts"],"sourcesContent":["// loaders.gl, MIT license\nimport type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {ParseMTLOptions} from './lib/parse-mtl';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type MTLLoaderOptions = LoaderOptions & {\n mtl?: ParseMTLOptions;\n};\n\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: string): boolean => text.includes('newmtl'),\n options: {\n mtl: {}\n }\n};\n\nexport const _typecheckMTLLoader: Loader = MTLLoader;\n"],"mappings":";;;;;;;AAMA,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAUpE,IAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,YAAY,CAAC;EACzBC,QAAQ,EAAE,kBAACC,IAAY;IAAA,OAAcA,IAAI,CAACC,QAAQ,CAAC,QAAQ,CAAC;EAAA;EAC5DC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR;AACF,CAAC;AAAC;AAEK,IAAMC,mBAA2B,GAAGb,SAAS;AAAC"}
1
+ {"version":3,"file":"mtl-loader.js","names":["VERSION","MTLLoader","name","id","module","version","worker","extensions","mimeTypes","testText","text","includes","options","mtl","exports","_typecheckMTLLoader"],"sources":["../../src/mtl-loader.ts"],"sourcesContent":["// loaders.gl, MIT license\nimport type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {ParseMTLOptions} from './lib/parse-mtl';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type MTLLoaderOptions = LoaderOptions & {\n mtl?: ParseMTLOptions;\n};\n\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: string): boolean => text.includes('newmtl'),\n options: {\n mtl: {}\n }\n};\n\nexport const _typecheckMTLLoader: Loader = MTLLoader;\n"],"mappings":";;;;;;AAMA,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAUpE,IAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,YAAY,CAAC;EACzBC,QAAQ,EAAE,SAAAA,SAACC,IAAY;IAAA,OAAcA,IAAI,CAACC,QAAQ,CAAC,QAAQ,CAAC;EAAA;EAC5DC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR;AACF,CAAC;AAACC,OAAA,CAAAb,SAAA,GAAAA,SAAA;AAEK,IAAMc,mBAA2B,GAAGd,SAAS;AAACa,OAAA,CAAAC,mBAAA,GAAAA,mBAAA"}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports._typecheckOBJLoader = exports.OBJLoader = void 0;
7
- var VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
7
+ var VERSION = typeof "3.4.0-alpha.3" !== 'undefined' ? "3.4.0-alpha.3" : 'latest';
8
8
  var OBJLoader = {
9
9
  name: 'OBJ',
10
10
  id: 'obj',
@@ -1 +1 @@
1
- {"version":3,"file":"obj-loader.js","names":["VERSION","OBJLoader","name","id","module","version","worker","extensions","mimeTypes","testText","testOBJFile","options","obj","text","_typecheckOBJLoader"],"sources":["../../src/obj-loader.ts"],"sourcesContent":["import type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type OBJLoaderOptions = LoaderOptions & {\n obj?: {};\n};\n\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};\n\nfunction testOBJFile(text: string): boolean {\n // TODO - There could be comment line first\n return text[0] === 'v';\n}\n\nexport const _typecheckOBJLoader: Loader = OBJLoader;\n"],"mappings":";;;;;;AAIA,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AASpE,IAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,YAAY,CAAC;EACzBC,QAAQ,EAAEC,WAAW;EACrBC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR;AACF,CAAC;AAAC;AAEF,SAASF,WAAW,CAACG,IAAY,EAAW;EAE1C,OAAOA,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;AACxB;AAEO,IAAMC,mBAA2B,GAAGb,SAAS;AAAC"}
1
+ {"version":3,"file":"obj-loader.js","names":["VERSION","OBJLoader","name","id","module","version","worker","extensions","mimeTypes","testText","testOBJFile","options","obj","exports","text","_typecheckOBJLoader"],"sources":["../../src/obj-loader.ts"],"sourcesContent":["import type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type OBJLoaderOptions = LoaderOptions & {\n obj?: {};\n};\n\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};\n\nfunction testOBJFile(text: string): boolean {\n // TODO - There could be comment line first\n return text[0] === 'v';\n}\n\nexport const _typecheckOBJLoader: Loader = OBJLoader;\n"],"mappings":";;;;;;AAIA,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AASpE,IAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,YAAY,CAAC;EACzBC,QAAQ,EAAEC,WAAW;EACrBC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR;AACF,CAAC;AAACC,OAAA,CAAAZ,SAAA,GAAAA,SAAA;AAEF,SAASS,WAAWA,CAACI,IAAY,EAAW;EAE1C,OAAOA,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;AACxB;AAEO,IAAMC,mBAA2B,GAAGd,SAAS;AAACY,OAAA,CAAAE,mBAAA,GAAAA,mBAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"obj-worker.js","names":["createLoaderWorker","OBJLoader"],"sources":["../../../src/workers/obj-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {OBJLoader} from '../index';\n\ncreateLoaderWorker(OBJLoader);\n"],"mappings":";;AAAA;AACA;AAEA,IAAAA,+BAAkB,EAACC,gBAAS,CAAC"}
1
+ {"version":3,"file":"obj-worker.js","names":["_loaderUtils","require","_index","createLoaderWorker","OBJLoader"],"sources":["../../../src/workers/obj-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {OBJLoader} from '../index';\n\ncreateLoaderWorker(OBJLoader);\n"],"mappings":";;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA,IAAAE,+BAAkB,EAACC,gBAAS,CAAC"}
@@ -1,4 +1,3 @@
1
-
2
1
  const moduleExports = require('./index');
3
2
  globalThis.loaders = globalThis.loaders || {};
4
3
  module.exports = Object.assign(globalThis.loaders, moduleExports);
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
1
+ {"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":"AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
package/dist/esm/index.js CHANGED
@@ -2,15 +2,12 @@ import { parseOBJ } from './lib/parse-obj';
2
2
  import { parseMTL } from './lib/parse-mtl';
3
3
  import { OBJLoader as OBJWorkerLoader } from './obj-loader';
4
4
  import { MTLLoader as MTLWorkerLoader } from './mtl-loader';
5
-
6
5
  export { OBJWorkerLoader };
7
-
8
6
  export const OBJLoader = {
9
7
  ...OBJWorkerLoader,
10
8
  parse: async (arrayBuffer, options) => parseOBJ(new TextDecoder().decode(arrayBuffer), options),
11
9
  parseTextSync: (text, options) => parseOBJ(text, options)
12
10
  };
13
-
14
11
  export const MTLLoader = {
15
12
  ...MTLWorkerLoader,
16
13
  parse: async (arrayBuffer, options) => parseMTL(new TextDecoder().decode(arrayBuffer), options === null || options === void 0 ? void 0 : options.mtl),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["parseOBJ","parseMTL","OBJLoader","OBJWorkerLoader","MTLLoader","MTLWorkerLoader","parse","arrayBuffer","options","TextDecoder","decode","parseTextSync","text","mtl","_typecheckOBJLoader","_typecheckMTLLoader"],"sources":["../../src/index.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseOBJ} from './lib/parse-obj';\nimport {parseMTL} from './lib/parse-mtl';\nimport type {OBJLoaderOptions} from './obj-loader';\nimport {OBJLoader as OBJWorkerLoader} from './obj-loader';\nimport type {MTLLoaderOptions} from './mtl-loader';\nimport {MTLLoader as MTLWorkerLoader} from './mtl-loader';\n\n// OBJLoader\n\nexport {OBJWorkerLoader};\n\n/**\n * Loader for the OBJ geometry format\n */\nexport const OBJLoader = {\n ...OBJWorkerLoader,\n parse: async (arrayBuffer: ArrayBuffer, options?: OBJLoaderOptions) =>\n parseOBJ(new TextDecoder().decode(arrayBuffer), options),\n parseTextSync: (text: string, options?: OBJLoaderOptions) => parseOBJ(text, options)\n};\n\n// MTLLoader\n\n/**\n * Loader for the MTL material format\n */\nexport const MTLLoader = {\n ...MTLWorkerLoader,\n parse: async (arrayBuffer: ArrayBuffer, options?: MTLLoaderOptions) =>\n parseMTL(new TextDecoder().decode(arrayBuffer), options?.mtl),\n parseTextSync: (text: string, options?: MTLLoaderOptions) => parseMTL(text, options?.mtl)\n};\n\nexport const _typecheckOBJLoader: LoaderWithParser = OBJLoader;\nexport const _typecheckMTLLoader: LoaderWithParser = MTLLoader;\n"],"mappings":"AACA,SAAQA,QAAQ,QAAO,iBAAiB;AACxC,SAAQC,QAAQ,QAAO,iBAAiB;AAExC,SAAQC,SAAS,IAAIC,eAAe,QAAO,cAAc;AAEzD,SAAQC,SAAS,IAAIC,eAAe,QAAO,cAAc;;AAIzD,SAAQF,eAAe;;AAKvB,OAAO,MAAMD,SAAS,GAAG;EACvB,GAAGC,eAAe;EAClBG,KAAK,EAAE,OAAOC,WAAwB,EAAEC,OAA0B,KAChER,QAAQ,CAAC,IAAIS,WAAW,EAAE,CAACC,MAAM,CAACH,WAAW,CAAC,EAAEC,OAAO,CAAC;EAC1DG,aAAa,EAAE,CAACC,IAAY,EAAEJ,OAA0B,KAAKR,QAAQ,CAACY,IAAI,EAAEJ,OAAO;AACrF,CAAC;;AAOD,OAAO,MAAMJ,SAAS,GAAG;EACvB,GAAGC,eAAe;EAClBC,KAAK,EAAE,OAAOC,WAAwB,EAAEC,OAA0B,KAChEP,QAAQ,CAAC,IAAIQ,WAAW,EAAE,CAACC,MAAM,CAACH,WAAW,CAAC,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK,GAAG,CAAC;EAC/DF,aAAa,EAAE,CAACC,IAAY,EAAEJ,OAA0B,KAAKP,QAAQ,CAACW,IAAI,EAAEJ,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK,GAAG;AAC1F,CAAC;AAED,OAAO,MAAMC,mBAAqC,GAAGZ,SAAS;AAC9D,OAAO,MAAMa,mBAAqC,GAAGX,SAAS"}
1
+ {"version":3,"file":"index.js","names":["parseOBJ","parseMTL","OBJLoader","OBJWorkerLoader","MTLLoader","MTLWorkerLoader","parse","arrayBuffer","options","TextDecoder","decode","parseTextSync","text","mtl","_typecheckOBJLoader","_typecheckMTLLoader"],"sources":["../../src/index.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseOBJ} from './lib/parse-obj';\nimport {parseMTL} from './lib/parse-mtl';\nimport type {OBJLoaderOptions} from './obj-loader';\nimport {OBJLoader as OBJWorkerLoader} from './obj-loader';\nimport type {MTLLoaderOptions} from './mtl-loader';\nimport {MTLLoader as MTLWorkerLoader} from './mtl-loader';\n\n// OBJLoader\n\nexport {OBJWorkerLoader};\n\n/**\n * Loader for the OBJ geometry format\n */\nexport const OBJLoader = {\n ...OBJWorkerLoader,\n parse: async (arrayBuffer: ArrayBuffer, options?: OBJLoaderOptions) =>\n parseOBJ(new TextDecoder().decode(arrayBuffer), options),\n parseTextSync: (text: string, options?: OBJLoaderOptions) => parseOBJ(text, options)\n};\n\n// MTLLoader\n\n/**\n * Loader for the MTL material format\n */\nexport const MTLLoader = {\n ...MTLWorkerLoader,\n parse: async (arrayBuffer: ArrayBuffer, options?: MTLLoaderOptions) =>\n parseMTL(new TextDecoder().decode(arrayBuffer), options?.mtl),\n parseTextSync: (text: string, options?: MTLLoaderOptions) => parseMTL(text, options?.mtl)\n};\n\nexport const _typecheckOBJLoader: LoaderWithParser = OBJLoader;\nexport const _typecheckMTLLoader: LoaderWithParser = MTLLoader;\n"],"mappings":"AACA,SAAQA,QAAQ,QAAO,iBAAiB;AACxC,SAAQC,QAAQ,QAAO,iBAAiB;AAExC,SAAQC,SAAS,IAAIC,eAAe,QAAO,cAAc;AAEzD,SAAQC,SAAS,IAAIC,eAAe,QAAO,cAAc;AAIzD,SAAQF,eAAe;AAKvB,OAAO,MAAMD,SAAS,GAAG;EACvB,GAAGC,eAAe;EAClBG,KAAK,EAAE,MAAAA,CAAOC,WAAwB,EAAEC,OAA0B,KAChER,QAAQ,CAAC,IAAIS,WAAW,EAAE,CAACC,MAAM,CAACH,WAAW,CAAC,EAAEC,OAAO,CAAC;EAC1DG,aAAa,EAAEA,CAACC,IAAY,EAAEJ,OAA0B,KAAKR,QAAQ,CAACY,IAAI,EAAEJ,OAAO;AACrF,CAAC;AAOD,OAAO,MAAMJ,SAAS,GAAG;EACvB,GAAGC,eAAe;EAClBC,KAAK,EAAE,MAAAA,CAAOC,WAAwB,EAAEC,OAA0B,KAChEP,QAAQ,CAAC,IAAIQ,WAAW,EAAE,CAACC,MAAM,CAACH,WAAW,CAAC,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK,GAAG,CAAC;EAC/DF,aAAa,EAAEA,CAACC,IAAY,EAAEJ,OAA0B,KAAKP,QAAQ,CAACW,IAAI,EAAEJ,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK,GAAG;AAC1F,CAAC;AAED,OAAO,MAAMC,mBAAqC,GAAGZ,SAAS;AAC9D,OAAO,MAAMa,mBAAqC,GAAGX,SAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-obj-schema.js","names":["Schema","Field","FixedSizeList","getArrowTypeFromTypedArray","getOBJSchema","attributes","metadata","metadataMap","key","Map","set","JSON","stringify","fields","attributeName","attribute","field","getArrowFieldFromAttribute","push","type","value","isSingleValue","size"],"sources":["../../../src/lib/get-obj-schema.ts"],"sourcesContent":["import {Schema, Field, FixedSizeList, getArrowTypeFromTypedArray} from '@loaders.gl/schema';\n\nexport function getOBJSchema(attributes, metadata = {}) {\n let metadataMap;\n for (const key in metadata) {\n metadataMap = metadataMap || new Map();\n if (key !== 'value') {\n metadataMap.set(key, JSON.stringify(metadata[key]));\n }\n }\n\n const fields: Field[] = [];\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const field = getArrowFieldFromAttribute(attributeName, attribute);\n fields.push(field);\n }\n return new Schema(fields, metadataMap);\n}\n\nfunction getArrowFieldFromAttribute(attributeName, attribute) {\n const metadataMap = new Map();\n for (const key in attribute) {\n if (key !== 'value') {\n metadataMap.set(key, JSON.stringify(attribute[key]));\n }\n }\n\n const type = getArrowTypeFromTypedArray(attribute.value);\n const isSingleValue = !('size' in attribute) || attribute.size === 1;\n return isSingleValue\n ? new Field(attributeName, type, false, metadataMap)\n : new Field(\n attributeName,\n new FixedSizeList(attribute.size, new Field('value', type)),\n false,\n metadataMap\n );\n}\n"],"mappings":"AAAA,SAAQA,MAAM,EAAEC,KAAK,EAAEC,aAAa,EAAEC,0BAA0B,QAAO,oBAAoB;AAE3F,OAAO,SAASC,YAAY,CAACC,UAAU,EAAiB;EAAA,IAAfC,QAAQ,uEAAG,CAAC,CAAC;EACpD,IAAIC,WAAW;EACf,KAAK,MAAMC,GAAG,IAAIF,QAAQ,EAAE;IAC1BC,WAAW,GAAGA,WAAW,IAAI,IAAIE,GAAG,EAAE;IACtC,IAAID,GAAG,KAAK,OAAO,EAAE;MACnBD,WAAW,CAACG,GAAG,CAACF,GAAG,EAAEG,IAAI,CAACC,SAAS,CAACN,QAAQ,CAACE,GAAG,CAAC,CAAC,CAAC;IACrD;EACF;EAEA,MAAMK,MAAe,GAAG,EAAE;EAC1B,KAAK,MAAMC,aAAa,IAAIT,UAAU,EAAE;IACtC,MAAMU,SAAS,GAAGV,UAAU,CAACS,aAAa,CAAC;IAC3C,MAAME,KAAK,GAAGC,0BAA0B,CAACH,aAAa,EAAEC,SAAS,CAAC;IAClEF,MAAM,CAACK,IAAI,CAACF,KAAK,CAAC;EACpB;EACA,OAAO,IAAIhB,MAAM,CAACa,MAAM,EAAEN,WAAW,CAAC;AACxC;AAEA,SAASU,0BAA0B,CAACH,aAAa,EAAEC,SAAS,EAAE;EAC5D,MAAMR,WAAW,GAAG,IAAIE,GAAG,EAAE;EAC7B,KAAK,MAAMD,GAAG,IAAIO,SAAS,EAAE;IAC3B,IAAIP,GAAG,KAAK,OAAO,EAAE;MACnBD,WAAW,CAACG,GAAG,CAACF,GAAG,EAAEG,IAAI,CAACC,SAAS,CAACG,SAAS,CAACP,GAAG,CAAC,CAAC,CAAC;IACtD;EACF;EAEA,MAAMW,IAAI,GAAGhB,0BAA0B,CAACY,SAAS,CAACK,KAAK,CAAC;EACxD,MAAMC,aAAa,GAAG,EAAE,MAAM,IAAIN,SAAS,CAAC,IAAIA,SAAS,CAACO,IAAI,KAAK,CAAC;EACpE,OAAOD,aAAa,GAChB,IAAIpB,KAAK,CAACa,aAAa,EAAEK,IAAI,EAAE,KAAK,EAAEZ,WAAW,CAAC,GAClD,IAAIN,KAAK,CACTa,aAAa,EACb,IAAIZ,aAAa,CAACa,SAAS,CAACO,IAAI,EAAE,IAAIrB,KAAK,CAAC,OAAO,EAAEkB,IAAI,CAAC,CAAC,EAC3D,KAAK,EACLZ,WAAW,CACZ;AACL"}
1
+ {"version":3,"file":"get-obj-schema.js","names":["Schema","Field","FixedSizeList","getArrowTypeFromTypedArray","getOBJSchema","attributes","metadata","arguments","length","undefined","metadataMap","key","Map","set","JSON","stringify","fields","attributeName","attribute","field","getArrowFieldFromAttribute","push","type","value","isSingleValue","size"],"sources":["../../../src/lib/get-obj-schema.ts"],"sourcesContent":["import {Schema, Field, FixedSizeList, getArrowTypeFromTypedArray} from '@loaders.gl/schema';\n\nexport function getOBJSchema(attributes, metadata = {}) {\n let metadataMap;\n for (const key in metadata) {\n metadataMap = metadataMap || new Map();\n if (key !== 'value') {\n metadataMap.set(key, JSON.stringify(metadata[key]));\n }\n }\n\n const fields: Field[] = [];\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const field = getArrowFieldFromAttribute(attributeName, attribute);\n fields.push(field);\n }\n return new Schema(fields, metadataMap);\n}\n\nfunction getArrowFieldFromAttribute(attributeName, attribute) {\n const metadataMap = new Map();\n for (const key in attribute) {\n if (key !== 'value') {\n metadataMap.set(key, JSON.stringify(attribute[key]));\n }\n }\n\n const type = getArrowTypeFromTypedArray(attribute.value);\n const isSingleValue = !('size' in attribute) || attribute.size === 1;\n return isSingleValue\n ? new Field(attributeName, type, false, metadataMap)\n : new Field(\n attributeName,\n new FixedSizeList(attribute.size, new Field('value', type)),\n false,\n metadataMap\n );\n}\n"],"mappings":"AAAA,SAAQA,MAAM,EAAEC,KAAK,EAAEC,aAAa,EAAEC,0BAA0B,QAAO,oBAAoB;AAE3F,OAAO,SAASC,YAAYA,CAACC,UAAU,EAAiB;EAAA,IAAfC,QAAQ,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EACpD,IAAIG,WAAW;EACf,KAAK,MAAMC,GAAG,IAAIL,QAAQ,EAAE;IAC1BI,WAAW,GAAGA,WAAW,IAAI,IAAIE,GAAG,EAAE;IACtC,IAAID,GAAG,KAAK,OAAO,EAAE;MACnBD,WAAW,CAACG,GAAG,CAACF,GAAG,EAAEG,IAAI,CAACC,SAAS,CAACT,QAAQ,CAACK,GAAG,CAAC,CAAC,CAAC;IACrD;EACF;EAEA,MAAMK,MAAe,GAAG,EAAE;EAC1B,KAAK,MAAMC,aAAa,IAAIZ,UAAU,EAAE;IACtC,MAAMa,SAAS,GAAGb,UAAU,CAACY,aAAa,CAAC;IAC3C,MAAME,KAAK,GAAGC,0BAA0B,CAACH,aAAa,EAAEC,SAAS,CAAC;IAClEF,MAAM,CAACK,IAAI,CAACF,KAAK,CAAC;EACpB;EACA,OAAO,IAAInB,MAAM,CAACgB,MAAM,EAAEN,WAAW,CAAC;AACxC;AAEA,SAASU,0BAA0BA,CAACH,aAAa,EAAEC,SAAS,EAAE;EAC5D,MAAMR,WAAW,GAAG,IAAIE,GAAG,EAAE;EAC7B,KAAK,MAAMD,GAAG,IAAIO,SAAS,EAAE;IAC3B,IAAIP,GAAG,KAAK,OAAO,EAAE;MACnBD,WAAW,CAACG,GAAG,CAACF,GAAG,EAAEG,IAAI,CAACC,SAAS,CAACG,SAAS,CAACP,GAAG,CAAC,CAAC,CAAC;IACtD;EACF;EAEA,MAAMW,IAAI,GAAGnB,0BAA0B,CAACe,SAAS,CAACK,KAAK,CAAC;EACxD,MAAMC,aAAa,GAAG,EAAE,MAAM,IAAIN,SAAS,CAAC,IAAIA,SAAS,CAACO,IAAI,KAAK,CAAC;EACpE,OAAOD,aAAa,GAChB,IAAIvB,KAAK,CAACgB,aAAa,EAAEK,IAAI,EAAE,KAAK,EAAEZ,WAAW,CAAC,GAClD,IAAIT,KAAK,CACTgB,aAAa,EACb,IAAIf,aAAa,CAACgB,SAAS,CAACO,IAAI,EAAE,IAAIxB,KAAK,CAAC,OAAO,EAAEqB,IAAI,CAAC,CAAC,EAC3D,KAAK,EACLZ,WAAW,CACZ;AACL"}
@@ -1,7 +1,4 @@
1
-
2
-
3
1
  const DELIMITER_PATTERN = /\s+/;
4
-
5
2
  export function parseMTL(text, options) {
6
3
  const materials = [];
7
4
  let currentMaterial = {
@@ -13,7 +10,6 @@ export function parseMTL(text, options) {
13
10
  if (line.length === 0 || line.charAt(0) === '#') {
14
11
  continue;
15
12
  }
16
-
17
13
  const pos = line.indexOf(' ');
18
14
  let key = pos >= 0 ? line.substring(0, pos) : line;
19
15
  key = key.toLowerCase();
@@ -60,16 +56,13 @@ export function parseMTL(text, options) {
60
56
  break;
61
57
  default:
62
58
  break;
63
-
64
59
  }
65
60
  }
66
-
67
61
  return materials;
68
62
  }
69
63
  function parseColor(value, options) {
70
64
  const rgb = value.split(DELIMITER_PATTERN, 3);
71
65
  const color = [parseFloat(rgb[0]), parseFloat(rgb[1]), parseFloat(rgb[2])];
72
-
73
66
  return color;
74
67
  }
75
68
  //# sourceMappingURL=parse-mtl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-mtl.js","names":["DELIMITER_PATTERN","parseMTL","text","options","materials","currentMaterial","name","lines","split","line","trim","length","charAt","pos","indexOf","key","substring","toLowerCase","value","push","ambientColor","parseColor","diffuseColor","diffuseTextureUrl","specularColor","specularTextureUrl","emissiveColor","emissiveTextureUrl","shininess","parseFloat","refraction","illumination","rgb","color"],"sources":["../../../src/lib/parse-mtl.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Forked from THREE.js under MIT license\n// https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/MTLLoader.js\n\n// import type {DiffuseMaterial} from '@loaders.gl/schema';\n\nexport type MTLMaterial = {\n name: string;\n ambientColor?: [number, number, number];\n diffuseColor?: [number, number, number];\n specularColor?: [number, number, number];\n emissiveColor?: [number, number, number];\n // specular?: number;\n shininess?: number;\n refraction?: number;\n illumination?: number;\n diffuseTextureUrl?: string;\n emissiveTextureUrl?: string;\n specularTextureUrl?: string;\n};\n\nconst DELIMITER_PATTERN = /\\s+/;\n\n/**\n * Set of options on how to construct materials\n * @param normalizeRGB: RGBs need to be normalized to 0-1 from 0-255 (Default: false, assumed to be already normalized)\n * @param ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's Default: false\n * @param baseUrl - Url relative to which textures are loaded\n */\nexport type ParseMTLOptions = {\n normalizeRGB?: boolean;\n ignoreZeroRGBs?: boolean;\n baseUrl?: string;\n};\n\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: string, options?: ParseMTLOptions): MTLMaterial[] {\n // const materialsInfo: Record<string, MTLMaterial> = {};\n const materials: MTLMaterial[] = [];\n\n let currentMaterial: MTLMaterial = {name: 'placeholder'};\n\n const lines = text.split('\\n');\n for (let line of lines) {\n line = line.trim();\n\n if (line.length === 0 || line.charAt(0) === '#') {\n // Blank line or comment ignore\n continue; // eslint-disable-line no-continue\n }\n\n const pos = line.indexOf(' ');\n\n let key = pos >= 0 ? line.substring(0, pos) : line;\n key = key.toLowerCase();\n\n let value = pos >= 0 ? line.substring(pos + 1) : '';\n value = value.trim();\n\n switch (key) {\n case 'newmtl':\n // New material\n currentMaterial = {name: value};\n // insert into map\n materials.push(currentMaterial);\n break;\n\n case 'ka': // Ka\n currentMaterial.ambientColor = parseColor(value);\n break;\n\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\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\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\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\n default:\n // log unknown message?\n break;\n\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\n return materials;\n}\n\nfunction parseColor(value: string, options?: ParseMTLOptions): [number, number, number] {\n const rgb = value.split(DELIMITER_PATTERN, 3);\n const color: [number, number, number] = [\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\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\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"],"mappings":";;AAqBA,MAAMA,iBAAiB,GAAG,KAAK;;AAuB/B,OAAO,SAASC,QAAQ,CAACC,IAAY,EAAEC,OAAyB,EAAiB;EAE/E,MAAMC,SAAwB,GAAG,EAAE;EAEnC,IAAIC,eAA4B,GAAG;IAACC,IAAI,EAAE;EAAa,CAAC;EAExD,MAAMC,KAAK,GAAGL,IAAI,CAACM,KAAK,CAAC,IAAI,CAAC;EAC9B,KAAK,IAAIC,IAAI,IAAIF,KAAK,EAAE;IACtBE,IAAI,GAAGA,IAAI,CAACC,IAAI,EAAE;IAElB,IAAID,IAAI,CAACE,MAAM,KAAK,CAAC,IAAIF,IAAI,CAACG,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;MAE/C;IACF;;IAEA,MAAMC,GAAG,GAAGJ,IAAI,CAACK,OAAO,CAAC,GAAG,CAAC;IAE7B,IAAIC,GAAG,GAAGF,GAAG,IAAI,CAAC,GAAGJ,IAAI,CAACO,SAAS,CAAC,CAAC,EAAEH,GAAG,CAAC,GAAGJ,IAAI;IAClDM,GAAG,GAAGA,GAAG,CAACE,WAAW,EAAE;IAEvB,IAAIC,KAAK,GAAGL,GAAG,IAAI,CAAC,GAAGJ,IAAI,CAACO,SAAS,CAACH,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE;IACnDK,KAAK,GAAGA,KAAK,CAACR,IAAI,EAAE;IAEpB,QAAQK,GAAG;MACT,KAAK,QAAQ;QAEXV,eAAe,GAAG;UAACC,IAAI,EAAEY;QAAK,CAAC;QAE/Bd,SAAS,CAACe,IAAI,CAACd,eAAe,CAAC;QAC/B;MAEF,KAAK,IAAI;QACPA,eAAe,CAACe,YAAY,GAAGC,UAAU,CAACH,KAAK,CAAC;QAChD;MAEF,KAAK,IAAI;QAEPb,eAAe,CAACiB,YAAY,GAAGD,UAAU,CAACH,KAAK,CAAC;QAChD;MACF,KAAK,QAAQ;QAEXb,eAAe,CAACkB,iBAAiB,GAAGL,KAAK;QAEzC;MAEF,KAAK,IAAI;QAEPb,eAAe,CAACmB,aAAa,GAAGH,UAAU,CAACH,KAAK,CAAC;QACjD;MACF,KAAK,QAAQ;QAEXb,eAAe,CAACoB,kBAAkB,GAAGP,KAAK;QAE1C;MAEF,KAAK,IAAI;QAEPb,eAAe,CAACqB,aAAa,GAAGL,UAAU,CAACH,KAAK,CAAC;QACjD;MACF,KAAK,QAAQ;QAEXb,eAAe,CAACsB,kBAAkB,GAAGT,KAAK;QAE1C;MAEF,KAAK,IAAI;QAGPb,eAAe,CAACuB,SAAS,GAAGC,UAAU,CAACX,KAAK,CAAC;QAC7C;MACF,KAAK,QAAQ;QAIX;MACF,KAAK,IAAI;QACPb,eAAe,CAACyB,UAAU,GAAGD,UAAU,CAACX,KAAK,CAAC;QAC9C;MACF,KAAK,OAAO;QACVb,eAAe,CAAC0B,YAAY,GAAGF,UAAU,CAACX,KAAK,CAAC;QAChD;MAEF;QAEE;;IAAM;EAoCZ;;EAEA,OAAOd,SAAS;AAClB;AAEA,SAASiB,UAAU,CAACH,KAAa,EAAEf,OAAyB,EAA4B;EACtF,MAAM6B,GAAG,GAAGd,KAAK,CAACV,KAAK,CAACR,iBAAiB,EAAE,CAAC,CAAC;EAC7C,MAAMiC,KAA+B,GAAG,CACtCJ,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,EAClBH,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,EAClBH,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,CACnB;;EAYD,OAAOC,KAAK;AACd"}
1
+ {"version":3,"file":"parse-mtl.js","names":["DELIMITER_PATTERN","parseMTL","text","options","materials","currentMaterial","name","lines","split","line","trim","length","charAt","pos","indexOf","key","substring","toLowerCase","value","push","ambientColor","parseColor","diffuseColor","diffuseTextureUrl","specularColor","specularTextureUrl","emissiveColor","emissiveTextureUrl","shininess","parseFloat","refraction","illumination","rgb","color"],"sources":["../../../src/lib/parse-mtl.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Forked from THREE.js under MIT license\n// https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/MTLLoader.js\n\n// import type {DiffuseMaterial} from '@loaders.gl/schema';\n\nexport type MTLMaterial = {\n name: string;\n ambientColor?: [number, number, number];\n diffuseColor?: [number, number, number];\n specularColor?: [number, number, number];\n emissiveColor?: [number, number, number];\n // specular?: number;\n shininess?: number;\n refraction?: number;\n illumination?: number;\n diffuseTextureUrl?: string;\n emissiveTextureUrl?: string;\n specularTextureUrl?: string;\n};\n\nconst DELIMITER_PATTERN = /\\s+/;\n\n/**\n * Set of options on how to construct materials\n * @param normalizeRGB: RGBs need to be normalized to 0-1 from 0-255 (Default: false, assumed to be already normalized)\n * @param ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's Default: false\n * @param baseUrl - Url relative to which textures are loaded\n */\nexport type ParseMTLOptions = {\n normalizeRGB?: boolean;\n ignoreZeroRGBs?: boolean;\n baseUrl?: string;\n};\n\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: string, options?: ParseMTLOptions): MTLMaterial[] {\n // const materialsInfo: Record<string, MTLMaterial> = {};\n const materials: MTLMaterial[] = [];\n\n let currentMaterial: MTLMaterial = {name: 'placeholder'};\n\n const lines = text.split('\\n');\n for (let line of lines) {\n line = line.trim();\n\n if (line.length === 0 || line.charAt(0) === '#') {\n // Blank line or comment ignore\n continue; // eslint-disable-line no-continue\n }\n\n const pos = line.indexOf(' ');\n\n let key = pos >= 0 ? line.substring(0, pos) : line;\n key = key.toLowerCase();\n\n let value = pos >= 0 ? line.substring(pos + 1) : '';\n value = value.trim();\n\n switch (key) {\n case 'newmtl':\n // New material\n currentMaterial = {name: value};\n // insert into map\n materials.push(currentMaterial);\n break;\n\n case 'ka': // Ka\n currentMaterial.ambientColor = parseColor(value);\n break;\n\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\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\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\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\n default:\n // log unknown message?\n break;\n\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\n return materials;\n}\n\nfunction parseColor(value: string, options?: ParseMTLOptions): [number, number, number] {\n const rgb = value.split(DELIMITER_PATTERN, 3);\n const color: [number, number, number] = [\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\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\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"],"mappings":"AAqBA,MAAMA,iBAAiB,GAAG,KAAK;AAuB/B,OAAO,SAASC,QAAQA,CAACC,IAAY,EAAEC,OAAyB,EAAiB;EAE/E,MAAMC,SAAwB,GAAG,EAAE;EAEnC,IAAIC,eAA4B,GAAG;IAACC,IAAI,EAAE;EAAa,CAAC;EAExD,MAAMC,KAAK,GAAGL,IAAI,CAACM,KAAK,CAAC,IAAI,CAAC;EAC9B,KAAK,IAAIC,IAAI,IAAIF,KAAK,EAAE;IACtBE,IAAI,GAAGA,IAAI,CAACC,IAAI,EAAE;IAElB,IAAID,IAAI,CAACE,MAAM,KAAK,CAAC,IAAIF,IAAI,CAACG,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;MAE/C;IACF;IAEA,MAAMC,GAAG,GAAGJ,IAAI,CAACK,OAAO,CAAC,GAAG,CAAC;IAE7B,IAAIC,GAAG,GAAGF,GAAG,IAAI,CAAC,GAAGJ,IAAI,CAACO,SAAS,CAAC,CAAC,EAAEH,GAAG,CAAC,GAAGJ,IAAI;IAClDM,GAAG,GAAGA,GAAG,CAACE,WAAW,EAAE;IAEvB,IAAIC,KAAK,GAAGL,GAAG,IAAI,CAAC,GAAGJ,IAAI,CAACO,SAAS,CAACH,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE;IACnDK,KAAK,GAAGA,KAAK,CAACR,IAAI,EAAE;IAEpB,QAAQK,GAAG;MACT,KAAK,QAAQ;QAEXV,eAAe,GAAG;UAACC,IAAI,EAAEY;QAAK,CAAC;QAE/Bd,SAAS,CAACe,IAAI,CAACd,eAAe,CAAC;QAC/B;MAEF,KAAK,IAAI;QACPA,eAAe,CAACe,YAAY,GAAGC,UAAU,CAACH,KAAK,CAAC;QAChD;MAEF,KAAK,IAAI;QAEPb,eAAe,CAACiB,YAAY,GAAGD,UAAU,CAACH,KAAK,CAAC;QAChD;MACF,KAAK,QAAQ;QAEXb,eAAe,CAACkB,iBAAiB,GAAGL,KAAK;QAEzC;MAEF,KAAK,IAAI;QAEPb,eAAe,CAACmB,aAAa,GAAGH,UAAU,CAACH,KAAK,CAAC;QACjD;MACF,KAAK,QAAQ;QAEXb,eAAe,CAACoB,kBAAkB,GAAGP,KAAK;QAE1C;MAEF,KAAK,IAAI;QAEPb,eAAe,CAACqB,aAAa,GAAGL,UAAU,CAACH,KAAK,CAAC;QACjD;MACF,KAAK,QAAQ;QAEXb,eAAe,CAACsB,kBAAkB,GAAGT,KAAK;QAE1C;MAEF,KAAK,IAAI;QAGPb,eAAe,CAACuB,SAAS,GAAGC,UAAU,CAACX,KAAK,CAAC;QAC7C;MACF,KAAK,QAAQ;QAIX;MACF,KAAK,IAAI;QACPb,eAAe,CAACyB,UAAU,GAAGD,UAAU,CAACX,KAAK,CAAC;QAC9C;MACF,KAAK,OAAO;QACVb,eAAe,CAAC0B,YAAY,GAAGF,UAAU,CAACX,KAAK,CAAC;QAChD;MAEF;QAEE;IAAM;EAoCZ;EAEA,OAAOd,SAAS;AAClB;AAEA,SAASiB,UAAUA,CAACH,KAAa,EAAEf,OAAyB,EAA4B;EACtF,MAAM6B,GAAG,GAAGd,KAAK,CAACV,KAAK,CAACR,iBAAiB,EAAE,CAAC,CAAC;EAC7C,MAAMiC,KAA+B,GAAG,CACtCJ,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,EAClBH,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,EAClBH,UAAU,CAACG,GAAG,CAAC,CAAC,CAAC,CAAC,CACnB;EAYD,OAAOC,KAAK;AACd"}
@@ -1,5 +1,3 @@
1
-
2
-
3
1
  const OBJECT_RE = /^[og]\s*(.+)?/;
4
2
  const MATERIAL_RE = /^mtllib /;
5
3
  const MATERIAL_USE_RE = /^usemtl /;
@@ -48,7 +46,6 @@ class MeshObject {
48
46
  }
49
47
  startMaterial(name, libraries) {
50
48
  const previous = this._finalize(false);
51
-
52
49
  if (previous && (previous.inherited || previous.groupCount <= 0)) {
53
50
  this.materials.splice(previous.index, 1);
54
51
  }
@@ -75,7 +72,6 @@ class MeshObject {
75
72
  lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;
76
73
  lastMultiMaterial.inherited = false;
77
74
  }
78
-
79
75
  if (end && this.materials.length > 1) {
80
76
  for (let mi = this.materials.length - 1; mi >= 0; mi--) {
81
77
  if (this.materials[mi].groupCount <= 0) {
@@ -83,7 +79,6 @@ class MeshObject {
83
79
  }
84
80
  }
85
81
  }
86
-
87
82
  if (end && this.materials.length === 0) {
88
83
  this.materials.push({
89
84
  name: '',
@@ -117,7 +112,6 @@ class ParserState {
117
112
  }
118
113
  this.object = new MeshObject(name);
119
114
  this.object.fromDeclaration = fromDeclaration;
120
-
121
115
  if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {
122
116
  const declared = previousMaterial.clone(0);
123
117
  declared.inherited = true;
@@ -185,7 +179,6 @@ class ParserState {
185
179
  const dst = this.object.geometry.uvs;
186
180
  dst.push(src[a + 0], src[a + 1]);
187
181
  }
188
-
189
182
  addFace(a, b, c, ua, ub, uc, na, nb, nc) {
190
183
  const vLen = this.vertices.length;
191
184
  let ia = this.parseVertexIndex(a, vLen);
@@ -229,7 +222,6 @@ class ParserState {
229
222
  }
230
223
  }
231
224
  }
232
-
233
225
  export function parseOBJMeshes(text) {
234
226
  const state = new ParserState();
235
227
  if (text.indexOf('\r\n') !== -1) {
@@ -243,16 +235,13 @@ export function parseOBJMeshes(text) {
243
235
  let lineFirstChar = '';
244
236
  let lineLength = 0;
245
237
  let result = [];
246
-
247
238
  const trimLeft = typeof ''.trimLeft === 'function';
248
-
249
239
  for (let i = 0, l = lines.length; i < l; i++) {
250
240
  line = lines[i];
251
241
  line = trimLeft ? line.trimLeft() : line.trim();
252
242
  lineLength = line.length;
253
243
  if (lineLength === 0) continue;
254
244
  lineFirstChar = line.charAt(0);
255
-
256
245
  if (lineFirstChar === '#') continue;
257
246
  if (lineFirstChar === 'v') {
258
247
  const data = line.split(/\s+/);
@@ -275,7 +264,6 @@ export function parseOBJMeshes(text) {
275
264
  const lineData = line.substr(1).trim();
276
265
  const vertexData = lineData.split(/\s+/);
277
266
  const faceVertices = [];
278
-
279
267
  for (let j = 0, jl = vertexData.length; j < jl; j++) {
280
268
  const vertex = vertexData[j];
281
269
  if (vertex.length > 0) {
@@ -283,7 +271,6 @@ export function parseOBJMeshes(text) {
283
271
  faceVertices.push(vertexParts);
284
272
  }
285
273
  }
286
-
287
274
  const v1 = faceVertices[0];
288
275
  for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {
289
276
  const v2 = faceVertices[j];
@@ -310,19 +297,14 @@ export function parseOBJMeshes(text) {
310
297
  const pointData = lineData.split(' ');
311
298
  state.addPointGeometry(pointData);
312
299
  } else if ((result = OBJECT_RE.exec(line)) !== null) {
313
-
314
300
  const name = (' ' + result[0].substr(1).trim()).substr(1);
315
-
316
301
  state.startObject(name);
317
302
  } else if (MATERIAL_USE_RE.test(line)) {
318
-
319
303
  state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);
320
304
  } else if (MATERIAL_RE.test(line)) {
321
-
322
305
  state.materialLibraries.push(line.substring(7).trim());
323
306
  } else if (lineFirstChar === 's') {
324
307
  result = line.split(' ');
325
-
326
308
  if (result.length > 1) {
327
309
  const value = result[1].trim().toLowerCase();
328
310
  state.object.smooth = value !== '0' && value !== 'off';
@@ -343,7 +325,6 @@ export function parseOBJMeshes(text) {
343
325
  const {
344
326
  geometry
345
327
  } = object;
346
-
347
328
  if (geometry.vertices.length === 0) continue;
348
329
  const mesh = {
349
330
  header: {
@@ -384,7 +365,6 @@ export function parseOBJMeshes(text) {
384
365
  size: 2
385
366
  };
386
367
  }
387
-
388
368
  mesh.materials = [];
389
369
  for (const sourceMaterial of object.materials) {
390
370
  const _material = {
@@ -1 +1 @@
1
- {"version":3,"file":"parse-obj-meshes.js","names":["OBJECT_RE","MATERIAL_RE","MATERIAL_USE_RE","MeshMaterial","constructor","index","name","mtllib","smooth","groupStart","groupEnd","groupCount","inherited","clone","MeshObject","geometry","vertices","normals","colors","uvs","materials","fromDeclaration","startMaterial","libraries","previous","_finalize","splice","material","length","Array","isArray","undefined","push","currentMaterial","end","lastMultiMaterial","mi","ParserState","objects","object","materialLibraries","startObject","previousMaterial","declared","finalize","parseVertexIndex","value","len","parseInt","parseNormalIndex","parseUVIndex","addVertex","a","b","c","src","dst","addVertexPoint","addVertexLine","addNormal","addColor","addUV","addUVLine","addFace","ua","ub","uc","na","nb","nc","vLen","ia","ib","ic","uvLen","nLen","addPointGeometry","type","vertex","addLineGeometry","uv","parseOBJMeshes","text","state","indexOf","replace","lines","split","line","lineFirstChar","lineLength","result","trimLeft","i","l","trim","charAt","data","parseFloat","lineData","substr","vertexData","faceVertices","j","jl","vertexParts","v1","v2","v3","lineParts","substring","lineVertices","lineUVs","li","llen","parts","pointData","exec","test","toLowerCase","Error","meshes","mesh","header","vertexCount","attributes","mode","POSITION","Float32Array","size","NORMAL","COLOR_0","TEXCOORD_0","sourceMaterial","_material","flatShading"],"sources":["../../../src/lib/parse-obj-meshes.ts"],"sourcesContent":["// OBJ Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author mrdoob / http://mrdoob.com/\n\n// @ts-nocheck\n\n// o object_name | g group_name\nconst OBJECT_RE = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst MATERIAL_RE = /^mtllib /;\n// usemtl material_name\nconst MATERIAL_USE_RE = /^usemtl /;\n\nclass MeshMaterial {\n constructor({index, name = '', mtllib, smooth, groupStart}) {\n this.index = index;\n this.name = name;\n this.mtllib = mtllib;\n this.smooth = smooth;\n this.groupStart = groupStart;\n this.groupEnd = -1;\n this.groupCount = -1;\n this.inherited = false;\n }\n\n clone(index = this.index) {\n return new MeshMaterial({\n index,\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: 0\n });\n }\n}\n\nclass MeshObject {\n constructor(name = '') {\n this.name = name;\n\n this.geometry = {\n vertices: [],\n normals: [],\n colors: [],\n uvs: []\n };\n\n this.materials = [];\n this.smooth = true;\n\n this.fromDeclaration = null;\n }\n\n startMaterial(name, libraries) {\n const previous = this._finalize(false);\n\n // New usemtl declaration overwrites an inherited material, except if faces were declared\n // after the material, then it must be preserved for proper MultiMaterial continuation.\n if (previous && (previous.inherited || previous.groupCount <= 0)) {\n this.materials.splice(previous.index, 1);\n }\n\n const material = new MeshMaterial({\n index: this.materials.length,\n name,\n mtllib:\n Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',\n smooth: previous !== undefined ? previous.smooth : this.smooth,\n groupStart: previous !== undefined ? previous.groupEnd : 0\n });\n\n this.materials.push(material);\n\n return material;\n }\n\n currentMaterial() {\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1];\n }\n\n return undefined;\n }\n\n _finalize(end) {\n const lastMultiMaterial = this.currentMaterial();\n if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n lastMultiMaterial.inherited = false;\n }\n\n // Ignore objects tail materials if no face declarations followed them before a new o/g started.\n if (end && this.materials.length > 1) {\n for (let mi = this.materials.length - 1; mi >= 0; mi--) {\n if (this.materials[mi].groupCount <= 0) {\n this.materials.splice(mi, 1);\n }\n }\n }\n\n // Guarantee at least one empty material, this makes the creation later more straight forward.\n if (end && this.materials.length === 0) {\n this.materials.push({\n name: '',\n smooth: this.smooth\n });\n }\n\n return lastMultiMaterial;\n }\n}\n\nclass ParserState {\n constructor() {\n this.objects = [];\n this.object = null;\n\n this.vertices = [];\n this.normals = [];\n this.colors = [];\n this.uvs = [];\n\n this.materialLibraries = [];\n\n this.startObject('', false);\n }\n\n startObject(name, fromDeclaration = true) {\n // If the current object (initial from reset) is not from a g/o declaration in the parsed\n // file. We need to use it for the first parsed g/o to keep things in sync.\n if (this.object && !this.object.fromDeclaration) {\n this.object.name = name;\n this.object.fromDeclaration = fromDeclaration;\n return;\n }\n\n const previousMaterial =\n this.object && typeof this.object.currentMaterial === 'function'\n ? this.object.currentMaterial()\n : undefined;\n\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n\n this.object = new MeshObject(name);\n this.object.fromDeclaration = fromDeclaration;\n\n // Inherit previous objects material.\n // Spec tells us that a declared material must be set to all objects until a new material is declared.\n // If a usemtl declaration is encountered while this new object is being parsed, it will\n // overwrite the inherited material. Exception being that there was already face declarations\n // to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {\n const declared = previousMaterial.clone(0);\n declared.inherited = true;\n this.object.materials.push(declared);\n }\n\n this.objects.push(this.object);\n }\n\n finalize() {\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n }\n\n parseVertexIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n }\n\n parseNormalIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n }\n\n parseUVIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 2) * 2;\n }\n\n addVertex(a, b, c) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addVertexPoint(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n }\n\n addVertexLine(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n }\n\n addNormal(a, b, c) {\n const src = this.normals;\n const dst = this.object.geometry.normals;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addColor(a, b, c) {\n const src = this.colors;\n const dst = this.object.geometry.colors;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addUV(a, b, c) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0], src[a + 1]);\n dst.push(src[b + 0], src[b + 1]);\n dst.push(src[c + 0], src[c + 1]);\n }\n\n addUVLine(a) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0], src[a + 1]);\n }\n\n // eslint-disable-next-line max-params\n addFace(a, b, c, ua, ub, uc, na, nb, nc) {\n const vLen = this.vertices.length;\n\n let ia = this.parseVertexIndex(a, vLen);\n let ib = this.parseVertexIndex(b, vLen);\n let ic = this.parseVertexIndex(c, vLen);\n\n this.addVertex(ia, ib, ic);\n\n if (ua !== undefined && ua !== '') {\n const uvLen = this.uvs.length;\n ia = this.parseUVIndex(ua, uvLen);\n ib = this.parseUVIndex(ub, uvLen);\n ic = this.parseUVIndex(uc, uvLen);\n this.addUV(ia, ib, ic);\n }\n\n if (na !== undefined && na !== '') {\n // Normals are many times the same. If so, skip function call and parseInt.\n const nLen = this.normals.length;\n ia = this.parseNormalIndex(na, nLen);\n\n ib = na === nb ? ia : this.parseNormalIndex(nb, nLen);\n ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);\n\n this.addNormal(ia, ib, ic);\n }\n\n if (this.colors.length > 0) {\n this.addColor(ia, ib, ic);\n }\n }\n\n addPointGeometry(vertices) {\n this.object.geometry.type = 'Points';\n\n const vLen = this.vertices.length;\n\n for (const vertex of vertices) {\n this.addVertexPoint(this.parseVertexIndex(vertex, vLen));\n }\n }\n\n addLineGeometry(vertices, uvs) {\n this.object.geometry.type = 'Line';\n\n const vLen = this.vertices.length;\n const uvLen = this.uvs.length;\n\n for (const vertex of vertices) {\n this.addVertexLine(this.parseVertexIndex(vertex, vLen));\n }\n\n for (const uv of uvs) {\n this.addUVLine(this.parseUVIndex(uv, uvLen));\n }\n }\n}\n\n// eslint-disable-next-line max-statements, complexity\nexport function parseOBJMeshes(text) {\n const state = new ParserState();\n\n if (text.indexOf('\\r\\n') !== -1) {\n // This is faster than String.split with regex that splits on both\n text = text.replace(/\\r\\n/g, '\\n');\n }\n\n if (text.indexOf('\\\\\\n') !== -1) {\n // join lines separated by a line continuation character (\\)\n text = text.replace(/\\\\\\n/g, '');\n }\n\n const lines = text.split('\\n');\n let line = '';\n let lineFirstChar = '';\n let lineLength = 0;\n let result = [];\n\n // Faster to just trim left side of the line. Use if available.\n const trimLeft = typeof ''.trimLeft === 'function';\n\n /* eslint-disable no-continue, max-depth */\n for (let i = 0, l = lines.length; i < l; i++) {\n line = lines[i];\n line = trimLeft ? line.trimLeft() : line.trim();\n lineLength = line.length;\n\n if (lineLength === 0) continue;\n\n lineFirstChar = line.charAt(0);\n\n // @todo invoke passed in handler if any\n if (lineFirstChar === '#') continue;\n\n if (lineFirstChar === 'v') {\n const data = line.split(/\\s+/);\n\n switch (data[0]) {\n case 'v':\n state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n if (data.length === 8) {\n state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]));\n }\n break;\n case 'vn':\n state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n break;\n case 'vt':\n state.uvs.push(parseFloat(data[1]), parseFloat(data[2]));\n break;\n default:\n }\n } else if (lineFirstChar === 'f') {\n const lineData = line.substr(1).trim();\n const vertexData = lineData.split(/\\s+/);\n const faceVertices = [];\n\n // Parse the face vertex data into an easy to work with format\n\n for (let j = 0, jl = vertexData.length; j < jl; j++) {\n const vertex = vertexData[j];\n\n if (vertex.length > 0) {\n const vertexParts = vertex.split('/');\n faceVertices.push(vertexParts);\n }\n }\n\n // Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n const v1 = faceVertices[0];\n\n for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {\n const v2 = faceVertices[j];\n const v3 = faceVertices[j + 1];\n\n state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2]);\n }\n } else if (lineFirstChar === 'l') {\n const lineParts = line.substring(1).trim().split(' ');\n let lineVertices;\n const lineUVs = [];\n\n if (line.indexOf('/') === -1) {\n lineVertices = lineParts;\n } else {\n lineVertices = [];\n for (let li = 0, llen = lineParts.length; li < llen; li++) {\n const parts = lineParts[li].split('/');\n\n if (parts[0] !== '') lineVertices.push(parts[0]);\n if (parts[1] !== '') lineUVs.push(parts[1]);\n }\n }\n state.addLineGeometry(lineVertices, lineUVs);\n } else if (lineFirstChar === 'p') {\n const lineData = line.substr(1).trim();\n const pointData = lineData.split(' ');\n\n state.addPointGeometry(pointData);\n } else if ((result = OBJECT_RE.exec(line)) !== null) {\n // o object_name\n // or\n // g group_name\n\n // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n // var name = result[ 0 ].substr( 1 ).trim();\n const name = (' ' + result[0].substr(1).trim()).substr(1); // eslint-disable-line\n\n state.startObject(name);\n } else if (MATERIAL_USE_RE.test(line)) {\n // material\n\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);\n } else if (MATERIAL_RE.test(line)) {\n // mtl file\n\n state.materialLibraries.push(line.substring(7).trim());\n } else if (lineFirstChar === 's') {\n result = line.split(' ');\n\n // smooth shading\n\n // @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n // but does not define a usemtl for each face set.\n // This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n // This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n // where explicit usemtl defines geometry groups.\n // Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n /*\n * http://paulbourke.net/dataformats/obj/\n * or\n * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n *\n * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n * than 0.\"\n */\n if (result.length > 1) {\n const value = result[1].trim().toLowerCase();\n state.object.smooth = value !== '0' && value !== 'off';\n } else {\n // ZBrush can produce \"s\" lines #11707\n state.object.smooth = true;\n }\n const material = state.object.currentMaterial();\n if (material) material.smooth = state.object.smooth;\n } else {\n // Handle null terminated files without exception\n if (line === '\\0') continue;\n\n throw new Error(`Unexpected line: \"${line}\"`);\n }\n }\n\n state.finalize();\n\n const meshes = [];\n const materials = [];\n\n for (const object of state.objects) {\n const {geometry} = object;\n\n // Skip o/g line declarations that did not follow with any faces\n if (geometry.vertices.length === 0) continue;\n\n const mesh = {\n header: {\n vertexCount: geometry.vertices.length / 3\n },\n attributes: {}\n };\n\n switch (geometry.type) {\n case 'Points':\n mesh.mode = 0; // GL.POINTS\n break;\n case 'Line':\n mesh.mode = 1; // GL.LINES\n break;\n default:\n mesh.mode = 4; // GL.TRIANGLES\n break;\n }\n\n mesh.attributes.POSITION = {value: new Float32Array(geometry.vertices), size: 3};\n\n if (geometry.normals.length > 0) {\n mesh.attributes.NORMAL = {value: new Float32Array(geometry.normals), size: 3};\n }\n\n if (geometry.colors.length > 0) {\n mesh.attributes.COLOR_0 = {value: new Float32Array(geometry.colors), size: 3};\n }\n\n if (geometry.uvs.length > 0) {\n mesh.attributes.TEXCOORD_0 = {value: new Float32Array(geometry.uvs), size: 2};\n }\n\n // Create materials\n mesh.materials = [];\n for (const sourceMaterial of object.materials) {\n // TODO - support full spec\n const _material = {\n name: sourceMaterial.name,\n flatShading: !sourceMaterial.smooth\n };\n mesh.materials.push(_material);\n materials.push(_material);\n }\n\n mesh.name = object.name;\n meshes.push(mesh);\n }\n\n return {meshes, materials};\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-obj-meshes.js","names":["OBJECT_RE","MATERIAL_RE","MATERIAL_USE_RE","MeshMaterial","constructor","_ref","index","name","mtllib","smooth","groupStart","groupEnd","groupCount","inherited","clone","arguments","length","undefined","MeshObject","geometry","vertices","normals","colors","uvs","materials","fromDeclaration","startMaterial","libraries","previous","_finalize","splice","material","Array","isArray","push","currentMaterial","end","lastMultiMaterial","mi","ParserState","objects","object","materialLibraries","startObject","previousMaterial","declared","finalize","parseVertexIndex","value","len","parseInt","parseNormalIndex","parseUVIndex","addVertex","a","b","c","src","dst","addVertexPoint","addVertexLine","addNormal","addColor","addUV","addUVLine","addFace","ua","ub","uc","na","nb","nc","vLen","ia","ib","ic","uvLen","nLen","addPointGeometry","type","vertex","addLineGeometry","uv","parseOBJMeshes","text","state","indexOf","replace","lines","split","line","lineFirstChar","lineLength","result","trimLeft","i","l","trim","charAt","data","parseFloat","lineData","substr","vertexData","faceVertices","j","jl","vertexParts","v1","v2","v3","lineParts","substring","lineVertices","lineUVs","li","llen","parts","pointData","exec","test","toLowerCase","Error","concat","meshes","mesh","header","vertexCount","attributes","mode","POSITION","Float32Array","size","NORMAL","COLOR_0","TEXCOORD_0","sourceMaterial","_material","flatShading"],"sources":["../../../src/lib/parse-obj-meshes.ts"],"sourcesContent":["// OBJ Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author mrdoob / http://mrdoob.com/\n\n// @ts-nocheck\n\n// o object_name | g group_name\nconst OBJECT_RE = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst MATERIAL_RE = /^mtllib /;\n// usemtl material_name\nconst MATERIAL_USE_RE = /^usemtl /;\n\nclass MeshMaterial {\n constructor({index, name = '', mtllib, smooth, groupStart}) {\n this.index = index;\n this.name = name;\n this.mtllib = mtllib;\n this.smooth = smooth;\n this.groupStart = groupStart;\n this.groupEnd = -1;\n this.groupCount = -1;\n this.inherited = false;\n }\n\n clone(index = this.index) {\n return new MeshMaterial({\n index,\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: 0\n });\n }\n}\n\nclass MeshObject {\n constructor(name = '') {\n this.name = name;\n\n this.geometry = {\n vertices: [],\n normals: [],\n colors: [],\n uvs: []\n };\n\n this.materials = [];\n this.smooth = true;\n\n this.fromDeclaration = null;\n }\n\n startMaterial(name, libraries) {\n const previous = this._finalize(false);\n\n // New usemtl declaration overwrites an inherited material, except if faces were declared\n // after the material, then it must be preserved for proper MultiMaterial continuation.\n if (previous && (previous.inherited || previous.groupCount <= 0)) {\n this.materials.splice(previous.index, 1);\n }\n\n const material = new MeshMaterial({\n index: this.materials.length,\n name,\n mtllib:\n Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : '',\n smooth: previous !== undefined ? previous.smooth : this.smooth,\n groupStart: previous !== undefined ? previous.groupEnd : 0\n });\n\n this.materials.push(material);\n\n return material;\n }\n\n currentMaterial() {\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1];\n }\n\n return undefined;\n }\n\n _finalize(end) {\n const lastMultiMaterial = this.currentMaterial();\n if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n lastMultiMaterial.inherited = false;\n }\n\n // Ignore objects tail materials if no face declarations followed them before a new o/g started.\n if (end && this.materials.length > 1) {\n for (let mi = this.materials.length - 1; mi >= 0; mi--) {\n if (this.materials[mi].groupCount <= 0) {\n this.materials.splice(mi, 1);\n }\n }\n }\n\n // Guarantee at least one empty material, this makes the creation later more straight forward.\n if (end && this.materials.length === 0) {\n this.materials.push({\n name: '',\n smooth: this.smooth\n });\n }\n\n return lastMultiMaterial;\n }\n}\n\nclass ParserState {\n constructor() {\n this.objects = [];\n this.object = null;\n\n this.vertices = [];\n this.normals = [];\n this.colors = [];\n this.uvs = [];\n\n this.materialLibraries = [];\n\n this.startObject('', false);\n }\n\n startObject(name, fromDeclaration = true) {\n // If the current object (initial from reset) is not from a g/o declaration in the parsed\n // file. We need to use it for the first parsed g/o to keep things in sync.\n if (this.object && !this.object.fromDeclaration) {\n this.object.name = name;\n this.object.fromDeclaration = fromDeclaration;\n return;\n }\n\n const previousMaterial =\n this.object && typeof this.object.currentMaterial === 'function'\n ? this.object.currentMaterial()\n : undefined;\n\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n\n this.object = new MeshObject(name);\n this.object.fromDeclaration = fromDeclaration;\n\n // Inherit previous objects material.\n // Spec tells us that a declared material must be set to all objects until a new material is declared.\n // If a usemtl declaration is encountered while this new object is being parsed, it will\n // overwrite the inherited material. Exception being that there was already face declarations\n // to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function') {\n const declared = previousMaterial.clone(0);\n declared.inherited = true;\n this.object.materials.push(declared);\n }\n\n this.objects.push(this.object);\n }\n\n finalize() {\n if (this.object && typeof this.object._finalize === 'function') {\n this.object._finalize(true);\n }\n }\n\n parseVertexIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n }\n\n parseNormalIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n }\n\n parseUVIndex(value, len) {\n const index = parseInt(value);\n return (index >= 0 ? index - 1 : index + len / 2) * 2;\n }\n\n addVertex(a, b, c) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addVertexPoint(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n }\n\n addVertexLine(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n }\n\n addNormal(a, b, c) {\n const src = this.normals;\n const dst = this.object.geometry.normals;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addColor(a, b, c) {\n const src = this.colors;\n const dst = this.object.geometry.colors;\n\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n }\n\n addUV(a, b, c) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0], src[a + 1]);\n dst.push(src[b + 0], src[b + 1]);\n dst.push(src[c + 0], src[c + 1]);\n }\n\n addUVLine(a) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0], src[a + 1]);\n }\n\n // eslint-disable-next-line max-params\n addFace(a, b, c, ua, ub, uc, na, nb, nc) {\n const vLen = this.vertices.length;\n\n let ia = this.parseVertexIndex(a, vLen);\n let ib = this.parseVertexIndex(b, vLen);\n let ic = this.parseVertexIndex(c, vLen);\n\n this.addVertex(ia, ib, ic);\n\n if (ua !== undefined && ua !== '') {\n const uvLen = this.uvs.length;\n ia = this.parseUVIndex(ua, uvLen);\n ib = this.parseUVIndex(ub, uvLen);\n ic = this.parseUVIndex(uc, uvLen);\n this.addUV(ia, ib, ic);\n }\n\n if (na !== undefined && na !== '') {\n // Normals are many times the same. If so, skip function call and parseInt.\n const nLen = this.normals.length;\n ia = this.parseNormalIndex(na, nLen);\n\n ib = na === nb ? ia : this.parseNormalIndex(nb, nLen);\n ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);\n\n this.addNormal(ia, ib, ic);\n }\n\n if (this.colors.length > 0) {\n this.addColor(ia, ib, ic);\n }\n }\n\n addPointGeometry(vertices) {\n this.object.geometry.type = 'Points';\n\n const vLen = this.vertices.length;\n\n for (const vertex of vertices) {\n this.addVertexPoint(this.parseVertexIndex(vertex, vLen));\n }\n }\n\n addLineGeometry(vertices, uvs) {\n this.object.geometry.type = 'Line';\n\n const vLen = this.vertices.length;\n const uvLen = this.uvs.length;\n\n for (const vertex of vertices) {\n this.addVertexLine(this.parseVertexIndex(vertex, vLen));\n }\n\n for (const uv of uvs) {\n this.addUVLine(this.parseUVIndex(uv, uvLen));\n }\n }\n}\n\n// eslint-disable-next-line max-statements, complexity\nexport function parseOBJMeshes(text) {\n const state = new ParserState();\n\n if (text.indexOf('\\r\\n') !== -1) {\n // This is faster than String.split with regex that splits on both\n text = text.replace(/\\r\\n/g, '\\n');\n }\n\n if (text.indexOf('\\\\\\n') !== -1) {\n // join lines separated by a line continuation character (\\)\n text = text.replace(/\\\\\\n/g, '');\n }\n\n const lines = text.split('\\n');\n let line = '';\n let lineFirstChar = '';\n let lineLength = 0;\n let result = [];\n\n // Faster to just trim left side of the line. Use if available.\n const trimLeft = typeof ''.trimLeft === 'function';\n\n /* eslint-disable no-continue, max-depth */\n for (let i = 0, l = lines.length; i < l; i++) {\n line = lines[i];\n line = trimLeft ? line.trimLeft() : line.trim();\n lineLength = line.length;\n\n if (lineLength === 0) continue;\n\n lineFirstChar = line.charAt(0);\n\n // @todo invoke passed in handler if any\n if (lineFirstChar === '#') continue;\n\n if (lineFirstChar === 'v') {\n const data = line.split(/\\s+/);\n\n switch (data[0]) {\n case 'v':\n state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n if (data.length === 8) {\n state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]));\n }\n break;\n case 'vn':\n state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n break;\n case 'vt':\n state.uvs.push(parseFloat(data[1]), parseFloat(data[2]));\n break;\n default:\n }\n } else if (lineFirstChar === 'f') {\n const lineData = line.substr(1).trim();\n const vertexData = lineData.split(/\\s+/);\n const faceVertices = [];\n\n // Parse the face vertex data into an easy to work with format\n\n for (let j = 0, jl = vertexData.length; j < jl; j++) {\n const vertex = vertexData[j];\n\n if (vertex.length > 0) {\n const vertexParts = vertex.split('/');\n faceVertices.push(vertexParts);\n }\n }\n\n // Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n const v1 = faceVertices[0];\n\n for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {\n const v2 = faceVertices[j];\n const v3 = faceVertices[j + 1];\n\n state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2]);\n }\n } else if (lineFirstChar === 'l') {\n const lineParts = line.substring(1).trim().split(' ');\n let lineVertices;\n const lineUVs = [];\n\n if (line.indexOf('/') === -1) {\n lineVertices = lineParts;\n } else {\n lineVertices = [];\n for (let li = 0, llen = lineParts.length; li < llen; li++) {\n const parts = lineParts[li].split('/');\n\n if (parts[0] !== '') lineVertices.push(parts[0]);\n if (parts[1] !== '') lineUVs.push(parts[1]);\n }\n }\n state.addLineGeometry(lineVertices, lineUVs);\n } else if (lineFirstChar === 'p') {\n const lineData = line.substr(1).trim();\n const pointData = lineData.split(' ');\n\n state.addPointGeometry(pointData);\n } else if ((result = OBJECT_RE.exec(line)) !== null) {\n // o object_name\n // or\n // g group_name\n\n // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n // var name = result[ 0 ].substr( 1 ).trim();\n const name = (' ' + result[0].substr(1).trim()).substr(1); // eslint-disable-line\n\n state.startObject(name);\n } else if (MATERIAL_USE_RE.test(line)) {\n // material\n\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);\n } else if (MATERIAL_RE.test(line)) {\n // mtl file\n\n state.materialLibraries.push(line.substring(7).trim());\n } else if (lineFirstChar === 's') {\n result = line.split(' ');\n\n // smooth shading\n\n // @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n // but does not define a usemtl for each face set.\n // This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n // This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n // where explicit usemtl defines geometry groups.\n // Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n /*\n * http://paulbourke.net/dataformats/obj/\n * or\n * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n *\n * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n * than 0.\"\n */\n if (result.length > 1) {\n const value = result[1].trim().toLowerCase();\n state.object.smooth = value !== '0' && value !== 'off';\n } else {\n // ZBrush can produce \"s\" lines #11707\n state.object.smooth = true;\n }\n const material = state.object.currentMaterial();\n if (material) material.smooth = state.object.smooth;\n } else {\n // Handle null terminated files without exception\n if (line === '\\0') continue;\n\n throw new Error(`Unexpected line: \"${line}\"`);\n }\n }\n\n state.finalize();\n\n const meshes = [];\n const materials = [];\n\n for (const object of state.objects) {\n const {geometry} = object;\n\n // Skip o/g line declarations that did not follow with any faces\n if (geometry.vertices.length === 0) continue;\n\n const mesh = {\n header: {\n vertexCount: geometry.vertices.length / 3\n },\n attributes: {}\n };\n\n switch (geometry.type) {\n case 'Points':\n mesh.mode = 0; // GL.POINTS\n break;\n case 'Line':\n mesh.mode = 1; // GL.LINES\n break;\n default:\n mesh.mode = 4; // GL.TRIANGLES\n break;\n }\n\n mesh.attributes.POSITION = {value: new Float32Array(geometry.vertices), size: 3};\n\n if (geometry.normals.length > 0) {\n mesh.attributes.NORMAL = {value: new Float32Array(geometry.normals), size: 3};\n }\n\n if (geometry.colors.length > 0) {\n mesh.attributes.COLOR_0 = {value: new Float32Array(geometry.colors), size: 3};\n }\n\n if (geometry.uvs.length > 0) {\n mesh.attributes.TEXCOORD_0 = {value: new Float32Array(geometry.uvs), size: 2};\n }\n\n // Create materials\n mesh.materials = [];\n for (const sourceMaterial of object.materials) {\n // TODO - support full spec\n const _material = {\n name: sourceMaterial.name,\n flatShading: !sourceMaterial.smooth\n };\n mesh.materials.push(_material);\n materials.push(_material);\n }\n\n mesh.name = object.name;\n meshes.push(mesh);\n }\n\n return {meshes, materials};\n}\n"],"mappings":"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"}
@@ -5,7 +5,6 @@ export function parseOBJ(text, options) {
5
5
  const {
6
6
  meshes
7
7
  } = parseOBJMeshes(text);
8
-
9
8
  const vertexCount = meshes.reduce((s, mesh) => s + mesh.header.vertexCount, 0);
10
9
  const attributes = mergeAttributes(meshes, vertexCount);
11
10
  const header = {
@@ -23,11 +22,9 @@ export function parseOBJ(text, options) {
23
22
  schema,
24
23
  header,
25
24
  mode: 4,
26
-
27
25
  attributes
28
26
  };
29
27
  }
30
-
31
28
  function mergeAttributes(meshes, vertexCount) {
32
29
  const positions = new Float32Array(vertexCount * 3);
33
30
  let normals;
@@ -1 +1 @@
1
- {"version":3,"file":"parse-obj.js","names":["getMeshBoundingBox","parseOBJMeshes","getOBJSchema","parseOBJ","text","options","meshes","vertexCount","reduce","s","mesh","header","attributes","mergeAttributes","boundingBox","schema","mode","loaderData","positions","Float32Array","normals","colors","uvs","i","POSITION","NORMAL","COLOR_0","TEXCOORD_0","set","value","length","size"],"sources":["../../../src/lib/parse-obj.ts"],"sourcesContent":["import type {MeshAttributes} from '@loaders.gl/schema';\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport {parseOBJMeshes} from './parse-obj-meshes';\nimport {getOBJSchema} from './get-obj-schema';\n\nexport function parseOBJ(text, options) {\n const {meshes} = parseOBJMeshes(text);\n\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\n const header = {\n vertexCount,\n // @ts-ignore Need to export Attributes type\n boundingBox: getMeshBoundingBox(attributes)\n };\n\n const schema = getOBJSchema(attributes, {\n mode: 4,\n boundingBox: header.boundingBox\n });\n\n return {\n // Data return by this loader implementation\n loaderData: {\n header: {}\n },\n\n // Normalised data\n schema,\n header,\n mode: 4, // TRIANGLES\n\n attributes\n };\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\n for (const mesh of meshes) {\n const {POSITION, NORMAL, COLOR_0, TEXCOORD_0} = mesh.attributes;\n\n positions.set(POSITION.value, i * 3);\n\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\n i += POSITION.value.length / 3;\n }\n\n const attributes: MeshAttributes = {};\n attributes.POSITION = {value: positions, size: 3};\n\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\n return attributes;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-obj.js","names":["getMeshBoundingBox","parseOBJMeshes","getOBJSchema","parseOBJ","text","options","meshes","vertexCount","reduce","s","mesh","header","attributes","mergeAttributes","boundingBox","schema","mode","loaderData","positions","Float32Array","normals","colors","uvs","i","POSITION","NORMAL","COLOR_0","TEXCOORD_0","set","value","length","size"],"sources":["../../../src/lib/parse-obj.ts"],"sourcesContent":["import type {MeshAttributes} from '@loaders.gl/schema';\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport {parseOBJMeshes} from './parse-obj-meshes';\nimport {getOBJSchema} from './get-obj-schema';\n\nexport function parseOBJ(text, options) {\n const {meshes} = parseOBJMeshes(text);\n\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\n const header = {\n vertexCount,\n // @ts-ignore Need to export Attributes type\n boundingBox: getMeshBoundingBox(attributes)\n };\n\n const schema = getOBJSchema(attributes, {\n mode: 4,\n boundingBox: header.boundingBox\n });\n\n return {\n // Data return by this loader implementation\n loaderData: {\n header: {}\n },\n\n // Normalised data\n schema,\n header,\n mode: 4, // TRIANGLES\n\n attributes\n };\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\n for (const mesh of meshes) {\n const {POSITION, NORMAL, COLOR_0, TEXCOORD_0} = mesh.attributes;\n\n positions.set(POSITION.value, i * 3);\n\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\n i += POSITION.value.length / 3;\n }\n\n const attributes: MeshAttributes = {};\n attributes.POSITION = {value: positions, size: 3};\n\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\n return attributes;\n}\n"],"mappings":"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"}
@@ -1,6 +1,4 @@
1
-
2
-
3
- const VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
1
+ const VERSION = typeof "3.4.0-alpha.3" !== 'undefined' ? "3.4.0-alpha.3" : 'latest';
4
2
  export const MTLLoader = {
5
3
  name: 'MTL',
6
4
  id: 'mtl',
@@ -1 +1 @@
1
- {"version":3,"file":"mtl-loader.js","names":["VERSION","MTLLoader","name","id","module","version","worker","extensions","mimeTypes","testText","text","includes","options","mtl","_typecheckMTLLoader"],"sources":["../../src/mtl-loader.ts"],"sourcesContent":["// loaders.gl, MIT license\nimport type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {ParseMTLOptions} from './lib/parse-mtl';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type MTLLoaderOptions = LoaderOptions & {\n mtl?: ParseMTLOptions;\n};\n\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: string): boolean => text.includes('newmtl'),\n options: {\n mtl: {}\n }\n};\n\nexport const _typecheckMTLLoader: Loader = MTLLoader;\n"],"mappings":";;AAMA,MAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAU3E,OAAO,MAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,YAAY,CAAC;EACzBC,QAAQ,EAAGC,IAAY,IAAcA,IAAI,CAACC,QAAQ,CAAC,QAAQ,CAAC;EAC5DC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR;AACF,CAAC;AAED,OAAO,MAAMC,mBAA2B,GAAGb,SAAS"}
1
+ {"version":3,"file":"mtl-loader.js","names":["VERSION","MTLLoader","name","id","module","version","worker","extensions","mimeTypes","testText","text","includes","options","mtl","_typecheckMTLLoader"],"sources":["../../src/mtl-loader.ts"],"sourcesContent":["// loaders.gl, MIT license\nimport type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {ParseMTLOptions} from './lib/parse-mtl';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type MTLLoaderOptions = LoaderOptions & {\n mtl?: ParseMTLOptions;\n};\n\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: string): boolean => text.includes('newmtl'),\n options: {\n mtl: {}\n }\n};\n\nexport const _typecheckMTLLoader: Loader = MTLLoader;\n"],"mappings":"AAMA,MAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAU3E,OAAO,MAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,YAAY,CAAC;EACzBC,QAAQ,EAAGC,IAAY,IAAcA,IAAI,CAACC,QAAQ,CAAC,QAAQ,CAAC;EAC5DC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR;AACF,CAAC;AAED,OAAO,MAAMC,mBAA2B,GAAGb,SAAS"}
@@ -1,5 +1,4 @@
1
-
2
- const VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
1
+ const VERSION = typeof "3.4.0-alpha.3" !== 'undefined' ? "3.4.0-alpha.3" : 'latest';
3
2
  export const OBJLoader = {
4
3
  name: 'OBJ',
5
4
  id: 'obj',
@@ -1 +1 @@
1
- {"version":3,"file":"obj-loader.js","names":["VERSION","OBJLoader","name","id","module","version","worker","extensions","mimeTypes","testText","testOBJFile","options","obj","text","_typecheckOBJLoader"],"sources":["../../src/obj-loader.ts"],"sourcesContent":["import type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type OBJLoaderOptions = LoaderOptions & {\n obj?: {};\n};\n\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};\n\nfunction testOBJFile(text: string): boolean {\n // TODO - There could be comment line first\n return text[0] === 'v';\n}\n\nexport const _typecheckOBJLoader: Loader = OBJLoader;\n"],"mappings":";AAIA,MAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAS3E,OAAO,MAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,YAAY,CAAC;EACzBC,QAAQ,EAAEC,WAAW;EACrBC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR;AACF,CAAC;AAED,SAASF,WAAW,CAACG,IAAY,EAAW;EAE1C,OAAOA,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;AACxB;AAEA,OAAO,MAAMC,mBAA2B,GAAGb,SAAS"}
1
+ {"version":3,"file":"obj-loader.js","names":["VERSION","OBJLoader","name","id","module","version","worker","extensions","mimeTypes","testText","testOBJFile","options","obj","text","_typecheckOBJLoader"],"sources":["../../src/obj-loader.ts"],"sourcesContent":["import type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type OBJLoaderOptions = LoaderOptions & {\n obj?: {};\n};\n\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};\n\nfunction testOBJFile(text: string): boolean {\n // TODO - There could be comment line first\n return text[0] === 'v';\n}\n\nexport const _typecheckOBJLoader: Loader = OBJLoader;\n"],"mappings":"AAIA,MAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAS3E,OAAO,MAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,YAAY,CAAC;EACzBC,QAAQ,EAAEC,WAAW;EACrBC,OAAO,EAAE;IACPC,GAAG,EAAE,CAAC;EACR;AACF,CAAC;AAED,SAASF,WAAWA,CAACG,IAAY,EAAW;EAE1C,OAAOA,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;AACxB;AAEA,OAAO,MAAMC,mBAA2B,GAAGb,SAAS"}
@@ -1205,7 +1205,7 @@
1205
1205
  }
1206
1206
 
1207
1207
  // src/obj-loader.ts
1208
- var VERSION = true ? "3.4.0-alpha.2" : "latest";
1208
+ var VERSION = true ? "3.4.0-alpha.3" : "latest";
1209
1209
  var OBJLoader = {
1210
1210
  name: "OBJ",
1211
1211
  id: "obj",
@@ -1224,7 +1224,7 @@
1224
1224
  }
1225
1225
 
1226
1226
  // src/mtl-loader.ts
1227
- var VERSION2 = true ? "3.4.0-alpha.2" : "latest";
1227
+ var VERSION2 = true ? "3.4.0-alpha.3" : "latest";
1228
1228
  var MTLLoader = {
1229
1229
  name: "MTL",
1230
1230
  id: "mtl",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/obj",
3
- "version": "3.4.0-alpha.2",
3
+ "version": "3.4.0-alpha.3",
4
4
  "description": "Framework-independent loader for the OBJ format",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -34,8 +34,8 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@babel/runtime": "^7.3.1",
37
- "@loaders.gl/loader-utils": "3.4.0-alpha.2",
38
- "@loaders.gl/schema": "3.4.0-alpha.2"
37
+ "@loaders.gl/loader-utils": "3.4.0-alpha.3",
38
+ "@loaders.gl/schema": "3.4.0-alpha.3"
39
39
  },
40
- "gitHead": "f1c00c124d8d0c41a138ff40afb0d1a00711bf2e"
40
+ "gitHead": "a954528dd1d78a1f128d8f6b07e4baeb7a296924"
41
41
  }