@combeenation/3d-viewer 14.1.0 → 15.0.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/dist/lib-cjs/buildinfo.json +1 -1
- package/dist/lib-cjs/commonjs.tsconfig.tsbuildinfo +1 -1
- package/dist/lib-cjs/internal/cbn-custom-babylon-loader-plugin.js.map +1 -1
- package/dist/lib-cjs/internal/paintable-helper.js +2 -54
- package/dist/lib-cjs/internal/paintable-helper.js.map +1 -1
- package/dist/lib-cjs/internal/svg-helper.d.ts +4 -0
- package/dist/lib-cjs/internal/svg-helper.js +67 -0
- package/dist/lib-cjs/internal/svg-helper.js.map +1 -0
- package/dist/lib-cjs/internal/tags-helper.d.ts +1 -1
- package/dist/lib-cjs/internal/tags-helper.js +10 -8
- package/dist/lib-cjs/internal/tags-helper.js.map +1 -1
- package/dist/lib-cjs/internal/texture-parameter-helper.d.ts +37 -0
- package/dist/lib-cjs/internal/texture-parameter-helper.js +287 -0
- package/dist/lib-cjs/internal/texture-parameter-helper.js.map +1 -0
- package/dist/lib-cjs/manager/parameter-manager.d.ts +19 -1
- package/dist/lib-cjs/manager/parameter-manager.js +66 -7
- package/dist/lib-cjs/manager/parameter-manager.js.map +1 -1
- package/dist/lib-cjs/viewer-error.d.ts +1 -0
- package/dist/lib-cjs/viewer-error.js +1 -0
- package/dist/lib-cjs/viewer-error.js.map +1 -1
- package/dist/lib-cjs/viewer.js.map +1 -1
- package/package.json +13 -10
- package/src/internal/cbn-custom-babylon-loader-plugin.ts +1 -1
- package/src/internal/paintable-helper.ts +2 -54
- package/src/internal/svg-helper.ts +52 -0
- package/src/internal/tags-helper.ts +9 -7
- package/src/internal/texture-parameter-helper.ts +353 -0
- package/src/manager/parameter-manager.ts +84 -6
- package/src/viewer-error.ts +1 -0
- package/src/viewer.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cbn-custom-babylon-loader-plugin.js","sourceRoot":"","sources":["../../../src/internal/cbn-custom-babylon-loader-plugin.ts"],"names":[],"mappings":";;;AAAA,oCAAiG;AACjG,qDAA2D;AAC3D,uDAA6D;AAC7D,+CAAwE;AACxE,yCAA8C;AAE9C;;;;;;;;GAQG;AACH,SAAgB,oCAAoC;IAClD,wCAAwC;IACxC,4FAA4F;IAC5F,oGAAoG;IACpG,MAAM,oBAAoB,GAAG,mBAAW,CAAC,qBAAqB,CAAC,UAAU,CAAuB,CAAC;IAEjG,MAAM,YAAY,GAAuB;QACvC,IAAI,EAAE,wBAAwB;QAC9B,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,oBAAoB,CAAC,UAAU;QAC3C,IAAI,EAAE,oBAAoB,CAAC,IAAI;QAC/B,kBAAkB,EAAE,UAAU,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;YACzD,kHAAkH;YAClH,4BAA4B;YAC5B,0GAA0G;YAC1G,+GAA+G;YAC/G,MAAM,sBAAsB,GAAG,KAAK,CAAC,mBAAmB,CAAC;YACzD,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC;YAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"cbn-custom-babylon-loader-plugin.js","sourceRoot":"","sources":["../../../src/internal/cbn-custom-babylon-loader-plugin.ts"],"names":[],"mappings":";;;AAAA,oCAAiG;AACjG,qDAA2D;AAC3D,uDAA6D;AAC7D,+CAAwE;AACxE,yCAA8C;AAE9C;;;;;;;;GAQG;AACH,SAAgB,oCAAoC;IAClD,wCAAwC;IACxC,4FAA4F;IAC5F,oGAAoG;IACpG,MAAM,oBAAoB,GAAG,mBAAW,CAAC,qBAAqB,CAAC,UAAU,CAAuB,CAAC;IAEjG,MAAM,YAAY,GAAuB;QACvC,IAAI,EAAE,wBAAwB;QAC9B,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,oBAAoB,CAAC,UAAU;QAC3C,IAAI,EAAE,oBAAoB,CAAC,IAAI;QAC/B,kBAAkB,EAAE,UAAU,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;YACzD,kHAAkH;YAClH,4BAA4B;YAC5B,0GAA0G;YAC1G,+GAA+G;YAC/G,MAAM,sBAAsB,GAAG,KAAK,CAAC,mBAAmB,CAAC;YACzD,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC;YAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,CAAC;YAC9C,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAExF,2BAA2B,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;YAC3D,kCAAkC,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;YAClE,2BAA2B,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YAEtD,yCAAyC;YACzC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,CAAC;YAE1D,OAAO,iBAAiB,CAAC;QAC3B,CAAC;KACF,CAAC;IAEF,mBAAW,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AAC3C,CAAC;AAlCD,oFAkCC;AAOD,SAAS,mBAAmB,CAAC,IAAS;IACpC,MAAM,OAAO,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAA,oBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,OAAO,IAAI,YAAY,CAAC;AACjC,CAAC;AAQD,SAAS,WAAW,CAAC,IAAS;IAC5B,MAAM,OAAO,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,kBAAkB,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAA,oBAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEzE,OAAO,OAAO,IAAI,kBAAkB,CAAC;AACvC,CAAC;AAID,SAAS,iBAAiB,CAAC,IAAS;IAClC,OAAO,IAAI,IAAI,IAAA,mBAAO,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,SAAS,2BAA2B,CAAC,UAAmB,EAAE,SAAyB;IACjF,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;QAAE,OAAO;IAE3C,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAE9D,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;;QACtC,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;QAEjF,MAAM,sBAAsB,GAAG,MAAA,YAAY,CAAC,QAAQ,0CAAE,EAAE,CAAC;QACzD,MAAM,sBAAsB,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,CAAC;QAEtD,IAAI,sBAAsB,IAAI,sBAAsB,KAAK,sBAAsB,EAAE;YAC/E,MAAA,MAAM,CAAC,GAAG,0CAAE,MAAM,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;YAChE,IAAA,0CAAwB,EAAC,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;SACpF;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,kCAAkC,CAAC,UAAmB,EAAE,SAAyB;IACxF,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;QAAE,OAAO;IAE3C,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAE9D,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;;QACtC,IAAI,YAAY,YAAY,qBAAa,EAAE;YACzC,0GAA0G;YAC1G,gFAAgF;YAChF,MAAM,OAAO,GAAG,IAAA,qBAAO,EAAC,YAAY,CAAC,CAAC;YACtC,IAAI,OAAO,EAAE;gBACX,IAAA,2BAAa,EAAC,YAAY,CAAC,CAAC;gBAE5B,gFAAgF;gBAChF,MAAM,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAClG,MAAM,4BAA4B,GAAG,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,SAAS,0CAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;gBAC9F,MAAM,mBAAmB,GAAG,4BAA4B,aAA5B,4BAA4B,uBAA5B,4BAA4B,CAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;gBACxG,MAAM,UAAU,GAAG,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,IAAI,CAAC;gBAC7C,IAAI,UAAU,EAAE;oBACd,IAAA,6BAAe,EAAC,YAAY,EAAE,UAAU,CAAC,CAAC;iBAC3C;aACF;SACF;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,2BAA2B,CAAC,SAAyB,EAAE,KAAY;IAC1E,CAAC,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QACrD,MAAM,SAAS,GAAG,IAAA,wCAAuB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEhE,+GAA+G;QAC/G,kBAAkB;QAClB,KAAK,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAE1C,sFAAsF;QACtF,SAAS,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -25,6 +25,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.parsePaintable = exports.paintableParameterObserver = void 0;
|
|
27
27
|
const index_1 = require("../index");
|
|
28
|
+
const svg_helper_1 = require("./svg-helper");
|
|
28
29
|
const is_svg_1 = __importDefault(require("is-svg"));
|
|
29
30
|
const lodash_es_1 = require("lodash-es");
|
|
30
31
|
/**
|
|
@@ -193,7 +194,7 @@ function _drawPaintableOnMaterial(material, imageSource, scene, options) {
|
|
|
193
194
|
function _createImageFromSvg(svgSrc) {
|
|
194
195
|
return __awaiter(this, void 0, void 0, function* () {
|
|
195
196
|
// replace assets with their base64 versions in svg source code
|
|
196
|
-
const svgWithAssetsEmbedded = yield
|
|
197
|
+
const svgWithAssetsEmbedded = yield (0, svg_helper_1.embedAssets)(svgSrc);
|
|
197
198
|
// create data string which can be used as an image source
|
|
198
199
|
const svgEncoded = 'data:image/svg+xml,' + encodeURIComponent(svgWithAssetsEmbedded);
|
|
199
200
|
return _createImageFromImgSrc(svgEncoded);
|
|
@@ -231,57 +232,4 @@ function _createImageFromImgSrc(imgSrc) {
|
|
|
231
232
|
return img;
|
|
232
233
|
});
|
|
233
234
|
}
|
|
234
|
-
/**
|
|
235
|
-
* Replaces all supported image & font URLs in the given SVG with their base64 representation.
|
|
236
|
-
*/
|
|
237
|
-
function _embedAssets(svgSrc) {
|
|
238
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
239
|
-
const _imageExtensions = ['png', 'gif', 'jpg', 'jpeg', 'svg', 'bmp'];
|
|
240
|
-
const _fontExtensions = ['woff2', 'woff', 'ttf', 'otf'];
|
|
241
|
-
const _assetExtensions = [..._imageExtensions, ..._fontExtensions];
|
|
242
|
-
// Regex copied from https://stackoverflow.com/a/8943487/1273551, not "stress tested"...
|
|
243
|
-
const urlRegex = /(\bhttps?:\/\/[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|])/gi;
|
|
244
|
-
const allUrls = svgSrc.match(urlRegex);
|
|
245
|
-
const assetUrls = allUrls.filter(url => {
|
|
246
|
-
const indexParam = url.indexOf('?');
|
|
247
|
-
// remove url parameter to recognize extension
|
|
248
|
-
if (indexParam > -1) {
|
|
249
|
-
url = url.substring(0, indexParam);
|
|
250
|
-
}
|
|
251
|
-
return _assetExtensions.some(extension => url.toLowerCase().endsWith(`.${extension}`));
|
|
252
|
-
});
|
|
253
|
-
const assetBase64Fetcher = assetUrls.map(_fetchBase64AssetUrl);
|
|
254
|
-
const assetFetcherResults = yield Promise.all(assetBase64Fetcher);
|
|
255
|
-
return assetFetcherResults.reduce((svgSrc, x) => svgSrc.replace(x.url, x.base64), svgSrc);
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Fetch asset (image or font) and convert it to base64 string representation.
|
|
260
|
-
*/
|
|
261
|
-
function _fetchBase64AssetUrl(assetUrl) {
|
|
262
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
263
|
-
// TODO WTT: Cache known base64 representation and only fetch/convert when not already known.
|
|
264
|
-
// Usually the fetch shouldn't hit the network but the browser cache since the SVG was already drawn..
|
|
265
|
-
const resp = yield fetch(assetUrl);
|
|
266
|
-
const blob = yield resp.blob();
|
|
267
|
-
return new Promise((resolve, reject) => {
|
|
268
|
-
const reader = new FileReader();
|
|
269
|
-
reader.onloadend = (event) => {
|
|
270
|
-
const target = event.target;
|
|
271
|
-
if (!target) {
|
|
272
|
-
return reject(`Asset with URL "${assetUrl}" could not be loaded.`);
|
|
273
|
-
}
|
|
274
|
-
const result = target.result;
|
|
275
|
-
if (!result) {
|
|
276
|
-
return reject(`Asset with URL "${assetUrl}" returned an empty result.`);
|
|
277
|
-
}
|
|
278
|
-
resolve({
|
|
279
|
-
url: assetUrl,
|
|
280
|
-
base64: result.toString(),
|
|
281
|
-
});
|
|
282
|
-
};
|
|
283
|
-
reader.readAsDataURL(blob);
|
|
284
|
-
});
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
235
|
//# sourceMappingURL=paintable-helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paintable-helper.js","sourceRoot":"","sources":["../../../src/internal/paintable-helper.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"paintable-helper.js","sourceRoot":"","sources":["../../../src/internal/paintable-helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.embedAssets = void 0;
|
|
13
|
+
/**
|
|
14
|
+
* Replaces all supported image & font URLs in the given SVG with their base64 representation.
|
|
15
|
+
*/
|
|
16
|
+
function embedAssets(svgSrc) {
|
|
17
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
const _imageExtensions = ['png', 'gif', 'jpg', 'jpeg', 'svg', 'bmp'];
|
|
19
|
+
const _fontExtensions = ['woff2', 'woff', 'ttf', 'otf'];
|
|
20
|
+
const _assetExtensions = [..._imageExtensions, ..._fontExtensions];
|
|
21
|
+
// Regex copied from https://stackoverflow.com/a/8943487/1273551, not "stress tested"...
|
|
22
|
+
const urlRegex = /(\bhttps?:\/\/[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|])/gi;
|
|
23
|
+
const allUrls = svgSrc.match(urlRegex);
|
|
24
|
+
const assetUrls = allUrls.filter(url => {
|
|
25
|
+
const indexParam = url.indexOf('?');
|
|
26
|
+
// remove url parameter to recognize extension
|
|
27
|
+
if (indexParam > -1) {
|
|
28
|
+
url = url.substring(0, indexParam);
|
|
29
|
+
}
|
|
30
|
+
return _assetExtensions.some(extension => url.toLowerCase().endsWith(`.${extension}`));
|
|
31
|
+
});
|
|
32
|
+
const assetBase64Fetcher = assetUrls.map(_fetchBase64AssetUrl);
|
|
33
|
+
const assetFetcherResults = yield Promise.all(assetBase64Fetcher);
|
|
34
|
+
return assetFetcherResults.reduce((svgSrc, x) => svgSrc.replace(x.url, x.base64), svgSrc);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
exports.embedAssets = embedAssets;
|
|
38
|
+
/**
|
|
39
|
+
* Fetch asset (image or font) and convert it to base64 string representation.
|
|
40
|
+
*/
|
|
41
|
+
function _fetchBase64AssetUrl(assetUrl) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
// TODO WTT: Cache known base64 representation and only fetch/convert when not already known.
|
|
44
|
+
// Usually the fetch shouldn't hit the network but the browser cache since the SVG was already drawn..
|
|
45
|
+
const resp = yield fetch(assetUrl);
|
|
46
|
+
const blob = yield resp.blob();
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
const reader = new FileReader();
|
|
49
|
+
reader.onloadend = (event) => {
|
|
50
|
+
const target = event.target;
|
|
51
|
+
if (!target) {
|
|
52
|
+
return reject(`Asset with URL "${assetUrl}" could not be loaded.`);
|
|
53
|
+
}
|
|
54
|
+
const result = target.result;
|
|
55
|
+
if (!result) {
|
|
56
|
+
return reject(`Asset with URL "${assetUrl}" returned an empty result.`);
|
|
57
|
+
}
|
|
58
|
+
resolve({
|
|
59
|
+
url: assetUrl,
|
|
60
|
+
base64: result.toString(),
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
reader.readAsDataURL(blob);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=svg-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svg-helper.js","sourceRoot":"","sources":["../../../src/internal/svg-helper.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;GAEG;AACH,SAAsB,WAAW,CAAC,MAAc;;QAC9C,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACrE,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACxD,MAAM,gBAAgB,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,eAAe,CAAC,CAAC;QACnE,wFAAwF;QACxF,MAAM,QAAQ,GAAG,gEAAgE,CAAC;QAClF,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAa,CAAC;QAEnD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACrC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,8CAA8C;YAC9C,IAAI,UAAU,GAAG,CAAC,CAAC,EAAE;gBACnB,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;aACpC;YACD,OAAO,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC/D,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClE,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5F,CAAC;CAAA;AAnBD,kCAmBC;AAED;;GAEG;AACH,SAAe,oBAAoB,CAAC,QAAgB;;QAClD,6FAA6F;QAC7F,gHAAgH;QAChH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAE/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,CAAC,SAAS,GAAG,CAAC,KAAK,EAAQ,EAAE;gBACjC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC5B,IAAI,CAAC,MAAM,EAAE;oBACX,OAAO,MAAM,CAAC,mBAAmB,QAAQ,wBAAwB,CAAC,CAAC;iBACpE;gBACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC7B,IAAI,CAAC,MAAM,EAAE;oBACX,OAAO,MAAM,CAAC,mBAAmB,QAAQ,6BAA6B,CAAC,CAAC;iBACzE;gBACD,OAAO,CAAC;oBACN,GAAG,EAAE,QAAQ;oBACb,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAY;iBACpC,CAAC,CAAC;YACL,CAAC,CAAC;YACF,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;CAAA"}
|
|
@@ -6,7 +6,7 @@ declare type TagTarget = Node | Material;
|
|
|
6
6
|
export declare function hasTag(object: TagTarget, tag: string): boolean;
|
|
7
7
|
export declare function getTags(object: TagTarget): string[];
|
|
8
8
|
export declare function setTags(object: TagTarget, tags: string[]): void;
|
|
9
|
-
export declare function deleteAllTags(object: TagTarget): void;
|
|
10
9
|
export declare function setTagsAsString(object: TagTarget, tagsString: string): void;
|
|
11
10
|
export declare function cloneTags(sourceObject: TagTarget, destinationObject: TagTarget): void;
|
|
11
|
+
export declare function deleteAllTags(object: TagTarget): void;
|
|
12
12
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.deleteAllTags = exports.cloneTags = exports.setTagsAsString = exports.setTags = exports.getTags = exports.hasTag = void 0;
|
|
4
4
|
const tags_1 = require("@babylonjs/core/Misc/tags");
|
|
5
5
|
function hasTag(object, tag) {
|
|
6
6
|
return tags_1.Tags.MatchesQuery(object, tag);
|
|
@@ -14,18 +14,13 @@ function getTags(object) {
|
|
|
14
14
|
}
|
|
15
15
|
exports.getTags = getTags;
|
|
16
16
|
function setTags(object, tags) {
|
|
17
|
+
deleteAllTags(object);
|
|
17
18
|
const tagsString = tags.join(' ');
|
|
18
19
|
tags_1.Tags.AddTagsTo(object, tagsString);
|
|
19
20
|
}
|
|
20
21
|
exports.setTags = setTags;
|
|
21
|
-
function deleteAllTags(object) {
|
|
22
|
-
const curTags = tags_1.Tags.GetTags(object);
|
|
23
|
-
if (curTags) {
|
|
24
|
-
tags_1.Tags.RemoveTagsFrom(object, curTags);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
exports.deleteAllTags = deleteAllTags;
|
|
28
22
|
function setTagsAsString(object, tagsString) {
|
|
23
|
+
deleteAllTags(object);
|
|
29
24
|
tags_1.Tags.AddTagsTo(object, tagsString);
|
|
30
25
|
}
|
|
31
26
|
exports.setTagsAsString = setTagsAsString;
|
|
@@ -35,4 +30,11 @@ function cloneTags(sourceObject, destinationObject) {
|
|
|
35
30
|
}
|
|
36
31
|
}
|
|
37
32
|
exports.cloneTags = cloneTags;
|
|
33
|
+
function deleteAllTags(object) {
|
|
34
|
+
const curTags = tags_1.Tags.GetTags(object);
|
|
35
|
+
if (curTags) {
|
|
36
|
+
tags_1.Tags.RemoveTagsFrom(object, curTags);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.deleteAllTags = deleteAllTags;
|
|
38
40
|
//# sourceMappingURL=tags-helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags-helper.js","sourceRoot":"","sources":["../../../src/internal/tags-helper.ts"],"names":[],"mappings":";;;AACA,oDAAiD;AAQjD,SAAgB,MAAM,CAAC,MAAiB,EAAE,GAAW;IACnD,OAAO,WAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAFD,wBAEC;AAED,SAAgB,OAAO,CAAC,MAAiB;;IACvC,MAAM,UAAU,GAAG,MAAA,WAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,mCAAI,EAAE,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAErC,OAAO,IAAI,CAAC;AACd,CAAC;AALD,0BAKC;AAED,SAAgB,OAAO,CAAC,MAAiB,EAAE,IAAc;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,WAAI,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACrC,CAAC;
|
|
1
|
+
{"version":3,"file":"tags-helper.js","sourceRoot":"","sources":["../../../src/internal/tags-helper.ts"],"names":[],"mappings":";;;AACA,oDAAiD;AAQjD,SAAgB,MAAM,CAAC,MAAiB,EAAE,GAAW;IACnD,OAAO,WAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAFD,wBAEC;AAED,SAAgB,OAAO,CAAC,MAAiB;;IACvC,MAAM,UAAU,GAAG,MAAA,WAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,mCAAI,EAAE,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAErC,OAAO,IAAI,CAAC;AACd,CAAC;AALD,0BAKC;AAED,SAAgB,OAAO,CAAC,MAAiB,EAAE,IAAc;IACvD,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,WAAI,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACrC,CAAC;AAJD,0BAIC;AAED,SAAgB,eAAe,CAAC,MAAiB,EAAE,UAAkB;IACnE,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,WAAI,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACrC,CAAC;AAHD,0CAGC;AAED,SAAgB,SAAS,CAAC,YAAuB,EAAE,iBAA4B;IAC7E,IAAI,WAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;QAC9B,WAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,WAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;KACrE;AACH,CAAC;AAJD,8BAIC;AAED,SAAgB,aAAa,CAAC,MAAiB;IAC7C,MAAM,OAAO,GAAG,WAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,OAAO,EAAE;QACX,WAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC;AACH,CAAC;AALD,sCAKC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Scene } from '..';
|
|
2
|
+
import { ParameterManager } from '../manager/parameter-manager';
|
|
3
|
+
/**
|
|
4
|
+
* Texture parameters are a combination of the channel (e.g. albedo, bump, AO) and the "sub" parameter (e.g. uScale).
|
|
5
|
+
* Each parameter is available in each texture, that's why these textures parameter are defined as dotted path
|
|
6
|
+
* `albedoTexture.uScale`
|
|
7
|
+
* - channel: albedoTexture
|
|
8
|
+
* - parameter: uScale
|
|
9
|
+
* The consumer doesn't have to know this as there is `BuiltInParameters.createTextureParameter(channel, parameter)`,
|
|
10
|
+
* which composes this string internally
|
|
11
|
+
*/
|
|
12
|
+
export declare const BuiltInTextureParameter: {
|
|
13
|
+
image: string;
|
|
14
|
+
uOffset: string;
|
|
15
|
+
vOffset: string;
|
|
16
|
+
uScale: string;
|
|
17
|
+
vScale: string;
|
|
18
|
+
uAng: string;
|
|
19
|
+
vAng: string;
|
|
20
|
+
wAng: string;
|
|
21
|
+
clampU: string;
|
|
22
|
+
clampV: string;
|
|
23
|
+
uvSet: string;
|
|
24
|
+
};
|
|
25
|
+
export declare type BuiltInTextureParameterKeys = keyof typeof BuiltInTextureParameter;
|
|
26
|
+
export declare const ParameterTextureChannels: {
|
|
27
|
+
albedoTexture: string;
|
|
28
|
+
metallicRoughnessTexture: string;
|
|
29
|
+
bumpTexture: string;
|
|
30
|
+
emissiveTexture: string;
|
|
31
|
+
opacityTexture: string;
|
|
32
|
+
ambientTexture: string;
|
|
33
|
+
lightmapTexture: string;
|
|
34
|
+
detailmapTexture: string;
|
|
35
|
+
};
|
|
36
|
+
export declare type ParameterTextureChannelsKeys = keyof typeof ParameterTextureChannels;
|
|
37
|
+
export declare function createBuiltInTextureParameter(parameterManager: ParameterManager, scene: Scene): void;
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.createBuiltInTextureParameter = exports.ParameterTextureChannels = exports.BuiltInTextureParameter = void 0;
|
|
16
|
+
const __1 = require("..");
|
|
17
|
+
const parameter_manager_1 = require("../manager/parameter-manager");
|
|
18
|
+
const svg_helper_1 = require("./svg-helper");
|
|
19
|
+
const is_svg_1 = __importDefault(require("is-svg"));
|
|
20
|
+
/**
|
|
21
|
+
* Texture parameters are a combination of the channel (e.g. albedo, bump, AO) and the "sub" parameter (e.g. uScale).
|
|
22
|
+
* Each parameter is available in each texture, that's why these textures parameter are defined as dotted path
|
|
23
|
+
* `albedoTexture.uScale`
|
|
24
|
+
* - channel: albedoTexture
|
|
25
|
+
* - parameter: uScale
|
|
26
|
+
* The consumer doesn't have to know this as there is `BuiltInParameters.createTextureParameter(channel, parameter)`,
|
|
27
|
+
* which composes this string internally
|
|
28
|
+
*/
|
|
29
|
+
exports.BuiltInTextureParameter = {
|
|
30
|
+
image: 'image',
|
|
31
|
+
uOffset: 'uOffset',
|
|
32
|
+
vOffset: 'vOffset',
|
|
33
|
+
uScale: 'uScale',
|
|
34
|
+
vScale: 'vScale',
|
|
35
|
+
uAng: 'uAng',
|
|
36
|
+
vAng: 'vAng',
|
|
37
|
+
wAng: 'wAng',
|
|
38
|
+
clampU: 'clampU',
|
|
39
|
+
clampV: 'clampV',
|
|
40
|
+
uvSet: 'uvSet',
|
|
41
|
+
};
|
|
42
|
+
exports.ParameterTextureChannels = {
|
|
43
|
+
albedoTexture: 'albedoTexture',
|
|
44
|
+
metallicRoughnessTexture: 'metallicRoughnessTexture',
|
|
45
|
+
bumpTexture: 'bumpTexture',
|
|
46
|
+
emissiveTexture: 'emissiveTexture',
|
|
47
|
+
opacityTexture: 'opacityTexture',
|
|
48
|
+
ambientTexture: 'ambientTexture',
|
|
49
|
+
lightmapTexture: 'lightmapTexture',
|
|
50
|
+
detailmapTexture: 'detailmapTexture',
|
|
51
|
+
};
|
|
52
|
+
function createBuiltInTextureParameter(parameterManager, scene) {
|
|
53
|
+
// create parameter observer for each channel
|
|
54
|
+
Object.values(exports.ParameterTextureChannels).forEach(channel => {
|
|
55
|
+
parameterManager.setParameterObserver(`${channel}.${exports.BuiltInTextureParameter.image}`, ({ newValue, materials }) => __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
var _a;
|
|
57
|
+
const image = parameter_manager_1.ParameterManager.parseString(newValue);
|
|
58
|
+
let url = image;
|
|
59
|
+
const imageIsSvg = (0, is_svg_1.default)(image);
|
|
60
|
+
if (imageIsSvg) {
|
|
61
|
+
// NOTE: image can also be provided as "svg", which is more or less the successor of the "paintable"
|
|
62
|
+
// parameter. It misses the UV parameters, but we now have dedicated parameters for this.
|
|
63
|
+
// We used "Dynamic Textures" for paintables because we didn't know better I guess?
|
|
64
|
+
// However the rescaling functionality of "Dynamic Textures" is not required and therefore it can be
|
|
65
|
+
// implemented as a plain "Texture"
|
|
66
|
+
const svgWithAssetsEmbedded = yield (0, svg_helper_1.embedAssets)(image);
|
|
67
|
+
// convert into a base64 string, as this can be directly interpreted as "url", at least for Babylon.js
|
|
68
|
+
url = 'data:image/svg+xml;base64,' + btoa(svgWithAssetsEmbedded);
|
|
69
|
+
}
|
|
70
|
+
else if (image.includes('<svg') && image.includes('</svg>')) {
|
|
71
|
+
// seems like the user tried to use a SVG string, as <svg> tags are used
|
|
72
|
+
// inform the user that this is not a valid SVG string
|
|
73
|
+
throw new __1.ViewerError({
|
|
74
|
+
id: __1.ViewerErrorIds.InvalidParameterValue,
|
|
75
|
+
message: `Invalid value for parameter "image" given:\nsource string is no valid SVG string\nGiven value: ${image}`,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
for (const material of materials) {
|
|
79
|
+
const pbrMaterial = _assertAndConvertPBRMaterial(material, channel, exports.BuiltInTextureParameter.image);
|
|
80
|
+
const texture = _getTextureFromParameterChannel(pbrMaterial, channel);
|
|
81
|
+
if (texture) {
|
|
82
|
+
// create a clone of the texture, in this way we can load the image before assigning it to the material
|
|
83
|
+
// channel
|
|
84
|
+
const clonedTexture = texture.clone();
|
|
85
|
+
// update texture and await loading time right away
|
|
86
|
+
yield new Promise(resolve => clonedTexture.updateURL(url, undefined, resolve));
|
|
87
|
+
_assignTextureParameterChannel(clonedTexture, pbrMaterial, channel);
|
|
88
|
+
// dispose old texture
|
|
89
|
+
texture.dispose();
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
// no texture, or wrong type => create texture from scratch
|
|
93
|
+
// first we check if some settings were provided in the material definition
|
|
94
|
+
const addMatSettings = yield ((_a = window.Cbn) === null || _a === void 0 ? void 0 : _a.Assets.getMaterial(pbrMaterial.id));
|
|
95
|
+
const textureSettings = addMatSettings ? _getTextureObjFromParameterChannel(addMatSettings, channel) : {};
|
|
96
|
+
// overwrite the name with the url, as this is what the texture parser expects
|
|
97
|
+
textureSettings.name = url;
|
|
98
|
+
// use parser instead of constructor to keep the original texture settings
|
|
99
|
+
const newTexture = __1.Texture.Parse(textureSettings, scene, '');
|
|
100
|
+
if (!newTexture) {
|
|
101
|
+
throw new __1.ViewerError({
|
|
102
|
+
id: __1.ViewerErrorIds.TextureCouldNotBeParsed,
|
|
103
|
+
message: `Texture with url "${url}" could not be parsed`,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
// await loading of texture
|
|
107
|
+
yield new Promise(resolve => __1.BaseTexture.WhenAllReady([newTexture], resolve));
|
|
108
|
+
_assignTextureParameterChannel(newTexture, pbrMaterial, channel);
|
|
109
|
+
// apply texture settings, which have been set before the texture creation
|
|
110
|
+
yield parameterManager.applyTextureSettingsParameter(pbrMaterial, channel);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}));
|
|
114
|
+
parameterManager.setParameterObserver(`${channel}.${exports.BuiltInTextureParameter.uOffset}`, ({ newValue, materials }) => __awaiter(this, void 0, void 0, function* () {
|
|
115
|
+
const uOffset = parameter_manager_1.ParameterManager.parseNumber(newValue);
|
|
116
|
+
for (const material of materials) {
|
|
117
|
+
const pbrMaterial = _assertAndConvertPBRMaterial(material, channel, exports.BuiltInTextureParameter.uOffset);
|
|
118
|
+
_setUVTextureSetting('uOffset', uOffset, pbrMaterial, channel);
|
|
119
|
+
}
|
|
120
|
+
}));
|
|
121
|
+
parameterManager.setParameterObserver(`${channel}.${exports.BuiltInTextureParameter.vOffset}`, ({ newValue, materials }) => __awaiter(this, void 0, void 0, function* () {
|
|
122
|
+
const vOffset = parameter_manager_1.ParameterManager.parseNumber(newValue);
|
|
123
|
+
for (const material of materials) {
|
|
124
|
+
const pbrMaterial = _assertAndConvertPBRMaterial(material, channel, exports.BuiltInTextureParameter.vOffset);
|
|
125
|
+
_setUVTextureSetting('vOffset', vOffset, pbrMaterial, channel);
|
|
126
|
+
}
|
|
127
|
+
}));
|
|
128
|
+
parameterManager.setParameterObserver(`${channel}.${exports.BuiltInTextureParameter.uScale}`, ({ newValue, materials }) => __awaiter(this, void 0, void 0, function* () {
|
|
129
|
+
const uScale = parameter_manager_1.ParameterManager.parseNumber(newValue);
|
|
130
|
+
for (const material of materials) {
|
|
131
|
+
const pbrMaterial = _assertAndConvertPBRMaterial(material, channel, exports.BuiltInTextureParameter.uScale);
|
|
132
|
+
_setUVTextureSetting('uScale', uScale, pbrMaterial, channel);
|
|
133
|
+
}
|
|
134
|
+
}));
|
|
135
|
+
parameterManager.setParameterObserver(`${channel}.${exports.BuiltInTextureParameter.vScale}`, ({ newValue, materials }) => __awaiter(this, void 0, void 0, function* () {
|
|
136
|
+
const vScale = parameter_manager_1.ParameterManager.parseNumber(newValue);
|
|
137
|
+
for (const material of materials) {
|
|
138
|
+
const pbrMaterial = _assertAndConvertPBRMaterial(material, channel, exports.BuiltInTextureParameter.vScale);
|
|
139
|
+
_setUVTextureSetting('vScale', vScale, pbrMaterial, channel);
|
|
140
|
+
}
|
|
141
|
+
}));
|
|
142
|
+
parameterManager.setParameterObserver(`${channel}.${exports.BuiltInTextureParameter.uAng}`, ({ newValue, materials }) => __awaiter(this, void 0, void 0, function* () {
|
|
143
|
+
const uAng = parameter_manager_1.ParameterManager.parseNumber(newValue);
|
|
144
|
+
for (const material of materials) {
|
|
145
|
+
const pbrMaterial = _assertAndConvertPBRMaterial(material, channel, exports.BuiltInTextureParameter.uAng);
|
|
146
|
+
_setUVTextureSetting('uAng', uAng, pbrMaterial, channel);
|
|
147
|
+
}
|
|
148
|
+
}));
|
|
149
|
+
parameterManager.setParameterObserver(`${channel}.${exports.BuiltInTextureParameter.vAng}`, ({ newValue, materials }) => __awaiter(this, void 0, void 0, function* () {
|
|
150
|
+
const vAng = parameter_manager_1.ParameterManager.parseNumber(newValue);
|
|
151
|
+
for (const material of materials) {
|
|
152
|
+
const pbrMaterial = _assertAndConvertPBRMaterial(material, channel, exports.BuiltInTextureParameter.vAng);
|
|
153
|
+
_setUVTextureSetting('vAng', vAng, pbrMaterial, channel);
|
|
154
|
+
}
|
|
155
|
+
}));
|
|
156
|
+
parameterManager.setParameterObserver(`${channel}.${exports.BuiltInTextureParameter.wAng}`, ({ newValue, materials }) => __awaiter(this, void 0, void 0, function* () {
|
|
157
|
+
const wAng = parameter_manager_1.ParameterManager.parseNumber(newValue);
|
|
158
|
+
for (const material of materials) {
|
|
159
|
+
const pbrMaterial = _assertAndConvertPBRMaterial(material, channel, exports.BuiltInTextureParameter.wAng);
|
|
160
|
+
_setUVTextureSetting('wAng', wAng, pbrMaterial, channel);
|
|
161
|
+
}
|
|
162
|
+
}));
|
|
163
|
+
parameterManager.setParameterObserver(`${channel}.${exports.BuiltInTextureParameter.clampU}`, ({ newValue, materials }) => __awaiter(this, void 0, void 0, function* () {
|
|
164
|
+
const clampU = parameter_manager_1.ParameterManager.parseBoolean(newValue);
|
|
165
|
+
for (const material of materials) {
|
|
166
|
+
const pbrMaterial = _assertAndConvertPBRMaterial(material, channel, exports.BuiltInTextureParameter.clampU);
|
|
167
|
+
// we don't use _setUVTextureSetting here as the parameter ("clampU" - boolean) doesn't align with the actual
|
|
168
|
+
// texture setting ("wrapU" - enumeration)
|
|
169
|
+
const texture = _getTextureFromParameterChannel(pbrMaterial, channel);
|
|
170
|
+
if (texture) {
|
|
171
|
+
texture.wrapU = clampU ? __1.Texture.CLAMP_ADDRESSMODE : __1.Texture.WRAP_ADDRESSMODE;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}));
|
|
175
|
+
parameterManager.setParameterObserver(`${channel}.${exports.BuiltInTextureParameter.clampV}`, ({ newValue, materials }) => __awaiter(this, void 0, void 0, function* () {
|
|
176
|
+
const clampV = parameter_manager_1.ParameterManager.parseBoolean(newValue);
|
|
177
|
+
for (const material of materials) {
|
|
178
|
+
const pbrMaterial = _assertAndConvertPBRMaterial(material, channel, exports.BuiltInTextureParameter.clampV);
|
|
179
|
+
const texture = _getTextureFromParameterChannel(pbrMaterial, channel);
|
|
180
|
+
if (texture) {
|
|
181
|
+
texture.wrapV = clampV ? __1.Texture.CLAMP_ADDRESSMODE : __1.Texture.WRAP_ADDRESSMODE;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}));
|
|
185
|
+
parameterManager.setParameterObserver(`${channel}.${exports.BuiltInTextureParameter.uvSet}`, ({ newValue, materials }) => __awaiter(this, void 0, void 0, function* () {
|
|
186
|
+
const uvSet = parameter_manager_1.ParameterManager.parseNumber(newValue);
|
|
187
|
+
for (const material of materials) {
|
|
188
|
+
const pbrMaterial = _assertAndConvertPBRMaterial(material, channel, exports.BuiltInTextureParameter.uvSet);
|
|
189
|
+
const texture = _getTextureFromParameterChannel(pbrMaterial, channel);
|
|
190
|
+
if (texture) {
|
|
191
|
+
texture.coordinatesIndex = uvSet;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}));
|
|
195
|
+
});
|
|
196
|
+
// this parameter is required for activating the detailmap texture, as only assigning the texture is not enough
|
|
197
|
+
parameterManager.setParameterObserver(parameter_manager_1.BuiltInParameter.UseDetailmap, ({ newValue, materials }) => __awaiter(this, void 0, void 0, function* () {
|
|
198
|
+
const useDetailmap = parameter_manager_1.ParameterManager.parseBoolean(newValue);
|
|
199
|
+
for (const material of materials) {
|
|
200
|
+
const materialCls = material.getClassName();
|
|
201
|
+
if (materialCls !== 'PBRMaterial') {
|
|
202
|
+
throw new Error(`Enabling detailmap for material of instance "${materialCls}" not implemented`);
|
|
203
|
+
}
|
|
204
|
+
const pbrMaterial = material;
|
|
205
|
+
pbrMaterial.detailMap.isEnabled = useDetailmap;
|
|
206
|
+
}
|
|
207
|
+
}));
|
|
208
|
+
}
|
|
209
|
+
exports.createBuiltInTextureParameter = createBuiltInTextureParameter;
|
|
210
|
+
/**
|
|
211
|
+
* Help function for casting a material into a PBRMaterial type.\
|
|
212
|
+
* Only works if the class name confirms that this is a PBR material, throws an error for any other material type.
|
|
213
|
+
*
|
|
214
|
+
* @param channel only used for error message
|
|
215
|
+
* @param parameter only used for error message
|
|
216
|
+
*/
|
|
217
|
+
function _assertAndConvertPBRMaterial(material, channel, parameter) {
|
|
218
|
+
const materialCls = material.getClassName();
|
|
219
|
+
if (materialCls !== 'PBRMaterial') {
|
|
220
|
+
throw new Error(`Setting ${channel} ${parameter} for material of instance "${materialCls}" not implemented`);
|
|
221
|
+
}
|
|
222
|
+
return material;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Help function for adjusting "simple" UV texture settings, as described in the typing of `setting`
|
|
226
|
+
*/
|
|
227
|
+
function _setUVTextureSetting(setting, value, pbrMaterial, channel) {
|
|
228
|
+
const texture = _getTextureFromParameterChannel(pbrMaterial, channel);
|
|
229
|
+
if (texture) {
|
|
230
|
+
texture[setting] = value;
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
// this is fine, the texture may be created in a later step
|
|
234
|
+
// texture settings are applied automatically after the creation is done
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Get the runtime texture object from a certain channel in the material.\
|
|
239
|
+
* Only returns the texture if it's from type "Texture".
|
|
240
|
+
*/
|
|
241
|
+
function _getTextureFromParameterChannel(pbrMaterial, channel) {
|
|
242
|
+
let baseTexture;
|
|
243
|
+
if (channel === 'metallicRoughnessTexture') {
|
|
244
|
+
baseTexture = pbrMaterial.metallicTexture;
|
|
245
|
+
}
|
|
246
|
+
else if (channel === 'detailmapTexture') {
|
|
247
|
+
baseTexture = pbrMaterial.detailMap.texture;
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
// most times it's a direct assignment, special cases are handled above
|
|
251
|
+
baseTexture = pbrMaterial[channel];
|
|
252
|
+
}
|
|
253
|
+
// only return "Texture" types
|
|
254
|
+
return baseTexture instanceof __1.Texture ? baseTexture : undefined;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Assign runtime texture to the dedicated channel in the PBR material
|
|
258
|
+
*/
|
|
259
|
+
function _assignTextureParameterChannel(texture, pbrMaterial, channel) {
|
|
260
|
+
if (channel === 'metallicRoughnessTexture') {
|
|
261
|
+
pbrMaterial.metallicTexture = texture;
|
|
262
|
+
}
|
|
263
|
+
else if (channel === 'detailmapTexture') {
|
|
264
|
+
pbrMaterial.detailMap.texture = texture;
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
pbrMaterial[channel] = texture;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Similar to `_getTextureFromParameterChannel`, whereas the input is a plain JSON object instead of a runtime material
|
|
272
|
+
*/
|
|
273
|
+
function _getTextureObjFromParameterChannel(materialObj, channel) {
|
|
274
|
+
var _a;
|
|
275
|
+
let textureObj;
|
|
276
|
+
if (channel === 'metallicRoughnessTexture') {
|
|
277
|
+
textureObj = materialObj.metallicTexture;
|
|
278
|
+
}
|
|
279
|
+
else if (channel === 'detailmapTexture') {
|
|
280
|
+
textureObj = (_a = materialObj.detailMap) === null || _a === void 0 ? void 0 : _a.texture;
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
textureObj = materialObj[channel];
|
|
284
|
+
}
|
|
285
|
+
return textureObj !== null && textureObj !== void 0 ? textureObj : {};
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=texture-parameter-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texture-parameter-helper.js","sourceRoot":"","sources":["../../../src/internal/texture-parameter-helper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,0BAAqG;AACrG,oEAAkF;AAClF,6CAA2C;AAC3C,oDAA2B;AAE3B;;;;;;;;GAQG;AAEU,QAAA,uBAAuB,GAAG;IACrC,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;CACf,CAAC;AAGW,QAAA,wBAAwB,GAAG;IACtC,aAAa,EAAE,eAAe;IAC9B,wBAAwB,EAAE,0BAA0B;IACpD,WAAW,EAAE,aAAa;IAC1B,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;CACrC,CAAC;AAGF,SAAgB,6BAA6B,CAAC,gBAAkC,EAAE,KAAY;IAC5F,6CAA6C;IAC5C,MAAM,CAAC,MAAM,CAAC,gCAAwB,CAAoC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC5F,gBAAgB,CAAC,oBAAoB,CACnC,GAAG,OAAO,IAAI,+BAAuB,CAAC,KAAK,EAAE,EAC7C,CAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;;YAChC,MAAM,KAAK,GAAG,oCAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,GAAG,GAAG,KAAK,CAAC;YAEhB,MAAM,UAAU,GAAG,IAAA,gBAAK,EAAC,KAAK,CAAC,CAAC;YAChC,IAAI,UAAU,EAAE;gBACd,oGAAoG;gBACpG,yFAAyF;gBACzF,mFAAmF;gBACnF,oGAAoG;gBACpG,mCAAmC;gBACnC,MAAM,qBAAqB,GAAG,MAAM,IAAA,wBAAW,EAAC,KAAK,CAAC,CAAC;gBACvD,sGAAsG;gBACtG,GAAG,GAAG,4BAA4B,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC;aAClE;iBAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAC7D,wEAAwE;gBACxE,sDAAsD;gBACtD,MAAM,IAAI,eAAW,CAAC;oBACpB,EAAE,EAAE,kBAAc,CAAC,qBAAqB;oBACxC,OAAO,EAAE,kGAAkG,KAAK,EAAE;iBACnH,CAAC,CAAC;aACJ;YAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,MAAM,WAAW,GAAG,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,+BAAuB,CAAC,KAAK,CAAC,CAAC;gBACnG,MAAM,OAAO,GAAG,+BAA+B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAEtE,IAAI,OAAO,EAAE;oBACX,uGAAuG;oBACvG,UAAU;oBACV,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;oBACtC,mDAAmD;oBACnD,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;oBAErF,8BAA8B,CAAC,aAAa,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;oBAEpE,sBAAsB;oBACtB,OAAO,CAAC,OAAO,EAAE,CAAC;iBACnB;qBAAM;oBACL,2DAA2D;oBAC3D,2EAA2E;oBAC3E,MAAM,cAAc,GAAG,MAAM,CAAA,MAAA,MAAM,CAAC,GAAG,0CAAE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA,CAAC;oBAC5E,MAAM,eAAe,GAAG,cAAc,CAAC,CAAC,CAAC,kCAAkC,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAE1G,8EAA8E;oBAC7E,eAAuB,CAAC,IAAI,GAAG,GAAG,CAAC;oBACpC,0EAA0E;oBAC1E,MAAM,UAAU,GAAG,WAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,EAAE,EAAE,CAAY,CAAC;oBAExE,IAAI,CAAC,UAAU,EAAE;wBACf,MAAM,IAAI,eAAW,CAAC;4BACpB,EAAE,EAAE,kBAAc,CAAC,uBAAuB;4BAC1C,OAAO,EAAE,qBAAqB,GAAG,uBAAuB;yBACzD,CAAC,CAAC;qBACJ;oBAED,2BAA2B;oBAC3B,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,eAAW,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;oBACpF,8BAA8B,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;oBAEjE,0EAA0E;oBAC1E,MAAM,gBAAgB,CAAC,6BAA6B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;iBAC5E;aACF;QACH,CAAC,CAAA,CACF,CAAC;QACF,gBAAgB,CAAC,oBAAoB,CACnC,GAAG,OAAO,IAAI,+BAAuB,CAAC,OAAO,EAAE,EAC/C,CAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,oCAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEvD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,MAAM,WAAW,GAAG,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,+BAAuB,CAAC,OAAO,CAAC,CAAC;gBAErG,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;aAChE;QACH,CAAC,CAAA,CACF,CAAC;QACF,gBAAgB,CAAC,oBAAoB,CACnC,GAAG,OAAO,IAAI,+BAAuB,CAAC,OAAO,EAAE,EAC/C,CAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,oCAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEvD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,MAAM,WAAW,GAAG,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,+BAAuB,CAAC,OAAO,CAAC,CAAC;gBAErG,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;aAChE;QACH,CAAC,CAAA,CACF,CAAC;QACF,gBAAgB,CAAC,oBAAoB,CACnC,GAAG,OAAO,IAAI,+BAAuB,CAAC,MAAM,EAAE,EAC9C,CAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,oCAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEtD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,MAAM,WAAW,GAAG,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,+BAAuB,CAAC,MAAM,CAAC,CAAC;gBAEpG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;aAC9D;QACH,CAAC,CAAA,CACF,CAAC;QACF,gBAAgB,CAAC,oBAAoB,CACnC,GAAG,OAAO,IAAI,+BAAuB,CAAC,MAAM,EAAE,EAC9C,CAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,oCAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEtD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,MAAM,WAAW,GAAG,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,+BAAuB,CAAC,MAAM,CAAC,CAAC;gBAEpG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;aAC9D;QACH,CAAC,CAAA,CACF,CAAC;QACF,gBAAgB,CAAC,oBAAoB,CACnC,GAAG,OAAO,IAAI,+BAAuB,CAAC,IAAI,EAAE,EAC5C,CAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YAChC,MAAM,IAAI,GAAG,oCAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEpD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,MAAM,WAAW,GAAG,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,+BAAuB,CAAC,IAAI,CAAC,CAAC;gBAElG,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;aAC1D;QACH,CAAC,CAAA,CACF,CAAC;QACF,gBAAgB,CAAC,oBAAoB,CACnC,GAAG,OAAO,IAAI,+BAAuB,CAAC,IAAI,EAAE,EAC5C,CAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YAChC,MAAM,IAAI,GAAG,oCAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEpD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,MAAM,WAAW,GAAG,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,+BAAuB,CAAC,IAAI,CAAC,CAAC;gBAElG,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;aAC1D;QACH,CAAC,CAAA,CACF,CAAC;QACF,gBAAgB,CAAC,oBAAoB,CACnC,GAAG,OAAO,IAAI,+BAAuB,CAAC,IAAI,EAAE,EAC5C,CAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YAChC,MAAM,IAAI,GAAG,oCAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEpD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,MAAM,WAAW,GAAG,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,+BAAuB,CAAC,IAAI,CAAC,CAAC;gBAElG,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;aAC1D;QACH,CAAC,CAAA,CACF,CAAC;QACF,gBAAgB,CAAC,oBAAoB,CACnC,GAAG,OAAO,IAAI,+BAAuB,CAAC,MAAM,EAAE,EAC9C,CAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,oCAAgB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAEvD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,MAAM,WAAW,GAAG,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,+BAAuB,CAAC,MAAM,CAAC,CAAC;gBAEpG,6GAA6G;gBAC7G,0CAA0C;gBAC1C,MAAM,OAAO,GAAG,+BAA+B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACtE,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,WAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAO,CAAC,gBAAgB,CAAC;iBAC/E;aACF;QACH,CAAC,CAAA,CACF,CAAC;QACF,gBAAgB,CAAC,oBAAoB,CACnC,GAAG,OAAO,IAAI,+BAAuB,CAAC,MAAM,EAAE,EAC9C,CAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,oCAAgB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAEvD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,MAAM,WAAW,GAAG,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,+BAAuB,CAAC,MAAM,CAAC,CAAC;gBAEpG,MAAM,OAAO,GAAG,+BAA+B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACtE,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,WAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAO,CAAC,gBAAgB,CAAC;iBAC/E;aACF;QACH,CAAC,CAAA,CACF,CAAC;QACF,gBAAgB,CAAC,oBAAoB,CACnC,GAAG,OAAO,IAAI,+BAAuB,CAAC,KAAK,EAAE,EAC7C,CAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YAChC,MAAM,KAAK,GAAG,oCAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAErD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,MAAM,WAAW,GAAG,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,+BAAuB,CAAC,KAAK,CAAC,CAAC;gBAEnG,MAAM,OAAO,GAAG,+BAA+B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACtE,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;iBAClC;aACF;QACH,CAAC,CAAA,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,+GAA+G;IAC/G,gBAAgB,CAAC,oBAAoB,CAAC,oCAAgB,CAAC,YAAY,EAAE,CAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;QACrG,MAAM,YAAY,GAAG,oCAAgB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE7D,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC5C,IAAI,WAAW,KAAK,aAAa,EAAE;gBACjC,MAAM,IAAI,KAAK,CAAC,gDAAgD,WAAW,mBAAmB,CAAC,CAAC;aACjG;YAED,MAAM,WAAW,GAAG,QAAuB,CAAC;YAC5C,WAAW,CAAC,SAAS,CAAC,SAAS,GAAG,YAAY,CAAC;SAChD;IACH,CAAC,CAAA,CAAC,CAAC;AACL,CAAC;AA1ND,sEA0NC;AAED;;;;;;GAMG;AACH,SAAS,4BAA4B,CAAC,QAAkB,EAAE,OAAe,EAAE,SAAiB;IAC1F,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;IAC5C,IAAI,WAAW,KAAK,aAAa,EAAE;QACjC,MAAM,IAAI,KAAK,CAAC,WAAW,OAAO,IAAI,SAAS,8BAA8B,WAAW,mBAAmB,CAAC,CAAC;KAC9G;IAED,OAAO,QAAuB,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAC3B,OAAoG,EACpG,KAAa,EACb,WAAwB,EACxB,OAAqC;IAErC,MAAM,OAAO,GAAG,+BAA+B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAEtE,IAAI,OAAO,EAAE;QACX,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;KAC1B;SAAM;QACL,2DAA2D;QAC3D,wEAAwE;KACzE;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,+BAA+B,CACtC,WAAwB,EACxB,OAAqC;IAErC,IAAI,WAA+B,CAAC;IAEpC,IAAI,OAAO,KAAK,0BAA0B,EAAE;QAC1C,WAAW,GAAG,WAAW,CAAC,eAAe,CAAC;KAC3C;SAAM,IAAI,OAAO,KAAK,kBAAkB,EAAE;QACzC,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC;KAC7C;SAAM;QACL,uEAAuE;QACvE,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;KACpC;IAED,8BAA8B;IAC9B,OAAO,WAAW,YAAY,WAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,SAAS,8BAA8B,CACrC,OAAgB,EAChB,WAAwB,EACxB,OAAqC;IAErC,IAAI,OAAO,KAAK,0BAA0B,EAAE;QAC1C,WAAW,CAAC,eAAe,GAAG,OAAO,CAAC;KACvC;SAAM,IAAI,OAAO,KAAK,kBAAkB,EAAE;QACzC,WAAW,CAAC,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;KACzC;SAAM;QACL,WAAW,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;KAChC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kCAAkC,CAAC,WAAmB,EAAE,OAAqC;;IACpG,IAAI,UAA8B,CAAC;IAEnC,IAAI,OAAO,KAAK,0BAA0B,EAAE;QAC1C,UAAU,GAAI,WAAmB,CAAC,eAAe,CAAC;KACnD;SAAM,IAAI,OAAO,KAAK,kBAAkB,EAAE;QACzC,UAAU,GAAG,MAAC,WAAmB,CAAC,SAAS,0CAAE,OAAO,CAAC;KACtD;SAAM;QACL,UAAU,GAAI,WAAmB,CAAC,OAAO,CAAC,CAAC;KAC5C;IAED,OAAO,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,EAAE,CAAC;AAC1B,CAAC"}
|