babylonjs-serializers 6.48.0 → 6.49.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.objSerializer.js +19 -23
- package/babylon.objSerializer.min.js +1 -1
- package/babylon.objSerializer.min.js.map +1 -1
- package/babylonjs.serializers.d.ts +2 -2
- package/babylonjs.serializers.js +19 -23
- package/babylonjs.serializers.min.js +1 -1
- package/babylonjs.serializers.min.js.map +1 -1
- package/babylonjs.serializers.module.d.ts +4 -4
- package/package.json +3 -3
package/babylon.objSerializer.js
CHANGED
|
@@ -50,13 +50,13 @@ var OBJExport = /** @class */ (function () {
|
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
52
|
* Exports the geometry of a Mesh array in .OBJ file format (text)
|
|
53
|
-
* @param
|
|
53
|
+
* @param meshes defines the list of meshes to serialize
|
|
54
54
|
* @param materials defines if materials should be exported
|
|
55
55
|
* @param matlibname defines the name of the associated mtl file
|
|
56
56
|
* @param globalposition defines if the exported positions are globals or local to the exported mesh
|
|
57
57
|
* @returns the OBJ content
|
|
58
58
|
*/
|
|
59
|
-
OBJExport.OBJ = function (
|
|
59
|
+
OBJExport.OBJ = function (meshes, materials, matlibname, globalposition) {
|
|
60
60
|
var output = [];
|
|
61
61
|
var v = 1;
|
|
62
62
|
// keep track of uv index in case mixed meshes are passed in
|
|
@@ -67,26 +67,26 @@ var OBJExport = /** @class */ (function () {
|
|
|
67
67
|
}
|
|
68
68
|
output.push("mtllib " + matlibname + ".mtl");
|
|
69
69
|
}
|
|
70
|
-
for (var j = 0; j <
|
|
71
|
-
|
|
72
|
-
output.push("o
|
|
70
|
+
for (var j = 0; j < meshes.length; j++) {
|
|
71
|
+
var objectName = meshes[j].name || "mesh".concat(j, "}");
|
|
72
|
+
output.push("o ".concat(objectName));
|
|
73
73
|
//Uses the position of the item in the scene, to the file (this back to normal in the end)
|
|
74
74
|
var inverseTransform = null;
|
|
75
75
|
if (globalposition) {
|
|
76
|
-
var transform =
|
|
76
|
+
var transform = meshes[j].computeWorldMatrix(true);
|
|
77
77
|
inverseTransform = new babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0__.Matrix();
|
|
78
78
|
transform.invertToRef(inverseTransform);
|
|
79
|
-
|
|
79
|
+
meshes[j].bakeTransformIntoVertices(transform);
|
|
80
80
|
}
|
|
81
81
|
//TODO: submeshes (groups)
|
|
82
82
|
//TODO: smoothing groups (s 1, s off);
|
|
83
83
|
if (materials) {
|
|
84
|
-
var mat =
|
|
84
|
+
var mat = meshes[j].material;
|
|
85
85
|
if (mat) {
|
|
86
86
|
output.push("usemtl " + mat.id);
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
var g =
|
|
89
|
+
var g = meshes[j].geometry;
|
|
90
90
|
if (!g) {
|
|
91
91
|
babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0__.Tools.Warn("No geometry is present on the mesh");
|
|
92
92
|
continue;
|
|
@@ -101,20 +101,15 @@ var OBJExport = /** @class */ (function () {
|
|
|
101
101
|
babylonjs_Maths_math_vector__WEBPACK_IMPORTED_MODULE_0__.Tools.Warn("There are no position vertices or indices on the mesh!");
|
|
102
102
|
continue;
|
|
103
103
|
}
|
|
104
|
+
var useRightHandedSystem = meshes[0].getScene().useRightHandedSystem;
|
|
105
|
+
var handednessSign = useRightHandedSystem ? 1 : -1;
|
|
104
106
|
for (var i = 0; i < trunkVerts.length; i += 3) {
|
|
105
|
-
|
|
106
|
-
// Need to invert Z vertices unless Babylon is set to use a right handed system
|
|
107
|
-
if (mesh[0].getScene().useRightHandedSystem) {
|
|
108
|
-
output.push("v " + trunkVerts[i] + " " + trunkVerts[i + 1] + " " + trunkVerts[i + 2]);
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
output.push("v " + trunkVerts[i] + " " + trunkVerts[i + 1] + " " + -trunkVerts[i + 2]);
|
|
112
|
-
}
|
|
107
|
+
output.push("v " + trunkVerts[i] * handednessSign + " " + trunkVerts[i + 1] + " " + trunkVerts[i + 2]);
|
|
113
108
|
currentV++;
|
|
114
109
|
}
|
|
115
110
|
if (trunkNormals != null) {
|
|
116
111
|
for (var i = 0; i < trunkNormals.length; i += 3) {
|
|
117
|
-
output.push("vn " + trunkNormals[i] + " " + trunkNormals[i + 1] + " " + trunkNormals[i + 2]);
|
|
112
|
+
output.push("vn " + trunkNormals[i] * handednessSign + " " + trunkNormals[i + 1] + " " + trunkNormals[i + 2]);
|
|
118
113
|
}
|
|
119
114
|
}
|
|
120
115
|
if (trunkUV != null) {
|
|
@@ -123,10 +118,11 @@ var OBJExport = /** @class */ (function () {
|
|
|
123
118
|
currentTextureV++;
|
|
124
119
|
}
|
|
125
120
|
}
|
|
121
|
+
var blanks = ["", "", ""];
|
|
122
|
+
var _a = useRightHandedSystem ? [2, 1] : [1, 2], offset1 = _a[0], offset2 = _a[1];
|
|
126
123
|
for (var i = 0; i < trunkFaces.length; i += 3) {
|
|
127
|
-
var indices = [String(trunkFaces[i
|
|
128
|
-
var textureIndices = [String(trunkFaces[i
|
|
129
|
-
var blanks = ["", "", ""];
|
|
124
|
+
var indices = [String(trunkFaces[i] + v), String(trunkFaces[i + offset1] + v), String(trunkFaces[i + offset2] + v)];
|
|
125
|
+
var textureIndices = [String(trunkFaces[i] + textureV), String(trunkFaces[i + offset1] + textureV), String(trunkFaces[i + offset2] + textureV)];
|
|
130
126
|
var facePositions = indices;
|
|
131
127
|
var faceUVs = trunkUV != null ? textureIndices : blanks;
|
|
132
128
|
var faceNormals = trunkNormals != null ? indices : blanks;
|
|
@@ -151,7 +147,7 @@ var OBJExport = /** @class */ (function () {
|
|
|
151
147
|
}
|
|
152
148
|
//back de previous matrix, to not change the original mesh in the scene
|
|
153
149
|
if (globalposition && inverseTransform) {
|
|
154
|
-
|
|
150
|
+
meshes[j].bakeTransformIntoVertices(inverseTransform);
|
|
155
151
|
}
|
|
156
152
|
v += currentV;
|
|
157
153
|
textureV += currentTextureV;
|
|
@@ -359,4 +355,4 @@ __webpack_exports__ = __webpack_exports__["default"];
|
|
|
359
355
|
/******/ })()
|
|
360
356
|
;
|
|
361
357
|
});
|
|
362
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi5vYmpTZXJpYWxpemVyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ1ZBOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0NBO0FBQ0E7QUFLQTs7QUFFQTtBQUNBO0FBQUE7QUEyTEE7QUExTEE7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUVBOzs7O0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3JNQTtBQUNBO0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7O0FDZEE7Ozs7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNQQTs7Ozs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ05BO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL1NFUklBTElaRVJTL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9TRVJJQUxJWkVSUy8uLi8uLi8uLi9kZXYvc2VyaWFsaXplcnMvc3JjL09CSi9pbmRleC50cyIsIndlYnBhY2s6Ly9TRVJJQUxJWkVSUy8uLi8uLi8uLi9kZXYvc2VyaWFsaXplcnMvc3JjL09CSi9vYmpTZXJpYWxpemVyLnRzIiwid2VicGFjazovL1NFUklBTElaRVJTLy4uLy4uLy4uL2x0cy9zZXJpYWxpemVycy9zcmMvbGVnYWN5L2xlZ2FjeS1vYmpTZXJpYWxpemVyLnRzIiwid2VicGFjazovL1NFUklBTElaRVJTL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJCQUJZTE9OXCIsXCJjb21tb25qc1wiOlwiYmFieWxvbmpzXCIsXCJjb21tb25qczJcIjpcImJhYnlsb25qc1wiLFwiYW1kXCI6XCJiYWJ5bG9uanNcIn0iLCJ3ZWJwYWNrOi8vU0VSSUFMSVpFUlMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vU0VSSUFMSVpFUlMvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vU0VSSUFMSVpFUlMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL1NFUklBTElaRVJTL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vU0VSSUFMSVpFUlMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9TRVJJQUxJWkVSUy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL1NFUklBTElaRVJTLy4vc3JjL29iai50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJiYWJ5bG9uanNcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJiYWJ5bG9uanMtc2VyaWFsaXplcnNcIiwgW1wiYmFieWxvbmpzXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImJhYnlsb25qcy1zZXJpYWxpemVyc1wiXSA9IGZhY3RvcnkocmVxdWlyZShcImJhYnlsb25qc1wiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiU0VSSUFMSVpFUlNcIl0gPSBmYWN0b3J5KHJvb3RbXCJCQUJZTE9OXCJdKTtcbn0pKCh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdGhpcyksIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2JhYnlsb25qc19NYXRoc19tYXRoX3ZlY3Rvcl9fKSA9PiB7XG5yZXR1cm4gIiwiZXhwb3J0ICogZnJvbSBcIi4vb2JqU2VyaWFsaXplclwiO1xyXG4iLCJpbXBvcnQgdHlwZSB7IE51bGxhYmxlIH0gZnJvbSBcImNvcmUvdHlwZXNcIjtcclxuaW1wb3J0IHsgTWF0cml4IH0gZnJvbSBcImNvcmUvTWF0aHMvbWF0aC52ZWN0b3JcIjtcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tIFwiY29yZS9NaXNjL3Rvb2xzXCI7XHJcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRNYXRlcmlhbCB9IGZyb20gXCJjb3JlL01hdGVyaWFscy9zdGFuZGFyZE1hdGVyaWFsXCI7XHJcbmltcG9ydCB0eXBlIHsgR2VvbWV0cnkgfSBmcm9tIFwiY29yZS9NZXNoZXMvZ2VvbWV0cnlcIjtcclxuaW1wb3J0IHR5cGUgeyBNZXNoIH0gZnJvbSBcImNvcmUvTWVzaGVzL21lc2hcIjtcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmb3IgZ2VuZXJhdGluZyBPQkogZGF0YSBmcm9tIGEgQmFieWxvbiBzY2VuZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBPQkpFeHBvcnQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBFeHBvcnRzIHRoZSBnZW9tZXRyeSBvZiBhIE1lc2ggYXJyYXkgaW4gLk9CSiBmaWxlIGZvcm1hdCAodGV4dClcclxuICAgICAqIEBwYXJhbSBtZXNoIGRlZmluZXMgdGhlIGxpc3Qgb2YgbWVzaGVzIHRvIHNlcmlhbGl6ZVxyXG4gICAgICogQHBhcmFtIG1hdGVyaWFscyBkZWZpbmVzIGlmIG1hdGVyaWFscyBzaG91bGQgYmUgZXhwb3J0ZWRcclxuICAgICAqIEBwYXJhbSBtYXRsaWJuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0ZWQgbXRsIGZpbGVcclxuICAgICAqIEBwYXJhbSBnbG9iYWxwb3NpdGlvbiBkZWZpbmVzIGlmIHRoZSBleHBvcnRlZCBwb3NpdGlvbnMgYXJlIGdsb2JhbHMgb3IgbG9jYWwgdG8gdGhlIGV4cG9ydGVkIG1lc2hcclxuICAgICAqIEByZXR1cm5zIHRoZSBPQkogY29udGVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIE9CSihtZXNoOiBNZXNoW10sIG1hdGVyaWFscz86IGJvb2xlYW4sIG1hdGxpYm5hbWU/OiBzdHJpbmcsIGdsb2JhbHBvc2l0aW9uPzogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3Qgb3V0cHV0OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGxldCB2ID0gMTtcclxuICAgICAgICAvLyBrZWVwIHRyYWNrIG9mIHV2IGluZGV4IGluIGNhc2UgbWl4ZWQgbWVzaGVzIGFyZSBwYXNzZWQgaW5cclxuICAgICAgICBsZXQgdGV4dHVyZVYgPSAxO1xyXG5cclxuICAgICAgICBpZiAobWF0ZXJpYWxzKSB7XHJcbiAgICAgICAgICAgIGlmICghbWF0bGlibmFtZSkge1xyXG4gICAgICAgICAgICAgICAgbWF0bGlibmFtZSA9IFwibWF0XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3V0cHV0LnB1c2goXCJtdGxsaWIgXCIgKyBtYXRsaWJuYW1lICsgXCIubXRsXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1lc2gubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2goXCJnIG9iamVjdFwiICsgaik7XHJcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKFwibyBvYmplY3RfXCIgKyBqKTtcclxuXHJcbiAgICAgICAgICAgIC8vVXNlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGl0ZW0gaW4gdGhlIHNjZW5lLCB0byB0aGUgZmlsZSAodGhpcyBiYWNrIHRvIG5vcm1hbCBpbiB0aGUgZW5kKVxyXG4gICAgICAgICAgICBsZXQgaW52ZXJzZVRyYW5zZm9ybTogTnVsbGFibGU8TWF0cml4PiA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChnbG9iYWxwb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbWVzaFtqXS5jb21wdXRlV29ybGRNYXRyaXgodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBpbnZlcnNlVHJhbnNmb3JtID0gbmV3IE1hdHJpeCgpO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtLmludmVydFRvUmVmKGludmVyc2VUcmFuc2Zvcm0pO1xyXG5cclxuICAgICAgICAgICAgICAgIG1lc2hbal0uYmFrZVRyYW5zZm9ybUludG9WZXJ0aWNlcyh0cmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL1RPRE86IHN1Ym1lc2hlcyAoZ3JvdXBzKVxyXG4gICAgICAgICAgICAvL1RPRE86IHNtb290aGluZyBncm91cHMgKHMgMSwgcyBvZmYpO1xyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXQgPSBtZXNoW2pdLm1hdGVyaWFsO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChtYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChcInVzZW10bCBcIiArIG1hdC5pZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZzogTnVsbGFibGU8R2VvbWV0cnk+ID0gbWVzaFtqXS5nZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICAgIGlmICghZykge1xyXG4gICAgICAgICAgICAgICAgVG9vbHMuV2FybihcIk5vIGdlb21ldHJ5IGlzIHByZXNlbnQgb24gdGhlIG1lc2hcIik7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdHJ1bmtWZXJ0cyA9IGcuZ2V0VmVydGljZXNEYXRhKFwicG9zaXRpb25cIik7XHJcbiAgICAgICAgICAgIGNvbnN0IHRydW5rTm9ybWFscyA9IGcuZ2V0VmVydGljZXNEYXRhKFwibm9ybWFsXCIpO1xyXG4gICAgICAgICAgICBjb25zdCB0cnVua1VWID0gZy5nZXRWZXJ0aWNlc0RhdGEoXCJ1dlwiKTtcclxuICAgICAgICAgICAgY29uc3QgdHJ1bmtGYWNlcyA9IGcuZ2V0SW5kaWNlcygpO1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudFYgPSAwO1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudFRleHR1cmVWID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmICghdHJ1bmtWZXJ0cyB8fCAhdHJ1bmtGYWNlcykge1xyXG4gICAgICAgICAgICAgICAgVG9vbHMuV2FybihcIlRoZXJlIGFyZSBubyBwb3NpdGlvbiB2ZXJ0aWNlcyBvciBpbmRpY2VzIG9uIHRoZSBtZXNoIVwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRydW5rVmVydHMubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgICAgICAgICAgIC8vIEJhYnlsb24uanMgZGVmYXVsdCBpcyBsZWZ0IGhhbmRlZCwgd2hpbGUgT0JKIGRlZmF1bHQgaXMgcmlnaHQgaGFuZGVkXHJcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGludmVydCBaIHZlcnRpY2VzIHVubGVzcyBCYWJ5bG9uIGlzIHNldCB0byB1c2UgYSByaWdodCBoYW5kZWQgc3lzdGVtXHJcbiAgICAgICAgICAgICAgICBpZiAobWVzaFswXS5nZXRTY2VuZSgpLnVzZVJpZ2h0SGFuZGVkU3lzdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goXCJ2IFwiICsgdHJ1bmtWZXJ0c1tpXSArIFwiIFwiICsgdHJ1bmtWZXJ0c1tpICsgMV0gKyBcIiBcIiArIHRydW5rVmVydHNbaSArIDJdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goXCJ2IFwiICsgdHJ1bmtWZXJ0c1tpXSArIFwiIFwiICsgdHJ1bmtWZXJ0c1tpICsgMV0gKyBcIiBcIiArIC10cnVua1ZlcnRzW2kgKyAyXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VisrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodHJ1bmtOb3JtYWxzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJ1bmtOb3JtYWxzLmxlbmd0aDsgaSArPSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goXCJ2biBcIiArIHRydW5rTm9ybWFsc1tpXSArIFwiIFwiICsgdHJ1bmtOb3JtYWxzW2kgKyAxXSArIFwiIFwiICsgdHJ1bmtOb3JtYWxzW2kgKyAyXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRydW5rVVYgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cnVua1VWLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goXCJ2dCBcIiArIHRydW5rVVZbaV0gKyBcIiBcIiArIHRydW5rVVZbaSArIDFdKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dHVyZVYrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cnVua0ZhY2VzLmxlbmd0aDsgaSArPSAzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gW1N0cmluZyh0cnVua0ZhY2VzW2kgKyAyXSArIHYpLCBTdHJpbmcodHJ1bmtGYWNlc1tpICsgMV0gKyB2KSwgU3RyaW5nKHRydW5rRmFjZXNbaV0gKyB2KV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0dXJlSW5kaWNlcyA9IFtTdHJpbmcodHJ1bmtGYWNlc1tpICsgMl0gKyB0ZXh0dXJlViksIFN0cmluZyh0cnVua0ZhY2VzW2kgKyAxXSArIHRleHR1cmVWKSwgU3RyaW5nKHRydW5rRmFjZXNbaV0gKyB0ZXh0dXJlVildO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmxhbmtzOiBzdHJpbmdbXSA9IFtcIlwiLCBcIlwiLCBcIlwiXTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmYWNlUG9zaXRpb25zID0gaW5kaWNlcztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhY2VVVnMgPSB0cnVua1VWICE9IG51bGwgPyB0ZXh0dXJlSW5kaWNlcyA6IGJsYW5rcztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhY2VOb3JtYWxzID0gdHJ1bmtOb3JtYWxzICE9IG51bGwgPyBpbmRpY2VzIDogYmxhbmtzO1xyXG5cclxuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZiBcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VQb3NpdGlvbnNbMF0gK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIi9cIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VVVnNbMF0gK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIi9cIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VOb3JtYWxzWzBdICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWNlUG9zaXRpb25zWzFdICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIvXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWNlVVZzWzFdICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIvXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWNlTm9ybWFsc1sxXSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIFwiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZVBvc2l0aW9uc1syXSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiL1wiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZVVWc1syXSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiL1wiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZU5vcm1hbHNbMl1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9iYWNrIGRlIHByZXZpb3VzIG1hdHJpeCwgdG8gbm90IGNoYW5nZSB0aGUgb3JpZ2luYWwgbWVzaCBpbiB0aGUgc2NlbmVcclxuICAgICAgICAgICAgaWYgKGdsb2JhbHBvc2l0aW9uICYmIGludmVyc2VUcmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIG1lc2hbal0uYmFrZVRyYW5zZm9ybUludG9WZXJ0aWNlcyhpbnZlcnNlVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2ICs9IGN1cnJlbnRWO1xyXG4gICAgICAgICAgICB0ZXh0dXJlViArPSBjdXJyZW50VGV4dHVyZVY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRleHQ6IHN0cmluZyA9IG91dHB1dC5qb2luKFwiXFxuXCIpO1xyXG4gICAgICAgIHJldHVybiB0ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXhwb3J0cyB0aGUgbWF0ZXJpYWwocykgb2YgYSBtZXNoIGluIC5NVEwgZmlsZSBmb3JtYXQgKHRleHQpXHJcbiAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIHRvIGV4dHJhY3QgdGhlIG1hdGVyaWFsIGZyb21cclxuICAgICAqIEByZXR1cm5zIHRoZSBtdGwgY29udGVudFxyXG4gICAgICovXHJcbiAgICAvL1RPRE86IEV4cG9ydCB0aGUgbWF0ZXJpYWxzIG9mIG1lc2ggYXJyYXlcclxuICAgIHB1YmxpYyBzdGF0aWMgTVRMKG1lc2g6IE1lc2gpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IG91dHB1dCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IG0gPSA8U3RhbmRhcmRNYXRlcmlhbD5tZXNoLm1hdGVyaWFsO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwibmV3bXRsIG1hdDFcIik7XHJcbiAgICAgICAgb3V0cHV0LnB1c2goXCIgIE5zIFwiICsgbS5zcGVjdWxhclBvd2VyLnRvRml4ZWQoNCkpO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwiICBOaSAxLjUwMDBcIik7XHJcbiAgICAgICAgb3V0cHV0LnB1c2goXCIgIGQgXCIgKyBtLmFscGhhLnRvRml4ZWQoNCkpO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwiICBUciAwLjAwMDBcIik7XHJcbiAgICAgICAgb3V0cHV0LnB1c2goXCIgIFRmIDEuMDAwMCAxLjAwMDAgMS4wMDAwXCIpO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwiICBpbGx1bSAyXCIpO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwiICBLYSBcIiArIG0uYW1iaWVudENvbG9yLnIudG9GaXhlZCg0KSArIFwiIFwiICsgbS5hbWJpZW50Q29sb3IuZy50b0ZpeGVkKDQpICsgXCIgXCIgKyBtLmFtYmllbnRDb2xvci5iLnRvRml4ZWQoNCkpO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwiICBLZCBcIiArIG0uZGlmZnVzZUNvbG9yLnIudG9GaXhlZCg0KSArIFwiIFwiICsgbS5kaWZmdXNlQ29sb3IuZy50b0ZpeGVkKDQpICsgXCIgXCIgKyBtLmRpZmZ1c2VDb2xvci5iLnRvRml4ZWQoNCkpO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwiICBLcyBcIiArIG0uc3BlY3VsYXJDb2xvci5yLnRvRml4ZWQoNCkgKyBcIiBcIiArIG0uc3BlY3VsYXJDb2xvci5nLnRvRml4ZWQoNCkgKyBcIiBcIiArIG0uc3BlY3VsYXJDb2xvci5iLnRvRml4ZWQoNCkpO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwiICBLZSBcIiArIG0uZW1pc3NpdmVDb2xvci5yLnRvRml4ZWQoNCkgKyBcIiBcIiArIG0uZW1pc3NpdmVDb2xvci5nLnRvRml4ZWQoNCkgKyBcIiBcIiArIG0uZW1pc3NpdmVDb2xvci5iLnRvRml4ZWQoNCkpO1xyXG5cclxuICAgICAgICAvL1RPRE86IHV2IHNjYWxlLCBvZmZzZXQsIHdyYXBcclxuICAgICAgICAvL1RPRE86IFVWIG1pcnJvcmVkIGluIEJsZW5kZXI/IHNlY29uZCBVViBjaGFubmVsPyBsaWdodE1hcD8gcmVmbGVjdGlvbiB0ZXh0dXJlcz9cclxuICAgICAgICBjb25zdCB1dnNjYWxlID0gXCJcIjtcclxuXHJcbiAgICAgICAgaWYgKG0uYW1iaWVudFRleHR1cmUpIHtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2goXCIgIG1hcF9LYSBcIiArIHV2c2NhbGUgKyBtLmFtYmllbnRUZXh0dXJlLm5hbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG0uZGlmZnVzZVRleHR1cmUpIHtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2goXCIgIG1hcF9LZCBcIiArIHV2c2NhbGUgKyBtLmRpZmZ1c2VUZXh0dXJlLm5hbWUpO1xyXG4gICAgICAgICAgICAvL1RPRE86IGFscGhhIHRlc3RpbmcsIG9wYWNpdHkgaW4gZGlmZnVzZSB0ZXh0dXJlIGFscGhhIGNoYW5uZWwgKGRpZmZ1c2VUZXh0dXJlLmhhc0FscGhhIC0+IG1hcF9kKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG0uc3BlY3VsYXJUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKFwiICBtYXBfS3MgXCIgKyB1dnNjYWxlICsgbS5zcGVjdWxhclRleHR1cmUubmFtZSk7XHJcbiAgICAgICAgICAgIC8qIFRPRE86IGdsb3NzaW5lc3MgPSBzcGVjdWxhciBoaWdobGlnaHQgY29tcG9uZW50IGlzIGluIGFscGhhIGNoYW5uZWwgb2Ygc3BlY3VsYXJUZXh0dXJlLiAoPz8/KVxyXG4gICAgICAgICAgICBpZiAobS51c2VHbG9zc2luZXNzRnJvbVNwZWN1bGFyTWFwQWxwaGEpICB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChcIiAgbWFwX05zIFwiK3V2c2NhbGUgKyBtLnNwZWN1bGFyVGV4dHVyZS5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogVE9ETzogZW1pc3NpdmUgdGV4dHVyZSBub3QgaW4gLk1BVCBmb3JtYXQgKD8/PylcclxuICAgICAgICBpZiAobS5lbWlzc2l2ZVRleHR1cmUpIHtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2goXCIgIG1hcF9kIFwiK3V2c2NhbGUrbS5lbWlzc2l2ZVRleHR1cmUubmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICovXHJcblxyXG4gICAgICAgIGlmIChtLmJ1bXBUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKFwiICBtYXBfYnVtcCAtaW1mY2hhbiB6IFwiICsgdXZzY2FsZSArIG0uYnVtcFRleHR1cmUubmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobS5vcGFjaXR5VGV4dHVyZSkge1xyXG4gICAgICAgICAgICBvdXRwdXQucHVzaChcIiAgbWFwX2QgXCIgKyB1dnNjYWxlICsgbS5vcGFjaXR5VGV4dHVyZS5uYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHQgPSBvdXRwdXQuam9pbihcIlxcblwiKTtcclxuICAgICAgICByZXR1cm4gdGV4dDtcclxuICAgIH1cclxufVxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8taW50ZXJuYWwtbW9kdWxlcyAqL1xyXG5pbXBvcnQgKiBhcyBTZXJpYWxpemVycyBmcm9tIFwic2VyaWFsaXplcnMvT0JKL2luZGV4XCI7XHJcblxyXG4vKipcclxuICogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBVTUQgbW9kdWxlLlxyXG4gKiBUaGUgZW50cnkgcG9pbnQgZm9yIGEgZnV0dXJlIEVTTSBwYWNrYWdlIHNob3VsZCBiZSBpbmRleC50c1xyXG4gKi9cclxuY29uc3QgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XHJcbmlmICh0eXBlb2YgZ2xvYmFsT2JqZWN0ICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICBmb3IgKGNvbnN0IHNlcmlhbGl6ZXIgaW4gU2VyaWFsaXplcnMpIHtcclxuICAgICAgICAoPGFueT5nbG9iYWxPYmplY3QpLkJBQllMT05bc2VyaWFsaXplcl0gPSAoPGFueT5TZXJpYWxpemVycylbc2VyaWFsaXplcl07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCAqIGZyb20gXCJzZXJpYWxpemVycy9PQkovaW5kZXhcIjtcclxuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2JhYnlsb25qc19NYXRoc19tYXRoX3ZlY3Rvcl9fOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCAqIGFzIHNlcmlhbGl6ZXJzIGZyb20gXCJAbHRzL3NlcmlhbGl6ZXJzL2xlZ2FjeS9sZWdhY3ktb2JqU2VyaWFsaXplclwiO1xyXG5leHBvcnQgeyBzZXJpYWxpemVycyB9O1xyXG5leHBvcnQgZGVmYXVsdCBzZXJpYWxpemVycztcclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9
|
|
358
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi5vYmpTZXJpYWxpemVyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ1ZBOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0NBO0FBQ0E7QUFLQTs7QUFFQTtBQUNBO0FBQUE7QUEwTEE7QUF6TEE7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFFQTs7OztBQUlBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwTUE7QUFDQTtBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7OztBQ2RBOzs7Ozs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDUEE7Ozs7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNOQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TRVJJQUxJWkVSUy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vU0VSSUFMSVpFUlMvLi4vLi4vLi4vZGV2L3NlcmlhbGl6ZXJzL3NyYy9PQkovaW5kZXgudHMiLCJ3ZWJwYWNrOi8vU0VSSUFMSVpFUlMvLi4vLi4vLi4vZGV2L3NlcmlhbGl6ZXJzL3NyYy9PQkovb2JqU2VyaWFsaXplci50cyIsIndlYnBhY2s6Ly9TRVJJQUxJWkVSUy8uLi8uLi8uLi9sdHMvc2VyaWFsaXplcnMvc3JjL2xlZ2FjeS9sZWdhY3ktb2JqU2VyaWFsaXplci50cyIsIndlYnBhY2s6Ly9TRVJJQUxJWkVSUy9leHRlcm5hbCB1bWQge1wicm9vdFwiOlwiQkFCWUxPTlwiLFwiY29tbW9uanNcIjpcImJhYnlsb25qc1wiLFwiY29tbW9uanMyXCI6XCJiYWJ5bG9uanNcIixcImFtZFwiOlwiYmFieWxvbmpzXCJ9Iiwid2VicGFjazovL1NFUklBTElaRVJTL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1NFUklBTElaRVJTL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL1NFUklBTElaRVJTL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9TRVJJQUxJWkVSUy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL1NFUklBTElaRVJTL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vU0VSSUFMSVpFUlMvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9TRVJJQUxJWkVSUy8uL3NyYy9vYmoudHMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiYmFieWxvbmpzXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiYmFieWxvbmpzLXNlcmlhbGl6ZXJzXCIsIFtcImJhYnlsb25qc1wiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJiYWJ5bG9uanMtc2VyaWFsaXplcnNcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJiYWJ5bG9uanNcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlNFUklBTElaRVJTXCJdID0gZmFjdG9yeShyb290W1wiQkFCWUxPTlwiXSk7XG59KSgodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHRoaXMpLCAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9iYWJ5bG9uanNfTWF0aHNfbWF0aF92ZWN0b3JfXykgPT4ge1xucmV0dXJuICIsImV4cG9ydCAqIGZyb20gXCIuL29ialNlcmlhbGl6ZXJcIjtcclxuIiwiaW1wb3J0IHR5cGUgeyBOdWxsYWJsZSB9IGZyb20gXCJjb3JlL3R5cGVzXCI7XHJcbmltcG9ydCB7IE1hdHJpeCB9IGZyb20gXCJjb3JlL01hdGhzL21hdGgudmVjdG9yXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSBcImNvcmUvTWlzYy90b29sc1wiO1xyXG5pbXBvcnQgdHlwZSB7IFN0YW5kYXJkTWF0ZXJpYWwgfSBmcm9tIFwiY29yZS9NYXRlcmlhbHMvc3RhbmRhcmRNYXRlcmlhbFwiO1xyXG5pbXBvcnQgdHlwZSB7IEdlb21ldHJ5IH0gZnJvbSBcImNvcmUvTWVzaGVzL2dlb21ldHJ5XCI7XHJcbmltcG9ydCB0eXBlIHsgTWVzaCB9IGZyb20gXCJjb3JlL01lc2hlcy9tZXNoXCI7XHJcblxyXG4vKipcclxuICogQ2xhc3MgZm9yIGdlbmVyYXRpbmcgT0JKIGRhdGEgZnJvbSBhIEJhYnlsb24gc2NlbmUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgT0JKRXhwb3J0IHtcclxuICAgIC8qKlxyXG4gICAgICogRXhwb3J0cyB0aGUgZ2VvbWV0cnkgb2YgYSBNZXNoIGFycmF5IGluIC5PQkogZmlsZSBmb3JtYXQgKHRleHQpXHJcbiAgICAgKiBAcGFyYW0gbWVzaGVzIGRlZmluZXMgdGhlIGxpc3Qgb2YgbWVzaGVzIHRvIHNlcmlhbGl6ZVxyXG4gICAgICogQHBhcmFtIG1hdGVyaWFscyBkZWZpbmVzIGlmIG1hdGVyaWFscyBzaG91bGQgYmUgZXhwb3J0ZWRcclxuICAgICAqIEBwYXJhbSBtYXRsaWJuYW1lIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0ZWQgbXRsIGZpbGVcclxuICAgICAqIEBwYXJhbSBnbG9iYWxwb3NpdGlvbiBkZWZpbmVzIGlmIHRoZSBleHBvcnRlZCBwb3NpdGlvbnMgYXJlIGdsb2JhbHMgb3IgbG9jYWwgdG8gdGhlIGV4cG9ydGVkIG1lc2hcclxuICAgICAqIEByZXR1cm5zIHRoZSBPQkogY29udGVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIE9CSihtZXNoZXM6IE1lc2hbXSwgbWF0ZXJpYWxzPzogYm9vbGVhbiwgbWF0bGlibmFtZT86IHN0cmluZywgZ2xvYmFscG9zaXRpb24/OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBvdXRwdXQ6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgbGV0IHYgPSAxO1xyXG4gICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdXYgaW5kZXggaW4gY2FzZSBtaXhlZCBtZXNoZXMgYXJlIHBhc3NlZCBpblxyXG4gICAgICAgIGxldCB0ZXh0dXJlViA9IDE7XHJcblxyXG4gICAgICAgIGlmIChtYXRlcmlhbHMpIHtcclxuICAgICAgICAgICAgaWYgKCFtYXRsaWJuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRsaWJuYW1lID0gXCJtYXRcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvdXRwdXQucHVzaChcIm10bGxpYiBcIiArIG1hdGxpYm5hbWUgKyBcIi5tdGxcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWVzaGVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdE5hbWUgPSBtZXNoZXNbal0ubmFtZSB8fCBgbWVzaCR7an19YDtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2goYG8gJHtvYmplY3ROYW1lfWApO1xyXG5cclxuICAgICAgICAgICAgLy9Vc2VzIHRoZSBwb3NpdGlvbiBvZiB0aGUgaXRlbSBpbiB0aGUgc2NlbmUsIHRvIHRoZSBmaWxlICh0aGlzIGJhY2sgdG8gbm9ybWFsIGluIHRoZSBlbmQpXHJcbiAgICAgICAgICAgIGxldCBpbnZlcnNlVHJhbnNmb3JtOiBOdWxsYWJsZTxNYXRyaXg+ID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbHBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBtZXNoZXNbal0uY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgaW52ZXJzZVRyYW5zZm9ybSA9IG5ldyBNYXRyaXgoKTtcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5pbnZlcnRUb1JlZihpbnZlcnNlVHJhbnNmb3JtKTtcclxuXHJcbiAgICAgICAgICAgICAgICBtZXNoZXNbal0uYmFrZVRyYW5zZm9ybUludG9WZXJ0aWNlcyh0cmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL1RPRE86IHN1Ym1lc2hlcyAoZ3JvdXBzKVxyXG4gICAgICAgICAgICAvL1RPRE86IHNtb290aGluZyBncm91cHMgKHMgMSwgcyBvZmYpO1xyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXQgPSBtZXNoZXNbal0ubWF0ZXJpYWw7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG1hdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKFwidXNlbXRsIFwiICsgbWF0LmlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBnOiBOdWxsYWJsZTxHZW9tZXRyeT4gPSBtZXNoZXNbal0uZ2VvbWV0cnk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWcpIHtcclxuICAgICAgICAgICAgICAgIFRvb2xzLldhcm4oXCJObyBnZW9tZXRyeSBpcyBwcmVzZW50IG9uIHRoZSBtZXNoXCIpO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRydW5rVmVydHMgPSBnLmdldFZlcnRpY2VzRGF0YShcInBvc2l0aW9uXCIpO1xyXG4gICAgICAgICAgICBjb25zdCB0cnVua05vcm1hbHMgPSBnLmdldFZlcnRpY2VzRGF0YShcIm5vcm1hbFwiKTtcclxuICAgICAgICAgICAgY29uc3QgdHJ1bmtVViA9IGcuZ2V0VmVydGljZXNEYXRhKFwidXZcIik7XHJcbiAgICAgICAgICAgIGNvbnN0IHRydW5rRmFjZXMgPSBnLmdldEluZGljZXMoKTtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRWID0gMDtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRUZXh0dXJlViA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRydW5rVmVydHMgfHwgIXRydW5rRmFjZXMpIHtcclxuICAgICAgICAgICAgICAgIFRvb2xzLldhcm4oXCJUaGVyZSBhcmUgbm8gcG9zaXRpb24gdmVydGljZXMgb3IgaW5kaWNlcyBvbiB0aGUgbWVzaCFcIik7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdXNlUmlnaHRIYW5kZWRTeXN0ZW0gPSBtZXNoZXNbMF0uZ2V0U2NlbmUoKS51c2VSaWdodEhhbmRlZFN5c3RlbTtcclxuICAgICAgICAgICAgY29uc3QgaGFuZGVkbmVzc1NpZ24gPSB1c2VSaWdodEhhbmRlZFN5c3RlbSA/IDEgOiAtMTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJ1bmtWZXJ0cy5sZW5ndGg7IGkgKz0gMykge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goXCJ2IFwiICsgdHJ1bmtWZXJ0c1tpXSAqIGhhbmRlZG5lc3NTaWduICsgXCIgXCIgKyB0cnVua1ZlcnRzW2kgKyAxXSArIFwiIFwiICsgdHJ1bmtWZXJ0c1tpICsgMl0pO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFYrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRydW5rTm9ybWFscyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRydW5rTm9ybWFscy5sZW5ndGg7IGkgKz0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKFwidm4gXCIgKyB0cnVua05vcm1hbHNbaV0gKiBoYW5kZWRuZXNzU2lnbiArIFwiIFwiICsgdHJ1bmtOb3JtYWxzW2kgKyAxXSArIFwiIFwiICsgdHJ1bmtOb3JtYWxzW2kgKyAyXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRydW5rVVYgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cnVua1VWLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goXCJ2dCBcIiArIHRydW5rVVZbaV0gKyBcIiBcIiArIHRydW5rVVZbaSArIDFdKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dHVyZVYrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgYmxhbmtzOiBzdHJpbmdbXSA9IFtcIlwiLCBcIlwiLCBcIlwiXTtcclxuICAgICAgICAgICAgY29uc3QgW29mZnNldDEsIG9mZnNldDJdID0gdXNlUmlnaHRIYW5kZWRTeXN0ZW0gPyBbMiwgMV0gOiBbMSwgMl07XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRydW5rRmFjZXMubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSBbU3RyaW5nKHRydW5rRmFjZXNbaV0gKyB2KSwgU3RyaW5nKHRydW5rRmFjZXNbaSArIG9mZnNldDFdICsgdiksIFN0cmluZyh0cnVua0ZhY2VzW2kgKyBvZmZzZXQyXSArIHYpXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHR1cmVJbmRpY2VzID0gW1N0cmluZyh0cnVua0ZhY2VzW2ldICsgdGV4dHVyZVYpLCBTdHJpbmcodHJ1bmtGYWNlc1tpICsgb2Zmc2V0MV0gKyB0ZXh0dXJlViksIFN0cmluZyh0cnVua0ZhY2VzW2kgKyBvZmZzZXQyXSArIHRleHR1cmVWKV07XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFjZVBvc2l0aW9ucyA9IGluZGljZXM7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmYWNlVVZzID0gdHJ1bmtVViAhPSBudWxsID8gdGV4dHVyZUluZGljZXMgOiBibGFua3M7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmYWNlTm9ybWFscyA9IHRydW5rTm9ybWFscyAhPSBudWxsID8gaW5kaWNlcyA6IGJsYW5rcztcclxuXHJcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBcImYgXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWNlUG9zaXRpb25zWzBdICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIvXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWNlVVZzWzBdICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIvXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWNlTm9ybWFsc1swXSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIFwiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZVBvc2l0aW9uc1sxXSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiL1wiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZVVWc1sxXSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiL1wiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZU5vcm1hbHNbMV0gK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VQb3NpdGlvbnNbMl0gK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIi9cIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VVVnNbMl0gK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIi9cIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VOb3JtYWxzWzJdXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vYmFjayBkZSBwcmV2aW91cyBtYXRyaXgsIHRvIG5vdCBjaGFuZ2UgdGhlIG9yaWdpbmFsIG1lc2ggaW4gdGhlIHNjZW5lXHJcbiAgICAgICAgICAgIGlmIChnbG9iYWxwb3NpdGlvbiAmJiBpbnZlcnNlVHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBtZXNoZXNbal0uYmFrZVRyYW5zZm9ybUludG9WZXJ0aWNlcyhpbnZlcnNlVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2ICs9IGN1cnJlbnRWO1xyXG4gICAgICAgICAgICB0ZXh0dXJlViArPSBjdXJyZW50VGV4dHVyZVY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRleHQ6IHN0cmluZyA9IG91dHB1dC5qb2luKFwiXFxuXCIpO1xyXG4gICAgICAgIHJldHVybiB0ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXhwb3J0cyB0aGUgbWF0ZXJpYWwocykgb2YgYSBtZXNoIGluIC5NVEwgZmlsZSBmb3JtYXQgKHRleHQpXHJcbiAgICAgKiBAcGFyYW0gbWVzaCBkZWZpbmVzIHRoZSBtZXNoIHRvIGV4dHJhY3QgdGhlIG1hdGVyaWFsIGZyb21cclxuICAgICAqIEByZXR1cm5zIHRoZSBtdGwgY29udGVudFxyXG4gICAgICovXHJcbiAgICAvL1RPRE86IEV4cG9ydCB0aGUgbWF0ZXJpYWxzIG9mIG1lc2ggYXJyYXlcclxuICAgIHB1YmxpYyBzdGF0aWMgTVRMKG1lc2g6IE1lc2gpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IG91dHB1dCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IG0gPSA8U3RhbmRhcmRNYXRlcmlhbD5tZXNoLm1hdGVyaWFsO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwibmV3bXRsIG1hdDFcIik7XHJcbiAgICAgICAgb3V0cHV0LnB1c2goXCIgIE5zIFwiICsgbS5zcGVjdWxhclBvd2VyLnRvRml4ZWQoNCkpO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwiICBOaSAxLjUwMDBcIik7XHJcbiAgICAgICAgb3V0cHV0LnB1c2goXCIgIGQgXCIgKyBtLmFscGhhLnRvRml4ZWQoNCkpO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwiICBUciAwLjAwMDBcIik7XHJcbiAgICAgICAgb3V0cHV0LnB1c2goXCIgIFRmIDEuMDAwMCAxLjAwMDAgMS4wMDAwXCIpO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwiICBpbGx1bSAyXCIpO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwiICBLYSBcIiArIG0uYW1iaWVudENvbG9yLnIudG9GaXhlZCg0KSArIFwiIFwiICsgbS5hbWJpZW50Q29sb3IuZy50b0ZpeGVkKDQpICsgXCIgXCIgKyBtLmFtYmllbnRDb2xvci5iLnRvRml4ZWQoNCkpO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwiICBLZCBcIiArIG0uZGlmZnVzZUNvbG9yLnIudG9GaXhlZCg0KSArIFwiIFwiICsgbS5kaWZmdXNlQ29sb3IuZy50b0ZpeGVkKDQpICsgXCIgXCIgKyBtLmRpZmZ1c2VDb2xvci5iLnRvRml4ZWQoNCkpO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwiICBLcyBcIiArIG0uc3BlY3VsYXJDb2xvci5yLnRvRml4ZWQoNCkgKyBcIiBcIiArIG0uc3BlY3VsYXJDb2xvci5nLnRvRml4ZWQoNCkgKyBcIiBcIiArIG0uc3BlY3VsYXJDb2xvci5iLnRvRml4ZWQoNCkpO1xyXG4gICAgICAgIG91dHB1dC5wdXNoKFwiICBLZSBcIiArIG0uZW1pc3NpdmVDb2xvci5yLnRvRml4ZWQoNCkgKyBcIiBcIiArIG0uZW1pc3NpdmVDb2xvci5nLnRvRml4ZWQoNCkgKyBcIiBcIiArIG0uZW1pc3NpdmVDb2xvci5iLnRvRml4ZWQoNCkpO1xyXG5cclxuICAgICAgICAvL1RPRE86IHV2IHNjYWxlLCBvZmZzZXQsIHdyYXBcclxuICAgICAgICAvL1RPRE86IFVWIG1pcnJvcmVkIGluIEJsZW5kZXI/IHNlY29uZCBVViBjaGFubmVsPyBsaWdodE1hcD8gcmVmbGVjdGlvbiB0ZXh0dXJlcz9cclxuICAgICAgICBjb25zdCB1dnNjYWxlID0gXCJcIjtcclxuXHJcbiAgICAgICAgaWYgKG0uYW1iaWVudFRleHR1cmUpIHtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2goXCIgIG1hcF9LYSBcIiArIHV2c2NhbGUgKyBtLmFtYmllbnRUZXh0dXJlLm5hbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG0uZGlmZnVzZVRleHR1cmUpIHtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2goXCIgIG1hcF9LZCBcIiArIHV2c2NhbGUgKyBtLmRpZmZ1c2VUZXh0dXJlLm5hbWUpO1xyXG4gICAgICAgICAgICAvL1RPRE86IGFscGhhIHRlc3RpbmcsIG9wYWNpdHkgaW4gZGlmZnVzZSB0ZXh0dXJlIGFscGhhIGNoYW5uZWwgKGRpZmZ1c2VUZXh0dXJlLmhhc0FscGhhIC0+IG1hcF9kKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG0uc3BlY3VsYXJUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKFwiICBtYXBfS3MgXCIgKyB1dnNjYWxlICsgbS5zcGVjdWxhclRleHR1cmUubmFtZSk7XHJcbiAgICAgICAgICAgIC8qIFRPRE86IGdsb3NzaW5lc3MgPSBzcGVjdWxhciBoaWdobGlnaHQgY29tcG9uZW50IGlzIGluIGFscGhhIGNoYW5uZWwgb2Ygc3BlY3VsYXJUZXh0dXJlLiAoPz8/KVxyXG4gICAgICAgICAgICBpZiAobS51c2VHbG9zc2luZXNzRnJvbVNwZWN1bGFyTWFwQWxwaGEpICB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChcIiAgbWFwX05zIFwiK3V2c2NhbGUgKyBtLnNwZWN1bGFyVGV4dHVyZS5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogVE9ETzogZW1pc3NpdmUgdGV4dHVyZSBub3QgaW4gLk1BVCBmb3JtYXQgKD8/PylcclxuICAgICAgICBpZiAobS5lbWlzc2l2ZVRleHR1cmUpIHtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2goXCIgIG1hcF9kIFwiK3V2c2NhbGUrbS5lbWlzc2l2ZVRleHR1cmUubmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICovXHJcblxyXG4gICAgICAgIGlmIChtLmJ1bXBUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKFwiICBtYXBfYnVtcCAtaW1mY2hhbiB6IFwiICsgdXZzY2FsZSArIG0uYnVtcFRleHR1cmUubmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobS5vcGFjaXR5VGV4dHVyZSkge1xyXG4gICAgICAgICAgICBvdXRwdXQucHVzaChcIiAgbWFwX2QgXCIgKyB1dnNjYWxlICsgbS5vcGFjaXR5VGV4dHVyZS5uYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHQgPSBvdXRwdXQuam9pbihcIlxcblwiKTtcclxuICAgICAgICByZXR1cm4gdGV4dDtcclxuICAgIH1cclxufVxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8taW50ZXJuYWwtbW9kdWxlcyAqL1xyXG5pbXBvcnQgKiBhcyBTZXJpYWxpemVycyBmcm9tIFwic2VyaWFsaXplcnMvT0JKL2luZGV4XCI7XHJcblxyXG4vKipcclxuICogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBVTUQgbW9kdWxlLlxyXG4gKiBUaGUgZW50cnkgcG9pbnQgZm9yIGEgZnV0dXJlIEVTTSBwYWNrYWdlIHNob3VsZCBiZSBpbmRleC50c1xyXG4gKi9cclxuY29uc3QgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XHJcbmlmICh0eXBlb2YgZ2xvYmFsT2JqZWN0ICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICBmb3IgKGNvbnN0IHNlcmlhbGl6ZXIgaW4gU2VyaWFsaXplcnMpIHtcclxuICAgICAgICAoPGFueT5nbG9iYWxPYmplY3QpLkJBQllMT05bc2VyaWFsaXplcl0gPSAoPGFueT5TZXJpYWxpemVycylbc2VyaWFsaXplcl07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCAqIGZyb20gXCJzZXJpYWxpemVycy9PQkovaW5kZXhcIjtcclxuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2JhYnlsb25qc19NYXRoc19tYXRoX3ZlY3Rvcl9fOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCAqIGFzIHNlcmlhbGl6ZXJzIGZyb20gXCJAbHRzL3NlcmlhbGl6ZXJzL2xlZ2FjeS9sZWdhY3ktb2JqU2VyaWFsaXplclwiO1xyXG5leHBvcnQgeyBzZXJpYWxpemVycyB9O1xyXG5leHBvcnQgZGVmYXVsdCBzZXJpYWxpemVycztcclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9
|
|
@@ -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={597:t=>{t.exports=e}},
|
|
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={597:t=>{t.exports=e}},r={};function o(e){var i=r[e];if(void 0!==i)return i.exports;var n=r[e]={exports:{}};return t[e](n,n.exports,o),n.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 i={};return(()=>{o.d(i,{default:()=>u});var e={};o.r(e),o.d(e,{OBJExport:()=>n});var t={};o.r(t),o.d(t,{OBJExport:()=>n});var r=o(597),n=function(){function e(){}return e.OBJ=function(e,t,o,i){var n=[],a=1,s=1;t&&(o||(o="mat"),n.push("mtllib "+o+".mtl"));for(var u=0;u<e.length;u++){var l=e[u].name||"mesh".concat(u,"}");n.push("o ".concat(l));var p=null;if(i){var f=e[u].computeWorldMatrix(!0);p=new r.Matrix,f.invertToRef(p),e[u].bakeTransformIntoVertices(f)}if(t){var d=e[u].material;d&&n.push("usemtl "+d.id)}var m=e[u].geometry;if(m){var c=m.getVerticesData("position"),h=m.getVerticesData("normal"),b=m.getVerticesData("uv"),x=m.getIndices(),v=0,g=0;if(c&&x){for(var y=e[0].getScene().useRightHandedSystem,T=y?1:-1,j=0;j<c.length;j+=3)n.push("v "+c[j]*T+" "+c[j+1]+" "+c[j+2]),v++;if(null!=h)for(j=0;j<h.length;j+=3)n.push("vn "+h[j]*T+" "+h[j+1]+" "+h[j+2]);if(null!=b)for(j=0;j<b.length;j+=2)n.push("vt "+b[j]+" "+b[j+1]),g++;var F=["","",""],S=y?[2,1]:[1,2],w=S[0],C=S[1];for(j=0;j<x.length;j+=3){var O=[String(x[j]+a),String(x[j+w]+a),String(x[j+C]+a)],B=[String(x[j]+s),String(x[j+w]+s),String(x[j+C]+s)],K=O,_=null!=b?B:F,I=null!=h?O:F;n.push("f "+K[0]+"/"+_[0]+"/"+I[0]+" "+K[1]+"/"+_[1]+"/"+I[1]+" "+K[2]+"/"+_[2]+"/"+I[2])}i&&p&&e[u].bakeTransformIntoVertices(p),a+=v,s+=g}else r.Tools.Warn("There are no position vertices or indices on the mesh!")}else r.Tools.Warn("No geometry is present on the mesh")}return n.join("\n")},e.MTL=function(e){var t=[],r=e.material;return t.push("newmtl mat1"),t.push(" Ns "+r.specularPower.toFixed(4)),t.push(" Ni 1.5000"),t.push(" d "+r.alpha.toFixed(4)),t.push(" Tr 0.0000"),t.push(" Tf 1.0000 1.0000 1.0000"),t.push(" illum 2"),t.push(" Ka "+r.ambientColor.r.toFixed(4)+" "+r.ambientColor.g.toFixed(4)+" "+r.ambientColor.b.toFixed(4)),t.push(" Kd "+r.diffuseColor.r.toFixed(4)+" "+r.diffuseColor.g.toFixed(4)+" "+r.diffuseColor.b.toFixed(4)),t.push(" Ks "+r.specularColor.r.toFixed(4)+" "+r.specularColor.g.toFixed(4)+" "+r.specularColor.b.toFixed(4)),t.push(" Ke "+r.emissiveColor.r.toFixed(4)+" "+r.emissiveColor.g.toFixed(4)+" "+r.emissiveColor.b.toFixed(4)),r.ambientTexture&&t.push(" map_Ka "+r.ambientTexture.name),r.diffuseTexture&&t.push(" map_Kd "+r.diffuseTexture.name),r.specularTexture&&t.push(" map_Ks "+r.specularTexture.name),r.bumpTexture&&t.push(" map_bump -imfchan z "+r.bumpTexture.name),r.opacityTexture&&t.push(" map_d "+r.opacityTexture.name),t.join("\n")},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 u=t})(),i.default})()));
|
|
2
2
|
//# sourceMappingURL=babylon.objSerializer.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"babylon.objSerializer.min.js","mappings":"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","sources":["webpack://SERIALIZERS/webpack/universalModuleDefinition","webpack://SERIALIZERS/external umd {\"root\":\"BABYLON\",\"commonjs\":\"babylonjs\",\"commonjs2\":\"babylonjs\",\"amd\":\"babylonjs\"}","webpack://SERIALIZERS/webpack/bootstrap","webpack://SERIALIZERS/webpack/runtime/define property getters","webpack://SERIALIZERS/webpack/runtime/global","webpack://SERIALIZERS/webpack/runtime/hasOwnProperty shorthand","webpack://SERIALIZERS/webpack/runtime/make namespace object","webpack://SERIALIZERS/../../../dev/serializers/src/OBJ/objSerializer.ts","webpack://SERIALIZERS/../../../lts/serializers/src/legacy/legacy-objSerializer.ts","webpack://SERIALIZERS/./src/obj.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"babylonjs\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"babylonjs-serializers\", [\"babylonjs\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"babylonjs-serializers\"] = factory(require(\"babylonjs\"));\n\telse\n\t\troot[\"SERIALIZERS\"] = factory(root[\"BABYLON\"]);\n})((typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : this), (__WEBPACK_EXTERNAL_MODULE__597__) => {\nreturn ","module.exports = __WEBPACK_EXTERNAL_MODULE__597__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { Nullable } from \"core/types\";\r\nimport { Matrix } from \"core/Maths/math.vector\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport type { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport type { Geometry } from \"core/Meshes/geometry\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\n\r\n/**\r\n * Class for generating OBJ data from a Babylon scene.\r\n */\r\nexport class OBJExport {\r\n /**\r\n * Exports the geometry of a Mesh array in .OBJ file format (text)\r\n * @param mesh defines the list of meshes to serialize\r\n * @param materials defines if materials should be exported\r\n * @param matlibname defines the name of the associated mtl file\r\n * @param globalposition defines if the exported positions are globals or local to the exported mesh\r\n * @returns the OBJ content\r\n */\r\n public static OBJ(mesh: Mesh[], materials?: boolean, matlibname?: string, globalposition?: boolean): string {\r\n const output: string[] = [];\r\n let v = 1;\r\n // keep track of uv index in case mixed meshes are passed in\r\n let textureV = 1;\r\n\r\n if (materials) {\r\n if (!matlibname) {\r\n matlibname = \"mat\";\r\n }\r\n output.push(\"mtllib \" + matlibname + \".mtl\");\r\n }\r\n for (let j = 0; j < mesh.length; j++) {\r\n output.push(\"g object\" + j);\r\n output.push(\"o object_\" + j);\r\n\r\n //Uses the position of the item in the scene, to the file (this back to normal in the end)\r\n let inverseTransform: Nullable<Matrix> = null;\r\n if (globalposition) {\r\n const transform = mesh[j].computeWorldMatrix(true);\r\n inverseTransform = new Matrix();\r\n transform.invertToRef(inverseTransform);\r\n\r\n mesh[j].bakeTransformIntoVertices(transform);\r\n }\r\n\r\n //TODO: submeshes (groups)\r\n //TODO: smoothing groups (s 1, s off);\r\n if (materials) {\r\n const mat = mesh[j].material;\r\n\r\n if (mat) {\r\n output.push(\"usemtl \" + mat.id);\r\n }\r\n }\r\n const g: Nullable<Geometry> = mesh[j].geometry;\r\n\r\n if (!g) {\r\n Tools.Warn(\"No geometry is present on the mesh\");\r\n continue;\r\n }\r\n\r\n const trunkVerts = g.getVerticesData(\"position\");\r\n const trunkNormals = g.getVerticesData(\"normal\");\r\n const trunkUV = g.getVerticesData(\"uv\");\r\n const trunkFaces = g.getIndices();\r\n let currentV = 0;\r\n let currentTextureV = 0;\r\n\r\n if (!trunkVerts || !trunkFaces) {\r\n Tools.Warn(\"There are no position vertices or indices on the mesh!\");\r\n continue;\r\n }\r\n\r\n for (let i = 0; i < trunkVerts.length; i += 3) {\r\n // Babylon.js default is left handed, while OBJ default is right handed\r\n // Need to invert Z vertices unless Babylon is set to use a right handed system\r\n if (mesh[0].getScene().useRightHandedSystem) {\r\n output.push(\"v \" + trunkVerts[i] + \" \" + trunkVerts[i + 1] + \" \" + trunkVerts[i + 2]);\r\n } else {\r\n output.push(\"v \" + trunkVerts[i] + \" \" + trunkVerts[i + 1] + \" \" + -trunkVerts[i + 2]);\r\n }\r\n currentV++;\r\n }\r\n\r\n if (trunkNormals != null) {\r\n for (let i = 0; i < trunkNormals.length; i += 3) {\r\n output.push(\"vn \" + trunkNormals[i] + \" \" + trunkNormals[i + 1] + \" \" + trunkNormals[i + 2]);\r\n }\r\n }\r\n if (trunkUV != null) {\r\n for (let i = 0; i < trunkUV.length; i += 2) {\r\n output.push(\"vt \" + trunkUV[i] + \" \" + trunkUV[i + 1]);\r\n currentTextureV++;\r\n }\r\n }\r\n\r\n for (let i = 0; i < trunkFaces.length; i += 3) {\r\n const indices = [String(trunkFaces[i + 2] + v), String(trunkFaces[i + 1] + v), String(trunkFaces[i] + v)];\r\n const textureIndices = [String(trunkFaces[i + 2] + textureV), String(trunkFaces[i + 1] + textureV), String(trunkFaces[i] + textureV)];\r\n const blanks: string[] = [\"\", \"\", \"\"];\r\n\r\n const facePositions = indices;\r\n const faceUVs = trunkUV != null ? textureIndices : blanks;\r\n const faceNormals = trunkNormals != null ? indices : blanks;\r\n\r\n output.push(\r\n \"f \" +\r\n facePositions[0] +\r\n \"/\" +\r\n faceUVs[0] +\r\n \"/\" +\r\n faceNormals[0] +\r\n \" \" +\r\n facePositions[1] +\r\n \"/\" +\r\n faceUVs[1] +\r\n \"/\" +\r\n faceNormals[1] +\r\n \" \" +\r\n facePositions[2] +\r\n \"/\" +\r\n faceUVs[2] +\r\n \"/\" +\r\n faceNormals[2]\r\n );\r\n }\r\n //back de previous matrix, to not change the original mesh in the scene\r\n if (globalposition && inverseTransform) {\r\n mesh[j].bakeTransformIntoVertices(inverseTransform);\r\n }\r\n v += currentV;\r\n textureV += currentTextureV;\r\n }\r\n const text: string = output.join(\"\\n\");\r\n return text;\r\n }\r\n\r\n /**\r\n * Exports the material(s) of a mesh in .MTL file format (text)\r\n * @param mesh defines the mesh to extract the material from\r\n * @returns the mtl content\r\n */\r\n //TODO: Export the materials of mesh array\r\n public static MTL(mesh: Mesh): string {\r\n const output = [];\r\n const m = <StandardMaterial>mesh.material;\r\n output.push(\"newmtl mat1\");\r\n output.push(\" Ns \" + m.specularPower.toFixed(4));\r\n output.push(\" Ni 1.5000\");\r\n output.push(\" d \" + m.alpha.toFixed(4));\r\n output.push(\" Tr 0.0000\");\r\n output.push(\" Tf 1.0000 1.0000 1.0000\");\r\n output.push(\" illum 2\");\r\n output.push(\" Ka \" + m.ambientColor.r.toFixed(4) + \" \" + m.ambientColor.g.toFixed(4) + \" \" + m.ambientColor.b.toFixed(4));\r\n output.push(\" Kd \" + m.diffuseColor.r.toFixed(4) + \" \" + m.diffuseColor.g.toFixed(4) + \" \" + m.diffuseColor.b.toFixed(4));\r\n output.push(\" Ks \" + m.specularColor.r.toFixed(4) + \" \" + m.specularColor.g.toFixed(4) + \" \" + m.specularColor.b.toFixed(4));\r\n output.push(\" Ke \" + m.emissiveColor.r.toFixed(4) + \" \" + m.emissiveColor.g.toFixed(4) + \" \" + m.emissiveColor.b.toFixed(4));\r\n\r\n //TODO: uv scale, offset, wrap\r\n //TODO: UV mirrored in Blender? second UV channel? lightMap? reflection textures?\r\n const uvscale = \"\";\r\n\r\n if (m.ambientTexture) {\r\n output.push(\" map_Ka \" + uvscale + m.ambientTexture.name);\r\n }\r\n\r\n if (m.diffuseTexture) {\r\n output.push(\" map_Kd \" + uvscale + m.diffuseTexture.name);\r\n //TODO: alpha testing, opacity in diffuse texture alpha channel (diffuseTexture.hasAlpha -> map_d)\r\n }\r\n\r\n if (m.specularTexture) {\r\n output.push(\" map_Ks \" + uvscale + m.specularTexture.name);\r\n /* TODO: glossiness = specular highlight component is in alpha channel of specularTexture. (???)\r\n if (m.useGlossinessFromSpecularMapAlpha) {\r\n output.push(\" map_Ns \"+uvscale + m.specularTexture.name);\r\n }\r\n */\r\n }\r\n\r\n /* TODO: emissive texture not in .MAT format (???)\r\n if (m.emissiveTexture) {\r\n output.push(\" map_d \"+uvscale+m.emissiveTexture.name);\r\n }\r\n */\r\n\r\n if (m.bumpTexture) {\r\n output.push(\" map_bump -imfchan z \" + uvscale + m.bumpTexture.name);\r\n }\r\n\r\n if (m.opacityTexture) {\r\n output.push(\" map_d \" + uvscale + m.opacityTexture.name);\r\n }\r\n\r\n const text = output.join(\"\\n\");\r\n return text;\r\n }\r\n}\r\n","/* eslint-disable import/no-internal-modules */\r\nimport * as Serializers from \"serializers/OBJ/index\";\r\n\r\n/**\r\n * This is the entry point for the UMD module.\r\n * The entry point for a future ESM package should be index.ts\r\n */\r\nconst globalObject = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : undefined;\r\nif (typeof globalObject !== \"undefined\") {\r\n for (const serializer in Serializers) {\r\n (<any>globalObject).BABYLON[serializer] = (<any>Serializers)[serializer];\r\n }\r\n}\r\n\r\nexport * from \"serializers/OBJ/index\";\r\n","import * as serializers from \"@lts/serializers/legacy/legacy-objSerializer\";\r\nexport { serializers };\r\nexport default serializers;\r\n"],"names":["root","factory","exports","module","require","define","amd","self","global","this","__WEBPACK_EXTERNAL_MODULE__597__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","OBJ","mesh","materials","matlibname","globalposition","output","v","textureV","push","j","length","inverseTransform","transform","computeWorldMatrix","Matrix","invertToRef","bakeTransformIntoVertices","mat","material","id","geometry","trunkVerts","getVerticesData","trunkNormals","trunkUV","trunkFaces","getIndices","currentV","currentTextureV","i","getScene","useRightHandedSystem","indices","String","textureIndices","blanks","facePositions","faceUVs","faceNormals","Tools","Warn","join","MTL","m","specularPower","toFixed","alpha","ambientColor","b","diffuseColor","specularColor","emissiveColor","ambientTexture","name","diffuseTexture","specularTexture","bumpTexture","opacityTexture","globalObject","serializer","BABYLON"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"babylon.objSerializer.min.js","mappings":"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","sources":["webpack://SERIALIZERS/webpack/universalModuleDefinition","webpack://SERIALIZERS/external umd {\"root\":\"BABYLON\",\"commonjs\":\"babylonjs\",\"commonjs2\":\"babylonjs\",\"amd\":\"babylonjs\"}","webpack://SERIALIZERS/webpack/bootstrap","webpack://SERIALIZERS/webpack/runtime/define property getters","webpack://SERIALIZERS/webpack/runtime/global","webpack://SERIALIZERS/webpack/runtime/hasOwnProperty shorthand","webpack://SERIALIZERS/webpack/runtime/make namespace object","webpack://SERIALIZERS/../../../dev/serializers/src/OBJ/objSerializer.ts","webpack://SERIALIZERS/../../../lts/serializers/src/legacy/legacy-objSerializer.ts","webpack://SERIALIZERS/./src/obj.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"babylonjs\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"babylonjs-serializers\", [\"babylonjs\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"babylonjs-serializers\"] = factory(require(\"babylonjs\"));\n\telse\n\t\troot[\"SERIALIZERS\"] = factory(root[\"BABYLON\"]);\n})((typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : this), (__WEBPACK_EXTERNAL_MODULE__597__) => {\nreturn ","module.exports = __WEBPACK_EXTERNAL_MODULE__597__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { Nullable } from \"core/types\";\r\nimport { Matrix } from \"core/Maths/math.vector\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport type { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport type { Geometry } from \"core/Meshes/geometry\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\n\r\n/**\r\n * Class for generating OBJ data from a Babylon scene.\r\n */\r\nexport class OBJExport {\r\n /**\r\n * Exports the geometry of a Mesh array in .OBJ file format (text)\r\n * @param meshes defines the list of meshes to serialize\r\n * @param materials defines if materials should be exported\r\n * @param matlibname defines the name of the associated mtl file\r\n * @param globalposition defines if the exported positions are globals or local to the exported mesh\r\n * @returns the OBJ content\r\n */\r\n public static OBJ(meshes: Mesh[], materials?: boolean, matlibname?: string, globalposition?: boolean): string {\r\n const output: string[] = [];\r\n let v = 1;\r\n // keep track of uv index in case mixed meshes are passed in\r\n let textureV = 1;\r\n\r\n if (materials) {\r\n if (!matlibname) {\r\n matlibname = \"mat\";\r\n }\r\n output.push(\"mtllib \" + matlibname + \".mtl\");\r\n }\r\n for (let j = 0; j < meshes.length; j++) {\r\n const objectName = meshes[j].name || `mesh${j}}`;\r\n output.push(`o ${objectName}`);\r\n\r\n //Uses the position of the item in the scene, to the file (this back to normal in the end)\r\n let inverseTransform: Nullable<Matrix> = null;\r\n if (globalposition) {\r\n const transform = meshes[j].computeWorldMatrix(true);\r\n inverseTransform = new Matrix();\r\n transform.invertToRef(inverseTransform);\r\n\r\n meshes[j].bakeTransformIntoVertices(transform);\r\n }\r\n\r\n //TODO: submeshes (groups)\r\n //TODO: smoothing groups (s 1, s off);\r\n if (materials) {\r\n const mat = meshes[j].material;\r\n\r\n if (mat) {\r\n output.push(\"usemtl \" + mat.id);\r\n }\r\n }\r\n const g: Nullable<Geometry> = meshes[j].geometry;\r\n\r\n if (!g) {\r\n Tools.Warn(\"No geometry is present on the mesh\");\r\n continue;\r\n }\r\n\r\n const trunkVerts = g.getVerticesData(\"position\");\r\n const trunkNormals = g.getVerticesData(\"normal\");\r\n const trunkUV = g.getVerticesData(\"uv\");\r\n const trunkFaces = g.getIndices();\r\n let currentV = 0;\r\n let currentTextureV = 0;\r\n\r\n if (!trunkVerts || !trunkFaces) {\r\n Tools.Warn(\"There are no position vertices or indices on the mesh!\");\r\n continue;\r\n }\r\n\r\n const useRightHandedSystem = meshes[0].getScene().useRightHandedSystem;\r\n const handednessSign = useRightHandedSystem ? 1 : -1;\r\n\r\n for (let i = 0; i < trunkVerts.length; i += 3) {\r\n output.push(\"v \" + trunkVerts[i] * handednessSign + \" \" + trunkVerts[i + 1] + \" \" + trunkVerts[i + 2]);\r\n currentV++;\r\n }\r\n\r\n if (trunkNormals != null) {\r\n for (let i = 0; i < trunkNormals.length; i += 3) {\r\n output.push(\"vn \" + trunkNormals[i] * handednessSign + \" \" + trunkNormals[i + 1] + \" \" + trunkNormals[i + 2]);\r\n }\r\n }\r\n if (trunkUV != null) {\r\n for (let i = 0; i < trunkUV.length; i += 2) {\r\n output.push(\"vt \" + trunkUV[i] + \" \" + trunkUV[i + 1]);\r\n currentTextureV++;\r\n }\r\n }\r\n\r\n const blanks: string[] = [\"\", \"\", \"\"];\r\n const [offset1, offset2] = useRightHandedSystem ? [2, 1] : [1, 2];\r\n\r\n for (let i = 0; i < trunkFaces.length; i += 3) {\r\n const indices = [String(trunkFaces[i] + v), String(trunkFaces[i + offset1] + v), String(trunkFaces[i + offset2] + v)];\r\n const textureIndices = [String(trunkFaces[i] + textureV), String(trunkFaces[i + offset1] + textureV), String(trunkFaces[i + offset2] + textureV)];\r\n\r\n const facePositions = indices;\r\n const faceUVs = trunkUV != null ? textureIndices : blanks;\r\n const faceNormals = trunkNormals != null ? indices : blanks;\r\n\r\n output.push(\r\n \"f \" +\r\n facePositions[0] +\r\n \"/\" +\r\n faceUVs[0] +\r\n \"/\" +\r\n faceNormals[0] +\r\n \" \" +\r\n facePositions[1] +\r\n \"/\" +\r\n faceUVs[1] +\r\n \"/\" +\r\n faceNormals[1] +\r\n \" \" +\r\n facePositions[2] +\r\n \"/\" +\r\n faceUVs[2] +\r\n \"/\" +\r\n faceNormals[2]\r\n );\r\n }\r\n //back de previous matrix, to not change the original mesh in the scene\r\n if (globalposition && inverseTransform) {\r\n meshes[j].bakeTransformIntoVertices(inverseTransform);\r\n }\r\n v += currentV;\r\n textureV += currentTextureV;\r\n }\r\n const text: string = output.join(\"\\n\");\r\n return text;\r\n }\r\n\r\n /**\r\n * Exports the material(s) of a mesh in .MTL file format (text)\r\n * @param mesh defines the mesh to extract the material from\r\n * @returns the mtl content\r\n */\r\n //TODO: Export the materials of mesh array\r\n public static MTL(mesh: Mesh): string {\r\n const output = [];\r\n const m = <StandardMaterial>mesh.material;\r\n output.push(\"newmtl mat1\");\r\n output.push(\" Ns \" + m.specularPower.toFixed(4));\r\n output.push(\" Ni 1.5000\");\r\n output.push(\" d \" + m.alpha.toFixed(4));\r\n output.push(\" Tr 0.0000\");\r\n output.push(\" Tf 1.0000 1.0000 1.0000\");\r\n output.push(\" illum 2\");\r\n output.push(\" Ka \" + m.ambientColor.r.toFixed(4) + \" \" + m.ambientColor.g.toFixed(4) + \" \" + m.ambientColor.b.toFixed(4));\r\n output.push(\" Kd \" + m.diffuseColor.r.toFixed(4) + \" \" + m.diffuseColor.g.toFixed(4) + \" \" + m.diffuseColor.b.toFixed(4));\r\n output.push(\" Ks \" + m.specularColor.r.toFixed(4) + \" \" + m.specularColor.g.toFixed(4) + \" \" + m.specularColor.b.toFixed(4));\r\n output.push(\" Ke \" + m.emissiveColor.r.toFixed(4) + \" \" + m.emissiveColor.g.toFixed(4) + \" \" + m.emissiveColor.b.toFixed(4));\r\n\r\n //TODO: uv scale, offset, wrap\r\n //TODO: UV mirrored in Blender? second UV channel? lightMap? reflection textures?\r\n const uvscale = \"\";\r\n\r\n if (m.ambientTexture) {\r\n output.push(\" map_Ka \" + uvscale + m.ambientTexture.name);\r\n }\r\n\r\n if (m.diffuseTexture) {\r\n output.push(\" map_Kd \" + uvscale + m.diffuseTexture.name);\r\n //TODO: alpha testing, opacity in diffuse texture alpha channel (diffuseTexture.hasAlpha -> map_d)\r\n }\r\n\r\n if (m.specularTexture) {\r\n output.push(\" map_Ks \" + uvscale + m.specularTexture.name);\r\n /* TODO: glossiness = specular highlight component is in alpha channel of specularTexture. (???)\r\n if (m.useGlossinessFromSpecularMapAlpha) {\r\n output.push(\" map_Ns \"+uvscale + m.specularTexture.name);\r\n }\r\n */\r\n }\r\n\r\n /* TODO: emissive texture not in .MAT format (???)\r\n if (m.emissiveTexture) {\r\n output.push(\" map_d \"+uvscale+m.emissiveTexture.name);\r\n }\r\n */\r\n\r\n if (m.bumpTexture) {\r\n output.push(\" map_bump -imfchan z \" + uvscale + m.bumpTexture.name);\r\n }\r\n\r\n if (m.opacityTexture) {\r\n output.push(\" map_d \" + uvscale + m.opacityTexture.name);\r\n }\r\n\r\n const text = output.join(\"\\n\");\r\n return text;\r\n }\r\n}\r\n","/* eslint-disable import/no-internal-modules */\r\nimport * as Serializers from \"serializers/OBJ/index\";\r\n\r\n/**\r\n * This is the entry point for the UMD module.\r\n * The entry point for a future ESM package should be index.ts\r\n */\r\nconst globalObject = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : undefined;\r\nif (typeof globalObject !== \"undefined\") {\r\n for (const serializer in Serializers) {\r\n (<any>globalObject).BABYLON[serializer] = (<any>Serializers)[serializer];\r\n }\r\n}\r\n\r\nexport * from \"serializers/OBJ/index\";\r\n","import * as serializers from \"@lts/serializers/legacy/legacy-objSerializer\";\r\nexport { serializers };\r\nexport default serializers;\r\n"],"names":["root","factory","exports","module","require","define","amd","self","global","this","__WEBPACK_EXTERNAL_MODULE__597__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","OBJ","meshes","materials","matlibname","globalposition","output","v","textureV","push","j","length","objectName","name","inverseTransform","transform","computeWorldMatrix","Matrix","invertToRef","bakeTransformIntoVertices","mat","material","id","geometry","trunkVerts","getVerticesData","trunkNormals","trunkUV","trunkFaces","getIndices","currentV","currentTextureV","useRightHandedSystem","getScene","handednessSign","i","blanks","offset1","offset2","indices","String","textureIndices","facePositions","faceUVs","faceNormals","Tools","Warn","join","MTL","mesh","m","specularPower","toFixed","alpha","ambientColor","b","diffuseColor","specularColor","emissiveColor","ambientTexture","diffuseTexture","specularTexture","bumpTexture","opacityTexture","globalObject","serializer","BABYLON"],"sourceRoot":""}
|
|
@@ -1420,13 +1420,13 @@ declare module BABYLON {
|
|
|
1420
1420
|
export class OBJExport {
|
|
1421
1421
|
/**
|
|
1422
1422
|
* Exports the geometry of a Mesh array in .OBJ file format (text)
|
|
1423
|
-
* @param
|
|
1423
|
+
* @param meshes defines the list of meshes to serialize
|
|
1424
1424
|
* @param materials defines if materials should be exported
|
|
1425
1425
|
* @param matlibname defines the name of the associated mtl file
|
|
1426
1426
|
* @param globalposition defines if the exported positions are globals or local to the exported mesh
|
|
1427
1427
|
* @returns the OBJ content
|
|
1428
1428
|
*/
|
|
1429
|
-
static OBJ(
|
|
1429
|
+
static OBJ(meshes: Mesh[], materials?: boolean, matlibname?: string, globalposition?: boolean): string;
|
|
1430
1430
|
/**
|
|
1431
1431
|
* Exports the material(s) of a mesh in .MTL file format (text)
|
|
1432
1432
|
* @param mesh defines the mesh to extract the material from
|