babylonjs-serializers 6.4.1 → 6.5.0

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.
@@ -87,9 +87,10 @@ var STLExport = /** @class */ (function () {
87
87
  * @param isLittleEndian toggle for binary type exporter.
88
88
  * @param doNotBakeTransform toggle if meshes transforms should be baked or not.
89
89
  * @param supportInstancedMeshes toggle to export instanced Meshes. Enabling support for instanced meshes will override doNoBakeTransform as true
90
+ * @param exportIndividualMeshes toggle to export each mesh as an independent mesh. By default, all the meshes are combined into one mesh. This property has no effect when exporting in binary format
90
91
  * @returns the STL as UTF8 string
91
92
  */
92
- STLExport.CreateSTL = function (meshes, download, fileName, binary, isLittleEndian, doNotBakeTransform, supportInstancedMeshes) {
93
+ STLExport.CreateSTL = function (meshes, download, fileName, binary, isLittleEndian, doNotBakeTransform, supportInstancedMeshes, exportIndividualMeshes) {
93
94
  //Binary support adapted from https://gist.github.com/paulkaplan/6d5f0ab2c7e8fdc68a61
94
95
  if (download === void 0) { download = true; }
95
96
  if (fileName === void 0) { fileName = "stlmesh"; }
@@ -97,6 +98,7 @@ var STLExport = /** @class */ (function () {
97
98
  if (isLittleEndian === void 0) { isLittleEndian = true; }
98
99
  if (doNotBakeTransform === void 0) { doNotBakeTransform = false; }
99
100
  if (supportInstancedMeshes === void 0) { supportInstancedMeshes = false; }
101
+ if (exportIndividualMeshes === void 0) { exportIndividualMeshes = false; }
100
102
  var getFaceData = function (indices, vertices, i) {
101
103
  var id = [indices[i] * 3, indices[i + 1] * 3, indices[i + 2] * 3];
102
104
  var v = [
@@ -141,7 +143,7 @@ var STLExport = /** @class */ (function () {
141
143
  if (supportInstancedMeshes) {
142
144
  doNotBakeTransform = true;
143
145
  }
144
- var data;
146
+ var data = "";
145
147
  var faceCount = 0;
146
148
  var offset = 0;
147
149
  if (binary) {
@@ -158,10 +160,15 @@ var STLExport = /** @class */ (function () {
158
160
  offset += 4;
159
161
  }
160
162
  else {
161
- data = "solid stlmesh\r\n";
163
+ if (!exportIndividualMeshes) {
164
+ data = "solid stlmesh\r\n";
165
+ }
162
166
  }
163
167
  for (var i = 0; i < meshes.length; i++) {
164
168
  var mesh = meshes[i];
169
+ if (!binary && exportIndividualMeshes) {
170
+ data += "solid " + mesh.name + "\r\n";
171
+ }
165
172
  if (!doNotBakeTransform && mesh instanceof core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Mesh) {
166
173
  mesh.bakeCurrentTransformIntoVertices();
167
174
  }
@@ -177,17 +184,20 @@ var STLExport = /** @class */ (function () {
177
184
  offset += 2;
178
185
  }
179
186
  else {
180
- data += "facet normal " + fd.n.x + " " + fd.n.y + " " + fd.n.z + "\r\n";
181
- data += "\touter loop\r\n";
182
- data += "\t\tvertex " + fd.v[0].x + " " + fd.v[0].y + " " + fd.v[0].z + "\r\n";
183
- data += "\t\tvertex " + fd.v[1].x + " " + fd.v[1].y + " " + fd.v[1].z + "\r\n";
184
- data += "\t\tvertex " + fd.v[2].x + " " + fd.v[2].y + " " + fd.v[2].z + "\r\n";
185
- data += "\tendloop\r\n";
186
- data += "endfacet\r\n";
187
+ data += "\tfacet normal " + fd.n.x + " " + fd.n.y + " " + fd.n.z + "\r\n";
188
+ data += "\t\touter loop\r\n";
189
+ data += "\t\t\tvertex " + fd.v[0].x + " " + fd.v[0].y + " " + fd.v[0].z + "\r\n";
190
+ data += "\t\t\tvertex " + fd.v[1].x + " " + fd.v[1].y + " " + fd.v[1].z + "\r\n";
191
+ data += "\t\t\tvertex " + fd.v[2].x + " " + fd.v[2].y + " " + fd.v[2].z + "\r\n";
192
+ data += "\t\tendloop\r\n";
193
+ data += "\tendfacet\r\n";
187
194
  }
188
195
  }
196
+ if (!binary && exportIndividualMeshes) {
197
+ data += "endsolid " + name + "\r\n";
198
+ }
189
199
  }
190
- if (!binary) {
200
+ if (!binary && !exportIndividualMeshes) {
191
201
  data += "endsolid stlmesh";
192
202
  }
193
203
  if (download) {
@@ -1 +1 @@
1
- {"version":3,"file":"babylon.stlSerializer.js","mappings":"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","sources":["webpack://SERIALIZERS/webpack/universalModuleDefinition","webpack://SERIALIZERS/../../../lts/serializers/generated/legacy/legacy-stlSerializer.ts","webpack://SERIALIZERS/../../../lts/serializers/generated/stl/index.ts","webpack://SERIALIZERS/../../../lts/serializers/generated/stl/stlSerializer.ts","webpack://SERIALIZERS/external umd {\"root\":\"BABYLON\",\"commonjs\":\"babylonjs\",\"commonjs2\":\"babylonjs\",\"amd\":\"babylonjs\"}","webpack://SERIALIZERS/webpack/bootstrap","webpack://SERIALIZERS/webpack/runtime/compat get default export","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/./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_core_Maths_math_vector__) => {\nreturn ","/* 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","export * from \"./stlSerializer\";\r\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","module.exports = __WEBPACK_EXTERNAL_MODULE_core_Maths_math_vector__;","// 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","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\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 * as serializers from \"serializers/legacy/legacy-stlSerializer\";\r\nexport { serializers };\r\nexport default serializers;\r\n"],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"babylon.stlSerializer.js","mappings":"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","sources":["webpack://SERIALIZERS/webpack/universalModuleDefinition","webpack://SERIALIZERS/../../../lts/serializers/generated/legacy/legacy-stlSerializer.ts","webpack://SERIALIZERS/../../../lts/serializers/generated/stl/index.ts","webpack://SERIALIZERS/../../../lts/serializers/generated/stl/stlSerializer.ts","webpack://SERIALIZERS/external umd {\"root\":\"BABYLON\",\"commonjs\":\"babylonjs\",\"commonjs2\":\"babylonjs\",\"amd\":\"babylonjs\"}","webpack://SERIALIZERS/webpack/bootstrap","webpack://SERIALIZERS/webpack/runtime/compat get default export","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/./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_core_Maths_math_vector__) => {\nreturn ","/* 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","export * from \"./stlSerializer\";\r\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 * @param exportIndividualMeshes toggle to export each mesh as an independent mesh. By default, all the meshes are combined into one mesh. This property has no effect when exporting in binary format\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 exportIndividualMeshes: 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: DataView | string = \"\";\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 if (!exportIndividualMeshes) {\r\n data = \"solid stlmesh\\r\\n\";\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 (!binary && exportIndividualMeshes) {\r\n data += \"solid \" + mesh.name + \"\\r\\n\";\r\n }\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 += \"\\tfacet normal \" + fd.n.x + \" \" + fd.n.y + \" \" + fd.n.z + \"\\r\\n\";\r\n data += \"\\t\\touter loop\\r\\n\";\r\n data += \"\\t\\t\\tvertex \" + fd.v[0].x + \" \" + fd.v[0].y + \" \" + fd.v[0].z + \"\\r\\n\";\r\n data += \"\\t\\t\\tvertex \" + fd.v[1].x + \" \" + fd.v[1].y + \" \" + fd.v[1].z + \"\\r\\n\";\r\n data += \"\\t\\t\\tvertex \" + fd.v[2].x + \" \" + fd.v[2].y + \" \" + fd.v[2].z + \"\\r\\n\";\r\n data += \"\\t\\tendloop\\r\\n\";\r\n data += \"\\tendfacet\\r\\n\";\r\n }\r\n }\r\n if (!binary && exportIndividualMeshes) {\r\n data += \"endsolid \" + name + \"\\r\\n\";\r\n }\r\n }\r\n\r\n if (!binary && !exportIndividualMeshes) {\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","module.exports = __WEBPACK_EXTERNAL_MODULE_core_Maths_math_vector__;","// 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","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\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 * as serializers from \"serializers/legacy/legacy-stlSerializer\";\r\nexport { serializers };\r\nexport default serializers;\r\n"],"names":[],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("babylonjs")):"function"==typeof define&&define.amd?define("babylonjs-serializers",["babylonjs"],t):"object"==typeof exports?exports["babylonjs-serializers"]=t(require("babylonjs")):e.SERIALIZERS=t(e.BABYLON)}("undefined"!=typeof self?self:"undefined"!=typeof global?global:this,(e=>(()=>{"use strict";var t={520:t=>{t.exports=e}},r={};function o(e){var n=r[e];if(void 0!==n)return n.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,o),i.exports}o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{o.d(n,{default:()=>f});var e={};o.r(e),o.d(e,{STLExport:()=>i});var t={};o.r(t),o.d(t,{STLExport:()=>i});var r=o(520),i=function(){function e(){}return e.CreateSTL=function(e,t,o,n,i,a,s){void 0===t&&(t=!0),void 0===o&&(o="stlmesh"),void 0===n&&(n=!1),void 0===i&&(i=!0),void 0===a&&(a=!1),void 0===s&&(s=!1);var f,d=function(e,t,o){var n=[3*e[o],3*e[o+1],3*e[o+2]],i=[new r.Vector3(t[n[0]],t[n[0]+2],t[n[0]+1]),new r.Vector3(t[n[1]],t[n[1]+2],t[n[1]+1]),new r.Vector3(t[n[2]],t[n[2]+2],t[n[2]+1])],a=i[0].subtract(i[1]),s=i[2].subtract(i[1]);return{v:i,n:r.Vector3.Cross(s,a).normalize()}},l=function(e,t,r,o){return t=c(e,t,r.x,o),t=c(e,t,r.y,o),c(e,t,r.z,o)},c=function(e,t,r,o){return e.setFloat32(t,r,o),t+4},u=function(e){if(s){var t=e;e instanceof r.InstancedMesh&&(t=e.sourceMesh);var o=t.getVerticesData(r.VertexBuffer.PositionKind,!0,!0);if(!o)return[];var n=r.Vector3.Zero(),i=void 0;for(i=0;i<o.length;i+=3)r.Vector3.TransformCoordinatesFromFloatsToRef(o[i],o[i+1],o[i+2],e.computeWorldMatrix(!0),n).toArray(o,i);return o}return e.getVerticesData(r.VertexBuffer.PositionKind)||[]};s&&(a=!0);var v=0,p=0;if(n){for(var b=0;b<e.length;b++)v+=(w=(x=e[b]).getIndices())?w.length/3:0;var y=new ArrayBuffer(84+50*v);p+=80,(f=new DataView(y)).setUint32(p,v,i),p+=4}else f="solid stlmesh\r\n";for(b=0;b<e.length;b++){var x=e[b];!a&&x instanceof r.Mesh&&x.bakeCurrentTransformIntoVertices();for(var g=u(x),w=x.getIndices()||[],h=0;h<w.length;h+=3){var m=d(w,g,h);n?(p=l(f,p,m.n,i),p=l(f,p,m.v[0],i),p=l(f,p,m.v[1],i),p=l(f,p,m.v[2],i),p+=2):(f+="facet normal "+m.n.x+" "+m.n.y+" "+m.n.z+"\r\n",f+="\touter loop\r\n",f+="\t\tvertex "+m.v[0].x+" "+m.v[0].y+" "+m.v[0].z+"\r\n",f+="\t\tvertex "+m.v[1].x+" "+m.v[1].y+" "+m.v[1].z+"\r\n",f+="\t\tvertex "+m.v[2].x+" "+m.v[2].y+" "+m.v[2].z+"\r\n",f+="\tendloop\r\n",f+="endfacet\r\n")}}if(n||(f+="endsolid stlmesh"),t){var j=document.createElement("a"),V=new Blob([f],{type:"application/octet-stream"});j.href=window.URL.createObjectURL(V),j.download=o+".stl",j.click()}return f},e}(),a=void 0!==o.g?o.g:"undefined"!=typeof window?window:void 0;if(void 0!==a)for(var s in e)a.BABYLON[s]=e[s];const f=t})(),n.default})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("babylonjs")):"function"==typeof define&&define.amd?define("babylonjs-serializers",["babylonjs"],t):"object"==typeof exports?exports["babylonjs-serializers"]=t(require("babylonjs")):e.SERIALIZERS=t(e.BABYLON)}("undefined"!=typeof self?self:"undefined"!=typeof global?global:this,(e=>(()=>{"use strict";var t={520:t=>{t.exports=e}},r={};function o(e){var n=r[e];if(void 0!==n)return n.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,o),i.exports}o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{o.d(n,{default:()=>f});var e={};o.r(e),o.d(e,{STLExport:()=>i});var t={};o.r(t),o.d(t,{STLExport:()=>i});var r=o(520),i=function(){function e(){}return e.CreateSTL=function(e,t,o,n,i,a,s,f){void 0===t&&(t=!0),void 0===o&&(o="stlmesh"),void 0===n&&(n=!1),void 0===i&&(i=!0),void 0===a&&(a=!1),void 0===s&&(s=!1),void 0===f&&(f=!1);var d=function(e,t,o){var n=[3*e[o],3*e[o+1],3*e[o+2]],i=[new r.Vector3(t[n[0]],t[n[0]+2],t[n[0]+1]),new r.Vector3(t[n[1]],t[n[1]+2],t[n[1]+1]),new r.Vector3(t[n[2]],t[n[2]+2],t[n[2]+1])],a=i[0].subtract(i[1]),s=i[2].subtract(i[1]);return{v:i,n:r.Vector3.Cross(s,a).normalize()}},l=function(e,t,r,o){return t=c(e,t,r.x,o),t=c(e,t,r.y,o),c(e,t,r.z,o)},c=function(e,t,r,o){return e.setFloat32(t,r,o),t+4},u=function(e){if(s){var t=e;e instanceof r.InstancedMesh&&(t=e.sourceMesh);var o=t.getVerticesData(r.VertexBuffer.PositionKind,!0,!0);if(!o)return[];var n=r.Vector3.Zero(),i=void 0;for(i=0;i<o.length;i+=3)r.Vector3.TransformCoordinatesFromFloatsToRef(o[i],o[i+1],o[i+2],e.computeWorldMatrix(!0),n).toArray(o,i);return o}return e.getVerticesData(r.VertexBuffer.PositionKind)||[]};s&&(a=!0);var v="",p=0,b=0;if(n){for(var y=0;y<e.length;y++)p+=(w=(g=e[y]).getIndices())?w.length/3:0;var x=new ArrayBuffer(84+50*p);b+=80,(v=new DataView(x)).setUint32(b,p,i),b+=4}else f||(v="solid stlmesh\r\n");for(y=0;y<e.length;y++){var g=e[y];!n&&f&&(v+="solid "+g.name+"\r\n"),!a&&g instanceof r.Mesh&&g.bakeCurrentTransformIntoVertices();for(var m=u(g),w=g.getIndices()||[],h=0;h<w.length;h+=3){var j=d(w,m,h);n?(b=l(v,b,j.n,i),b=l(v,b,j.v[0],i),b=l(v,b,j.v[1],i),b=l(v,b,j.v[2],i),b+=2):(v+="\tfacet normal "+j.n.x+" "+j.n.y+" "+j.n.z+"\r\n",v+="\t\touter loop\r\n",v+="\t\t\tvertex "+j.v[0].x+" "+j.v[0].y+" "+j.v[0].z+"\r\n",v+="\t\t\tvertex "+j.v[1].x+" "+j.v[1].y+" "+j.v[1].z+"\r\n",v+="\t\t\tvertex "+j.v[2].x+" "+j.v[2].y+" "+j.v[2].z+"\r\n",v+="\t\tendloop\r\n",v+="\tendfacet\r\n")}!n&&f&&(v+="endsolid "+name+"\r\n")}if(n||f||(v+="endsolid stlmesh"),t){var V=document.createElement("a"),S=new Blob([v],{type:"application/octet-stream"});V.href=window.URL.createObjectURL(S),V.download=o+".stl",V.click()}return v},e}(),a=void 0!==o.g?o.g:"undefined"!=typeof window?window:void 0;if(void 0!==a)for(var s in e)a.BABYLON[s]=e[s];const f=t})(),n.default})()));
2
2
  //# sourceMappingURL=babylon.stlSerializer.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"babylon.stlSerializer.min.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,EAAQG,QAAQ,cACR,mBAAXC,QAAyBA,OAAOC,IAC9CD,OAAO,wBAAyB,CAAC,aAAcJ,GACrB,iBAAZC,QACdA,QAAQ,yBAA2BD,EAAQG,QAAQ,cAEnDJ,EAAkB,YAAIC,EAAQD,EAAc,QAC7C,CATD,CASoB,oBAATO,KAAuBA,KAAyB,oBAAXC,OAAyBA,OAASC,MAAQC,G,kCCT1FP,EAAOD,QAAUQ,C,GCCbC,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaZ,QAGrB,IAAIC,EAASQ,EAAyBE,GAAY,CAGjDX,QAAS,CAAC,GAOX,OAHAc,EAAoBH,GAAUV,EAAQA,EAAOD,QAASU,GAG/CT,EAAOD,OACf,CCrBAU,EAAoBK,EAAI,CAACf,EAASgB,KACjC,IAAI,IAAIC,KAAOD,EACXN,EAAoBQ,EAAEF,EAAYC,KAASP,EAAoBQ,EAAElB,EAASiB,IAC5EE,OAAOC,eAAepB,EAASiB,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDP,EAAoBa,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOjB,MAAQ,IAAIkB,SAAS,cAAb,EAChB,CAAE,MAAOC,GACR,GAAsB,iBAAXC,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBjB,EAAoBQ,EAAI,CAACU,EAAKC,IAAUV,OAAOW,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFnB,EAAoBuB,EAAKjC,IACH,oBAAXkC,QAA0BA,OAAOC,aAC1ChB,OAAOC,eAAepB,EAASkC,OAAOC,YAAa,CAAEC,MAAO,WAE7DjB,OAAOC,eAAepB,EAAS,aAAc,CAAEoC,OAAO,GAAO,E,2ICG9D,0BAyIA,QA7HkB,EAAAC,UAAd,SACIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,QALA,IAAAL,IAAAA,GAAA,QACA,IAAAC,IAAAA,EAAA,gBACA,IAAAC,IAAAA,GAAA,QACA,IAAAC,IAAAA,GAAA,QACA,IAAAC,IAAAA,GAAA,QACA,IAAAC,IAAAA,GAAA,GAIA,IAgDIC,EAhDEC,EAAc,SAAUC,EAAcC,EAAeC,GACvD,IAAMC,EAAK,CAAc,EAAbH,EAAQE,GAAyB,EAAjBF,EAAQE,EAAI,GAAyB,EAAjBF,EAAQE,EAAI,IACtDE,EAAI,CACN,IAAI,EAAAC,QAAQJ,EAASE,EAAG,IAAKF,EAASE,EAAG,GAAK,GAAIF,EAASE,EAAG,GAAK,IACnE,IAAI,EAAAE,QAAQJ,EAASE,EAAG,IAAKF,EAASE,EAAG,GAAK,GAAIF,EAASE,EAAG,GAAK,IACnE,IAAI,EAAAE,QAAQJ,EAASE,EAAG,IAAKF,EAASE,EAAG,GAAK,GAAIF,EAASE,EAAG,GAAK,KAEjEG,EAAOF,EAAE,GAAGG,SAASH,EAAE,IACvBI,EAAOJ,EAAE,GAAGG,SAASH,EAAE,IAG7B,MAAO,CAAEA,EAAC,EAAEK,EAFF,EAAAJ,QAAA,MAAcG,EAAMF,GAAMI,YAGxC,EAEMC,EAAc,SAAUC,EAAeC,EAAgBC,EAAiBnB,GAG1E,OAFAkB,EAASE,EAAWH,EAAUC,EAAQC,EAAOE,EAAGrB,GAChDkB,EAASE,EAAWH,EAAUC,EAAQC,EAAOG,EAAGtB,GACzCoB,EAAWH,EAAUC,EAAQC,EAAOI,EAAGvB,EAClD,EAEMoB,EAAa,SAAUH,EAAeC,EAAgBxB,EAAeM,GAEvE,OADAiB,EAASO,WAAWN,EAAQxB,EAAOM,GAC5BkB,EAAS,CACpB,EAEMO,EAAkB,SAAUC,GAC9B,GAAIxB,EAAwB,CACxB,IAAIyB,EAAaD,EACbA,aAAgB,EAAAE,gBAChBD,EAAaD,EAAKC,YAEtB,IAAM,EAAOA,EAAWF,gBAAgB,EAAAI,aAAA,cAA2B,GAAM,GACzE,IAAK,EAAM,MAAO,GAClB,IAAMC,EAAO,EAAApB,QAAA,OACTqB,OAAK,EACT,IAAKA,EAAQ,EAAGA,EAAQ,EAAKC,OAAQD,GAAS,EAC1C,EAAArB,QAAA,oCAA4C,EAAKqB,GAAQ,EAAKA,EAAQ,GAAI,EAAKA,EAAQ,GAAIL,EAAKO,oBAAmB,GAAOH,GAAMI,QAAQ,EAAMH,GAElJ,OAAO,C,CAEP,OAAOL,EAAKD,gBAAgB,EAAAI,aAAA,eAA8B,EAElE,EAEI3B,IACAD,GAAqB,GAKzB,IAAIkC,EAAY,EACZjB,EAAS,EAEb,GAAInB,EAAQ,CACR,IAAK,IAAIQ,EAAI,EAAGA,EAAIX,EAAOoC,OAAQzB,IAG/B4B,IADM9B,GADAqB,EAAO9B,EAAOW,IACC6B,cACE/B,EAAQ2B,OAAS,EAAI,EAGhD,IACMK,EAAS,IAAIC,YADA,GAAK,GAAKH,GAI7BjB,GAAU,IAFVf,EAAO,IAAIoC,SAASF,IAGfG,UAAUtB,EAAQiB,EAAWnC,GAClCkB,GAAU,C,MAEVf,EAAO,oBAGX,IAASI,EAAI,EAAGA,EAAIX,EAAOoC,OAAQzB,IAAK,CACpC,IAAMmB,EAAO9B,EAAOW,IACfN,GAAsByB,aAAgB,EAAAe,MACvCf,EAAKgB,mCAKT,IAHA,IAAMpC,EAAWmB,EAAgBC,GAC3BrB,EAAUqB,EAAKU,cAAgB,GAE5B,EAAI,EAAG,EAAI/B,EAAQ2B,OAAQ,GAAK,EAAG,CACxC,IAAMW,EAAKvC,EAAYC,EAASC,EAAU,GAEtCP,GACAmB,EAASF,EAAYb,EAAMe,EAAQyB,EAAG7B,EAAGd,GACzCkB,EAASF,EAAYb,EAAMe,EAAQyB,EAAGlC,EAAE,GAAIT,GAC5CkB,EAASF,EAAYb,EAAMe,EAAQyB,EAAGlC,EAAE,GAAIT,GAC5CkB,EAASF,EAAYb,EAAMe,EAAQyB,EAAGlC,EAAE,GAAIT,GAC5CkB,GAAU,IAEVf,GAAQ,gBAAkBwC,EAAG7B,EAAEO,EAAI,IAAMsB,EAAG7B,EAAEQ,EAAI,IAAMqB,EAAG7B,EAAES,EAAI,OACjEpB,GAAQ,mBACRA,GAAQ,cAAgBwC,EAAGlC,EAAE,GAAGY,EAAI,IAAMsB,EAAGlC,EAAE,GAAGa,EAAI,IAAMqB,EAAGlC,EAAE,GAAGc,EAAI,OACxEpB,GAAQ,cAAgBwC,EAAGlC,EAAE,GAAGY,EAAI,IAAMsB,EAAGlC,EAAE,GAAGa,EAAI,IAAMqB,EAAGlC,EAAE,GAAGc,EAAI,OACxEpB,GAAQ,cAAgBwC,EAAGlC,EAAE,GAAGY,EAAI,IAAMsB,EAAGlC,EAAE,GAAGa,EAAI,IAAMqB,EAAGlC,EAAE,GAAGc,EAAI,OACxEpB,GAAQ,gBACRA,GAAQ,e,EASpB,GAJKJ,IACDI,GAAQ,oBAGRN,EAAU,CACV,IAAM+C,EAAIC,SAASC,cAAc,KAC3BC,EAAO,IAAIC,KAAK,CAAC7C,GAAO,CAAE8C,KAAM,6BACtCL,EAAEM,KAAOjE,OAAOkE,IAAIC,gBAAgBL,GACpCH,EAAE/C,SAAWC,EAAW,OACxB8C,EAAES,O,CAGN,OAAOlD,CACX,EACJ,EAzIA,GCFMmD,OAAiC,IAAX,EAAAzE,EAAyB,EAAAA,EAA2B,oBAAXI,OAAyBA,YAASd,EACvG,QAA4B,IAAjBmF,EACP,IAAK,IAAMC,KAAc,EACfD,EAAcE,QAAQD,GAAoB,EAAaA,GCPrE,S","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 * @param exportIndividualMeshes toggle to export each mesh as an independent mesh. By default, all the meshes are combined into one mesh. This property has no effect when exporting in binary format\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 exportIndividualMeshes: 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: DataView | string = \"\";\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 if (!exportIndividualMeshes) {\r\n data = \"solid stlmesh\\r\\n\";\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 (!binary && exportIndividualMeshes) {\r\n data += \"solid \" + mesh.name + \"\\r\\n\";\r\n }\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 += \"\\tfacet normal \" + fd.n.x + \" \" + fd.n.y + \" \" + fd.n.z + \"\\r\\n\";\r\n data += \"\\t\\touter loop\\r\\n\";\r\n data += \"\\t\\t\\tvertex \" + fd.v[0].x + \" \" + fd.v[0].y + \" \" + fd.v[0].z + \"\\r\\n\";\r\n data += \"\\t\\t\\tvertex \" + fd.v[1].x + \" \" + fd.v[1].y + \" \" + fd.v[1].z + \"\\r\\n\";\r\n data += \"\\t\\t\\tvertex \" + fd.v[2].x + \" \" + fd.v[2].y + \" \" + fd.v[2].z + \"\\r\\n\";\r\n data += \"\\t\\tendloop\\r\\n\";\r\n data += \"\\tendfacet\\r\\n\";\r\n }\r\n }\r\n if (!binary && exportIndividualMeshes) {\r\n data += \"endsolid \" + name + \"\\r\\n\";\r\n }\r\n }\r\n\r\n if (!binary && !exportIndividualMeshes) {\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","exportIndividualMeshes","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","data","faceCount","getIndices","buffer","ArrayBuffer","DataView","setUint32","name","Mesh","bakeCurrentTransformIntoVertices","fd","a","document","createElement","blob","Blob","type","href","URL","createObjectURL","click","globalObject","serializer","BABYLON"],"sourceRoot":""}
@@ -1438,9 +1438,10 @@ declare module BABYLON {
1438
1438
  * @param isLittleEndian toggle for binary type exporter.
1439
1439
  * @param doNotBakeTransform toggle if meshes transforms should be baked or not.
1440
1440
  * @param supportInstancedMeshes toggle to export instanced Meshes. Enabling support for instanced meshes will override doNoBakeTransform as true
1441
+ * @param exportIndividualMeshes toggle to export each mesh as an independent mesh. By default, all the meshes are combined into one mesh. This property has no effect when exporting in binary format
1441
1442
  * @returns the STL as UTF8 string
1442
1443
  */
1443
- static CreateSTL(meshes: (Mesh | InstancedMesh)[], download?: boolean, fileName?: string, binary?: boolean, isLittleEndian?: boolean, doNotBakeTransform?: boolean, supportInstancedMeshes?: boolean): any;
1444
+ static CreateSTL(meshes: (Mesh | InstancedMesh)[], download?: boolean, fileName?: string, binary?: boolean, isLittleEndian?: boolean, doNotBakeTransform?: boolean, supportInstancedMeshes?: boolean, exportIndividualMeshes?: boolean): any;
1444
1445
  }
1445
1446
 
1446
1447
 
@@ -6593,9 +6593,10 @@ var STLExport = /** @class */ (function () {
6593
6593
  * @param isLittleEndian toggle for binary type exporter.
6594
6594
  * @param doNotBakeTransform toggle if meshes transforms should be baked or not.
6595
6595
  * @param supportInstancedMeshes toggle to export instanced Meshes. Enabling support for instanced meshes will override doNoBakeTransform as true
6596
+ * @param exportIndividualMeshes toggle to export each mesh as an independent mesh. By default, all the meshes are combined into one mesh. This property has no effect when exporting in binary format
6596
6597
  * @returns the STL as UTF8 string
6597
6598
  */
6598
- STLExport.CreateSTL = function (meshes, download, fileName, binary, isLittleEndian, doNotBakeTransform, supportInstancedMeshes) {
6599
+ STLExport.CreateSTL = function (meshes, download, fileName, binary, isLittleEndian, doNotBakeTransform, supportInstancedMeshes, exportIndividualMeshes) {
6599
6600
  //Binary support adapted from https://gist.github.com/paulkaplan/6d5f0ab2c7e8fdc68a61
6600
6601
  if (download === void 0) { download = true; }
6601
6602
  if (fileName === void 0) { fileName = "stlmesh"; }
@@ -6603,6 +6604,7 @@ var STLExport = /** @class */ (function () {
6603
6604
  if (isLittleEndian === void 0) { isLittleEndian = true; }
6604
6605
  if (doNotBakeTransform === void 0) { doNotBakeTransform = false; }
6605
6606
  if (supportInstancedMeshes === void 0) { supportInstancedMeshes = false; }
6607
+ if (exportIndividualMeshes === void 0) { exportIndividualMeshes = false; }
6606
6608
  var getFaceData = function (indices, vertices, i) {
6607
6609
  var id = [indices[i] * 3, indices[i + 1] * 3, indices[i + 2] * 3];
6608
6610
  var v = [
@@ -6647,7 +6649,7 @@ var STLExport = /** @class */ (function () {
6647
6649
  if (supportInstancedMeshes) {
6648
6650
  doNotBakeTransform = true;
6649
6651
  }
6650
- var data;
6652
+ var data = "";
6651
6653
  var faceCount = 0;
6652
6654
  var offset = 0;
6653
6655
  if (binary) {
@@ -6664,10 +6666,15 @@ var STLExport = /** @class */ (function () {
6664
6666
  offset += 4;
6665
6667
  }
6666
6668
  else {
6667
- data = "solid stlmesh\r\n";
6669
+ if (!exportIndividualMeshes) {
6670
+ data = "solid stlmesh\r\n";
6671
+ }
6668
6672
  }
6669
6673
  for (var i = 0; i < meshes.length; i++) {
6670
6674
  var mesh = meshes[i];
6675
+ if (!binary && exportIndividualMeshes) {
6676
+ data += "solid " + mesh.name + "\r\n";
6677
+ }
6671
6678
  if (!doNotBakeTransform && mesh instanceof core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Mesh) {
6672
6679
  mesh.bakeCurrentTransformIntoVertices();
6673
6680
  }
@@ -6683,17 +6690,20 @@ var STLExport = /** @class */ (function () {
6683
6690
  offset += 2;
6684
6691
  }
6685
6692
  else {
6686
- data += "facet normal " + fd.n.x + " " + fd.n.y + " " + fd.n.z + "\r\n";
6687
- data += "\touter loop\r\n";
6688
- data += "\t\tvertex " + fd.v[0].x + " " + fd.v[0].y + " " + fd.v[0].z + "\r\n";
6689
- data += "\t\tvertex " + fd.v[1].x + " " + fd.v[1].y + " " + fd.v[1].z + "\r\n";
6690
- data += "\t\tvertex " + fd.v[2].x + " " + fd.v[2].y + " " + fd.v[2].z + "\r\n";
6691
- data += "\tendloop\r\n";
6692
- data += "endfacet\r\n";
6693
+ data += "\tfacet normal " + fd.n.x + " " + fd.n.y + " " + fd.n.z + "\r\n";
6694
+ data += "\t\touter loop\r\n";
6695
+ data += "\t\t\tvertex " + fd.v[0].x + " " + fd.v[0].y + " " + fd.v[0].z + "\r\n";
6696
+ data += "\t\t\tvertex " + fd.v[1].x + " " + fd.v[1].y + " " + fd.v[1].z + "\r\n";
6697
+ data += "\t\t\tvertex " + fd.v[2].x + " " + fd.v[2].y + " " + fd.v[2].z + "\r\n";
6698
+ data += "\t\tendloop\r\n";
6699
+ data += "\tendfacet\r\n";
6693
6700
  }
6694
6701
  }
6702
+ if (!binary && exportIndividualMeshes) {
6703
+ data += "endsolid " + name + "\r\n";
6704
+ }
6695
6705
  }
6696
- if (!binary) {
6706
+ if (!binary && !exportIndividualMeshes) {
6697
6707
  data += "endsolid stlmesh";
6698
6708
  }
6699
6709
  if (download) {