babylonjs-serializers 5.42.2 → 5.43.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.
- package/babylon.stlSerializer.js +36 -9
- package/babylon.stlSerializer.js.map +1 -1
- package/babylon.stlSerializer.min.js +1 -1
- package/babylon.stlSerializer.min.js.map +1 -1
- package/babylonjs.serializers.d.ts +2 -1
- package/babylonjs.serializers.js +36 -9
- package/babylonjs.serializers.js.map +1 -1
- package/babylonjs.serializers.min.js +1 -1
- package/babylonjs.serializers.min.js.map +1 -1
- package/babylonjs.serializers.module.d.ts +5 -2
- package/package.json +3 -3
package/babylon.stlSerializer.js
CHANGED
|
@@ -66,8 +66,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
66
66
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
67
67
|
/* harmony export */ "STLExport": () => (/* binding */ STLExport)
|
|
68
68
|
/* harmony export */ });
|
|
69
|
-
/* harmony import */ var
|
|
70
|
-
/* harmony import */ var
|
|
69
|
+
/* harmony import */ var core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core/Maths/math.vector */ "core/Maths/math.vector");
|
|
70
|
+
/* harmony import */ var core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__);
|
|
71
|
+
|
|
72
|
+
|
|
71
73
|
|
|
72
74
|
|
|
73
75
|
/**
|
|
@@ -84,25 +86,27 @@ var STLExport = /** @class */ (function () {
|
|
|
84
86
|
* @param binary changes the STL to a binary type.
|
|
85
87
|
* @param isLittleEndian toggle for binary type exporter.
|
|
86
88
|
* @param doNotBakeTransform toggle if meshes transforms should be baked or not.
|
|
89
|
+
* @param supportInstancedMeshes toggle to export instanced Meshes. Enabling support for instanced meshes will override doNoBakeTransform as true
|
|
87
90
|
* @returns the STL as UTF8 string
|
|
88
91
|
*/
|
|
89
|
-
STLExport.CreateSTL = function (meshes, download, fileName, binary, isLittleEndian, doNotBakeTransform) {
|
|
92
|
+
STLExport.CreateSTL = function (meshes, download, fileName, binary, isLittleEndian, doNotBakeTransform, supportInstancedMeshes) {
|
|
90
93
|
//Binary support adapted from https://gist.github.com/paulkaplan/6d5f0ab2c7e8fdc68a61
|
|
91
94
|
if (download === void 0) { download = true; }
|
|
92
95
|
if (fileName === void 0) { fileName = "stlmesh"; }
|
|
93
96
|
if (binary === void 0) { binary = false; }
|
|
94
97
|
if (isLittleEndian === void 0) { isLittleEndian = true; }
|
|
95
98
|
if (doNotBakeTransform === void 0) { doNotBakeTransform = false; }
|
|
99
|
+
if (supportInstancedMeshes === void 0) { supportInstancedMeshes = false; }
|
|
96
100
|
var getFaceData = function (indices, vertices, i) {
|
|
97
101
|
var id = [indices[i] * 3, indices[i + 1] * 3, indices[i + 2] * 3];
|
|
98
102
|
var v = [
|
|
99
|
-
new
|
|
100
|
-
new
|
|
101
|
-
new
|
|
103
|
+
new core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Vector3(vertices[id[0]], vertices[id[0] + 2], vertices[id[0] + 1]),
|
|
104
|
+
new core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Vector3(vertices[id[1]], vertices[id[1] + 2], vertices[id[1] + 1]),
|
|
105
|
+
new core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Vector3(vertices[id[2]], vertices[id[2] + 2], vertices[id[2] + 1]),
|
|
102
106
|
];
|
|
103
107
|
var p1p2 = v[0].subtract(v[1]);
|
|
104
108
|
var p3p2 = v[2].subtract(v[1]);
|
|
105
|
-
var n =
|
|
109
|
+
var n = core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Vector3.Cross(p3p2, p1p2).normalize();
|
|
106
110
|
return { v: v, n: n };
|
|
107
111
|
};
|
|
108
112
|
var writeVector = function (dataview, offset, vector, isLittleEndian) {
|
|
@@ -114,6 +118,29 @@ var STLExport = /** @class */ (function () {
|
|
|
114
118
|
dataview.setFloat32(offset, value, isLittleEndian);
|
|
115
119
|
return offset + 4;
|
|
116
120
|
};
|
|
121
|
+
var getVerticesData = function (mesh) {
|
|
122
|
+
if (supportInstancedMeshes) {
|
|
123
|
+
var sourceMesh = mesh;
|
|
124
|
+
if (mesh instanceof core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.InstancedMesh) {
|
|
125
|
+
sourceMesh = mesh.sourceMesh;
|
|
126
|
+
}
|
|
127
|
+
var data_1 = sourceMesh.getVerticesData(core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.VertexBuffer.PositionKind, true, true);
|
|
128
|
+
if (!data_1)
|
|
129
|
+
return [];
|
|
130
|
+
var temp = core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Vector3.Zero();
|
|
131
|
+
var index = void 0;
|
|
132
|
+
for (index = 0; index < data_1.length; index += 3) {
|
|
133
|
+
core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Vector3.TransformCoordinatesFromFloatsToRef(data_1[index], data_1[index + 1], data_1[index + 2], mesh.computeWorldMatrix(true), temp).toArray(data_1, index);
|
|
134
|
+
}
|
|
135
|
+
return data_1;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
return mesh.getVerticesData(core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.VertexBuffer.PositionKind) || [];
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
if (supportInstancedMeshes) {
|
|
142
|
+
doNotBakeTransform = true;
|
|
143
|
+
}
|
|
117
144
|
var data;
|
|
118
145
|
var faceCount = 0;
|
|
119
146
|
var offset = 0;
|
|
@@ -135,10 +162,10 @@ var STLExport = /** @class */ (function () {
|
|
|
135
162
|
}
|
|
136
163
|
for (var i = 0; i < meshes.length; i++) {
|
|
137
164
|
var mesh = meshes[i];
|
|
138
|
-
if (!doNotBakeTransform) {
|
|
165
|
+
if (!doNotBakeTransform && mesh instanceof core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Mesh) {
|
|
139
166
|
mesh.bakeCurrentTransformIntoVertices();
|
|
140
167
|
}
|
|
141
|
-
var vertices =
|
|
168
|
+
var vertices = getVerticesData(mesh);
|
|
142
169
|
var indices = mesh.getIndices() || [];
|
|
143
170
|
for (var i_1 = 0; i_1 < indices.length; i_1 += 3) {
|
|
144
171
|
var fd = getFaceData(indices, vertices, i_1);
|
|
@@ -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 type { Mesh } from \"core/Meshes/mesh\";\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 * @returns the STL as UTF8 string\r\n */\r\n public static CreateSTL(\r\n meshes: Mesh[],\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 ): 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 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) {\r\n mesh.bakeCurrentTransformIntoVertices();\r\n }\r\n const vertices = mesh.getVerticesData(VertexBuffer.PositionKind) || [];\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 * @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,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:()=>
|
|
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})()));
|
|
2
2
|
//# sourceMappingURL=babylon.stlSerializer.min.js.map
|
|
@@ -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 type { Mesh } from \"core/Meshes/mesh\";\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 * @returns the STL as UTF8 string\r\n */\r\n public static CreateSTL(\r\n meshes: Mesh[],\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 ): 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 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) {\r\n mesh.bakeCurrentTransformIntoVertices();\r\n }\r\n const vertices = mesh.getVerticesData(VertexBuffer.PositionKind) || [];\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","data","getFaceData","indices","vertices","i","id","v","Vector3","p1p2","subtract","p3p2","n","normalize","writeVector","dataview","offset","vector","writeFloat","x","y","z","setFloat32","faceCount","length","mesh","getIndices","buffer","ArrayBuffer","DataView","setUint32","bakeCurrentTransformIntoVertices","getVerticesData","VertexBuffer","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":""}
|
|
@@ -1431,9 +1431,10 @@ declare module BABYLON {
|
|
|
1431
1431
|
* @param binary changes the STL to a binary type.
|
|
1432
1432
|
* @param isLittleEndian toggle for binary type exporter.
|
|
1433
1433
|
* @param doNotBakeTransform toggle if meshes transforms should be baked or not.
|
|
1434
|
+
* @param supportInstancedMeshes toggle to export instanced Meshes. Enabling support for instanced meshes will override doNoBakeTransform as true
|
|
1434
1435
|
* @returns the STL as UTF8 string
|
|
1435
1436
|
*/
|
|
1436
|
-
static CreateSTL(meshes: Mesh[], download?: boolean, fileName?: string, binary?: boolean, isLittleEndian?: boolean, doNotBakeTransform?: boolean): any;
|
|
1437
|
+
static CreateSTL(meshes: (Mesh | InstancedMesh)[], download?: boolean, fileName?: string, binary?: boolean, isLittleEndian?: boolean, doNotBakeTransform?: boolean, supportInstancedMeshes?: boolean): any;
|
|
1437
1438
|
}
|
|
1438
1439
|
|
|
1439
1440
|
|
package/babylonjs.serializers.js
CHANGED
|
@@ -6502,8 +6502,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
6502
6502
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
6503
6503
|
/* harmony export */ "STLExport": () => (/* binding */ STLExport)
|
|
6504
6504
|
/* harmony export */ });
|
|
6505
|
-
/* harmony import */ var
|
|
6506
|
-
/* harmony import */ var
|
|
6505
|
+
/* harmony import */ var core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core/Maths/math.vector */ "core/Maths/math.vector");
|
|
6506
|
+
/* harmony import */ var core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__);
|
|
6507
|
+
|
|
6508
|
+
|
|
6507
6509
|
|
|
6508
6510
|
|
|
6509
6511
|
/**
|
|
@@ -6520,25 +6522,27 @@ var STLExport = /** @class */ (function () {
|
|
|
6520
6522
|
* @param binary changes the STL to a binary type.
|
|
6521
6523
|
* @param isLittleEndian toggle for binary type exporter.
|
|
6522
6524
|
* @param doNotBakeTransform toggle if meshes transforms should be baked or not.
|
|
6525
|
+
* @param supportInstancedMeshes toggle to export instanced Meshes. Enabling support for instanced meshes will override doNoBakeTransform as true
|
|
6523
6526
|
* @returns the STL as UTF8 string
|
|
6524
6527
|
*/
|
|
6525
|
-
STLExport.CreateSTL = function (meshes, download, fileName, binary, isLittleEndian, doNotBakeTransform) {
|
|
6528
|
+
STLExport.CreateSTL = function (meshes, download, fileName, binary, isLittleEndian, doNotBakeTransform, supportInstancedMeshes) {
|
|
6526
6529
|
//Binary support adapted from https://gist.github.com/paulkaplan/6d5f0ab2c7e8fdc68a61
|
|
6527
6530
|
if (download === void 0) { download = true; }
|
|
6528
6531
|
if (fileName === void 0) { fileName = "stlmesh"; }
|
|
6529
6532
|
if (binary === void 0) { binary = false; }
|
|
6530
6533
|
if (isLittleEndian === void 0) { isLittleEndian = true; }
|
|
6531
6534
|
if (doNotBakeTransform === void 0) { doNotBakeTransform = false; }
|
|
6535
|
+
if (supportInstancedMeshes === void 0) { supportInstancedMeshes = false; }
|
|
6532
6536
|
var getFaceData = function (indices, vertices, i) {
|
|
6533
6537
|
var id = [indices[i] * 3, indices[i + 1] * 3, indices[i + 2] * 3];
|
|
6534
6538
|
var v = [
|
|
6535
|
-
new
|
|
6536
|
-
new
|
|
6537
|
-
new
|
|
6539
|
+
new core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Vector3(vertices[id[0]], vertices[id[0] + 2], vertices[id[0] + 1]),
|
|
6540
|
+
new core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Vector3(vertices[id[1]], vertices[id[1] + 2], vertices[id[1] + 1]),
|
|
6541
|
+
new core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Vector3(vertices[id[2]], vertices[id[2] + 2], vertices[id[2] + 1]),
|
|
6538
6542
|
];
|
|
6539
6543
|
var p1p2 = v[0].subtract(v[1]);
|
|
6540
6544
|
var p3p2 = v[2].subtract(v[1]);
|
|
6541
|
-
var n =
|
|
6545
|
+
var n = core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Vector3.Cross(p3p2, p1p2).normalize();
|
|
6542
6546
|
return { v: v, n: n };
|
|
6543
6547
|
};
|
|
6544
6548
|
var writeVector = function (dataview, offset, vector, isLittleEndian) {
|
|
@@ -6550,6 +6554,29 @@ var STLExport = /** @class */ (function () {
|
|
|
6550
6554
|
dataview.setFloat32(offset, value, isLittleEndian);
|
|
6551
6555
|
return offset + 4;
|
|
6552
6556
|
};
|
|
6557
|
+
var getVerticesData = function (mesh) {
|
|
6558
|
+
if (supportInstancedMeshes) {
|
|
6559
|
+
var sourceMesh = mesh;
|
|
6560
|
+
if (mesh instanceof core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.InstancedMesh) {
|
|
6561
|
+
sourceMesh = mesh.sourceMesh;
|
|
6562
|
+
}
|
|
6563
|
+
var data_1 = sourceMesh.getVerticesData(core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.VertexBuffer.PositionKind, true, true);
|
|
6564
|
+
if (!data_1)
|
|
6565
|
+
return [];
|
|
6566
|
+
var temp = core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Vector3.Zero();
|
|
6567
|
+
var index = void 0;
|
|
6568
|
+
for (index = 0; index < data_1.length; index += 3) {
|
|
6569
|
+
core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Vector3.TransformCoordinatesFromFloatsToRef(data_1[index], data_1[index + 1], data_1[index + 2], mesh.computeWorldMatrix(true), temp).toArray(data_1, index);
|
|
6570
|
+
}
|
|
6571
|
+
return data_1;
|
|
6572
|
+
}
|
|
6573
|
+
else {
|
|
6574
|
+
return mesh.getVerticesData(core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.VertexBuffer.PositionKind) || [];
|
|
6575
|
+
}
|
|
6576
|
+
};
|
|
6577
|
+
if (supportInstancedMeshes) {
|
|
6578
|
+
doNotBakeTransform = true;
|
|
6579
|
+
}
|
|
6553
6580
|
var data;
|
|
6554
6581
|
var faceCount = 0;
|
|
6555
6582
|
var offset = 0;
|
|
@@ -6571,10 +6598,10 @@ var STLExport = /** @class */ (function () {
|
|
|
6571
6598
|
}
|
|
6572
6599
|
for (var i = 0; i < meshes.length; i++) {
|
|
6573
6600
|
var mesh = meshes[i];
|
|
6574
|
-
if (!doNotBakeTransform) {
|
|
6601
|
+
if (!doNotBakeTransform && mesh instanceof core_Meshes_mesh__WEBPACK_IMPORTED_MODULE_0__.Mesh) {
|
|
6575
6602
|
mesh.bakeCurrentTransformIntoVertices();
|
|
6576
6603
|
}
|
|
6577
|
-
var vertices =
|
|
6604
|
+
var vertices = getVerticesData(mesh);
|
|
6578
6605
|
var indices = mesh.getIndices() || [];
|
|
6579
6606
|
for (var i_1 = 0; i_1 < indices.length; i_1 += 3) {
|
|
6580
6607
|
var fd = getFaceData(indices, vertices, i_1);
|