babylonjs-serializers 6.2.0 → 6.3.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"babylon.objSerializer.min.js","mappings":"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","sources":["webpack://SERIALIZERS/webpack/universalModuleDefinition","webpack://SERIALIZERS/external umd {\"root\":\"BABYLON\",\"commonjs\":\"babylonjs\",\"commonjs2\":\"babylonjs\",\"amd\":\"babylonjs\"}","webpack://SERIALIZERS/webpack/bootstrap","webpack://SERIALIZERS/webpack/runtime/define property getters","webpack://SERIALIZERS/webpack/runtime/global","webpack://SERIALIZERS/webpack/runtime/hasOwnProperty shorthand","webpack://SERIALIZERS/webpack/runtime/make namespace object","webpack://SERIALIZERS/../../../lts/serializers/generated/OBJ/objSerializer.ts","webpack://SERIALIZERS/../../../lts/serializers/generated/legacy/legacy-objSerializer.ts","webpack://SERIALIZERS/./src/obj.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"babylonjs\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"babylonjs-serializers\", [\"babylonjs\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"babylonjs-serializers\"] = factory(require(\"babylonjs\"));\n\telse\n\t\troot[\"SERIALIZERS\"] = factory(root[\"BABYLON\"]);\n})((typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : this), (__WEBPACK_EXTERNAL_MODULE__520__) => {\nreturn ","module.exports = __WEBPACK_EXTERNAL_MODULE__520__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { Nullable } from \"core/types\";\r\nimport { Matrix } from \"core/Maths/math.vector\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport type { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport type { Geometry } from \"core/Meshes/geometry\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\n\r\n/**\r\n * Class for generating OBJ data from a Babylon scene.\r\n */\r\nexport class OBJExport {\r\n /**\r\n * Exports the geometry of a Mesh array in .OBJ file format (text)\r\n * @param mesh defines the list of meshes to serialize\r\n * @param materials defines if materials should be exported\r\n * @param matlibname defines the name of the associated mtl file\r\n * @param globalposition defines if the exported positions are globals or local to the exported mesh\r\n * @returns the OBJ content\r\n */\r\n public static OBJ(mesh: Mesh[], materials?: boolean, matlibname?: string, globalposition?: boolean): string {\r\n const output: string[] = [];\r\n let v = 1;\r\n // keep track of uv index in case mixed meshes are passed in\r\n let textureV = 1;\r\n\r\n if (materials) {\r\n if (!matlibname) {\r\n matlibname = \"mat\";\r\n }\r\n output.push(\"mtllib \" + matlibname + \".mtl\");\r\n }\r\n for (let j = 0; j < mesh.length; j++) {\r\n output.push(\"g object\" + j);\r\n output.push(\"o object_\" + j);\r\n\r\n //Uses the position of the item in the scene, to the file (this back to normal in the end)\r\n let inverseTransform: Nullable<Matrix> = null;\r\n if (globalposition) {\r\n const transform = mesh[j].computeWorldMatrix(true);\r\n inverseTransform = new Matrix();\r\n transform.invertToRef(inverseTransform);\r\n\r\n mesh[j].bakeTransformIntoVertices(transform);\r\n }\r\n\r\n //TODO: submeshes (groups)\r\n //TODO: smoothing groups (s 1, s off);\r\n if (materials) {\r\n const mat = mesh[j].material;\r\n\r\n if (mat) {\r\n output.push(\"usemtl \" + mat.id);\r\n }\r\n }\r\n const g: Nullable<Geometry> = mesh[j].geometry;\r\n\r\n if (!g) {\r\n Tools.Warn(\"No geometry is present on the mesh\");\r\n continue;\r\n }\r\n\r\n const trunkVerts = g.getVerticesData(\"position\");\r\n const trunkNormals = g.getVerticesData(\"normal\");\r\n const trunkUV = g.getVerticesData(\"uv\");\r\n const trunkFaces = g.getIndices();\r\n let currentV = 0;\r\n let currentTextureV = 0;\r\n\r\n if (!trunkVerts || !trunkFaces) {\r\n Tools.Warn(\"There are no position vertices or indices on the mesh!\");\r\n continue;\r\n }\r\n\r\n for (let i = 0; i < trunkVerts.length; i += 3) {\r\n // Babylon.js default is left handed, while OBJ default is right handed\r\n // Need to invert Z vertices unless Babylon is set to use a right handed system\r\n if (mesh[0].getScene().useRightHandedSystem) {\r\n output.push(\"v \" + trunkVerts[i] + \" \" + trunkVerts[i + 1] + \" \" + trunkVerts[i + 2]);\r\n } else {\r\n output.push(\"v \" + trunkVerts[i] + \" \" + trunkVerts[i + 1] + \" \" + -trunkVerts[i + 2]);\r\n }\r\n currentV++;\r\n }\r\n\r\n if (trunkNormals != null) {\r\n for (let i = 0; i < trunkNormals.length; i += 3) {\r\n output.push(\"vn \" + trunkNormals[i] + \" \" + trunkNormals[i + 1] + \" \" + trunkNormals[i + 2]);\r\n }\r\n }\r\n if (trunkUV != null) {\r\n for (let i = 0; i < trunkUV.length; i += 2) {\r\n output.push(\"vt \" + trunkUV[i] + \" \" + trunkUV[i + 1]);\r\n currentTextureV++;\r\n }\r\n }\r\n\r\n for (let i = 0; i < trunkFaces.length; i += 3) {\r\n const indices = [String(trunkFaces[i + 2] + v), String(trunkFaces[i + 1] + v), String(trunkFaces[i] + v)];\r\n const textureIndices = [String(trunkFaces[i + 2] + textureV), String(trunkFaces[i + 1] + textureV), String(trunkFaces[i] + textureV)];\r\n const blanks: string[] = [\"\", \"\", \"\"];\r\n\r\n const facePositions = indices;\r\n const faceUVs = trunkUV != null ? textureIndices : blanks;\r\n const faceNormals = trunkNormals != null ? indices : blanks;\r\n\r\n output.push(\r\n \"f \" +\r\n facePositions[0] +\r\n \"/\" +\r\n faceUVs[0] +\r\n \"/\" +\r\n faceNormals[0] +\r\n \" \" +\r\n facePositions[1] +\r\n \"/\" +\r\n faceUVs[1] +\r\n \"/\" +\r\n faceNormals[1] +\r\n \" \" +\r\n facePositions[2] +\r\n \"/\" +\r\n faceUVs[2] +\r\n \"/\" +\r\n faceNormals[2]\r\n );\r\n }\r\n //back de previous matrix, to not change the original mesh in the scene\r\n if (globalposition && inverseTransform) {\r\n mesh[j].bakeTransformIntoVertices(inverseTransform);\r\n }\r\n v += currentV;\r\n textureV += currentTextureV;\r\n }\r\n const text: string = output.join(\"\\n\");\r\n return text;\r\n }\r\n\r\n /**\r\n * Exports the material(s) of a mesh in .MTL file format (text)\r\n * @param mesh defines the mesh to extract the material from\r\n * @returns the mtl content\r\n */\r\n //TODO: Export the materials of mesh array\r\n public static MTL(mesh: Mesh): string {\r\n const output = [];\r\n const m = <StandardMaterial>mesh.material;\r\n output.push(\"newmtl mat1\");\r\n output.push(\" Ns \" + m.specularPower.toFixed(4));\r\n output.push(\" Ni 1.5000\");\r\n output.push(\" d \" + m.alpha.toFixed(4));\r\n output.push(\" Tr 0.0000\");\r\n output.push(\" Tf 1.0000 1.0000 1.0000\");\r\n output.push(\" illum 2\");\r\n output.push(\" Ka \" + m.ambientColor.r.toFixed(4) + \" \" + m.ambientColor.g.toFixed(4) + \" \" + m.ambientColor.b.toFixed(4));\r\n output.push(\" Kd \" + m.diffuseColor.r.toFixed(4) + \" \" + m.diffuseColor.g.toFixed(4) + \" \" + m.diffuseColor.b.toFixed(4));\r\n output.push(\" Ks \" + m.specularColor.r.toFixed(4) + \" \" + m.specularColor.g.toFixed(4) + \" \" + m.specularColor.b.toFixed(4));\r\n output.push(\" Ke \" + m.emissiveColor.r.toFixed(4) + \" \" + m.emissiveColor.g.toFixed(4) + \" \" + m.emissiveColor.b.toFixed(4));\r\n\r\n //TODO: uv scale, offset, wrap\r\n //TODO: UV mirrored in Blender? second UV channel? lightMap? reflection textures?\r\n const uvscale = \"\";\r\n\r\n if (m.ambientTexture) {\r\n output.push(\" map_Ka \" + uvscale + m.ambientTexture.name);\r\n }\r\n\r\n if (m.diffuseTexture) {\r\n output.push(\" map_Kd \" + uvscale + m.diffuseTexture.name);\r\n //TODO: alpha testing, opacity in diffuse texture alpha channel (diffuseTexture.hasAlpha -> map_d)\r\n }\r\n\r\n if (m.specularTexture) {\r\n output.push(\" map_Ks \" + uvscale + m.specularTexture.name);\r\n /* TODO: glossiness = specular highlight component is in alpha channel of specularTexture. (???)\r\n if (m.useGlossinessFromSpecularMapAlpha) {\r\n output.push(\" map_Ns \"+uvscale + m.specularTexture.name);\r\n }\r\n */\r\n }\r\n\r\n /* TODO: emissive texture not in .MAT format (???)\r\n if (m.emissiveTexture) {\r\n output.push(\" map_d \"+uvscale+m.emissiveTexture.name);\r\n }\r\n */\r\n\r\n if (m.bumpTexture) {\r\n output.push(\" map_bump -imfchan z \" + uvscale + m.bumpTexture.name);\r\n }\r\n\r\n if (m.opacityTexture) {\r\n output.push(\" map_d \" + uvscale + m.opacityTexture.name);\r\n }\r\n\r\n const text = output.join(\"\\n\");\r\n return text;\r\n }\r\n}\r\n","/* eslint-disable import/no-internal-modules */\nimport * as Serializers from \"../OBJ/index\";\n/**\n * This is the entry point for the UMD module.\n * The entry point for a future ESM package should be index.ts\n */\nconst globalObject = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : undefined;\nif (typeof globalObject !== \"undefined\") {\n for (const serializer in Serializers) {\n (<any>globalObject).BABYLON[serializer] = (<any>Serializers)[serializer];\n }\n}\nexport * from \"../OBJ/index\";\n","import * as serializers from \"serializers/legacy/legacy-objSerializer\";\r\nexport { serializers };\r\nexport default serializers;\r\n"],"names":["root","factory","exports","module","require","define","amd","self","global","this","__WEBPACK_EXTERNAL_MODULE__520__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","OBJ","mesh","materials","matlibname","globalposition","output","v","textureV","push","j","length","inverseTransform","transform","computeWorldMatrix","Matrix","invertToRef","bakeTransformIntoVertices","mat","material","id","geometry","trunkVerts","getVerticesData","trunkNormals","trunkUV","trunkFaces","getIndices","currentV","currentTextureV","i","getScene","useRightHandedSystem","indices","String","textureIndices","blanks","facePositions","faceUVs","faceNormals","Tools","join","MTL","m","specularPower","toFixed","alpha","ambientColor","b","diffuseColor","specularColor","emissiveColor","ambientTexture","name","diffuseTexture","specularTexture","bumpTexture","opacityTexture","globalObject","serializer","BABYLON"],"sourceRoot":""}
1
+ {"version":3,"file":"babylon.objSerializer.min.js","mappings":"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","sources":["webpack://SERIALIZERS/webpack/universalModuleDefinition","webpack://SERIALIZERS/external umd {\"root\":\"BABYLON\",\"commonjs\":\"babylonjs\",\"commonjs2\":\"babylonjs\",\"amd\":\"babylonjs\"}","webpack://SERIALIZERS/webpack/bootstrap","webpack://SERIALIZERS/webpack/runtime/define property getters","webpack://SERIALIZERS/webpack/runtime/global","webpack://SERIALIZERS/webpack/runtime/hasOwnProperty shorthand","webpack://SERIALIZERS/webpack/runtime/make namespace object","webpack://SERIALIZERS/../../../lts/serializers/generated/OBJ/objSerializer.ts","webpack://SERIALIZERS/../../../lts/serializers/generated/legacy/legacy-objSerializer.ts","webpack://SERIALIZERS/./src/obj.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"babylonjs\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"babylonjs-serializers\", [\"babylonjs\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"babylonjs-serializers\"] = factory(require(\"babylonjs\"));\n\telse\n\t\troot[\"SERIALIZERS\"] = factory(root[\"BABYLON\"]);\n})((typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : this), (__WEBPACK_EXTERNAL_MODULE__520__) => {\nreturn ","module.exports = __WEBPACK_EXTERNAL_MODULE__520__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { Nullable } from \"core/types\";\r\nimport { Matrix } from \"core/Maths/math.vector\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport type { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport type { Geometry } from \"core/Meshes/geometry\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\n\r\n/**\r\n * Class for generating OBJ data from a Babylon scene.\r\n */\r\nexport class OBJExport {\r\n /**\r\n * Exports the geometry of a Mesh array in .OBJ file format (text)\r\n * @param mesh defines the list of meshes to serialize\r\n * @param materials defines if materials should be exported\r\n * @param matlibname defines the name of the associated mtl file\r\n * @param globalposition defines if the exported positions are globals or local to the exported mesh\r\n * @returns the OBJ content\r\n */\r\n public static OBJ(mesh: Mesh[], materials?: boolean, matlibname?: string, globalposition?: boolean): string {\r\n const output: string[] = [];\r\n let v = 1;\r\n // keep track of uv index in case mixed meshes are passed in\r\n let textureV = 1;\r\n\r\n if (materials) {\r\n if (!matlibname) {\r\n matlibname = \"mat\";\r\n }\r\n output.push(\"mtllib \" + matlibname + \".mtl\");\r\n }\r\n for (let j = 0; j < mesh.length; j++) {\r\n output.push(\"g object\" + j);\r\n output.push(\"o object_\" + j);\r\n\r\n //Uses the position of the item in the scene, to the file (this back to normal in the end)\r\n let inverseTransform: Nullable<Matrix> = null;\r\n if (globalposition) {\r\n const transform = mesh[j].computeWorldMatrix(true);\r\n inverseTransform = new Matrix();\r\n transform.invertToRef(inverseTransform);\r\n\r\n mesh[j].bakeTransformIntoVertices(transform);\r\n }\r\n\r\n //TODO: submeshes (groups)\r\n //TODO: smoothing groups (s 1, s off);\r\n if (materials) {\r\n const mat = mesh[j].material;\r\n\r\n if (mat) {\r\n output.push(\"usemtl \" + mat.id);\r\n }\r\n }\r\n const g: Nullable<Geometry> = mesh[j].geometry;\r\n\r\n if (!g) {\r\n Tools.Warn(\"No geometry is present on the mesh\");\r\n continue;\r\n }\r\n\r\n const trunkVerts = g.getVerticesData(\"position\");\r\n const trunkNormals = g.getVerticesData(\"normal\");\r\n const trunkUV = g.getVerticesData(\"uv\");\r\n const trunkFaces = g.getIndices();\r\n let currentV = 0;\r\n let currentTextureV = 0;\r\n\r\n if (!trunkVerts || !trunkFaces) {\r\n Tools.Warn(\"There are no position vertices or indices on the mesh!\");\r\n continue;\r\n }\r\n\r\n for (let i = 0; i < trunkVerts.length; i += 3) {\r\n // Babylon.js default is left handed, while OBJ default is right handed\r\n // Need to invert Z vertices unless Babylon is set to use a right handed system\r\n if (mesh[0].getScene().useRightHandedSystem) {\r\n output.push(\"v \" + trunkVerts[i] + \" \" + trunkVerts[i + 1] + \" \" + trunkVerts[i + 2]);\r\n } else {\r\n output.push(\"v \" + trunkVerts[i] + \" \" + trunkVerts[i + 1] + \" \" + -trunkVerts[i + 2]);\r\n }\r\n currentV++;\r\n }\r\n\r\n if (trunkNormals != null) {\r\n for (let i = 0; i < trunkNormals.length; i += 3) {\r\n output.push(\"vn \" + trunkNormals[i] + \" \" + trunkNormals[i + 1] + \" \" + trunkNormals[i + 2]);\r\n }\r\n }\r\n if (trunkUV != null) {\r\n for (let i = 0; i < trunkUV.length; i += 2) {\r\n output.push(\"vt \" + trunkUV[i] + \" \" + trunkUV[i + 1]);\r\n currentTextureV++;\r\n }\r\n }\r\n\r\n for (let i = 0; i < trunkFaces.length; i += 3) {\r\n const indices = [String(trunkFaces[i + 2] + v), String(trunkFaces[i + 1] + v), String(trunkFaces[i] + v)];\r\n const textureIndices = [String(trunkFaces[i + 2] + textureV), String(trunkFaces[i + 1] + textureV), String(trunkFaces[i] + textureV)];\r\n const blanks: string[] = [\"\", \"\", \"\"];\r\n\r\n const facePositions = indices;\r\n const faceUVs = trunkUV != null ? textureIndices : blanks;\r\n const faceNormals = trunkNormals != null ? indices : blanks;\r\n\r\n output.push(\r\n \"f \" +\r\n facePositions[0] +\r\n \"/\" +\r\n faceUVs[0] +\r\n \"/\" +\r\n faceNormals[0] +\r\n \" \" +\r\n facePositions[1] +\r\n \"/\" +\r\n faceUVs[1] +\r\n \"/\" +\r\n faceNormals[1] +\r\n \" \" +\r\n facePositions[2] +\r\n \"/\" +\r\n faceUVs[2] +\r\n \"/\" +\r\n faceNormals[2]\r\n );\r\n }\r\n //back de previous matrix, to not change the original mesh in the scene\r\n if (globalposition && inverseTransform) {\r\n mesh[j].bakeTransformIntoVertices(inverseTransform);\r\n }\r\n v += currentV;\r\n textureV += currentTextureV;\r\n }\r\n const text: string = output.join(\"\\n\");\r\n return text;\r\n }\r\n\r\n /**\r\n * Exports the material(s) of a mesh in .MTL file format (text)\r\n * @param mesh defines the mesh to extract the material from\r\n * @returns the mtl content\r\n */\r\n //TODO: Export the materials of mesh array\r\n public static MTL(mesh: Mesh): string {\r\n const output = [];\r\n const m = <StandardMaterial>mesh.material;\r\n output.push(\"newmtl mat1\");\r\n output.push(\" Ns \" + m.specularPower.toFixed(4));\r\n output.push(\" Ni 1.5000\");\r\n output.push(\" d \" + m.alpha.toFixed(4));\r\n output.push(\" Tr 0.0000\");\r\n output.push(\" Tf 1.0000 1.0000 1.0000\");\r\n output.push(\" illum 2\");\r\n output.push(\" Ka \" + m.ambientColor.r.toFixed(4) + \" \" + m.ambientColor.g.toFixed(4) + \" \" + m.ambientColor.b.toFixed(4));\r\n output.push(\" Kd \" + m.diffuseColor.r.toFixed(4) + \" \" + m.diffuseColor.g.toFixed(4) + \" \" + m.diffuseColor.b.toFixed(4));\r\n output.push(\" Ks \" + m.specularColor.r.toFixed(4) + \" \" + m.specularColor.g.toFixed(4) + \" \" + m.specularColor.b.toFixed(4));\r\n output.push(\" Ke \" + m.emissiveColor.r.toFixed(4) + \" \" + m.emissiveColor.g.toFixed(4) + \" \" + m.emissiveColor.b.toFixed(4));\r\n\r\n //TODO: uv scale, offset, wrap\r\n //TODO: UV mirrored in Blender? second UV channel? lightMap? reflection textures?\r\n const uvscale = \"\";\r\n\r\n if (m.ambientTexture) {\r\n output.push(\" map_Ka \" + uvscale + m.ambientTexture.name);\r\n }\r\n\r\n if (m.diffuseTexture) {\r\n output.push(\" map_Kd \" + uvscale + m.diffuseTexture.name);\r\n //TODO: alpha testing, opacity in diffuse texture alpha channel (diffuseTexture.hasAlpha -> map_d)\r\n }\r\n\r\n if (m.specularTexture) {\r\n output.push(\" map_Ks \" + uvscale + m.specularTexture.name);\r\n /* TODO: glossiness = specular highlight component is in alpha channel of specularTexture. (???)\r\n if (m.useGlossinessFromSpecularMapAlpha) {\r\n output.push(\" map_Ns \"+uvscale + m.specularTexture.name);\r\n }\r\n */\r\n }\r\n\r\n /* TODO: emissive texture not in .MAT format (???)\r\n if (m.emissiveTexture) {\r\n output.push(\" map_d \"+uvscale+m.emissiveTexture.name);\r\n }\r\n */\r\n\r\n if (m.bumpTexture) {\r\n output.push(\" map_bump -imfchan z \" + uvscale + m.bumpTexture.name);\r\n }\r\n\r\n if (m.opacityTexture) {\r\n output.push(\" map_d \" + uvscale + m.opacityTexture.name);\r\n }\r\n\r\n const text = output.join(\"\\n\");\r\n return text;\r\n }\r\n}\r\n","/* eslint-disable import/no-internal-modules */\nimport * as Serializers from \"../OBJ/index\";\n/**\n * This is the entry point for the UMD module.\n * The entry point for a future ESM package should be index.ts\n */\nconst globalObject = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : undefined;\nif (typeof globalObject !== \"undefined\") {\n for (const serializer in Serializers) {\n (<any>globalObject).BABYLON[serializer] = (<any>Serializers)[serializer];\n }\n}\nexport * from \"../OBJ/index\";\n","import * as serializers from \"serializers/legacy/legacy-objSerializer\";\r\nexport { serializers };\r\nexport default serializers;\r\n"],"names":["root","factory","exports","module","require","define","amd","self","global","this","__WEBPACK_EXTERNAL_MODULE__520__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","OBJ","mesh","materials","matlibname","globalposition","output","v","textureV","push","j","length","inverseTransform","transform","computeWorldMatrix","Matrix","invertToRef","bakeTransformIntoVertices","mat","material","id","geometry","trunkVerts","getVerticesData","trunkNormals","trunkUV","trunkFaces","getIndices","currentV","currentTextureV","i","getScene","useRightHandedSystem","indices","String","textureIndices","blanks","facePositions","faceUVs","faceNormals","Tools","join","MTL","m","specularPower","toFixed","alpha","ambientColor","b","diffuseColor","specularColor","emissiveColor","ambientTexture","name","diffuseTexture","specularTexture","bumpTexture","opacityTexture","globalObject","serializer","BABYLON"],"sourceRoot":""}
@@ -1 +1 @@
1
- {"version":3,"file":"babylon.stlSerializer.min.js","mappings":"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","sources":["webpack://SERIALIZERS/webpack/universalModuleDefinition","webpack://SERIALIZERS/external umd {\"root\":\"BABYLON\",\"commonjs\":\"babylonjs\",\"commonjs2\":\"babylonjs\",\"amd\":\"babylonjs\"}","webpack://SERIALIZERS/webpack/bootstrap","webpack://SERIALIZERS/webpack/runtime/define property getters","webpack://SERIALIZERS/webpack/runtime/global","webpack://SERIALIZERS/webpack/runtime/hasOwnProperty shorthand","webpack://SERIALIZERS/webpack/runtime/make namespace object","webpack://SERIALIZERS/../../../lts/serializers/generated/stl/stlSerializer.ts","webpack://SERIALIZERS/../../../lts/serializers/generated/legacy/legacy-stlSerializer.ts","webpack://SERIALIZERS/./src/stl.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"babylonjs\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"babylonjs-serializers\", [\"babylonjs\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"babylonjs-serializers\"] = factory(require(\"babylonjs\"));\n\telse\n\t\troot[\"SERIALIZERS\"] = factory(root[\"BABYLON\"]);\n})((typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : this), (__WEBPACK_EXTERNAL_MODULE__520__) => {\nreturn ","module.exports = __WEBPACK_EXTERNAL_MODULE__520__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Mesh } from \"core/Meshes/mesh\";\r\nimport { InstancedMesh } from \"core/Meshes/instancedMesh\";\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\n\r\n/**\r\n * Class for generating STL data from a Babylon scene.\r\n */\r\nexport class STLExport {\r\n /**\r\n * Exports the geometry of a Mesh array in .STL file format (ASCII)\r\n * @param meshes list defines the mesh to serialize\r\n * @param download triggers the automatic download of the file.\r\n * @param fileName changes the downloads fileName.\r\n * @param binary changes the STL to a binary type.\r\n * @param isLittleEndian toggle for binary type exporter.\r\n * @param doNotBakeTransform toggle if meshes transforms should be baked or not.\r\n * @param supportInstancedMeshes toggle to export instanced Meshes. Enabling support for instanced meshes will override doNoBakeTransform as true\r\n * @returns the STL as UTF8 string\r\n */\r\n public static CreateSTL(\r\n meshes: (Mesh | InstancedMesh)[],\r\n download: boolean = true,\r\n fileName: string = \"stlmesh\",\r\n binary: boolean = false,\r\n isLittleEndian: boolean = true,\r\n doNotBakeTransform: boolean = false,\r\n supportInstancedMeshes: boolean = false\r\n ): any {\r\n //Binary support adapted from https://gist.github.com/paulkaplan/6d5f0ab2c7e8fdc68a61\r\n\r\n const getFaceData = function (indices: any, vertices: any, i: number) {\r\n const id = [indices[i] * 3, indices[i + 1] * 3, indices[i + 2] * 3];\r\n const v = [\r\n new Vector3(vertices[id[0]], vertices[id[0] + 2], vertices[id[0] + 1]),\r\n new Vector3(vertices[id[1]], vertices[id[1] + 2], vertices[id[1] + 1]),\r\n new Vector3(vertices[id[2]], vertices[id[2] + 2], vertices[id[2] + 1]),\r\n ];\r\n const p1p2 = v[0].subtract(v[1]);\r\n const p3p2 = v[2].subtract(v[1]);\r\n const n = Vector3.Cross(p3p2, p1p2).normalize();\r\n\r\n return { v, n };\r\n };\r\n\r\n const writeVector = function (dataview: any, offset: number, vector: Vector3, isLittleEndian: boolean) {\r\n offset = writeFloat(dataview, offset, vector.x, isLittleEndian);\r\n offset = writeFloat(dataview, offset, vector.y, isLittleEndian);\r\n return writeFloat(dataview, offset, vector.z, isLittleEndian);\r\n };\r\n\r\n const writeFloat = function (dataview: any, offset: number, value: number, isLittleEndian: boolean) {\r\n dataview.setFloat32(offset, value, isLittleEndian);\r\n return offset + 4;\r\n };\r\n\r\n const getVerticesData = function (mesh: InstancedMesh | Mesh) {\r\n if (supportInstancedMeshes) {\r\n let sourceMesh = mesh;\r\n if (mesh instanceof InstancedMesh) {\r\n sourceMesh = mesh.sourceMesh;\r\n }\r\n const data = sourceMesh.getVerticesData(VertexBuffer.PositionKind, true, true);\r\n if (!data) return [];\r\n const temp = Vector3.Zero();\r\n let index;\r\n for (index = 0; index < data.length; index += 3) {\r\n Vector3.TransformCoordinatesFromFloatsToRef(data[index], data[index + 1], data[index + 2], mesh.computeWorldMatrix(true), temp).toArray(data, index);\r\n }\r\n return data;\r\n } else {\r\n return mesh.getVerticesData(VertexBuffer.PositionKind) || [];\r\n }\r\n };\r\n\r\n if (supportInstancedMeshes) {\r\n doNotBakeTransform = true;\r\n }\r\n\r\n let data;\r\n\r\n let faceCount = 0;\r\n let offset = 0;\r\n\r\n if (binary) {\r\n for (let i = 0; i < meshes.length; i++) {\r\n const mesh = meshes[i];\r\n const indices = mesh.getIndices();\r\n faceCount += indices ? indices.length / 3 : 0;\r\n }\r\n\r\n const bufferSize = 84 + 50 * faceCount;\r\n const buffer = new ArrayBuffer(bufferSize);\r\n data = new DataView(buffer);\r\n\r\n offset += 80;\r\n data.setUint32(offset, faceCount, isLittleEndian);\r\n offset += 4;\r\n } else {\r\n data = \"solid stlmesh\\r\\n\";\r\n }\r\n\r\n for (let i = 0; i < meshes.length; i++) {\r\n const mesh = meshes[i];\r\n if (!doNotBakeTransform && mesh instanceof Mesh) {\r\n mesh.bakeCurrentTransformIntoVertices();\r\n }\r\n const vertices = getVerticesData(mesh);\r\n const indices = mesh.getIndices() || [];\r\n\r\n for (let i = 0; i < indices.length; i += 3) {\r\n const fd = getFaceData(indices, vertices, i);\r\n\r\n if (binary) {\r\n offset = writeVector(data, offset, fd.n, isLittleEndian);\r\n offset = writeVector(data, offset, fd.v[0], isLittleEndian);\r\n offset = writeVector(data, offset, fd.v[1], isLittleEndian);\r\n offset = writeVector(data, offset, fd.v[2], isLittleEndian);\r\n offset += 2;\r\n } else {\r\n data += \"facet normal \" + fd.n.x + \" \" + fd.n.y + \" \" + fd.n.z + \"\\r\\n\";\r\n data += \"\\touter loop\\r\\n\";\r\n data += \"\\t\\tvertex \" + fd.v[0].x + \" \" + fd.v[0].y + \" \" + fd.v[0].z + \"\\r\\n\";\r\n data += \"\\t\\tvertex \" + fd.v[1].x + \" \" + fd.v[1].y + \" \" + fd.v[1].z + \"\\r\\n\";\r\n data += \"\\t\\tvertex \" + fd.v[2].x + \" \" + fd.v[2].y + \" \" + fd.v[2].z + \"\\r\\n\";\r\n data += \"\\tendloop\\r\\n\";\r\n data += \"endfacet\\r\\n\";\r\n }\r\n }\r\n }\r\n\r\n if (!binary) {\r\n data += \"endsolid stlmesh\";\r\n }\r\n\r\n if (download) {\r\n const a = document.createElement(\"a\");\r\n const blob = new Blob([data], { type: \"application/octet-stream\" });\r\n a.href = window.URL.createObjectURL(blob);\r\n a.download = fileName + \".stl\";\r\n a.click();\r\n }\r\n\r\n return data;\r\n }\r\n}\r\n","/* eslint-disable import/no-internal-modules */\nimport * as Serializers from \"../stl/index\";\n/**\n * This is the entry point for the UMD module.\n * The entry point for a future ESM package should be index.ts\n */\nconst globalObject = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : undefined;\nif (typeof globalObject !== \"undefined\") {\n for (const serializer in Serializers) {\n (<any>globalObject).BABYLON[serializer] = (<any>Serializers)[serializer];\n }\n}\nexport * from \"../stl/index\";\n","import * as serializers from \"serializers/legacy/legacy-stlSerializer\";\r\nexport { serializers };\r\nexport default serializers;\r\n"],"names":["root","factory","exports","module","require","define","amd","self","global","this","__WEBPACK_EXTERNAL_MODULE__520__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","CreateSTL","meshes","download","fileName","binary","isLittleEndian","doNotBakeTransform","supportInstancedMeshes","data","getFaceData","indices","vertices","i","id","v","Vector3","p1p2","subtract","p3p2","n","normalize","writeVector","dataview","offset","vector","writeFloat","x","y","z","setFloat32","getVerticesData","mesh","sourceMesh","InstancedMesh","VertexBuffer","temp","index","length","computeWorldMatrix","toArray","faceCount","getIndices","buffer","ArrayBuffer","DataView","setUint32","Mesh","bakeCurrentTransformIntoVertices","fd","a","document","createElement","blob","Blob","type","href","URL","createObjectURL","click","globalObject","serializer","BABYLON"],"sourceRoot":""}
1
+ {"version":3,"file":"babylon.stlSerializer.min.js","mappings":"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","sources":["webpack://SERIALIZERS/webpack/universalModuleDefinition","webpack://SERIALIZERS/external umd {\"root\":\"BABYLON\",\"commonjs\":\"babylonjs\",\"commonjs2\":\"babylonjs\",\"amd\":\"babylonjs\"}","webpack://SERIALIZERS/webpack/bootstrap","webpack://SERIALIZERS/webpack/runtime/define property getters","webpack://SERIALIZERS/webpack/runtime/global","webpack://SERIALIZERS/webpack/runtime/hasOwnProperty shorthand","webpack://SERIALIZERS/webpack/runtime/make namespace object","webpack://SERIALIZERS/../../../lts/serializers/generated/stl/stlSerializer.ts","webpack://SERIALIZERS/../../../lts/serializers/generated/legacy/legacy-stlSerializer.ts","webpack://SERIALIZERS/./src/stl.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"babylonjs\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"babylonjs-serializers\", [\"babylonjs\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"babylonjs-serializers\"] = factory(require(\"babylonjs\"));\n\telse\n\t\troot[\"SERIALIZERS\"] = factory(root[\"BABYLON\"]);\n})((typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : this), (__WEBPACK_EXTERNAL_MODULE__520__) => {\nreturn ","module.exports = __WEBPACK_EXTERNAL_MODULE__520__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Mesh } from \"core/Meshes/mesh\";\r\nimport { InstancedMesh } from \"core/Meshes/instancedMesh\";\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\n\r\n/**\r\n * Class for generating STL data from a Babylon scene.\r\n */\r\nexport class STLExport {\r\n /**\r\n * Exports the geometry of a Mesh array in .STL file format (ASCII)\r\n * @param meshes list defines the mesh to serialize\r\n * @param download triggers the automatic download of the file.\r\n * @param fileName changes the downloads fileName.\r\n * @param binary changes the STL to a binary type.\r\n * @param isLittleEndian toggle for binary type exporter.\r\n * @param doNotBakeTransform toggle if meshes transforms should be baked or not.\r\n * @param supportInstancedMeshes toggle to export instanced Meshes. Enabling support for instanced meshes will override doNoBakeTransform as true\r\n * @returns the STL as UTF8 string\r\n */\r\n public static CreateSTL(\r\n meshes: (Mesh | InstancedMesh)[],\r\n download: boolean = true,\r\n fileName: string = \"stlmesh\",\r\n binary: boolean = false,\r\n isLittleEndian: boolean = true,\r\n doNotBakeTransform: boolean = false,\r\n supportInstancedMeshes: boolean = false\r\n ): any {\r\n //Binary support adapted from https://gist.github.com/paulkaplan/6d5f0ab2c7e8fdc68a61\r\n\r\n const getFaceData = function (indices: any, vertices: any, i: number) {\r\n const id = [indices[i] * 3, indices[i + 1] * 3, indices[i + 2] * 3];\r\n const v = [\r\n new Vector3(vertices[id[0]], vertices[id[0] + 2], vertices[id[0] + 1]),\r\n new Vector3(vertices[id[1]], vertices[id[1] + 2], vertices[id[1] + 1]),\r\n new Vector3(vertices[id[2]], vertices[id[2] + 2], vertices[id[2] + 1]),\r\n ];\r\n const p1p2 = v[0].subtract(v[1]);\r\n const p3p2 = v[2].subtract(v[1]);\r\n const n = Vector3.Cross(p3p2, p1p2).normalize();\r\n\r\n return { v, n };\r\n };\r\n\r\n const writeVector = function (dataview: any, offset: number, vector: Vector3, isLittleEndian: boolean) {\r\n offset = writeFloat(dataview, offset, vector.x, isLittleEndian);\r\n offset = writeFloat(dataview, offset, vector.y, isLittleEndian);\r\n return writeFloat(dataview, offset, vector.z, isLittleEndian);\r\n };\r\n\r\n const writeFloat = function (dataview: any, offset: number, value: number, isLittleEndian: boolean) {\r\n dataview.setFloat32(offset, value, isLittleEndian);\r\n return offset + 4;\r\n };\r\n\r\n const getVerticesData = function (mesh: InstancedMesh | Mesh) {\r\n if (supportInstancedMeshes) {\r\n let sourceMesh = mesh;\r\n if (mesh instanceof InstancedMesh) {\r\n sourceMesh = mesh.sourceMesh;\r\n }\r\n const data = sourceMesh.getVerticesData(VertexBuffer.PositionKind, true, true);\r\n if (!data) return [];\r\n const temp = Vector3.Zero();\r\n let index;\r\n for (index = 0; index < data.length; index += 3) {\r\n Vector3.TransformCoordinatesFromFloatsToRef(data[index], data[index + 1], data[index + 2], mesh.computeWorldMatrix(true), temp).toArray(data, index);\r\n }\r\n return data;\r\n } else {\r\n return mesh.getVerticesData(VertexBuffer.PositionKind) || [];\r\n }\r\n };\r\n\r\n if (supportInstancedMeshes) {\r\n doNotBakeTransform = true;\r\n }\r\n\r\n let data;\r\n\r\n let faceCount = 0;\r\n let offset = 0;\r\n\r\n if (binary) {\r\n for (let i = 0; i < meshes.length; i++) {\r\n const mesh = meshes[i];\r\n const indices = mesh.getIndices();\r\n faceCount += indices ? indices.length / 3 : 0;\r\n }\r\n\r\n const bufferSize = 84 + 50 * faceCount;\r\n const buffer = new ArrayBuffer(bufferSize);\r\n data = new DataView(buffer);\r\n\r\n offset += 80;\r\n data.setUint32(offset, faceCount, isLittleEndian);\r\n offset += 4;\r\n } else {\r\n data = \"solid stlmesh\\r\\n\";\r\n }\r\n\r\n for (let i = 0; i < meshes.length; i++) {\r\n const mesh = meshes[i];\r\n if (!doNotBakeTransform && mesh instanceof Mesh) {\r\n mesh.bakeCurrentTransformIntoVertices();\r\n }\r\n const vertices = getVerticesData(mesh);\r\n const indices = mesh.getIndices() || [];\r\n\r\n for (let i = 0; i < indices.length; i += 3) {\r\n const fd = getFaceData(indices, vertices, i);\r\n\r\n if (binary) {\r\n offset = writeVector(data, offset, fd.n, isLittleEndian);\r\n offset = writeVector(data, offset, fd.v[0], isLittleEndian);\r\n offset = writeVector(data, offset, fd.v[1], isLittleEndian);\r\n offset = writeVector(data, offset, fd.v[2], isLittleEndian);\r\n offset += 2;\r\n } else {\r\n data += \"facet normal \" + fd.n.x + \" \" + fd.n.y + \" \" + fd.n.z + \"\\r\\n\";\r\n data += \"\\touter loop\\r\\n\";\r\n data += \"\\t\\tvertex \" + fd.v[0].x + \" \" + fd.v[0].y + \" \" + fd.v[0].z + \"\\r\\n\";\r\n data += \"\\t\\tvertex \" + fd.v[1].x + \" \" + fd.v[1].y + \" \" + fd.v[1].z + \"\\r\\n\";\r\n data += \"\\t\\tvertex \" + fd.v[2].x + \" \" + fd.v[2].y + \" \" + fd.v[2].z + \"\\r\\n\";\r\n data += \"\\tendloop\\r\\n\";\r\n data += \"endfacet\\r\\n\";\r\n }\r\n }\r\n }\r\n\r\n if (!binary) {\r\n data += \"endsolid stlmesh\";\r\n }\r\n\r\n if (download) {\r\n const a = document.createElement(\"a\");\r\n const blob = new Blob([data], { type: \"application/octet-stream\" });\r\n a.href = window.URL.createObjectURL(blob);\r\n a.download = fileName + \".stl\";\r\n a.click();\r\n }\r\n\r\n return data;\r\n }\r\n}\r\n","/* eslint-disable import/no-internal-modules */\nimport * as Serializers from \"../stl/index\";\n/**\n * This is the entry point for the UMD module.\n * The entry point for a future ESM package should be index.ts\n */\nconst globalObject = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : undefined;\nif (typeof globalObject !== \"undefined\") {\n for (const serializer in Serializers) {\n (<any>globalObject).BABYLON[serializer] = (<any>Serializers)[serializer];\n }\n}\nexport * from \"../stl/index\";\n","import * as serializers from \"serializers/legacy/legacy-stlSerializer\";\r\nexport { serializers };\r\nexport default serializers;\r\n"],"names":["root","factory","exports","module","require","define","amd","self","global","this","__WEBPACK_EXTERNAL_MODULE__520__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","CreateSTL","meshes","download","fileName","binary","isLittleEndian","doNotBakeTransform","supportInstancedMeshes","data","getFaceData","indices","vertices","i","id","v","Vector3","p1p2","subtract","p3p2","n","normalize","writeVector","dataview","offset","vector","writeFloat","x","y","z","setFloat32","getVerticesData","mesh","sourceMesh","InstancedMesh","VertexBuffer","temp","index","length","computeWorldMatrix","toArray","faceCount","getIndices","buffer","ArrayBuffer","DataView","setUint32","Mesh","bakeCurrentTransformIntoVertices","fd","a","document","createElement","blob","Blob","type","href","URL","createObjectURL","click","globalObject","serializer","BABYLON"],"sourceRoot":""}
@@ -31,6 +31,7 @@ __webpack_require__.r(__webpack_exports__);
31
31
  /* harmony export */ "__classPrivateFieldSet": () => (/* binding */ __classPrivateFieldSet),
32
32
  /* harmony export */ "__createBinding": () => (/* binding */ __createBinding),
33
33
  /* harmony export */ "__decorate": () => (/* binding */ __decorate),
34
+ /* harmony export */ "__esDecorate": () => (/* binding */ __esDecorate),
34
35
  /* harmony export */ "__exportStar": () => (/* binding */ __exportStar),
35
36
  /* harmony export */ "__extends": () => (/* binding */ __extends),
36
37
  /* harmony export */ "__generator": () => (/* binding */ __generator),
@@ -39,8 +40,11 @@ __webpack_require__.r(__webpack_exports__);
39
40
  /* harmony export */ "__makeTemplateObject": () => (/* binding */ __makeTemplateObject),
40
41
  /* harmony export */ "__metadata": () => (/* binding */ __metadata),
41
42
  /* harmony export */ "__param": () => (/* binding */ __param),
43
+ /* harmony export */ "__propKey": () => (/* binding */ __propKey),
42
44
  /* harmony export */ "__read": () => (/* binding */ __read),
43
45
  /* harmony export */ "__rest": () => (/* binding */ __rest),
46
+ /* harmony export */ "__runInitializers": () => (/* binding */ __runInitializers),
47
+ /* harmony export */ "__setFunctionName": () => (/* binding */ __setFunctionName),
44
48
  /* harmony export */ "__spread": () => (/* binding */ __spread),
45
49
  /* harmony export */ "__spreadArray": () => (/* binding */ __spreadArray),
46
50
  /* harmony export */ "__spreadArrays": () => (/* binding */ __spreadArrays),
@@ -111,6 +115,51 @@ function __param(paramIndex, decorator) {
111
115
  return function (target, key) { decorator(target, key, paramIndex); }
112
116
  }
113
117
 
118
+ function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
119
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
120
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
121
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
122
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
123
+ var _, done = false;
124
+ for (var i = decorators.length - 1; i >= 0; i--) {
125
+ var context = {};
126
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
127
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
128
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
129
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
130
+ if (kind === "accessor") {
131
+ if (result === void 0) continue;
132
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
133
+ if (_ = accept(result.get)) descriptor.get = _;
134
+ if (_ = accept(result.set)) descriptor.set = _;
135
+ if (_ = accept(result.init)) initializers.push(_);
136
+ }
137
+ else if (_ = accept(result)) {
138
+ if (kind === "field") initializers.push(_);
139
+ else descriptor[key] = _;
140
+ }
141
+ }
142
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
143
+ done = true;
144
+ };
145
+
146
+ function __runInitializers(thisArg, initializers, value) {
147
+ var useValue = arguments.length > 2;
148
+ for (var i = 0; i < initializers.length; i++) {
149
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
150
+ }
151
+ return useValue ? value : void 0;
152
+ };
153
+
154
+ function __propKey(x) {
155
+ return typeof x === "symbol" ? x : "".concat(x);
156
+ };
157
+
158
+ function __setFunctionName(f, name, prefix) {
159
+ if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
160
+ return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
161
+ };
162
+
114
163
  function __metadata(metadataKey, metadataValue) {
115
164
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
116
165
  }
@@ -243,7 +292,7 @@ function __asyncGenerator(thisArg, _arguments, generator) {
243
292
  function __asyncDelegator(o) {
244
293
  var i, p;
245
294
  return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
246
- function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
295
+ function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
247
296
  }
248
297
 
249
298
  function __asyncValues(o) {