@loaders.gl/obj 3.4.0-alpha.1 → 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 +12 -18
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/get-obj-schema.js.map +1 -1
- package/dist/es5/lib/parse-mtl.js +1 -6
- package/dist/es5/lib/parse-mtl.js.map +1 -1
- package/dist/es5/lib/parse-obj-meshes.js +2 -21
- package/dist/es5/lib/parse-obj-meshes.js.map +1 -1
- package/dist/es5/lib/parse-obj.js +1 -4
- package/dist/es5/lib/parse-obj.js.map +1 -1
- package/dist/es5/mtl-loader.js +1 -2
- package/dist/es5/mtl-loader.js.map +1 -1
- package/dist/es5/obj-loader.js +1 -1
- package/dist/es5/obj-loader.js.map +1 -1
- package/dist/es5/workers/obj-worker.js.map +1 -1
- package/dist/esm/bundle.js +0 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/index.js +0 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/get-obj-schema.js.map +1 -1
- package/dist/esm/lib/parse-mtl.js +0 -7
- package/dist/esm/lib/parse-mtl.js.map +1 -1
- package/dist/esm/lib/parse-obj-meshes.js +0 -20
- package/dist/esm/lib/parse-obj-meshes.js.map +1 -1
- package/dist/esm/lib/parse-obj.js +0 -3
- package/dist/esm/lib/parse-obj.js.map +1 -1
- package/dist/esm/mtl-loader.js +1 -3
- package/dist/esm/mtl-loader.js.map +1 -1
- package/dist/esm/obj-loader.js +1 -2
- package/dist/esm/obj-loader.js.map +1 -1
- package/dist/obj-worker.js +2 -2
- package/package.json +4 -4
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
}));
|
package/dist/es5/index.js.map
CHANGED
|
@@ -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,
|
|
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,
|
|
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++)
|
|
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","
|
|
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++)
|
|
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++)
|
|
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","
|
|
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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"}
|
package/dist/es5/mtl-loader.js
CHANGED
|
@@ -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.1" !== 'undefined' ? "3.4.0-alpha.1" : '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":"
|
|
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"}
|
package/dist/es5/obj-loader.js
CHANGED
|
@@ -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.
|
|
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;
|
|
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,
|
|
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"}
|
package/dist/esm/bundle.js
CHANGED
package/dist/esm/bundle.js.map
CHANGED
|
@@ -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":"
|
|
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),
|
package/dist/esm/index.js.map
CHANGED
|
@@ -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
|
|
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,
|
|
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":"
|
|
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":"AACA,SAAQA,kBAAkB,QAAO,oBAAoB;AACrD,SAAQC,cAAc,QAAO,oBAAoB;AACjD,SAAQC,YAAY,QAAO,kBAAkB;AAE7C,OAAO,SAASC,
|
|
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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"}
|
package/dist/esm/mtl-loader.js
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/esm/obj-loader.js
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/obj-worker.js
CHANGED
|
@@ -1205,7 +1205,7 @@
|
|
|
1205
1205
|
}
|
|
1206
1206
|
|
|
1207
1207
|
// src/obj-loader.ts
|
|
1208
|
-
var VERSION = true ? "3.4.0-alpha.
|
|
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.
|
|
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.
|
|
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.
|
|
38
|
-
"@loaders.gl/schema": "3.4.0-alpha.
|
|
37
|
+
"@loaders.gl/loader-utils": "3.4.0-alpha.3",
|
|
38
|
+
"@loaders.gl/schema": "3.4.0-alpha.3"
|
|
39
39
|
},
|
|
40
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "a954528dd1d78a1f128d8f6b07e4baeb7a296924"
|
|
41
41
|
}
|