@combeenation/3d-viewer 17.1.0 → 18.0.0-beta1

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.
Files changed (45) hide show
  1. package/dist/lib-cjs/buildinfo.json +1 -1
  2. package/dist/lib-cjs/commonjs.tsconfig.tsbuildinfo +1 -1
  3. package/dist/lib-cjs/index.d.ts +2 -0
  4. package/dist/lib-cjs/index.js +2 -0
  5. package/dist/lib-cjs/index.js.map +1 -1
  6. package/dist/lib-cjs/internal/asset-helper.d.ts +32 -0
  7. package/dist/lib-cjs/internal/asset-helper.js +105 -0
  8. package/dist/lib-cjs/internal/asset-helper.js.map +1 -0
  9. package/dist/lib-cjs/internal/cbn-custom-babylon-loader-plugin.d.ts +18 -0
  10. package/dist/lib-cjs/internal/cbn-custom-babylon-loader-plugin.js +22 -3
  11. package/dist/lib-cjs/internal/cbn-custom-babylon-loader-plugin.js.map +1 -1
  12. package/dist/lib-cjs/internal/texture-parameter-helper.js +26 -7
  13. package/dist/lib-cjs/internal/texture-parameter-helper.js.map +1 -1
  14. package/dist/lib-cjs/manager/camera-manager.js +4 -2
  15. package/dist/lib-cjs/manager/camera-manager.js.map +1 -1
  16. package/dist/lib-cjs/manager/debug-manager.js +1 -1
  17. package/dist/lib-cjs/manager/debug-manager.js.map +1 -1
  18. package/dist/lib-cjs/manager/model-manager.d.ts +11 -33
  19. package/dist/lib-cjs/manager/model-manager.js +47 -106
  20. package/dist/lib-cjs/manager/model-manager.js.map +1 -1
  21. package/dist/lib-cjs/manager/parameter-manager.d.ts +16 -11
  22. package/dist/lib-cjs/manager/parameter-manager.js +78 -69
  23. package/dist/lib-cjs/manager/parameter-manager.js.map +1 -1
  24. package/dist/lib-cjs/manager/scene-manager.d.ts +111 -5
  25. package/dist/lib-cjs/manager/scene-manager.js +269 -10
  26. package/dist/lib-cjs/manager/scene-manager.js.map +1 -1
  27. package/dist/lib-cjs/viewer-error.d.ts +1 -0
  28. package/dist/lib-cjs/viewer-error.js +1 -0
  29. package/dist/lib-cjs/viewer-error.js.map +1 -1
  30. package/dist/lib-cjs/viewer.d.ts +4 -13
  31. package/dist/lib-cjs/viewer.js +3 -37
  32. package/dist/lib-cjs/viewer.js.map +1 -1
  33. package/package.json +21 -12
  34. package/src/index.ts +2 -0
  35. package/src/internal/asset-helper.ts +115 -0
  36. package/src/internal/cbn-custom-babylon-loader-plugin.ts +30 -3
  37. package/src/internal/texture-parameter-helper.ts +25 -8
  38. package/src/manager/camera-manager.ts +4 -2
  39. package/src/manager/debug-manager.ts +1 -1
  40. package/src/manager/model-manager.ts +55 -137
  41. package/src/manager/parameter-manager.ts +93 -74
  42. package/src/manager/scene-manager.ts +366 -10
  43. package/src/viewer-error.ts +1 -0
  44. package/src/viewer.ts +13 -55
  45. package/src/dev.ts +0 -47
@@ -9,28 +9,18 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.ModelManager = exports.ExtendedAssetContainer = void 0;
12
+ exports.ModelManager = void 0;
13
13
  const index_1 = require("../index");
14
+ const asset_helper_1 = require("../internal/asset-helper");
14
15
  const cloning_helper_1 = require("../internal/cloning-helper");
15
- const metadata_helper_1 = require("../internal/metadata-helper");
16
16
  const lodash_es_1 = require("lodash-es");
17
- /**
18
- * Contains cbn custom data, like decals.
19
- * This is just a temporary type, as the `loadAssetContainer` function only returns an asset container, which can be
20
- * altered by our file loader plugin.
21
- * After loading the model, `cbnData` is cropped and a pure asset container is available for further processing.
22
- *
23
- * @internal
24
- */
25
- class ExtendedAssetContainer extends index_1.AssetContainer {
26
- }
27
- exports.ExtendedAssetContainer = ExtendedAssetContainer;
28
17
  /**
29
18
  * Manager for handling 3d models.\
30
19
  * Responsible for loading models and handling their visibility.\
31
20
  * Also contains advanced features like model cloning.
32
21
  */
33
22
  class ModelManager {
23
+ /** @internal */
34
24
  constructor(viewer) {
35
25
  this.viewer = viewer;
36
26
  this._modelAssets = {};
@@ -83,7 +73,7 @@ class ModelManager {
83
73
  for (const { name, url } of modelAssets) {
84
74
  const existingModel = this._modelAssets[name];
85
75
  if (existingModel) {
86
- console.warn(`Model ${name} is already registered`);
76
+ console.warn(`Model "${name}" is already registered`);
87
77
  return;
88
78
  }
89
79
  const model = { name, url, state: 'notLoaded', assetContainer: new index_1.AssetContainer(), isClone: false };
@@ -107,7 +97,7 @@ class ModelManager {
107
97
  });
108
98
  }
109
99
  if (model.state !== 'notLoaded') {
110
- console.warn(`Model ${name} is already loaded or currently loading`);
100
+ console.warn(`Model "${name}" is already loaded or currently loading`);
111
101
  return;
112
102
  }
113
103
  yield this._loadModel(model);
@@ -121,14 +111,14 @@ class ModelManager {
121
111
  * @returns Array of changed visibility status, combined with the corresponding model name
122
112
  */
123
113
  setModelVisibility(modelVisibility) {
124
- var _a;
125
114
  return __awaiter(this, void 0, void 0, function* () {
126
- const showModels = [];
127
- const hideModels = [];
115
+ const modelsToShow = [];
116
+ const modelsToHide = [];
128
117
  if (!(0, lodash_es_1.isArray)(modelVisibility)) {
129
118
  modelVisibility = [modelVisibility];
130
119
  }
131
- for (const entry of modelVisibility) {
120
+ const loadModelProms = modelVisibility.map((entry) => __awaiter(this, void 0, void 0, function* () {
121
+ var _a;
132
122
  const model = this._getModel(entry.name);
133
123
  if (!model) {
134
124
  throw new index_1.ViewerError({
@@ -139,50 +129,61 @@ class ModelManager {
139
129
  // there can be multiple "setModelVisibility" calls while the model is loading
140
130
  // loading can be awaited, but it has to be ensured, that the last call of "setModelVisibility" has priority
141
131
  // therefore we store the id of the call in the model
142
- const curVisibilityCallId = ((_a = model.visibilityCallId) !== null && _a !== void 0 ? _a : 0) + 1;
143
- model.visibilityCallId = curVisibilityCallId;
132
+ model.visibilityCallId = ((_a = model.visibilityCallId) !== null && _a !== void 0 ? _a : 0) + 1;
133
+ const curVisibilityCallId = model.visibilityCallId;
134
+ let showModel = false;
135
+ let hideModel = false;
144
136
  if (entry.visible) {
145
137
  if (model.state === 'notLoaded') {
146
138
  yield this._loadModel(model);
147
139
  // check if this is still the latest visibility call
148
140
  if (model.visibilityCallId === curVisibilityCallId) {
149
- showModels.push(model);
141
+ showModel = true;
150
142
  }
151
143
  }
152
144
  else if (model.state === 'loading') {
153
145
  yield this._loadModelPromises[model.name];
154
146
  if (model.visibilityCallId === curVisibilityCallId) {
155
- showModels.push(model);
147
+ showModel = true;
156
148
  }
157
149
  }
158
150
  else if (model.state === 'loaded') {
159
- showModels.push(model);
151
+ showModel = true;
160
152
  }
161
153
  }
162
154
  else {
163
155
  if (model.state === 'loading') {
164
156
  yield this._loadModelPromises[model.name];
165
157
  if (model.visibilityCallId === curVisibilityCallId) {
166
- hideModels.push(model);
158
+ hideModel = true;
167
159
  }
168
160
  }
169
161
  else if (model.state === 'inScene') {
170
- hideModels.push(model);
162
+ hideModel = true;
171
163
  }
172
164
  }
173
- }
174
- for (const showModel of showModels) {
175
- yield this._prepareModelForScene(showModel);
176
- }
177
- for (const showModel of showModels) {
178
- yield this._showModel(showModel, true);
179
- }
180
- for (const hideModel of hideModels) {
181
- this._hideModel(hideModel);
182
- }
165
+ if (showModel) {
166
+ yield this._prepareModelForScene(model);
167
+ modelsToShow.push(model);
168
+ }
169
+ else if (hideModel) {
170
+ modelsToHide.push(model);
171
+ }
172
+ }));
173
+ // model loading and preparation (e.g. create materials) is done simultaniously for all models to save time
174
+ // model (`ModelManager._loadModelPromises`) and material queues (`MaterialManager._createMaterialPromises`) are
175
+ // responsible for correct loading state handling of these instances
176
+ yield Promise.all(loadModelProms);
183
177
  const returnVal = [];
184
- showModels.forEach(showModel => returnVal.push({ name: showModel.name, visible: true }));
185
- hideModels.forEach(hideModel => returnVal.push({ name: hideModel.name, visible: false }));
178
+ modelsToShow.forEach(model => {
179
+ // show model is not async, as preparation has already been done
180
+ this._showModel(model, true);
181
+ returnVal.push({ name: model.name, visible: true });
182
+ });
183
+ modelsToHide.forEach(model => {
184
+ this._hideModel(model);
185
+ returnVal.push({ name: model.name, visible: false });
186
+ });
186
187
  return returnVal;
187
188
  });
188
189
  }
@@ -295,7 +296,7 @@ class ModelManager {
295
296
  * be useful e.g. for alterning decals.
296
297
  */
297
298
  getDecalsConfigurationOfModel(name) {
298
- var _a, _b;
299
+ var _a;
299
300
  return __awaiter(this, void 0, void 0, function* () {
300
301
  const model = this._getModel(name);
301
302
  if (!model) {
@@ -313,14 +314,14 @@ class ModelManager {
313
314
  if (model.state !== 'inScene') {
314
315
  yield this._prepareModelForScene(model);
315
316
  }
316
- return (_b = (_a = model.cbnBabylonFileData) === null || _a === void 0 ? void 0 : _a.decals) !== null && _b !== void 0 ? _b : [];
317
+ return (_a = model.decals) !== null && _a !== void 0 ? _a : [];
317
318
  });
318
319
  }
319
320
  /**
320
321
  * Get model by name
321
322
  */
322
323
  _getModel(name) {
323
- if (name === '$fallback') {
324
+ if (name === ModelManager.CBN_FALLBACK_MODEL_ASSET_NAME) {
324
325
  return this._fallbackModelAsset;
325
326
  }
326
327
  const replacedName = ModelManager._replaceSlashes(name);
@@ -333,53 +334,12 @@ class ModelManager {
333
334
  _loadModel(model) {
334
335
  return __awaiter(this, void 0, void 0, function* () {
335
336
  const loadModelPromise = () => __awaiter(this, void 0, void 0, function* () {
336
- model.state = 'loading';
337
- const curEnvTexture = this.viewer.scene.environmentTexture;
338
- const curEnvIntensity = this.viewer.scene.environmentIntensity;
339
- // CB-9240: Babylon.js doesn't recognize gzipped babylon files (`.babylon.gz`) as such, leading to a warning
340
- // message, therefore we overwrite the plugin extension actively for such files
341
- let pluginExtension;
342
- try {
343
- // URL constructor can throw for "valid" URL, which happened to be the case for the test asset environment where
344
- // the urls are relative (starting with ".")
345
- const urlObj = new URL(model.url);
346
- if (urlObj.pathname.endsWith('.babylon.gz')) {
347
- pluginExtension = '.babylon';
348
- }
349
- }
350
- catch (e) { }
351
- let assetContainer;
352
- try {
353
- const fullContainer = (yield index_1.SceneLoader.LoadAssetContainerAsync('', model.url, this.viewer.scene, undefined, pluginExtension));
354
- // crop and store custom cbn data from .babylon file
355
- model.cbnBabylonFileData = fullContainer.cbnData;
356
- delete fullContainer.cbnData;
357
- // from here it's a basic asset container again
358
- assetContainer = fullContainer;
359
- }
360
- catch (e) {
361
- throw new index_1.ViewerError({
362
- id: index_1.ViewerErrorIds.AssetLoadingFailed,
363
- message: e.message,
364
- });
365
- }
337
+ const { cbnData } = yield (0, asset_helper_1.loadAsset)(model, this.viewer);
338
+ model.decals = cbnData === null || cbnData === void 0 ? void 0 : cbnData.decals;
366
339
  // remove all lights and cameras from the asset, as this data should be handled globally in the scene instead of
367
340
  // being in a model context
368
- [...assetContainer.lights].forEach(light => light.dispose());
369
- [...assetContainer.cameras].forEach(camera => camera.dispose());
370
- // materials should be a "global" thing and not assigned to an asset container
371
- // this is not relevant in most of the cases, since materials are cropped from babylon models on the CBN server
372
- // anyway
373
- assetContainer.materials.forEach(material => {
374
- this.viewer.scene.addMaterial(material);
375
- material._parentContainer = null;
376
- });
377
- assetContainer.materials = [];
378
- // environment texture and intensity has been overwritten by load asset container function
379
- this.viewer.scene.environmentTexture = curEnvTexture;
380
- this.viewer.scene.environmentIntensity = curEnvIntensity;
381
- model.assetContainer = assetContainer;
382
- model.state = 'loaded';
341
+ [...model.assetContainer.lights].forEach(light => light.dispose());
342
+ [...model.assetContainer.cameras].forEach(camera => camera.dispose());
383
343
  delete this._loadModelPromises[model.name];
384
344
  });
385
345
  this._loadModelPromises[model.name] = loadModelPromise();
@@ -401,10 +361,7 @@ class ModelManager {
401
361
  const sourceModel = this._getModel(model.sourceModelName);
402
362
  yield this._prepareModelForScene(sourceModel);
403
363
  }
404
- yield this.viewer.parameterManager.applyAllParameterValuesToModel(model.assetContainer);
405
- // parameter manager did his job, now apply the deferred materials to all meshes that are not explicitely hidden by
406
- // the parameter manager
407
- yield this._applyDeferredMaterialsForAllVisibleMeshes(model);
364
+ yield (0, asset_helper_1.prepareAssetForScene)(model, this.viewer);
408
365
  });
409
366
  }
410
367
  /**
@@ -430,22 +387,6 @@ class ModelManager {
430
387
  model.assetContainer.removeFromScene();
431
388
  model.state = 'loaded';
432
389
  }
433
- /**
434
- * Creates and assigns each "deferred" material to the corresponding mesh, if the mesh is visible.
435
- * Model should be ready to use immediately after this function has done it's job.
436
- */
437
- _applyDeferredMaterialsForAllVisibleMeshes(model) {
438
- return __awaiter(this, void 0, void 0, function* () {
439
- for (const mesh of model.assetContainer.meshes) {
440
- const deferredMaterial = (0, metadata_helper_1.getInternalMetadataValue)(mesh, 'deferredMaterial');
441
- const rawVisibleValue = this.viewer.parameterManager.getParameterValueOfNode(mesh, index_1.BuiltInParameter.Visible);
442
- const visible = rawVisibleValue === undefined || index_1.ParameterManager.parseBoolean(rawVisibleValue) === true;
443
- if (deferredMaterial && visible) {
444
- yield this.viewer.materialManager.setMaterialOnMesh(deferredMaterial, mesh);
445
- }
446
- }
447
- });
448
- }
449
390
  }
450
391
  exports.ModelManager = ModelManager;
451
392
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"model-manager.js","sourceRoot":"","sources":["../../../src/manager/model-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-manager.js","sourceRoot":"","sources":["../../../src/manager/model-manager.ts"],"names":[],"mappings":"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"}
@@ -124,6 +124,7 @@ export declare class ParameterManager {
124
124
  protected _parameterObserver: {
125
125
  [parameterName: ParameterName]: ParameterObserver;
126
126
  };
127
+ /** @internal */
127
128
  constructor(viewer: Viewer);
128
129
  /**
129
130
  * Set parameter value for a certain node and calls the corresponding observer if the value has changed
@@ -190,20 +191,13 @@ export declare class ParameterManager {
190
191
  */
191
192
  applyTextureSettingsParameter(material: PBRMaterial, channel: ParameterTextureChannelsKeys): Promise<void>;
192
193
  /**
193
- * @returns Desired parameter value of a certain node.
194
- * Tags are considered as well but have lower priority than node parameters, as these are more specific.
195
- *
196
- * @internal
197
- */
198
- getParameterValueOfNode(node: TransformNode, parameterName: string): ParameterValue | undefined;
199
- /**
200
- * @returns Desired parameter value of a certain material.
201
- * Tags are considered as well but have lower priority than material parameters, as these are more specific.
202
- * Unused ATM, but added for consistency as counter part for {@link getParameterValueOfNode}
194
+ * Retrieves visibility state of node, considering pending parameter values and node hierarchy.\
195
+ * `node.isEnabled()` alone is insufficient here, as visibility observers for the desired node or one of it's parents
196
+ * may be called in the same cycle, overwriting the visibility state again.
203
197
  *
204
198
  * @internal
205
199
  */
206
- getParameterValueOfMaterial(material: Material, parameterName: string): ParameterValue | undefined;
200
+ getNestedVisibilityParameterValueOfNode(node: TransformNode): boolean;
207
201
  /**
208
202
  * Parameter observer implementation of default parameters
209
203
  */
@@ -233,5 +227,16 @@ export declare class ParameterManager {
233
227
  protected _getAffectedNodes(subject: ParameterSubject, assetContainer?: IAssetContainer): TransformNode[];
234
228
  protected _getEntry(subject: ParameterSubject, parameterName: ParameterName): ParameterEntry | undefined;
235
229
  protected _getEntriesOfSubject(subject: ParameterSubject): ParameterEntry[];
230
+ /**
231
+ * @returns Desired parameter value of a certain node.\
232
+ * Tags are considered as well but have lower priority than node parameters, as these are more specific.
233
+ */
234
+ protected _getParameterValueOfNode(node: TransformNode, parameterName: string): ParameterValue | undefined;
235
+ /**
236
+ * @returns Desired parameter value of a certain material.\
237
+ * Tags are considered as well but have lower priority than material parameters, as these are more specific.\
238
+ * Unused ATM, but added for consistency as counter part for {@link _getParameterValueOfNode}
239
+ */
240
+ protected _getParameterValueOfMaterial(material: Material, parameterName: string): ParameterValue | undefined;
236
241
  }
237
242
  export {};
@@ -45,6 +45,7 @@ const isTagParameterSubject = (subject) => 'tagName' in subject && !!subject.tag
45
45
  const isNodeParameterSubject = (subject) => 'nodeName' in subject && !!subject.nodeName;
46
46
  const isMaterialParameterSubject = (subject) => 'materialName' in subject && !!subject.materialName;
47
47
  class ParameterManager {
48
+ /** @internal */
48
49
  constructor(viewer) {
49
50
  this.viewer = viewer;
50
51
  this._parameterEntries = [];
@@ -340,44 +341,25 @@ class ParameterManager {
340
341
  });
341
342
  }
342
343
  /**
343
- * @returns Desired parameter value of a certain node.
344
- * Tags are considered as well but have lower priority than node parameters, as these are more specific.
344
+ * Retrieves visibility state of node, considering pending parameter values and node hierarchy.\
345
+ * `node.isEnabled()` alone is insufficient here, as visibility observers for the desired node or one of it's parents
346
+ * may be called in the same cycle, overwriting the visibility state again.
345
347
  *
346
348
  * @internal
347
349
  */
348
- getParameterValueOfNode(node, parameterName) {
349
- const nodeParamValue = this.getParameterValue({ nodeName: node.name }, parameterName);
350
- if (nodeParamValue !== undefined) {
351
- return nodeParamValue;
352
- }
353
- const tags = (0, tags_helper_1.getTagsAsStrArr)(node);
354
- const tagParamValue = tags.reduce((accValue, curTag) => {
355
- // NOTE: it is possible that values are available for multiple tags
356
- // in this case the resulting parameter value is quite "random" as the last tag in the tag string of the node has
357
- // priority
358
- const tagParamValue = this.getParameterValue({ tagName: curTag }, parameterName);
359
- return accValue !== null && accValue !== void 0 ? accValue : tagParamValue;
360
- }, undefined);
361
- return tagParamValue;
362
- }
363
- /**
364
- * @returns Desired parameter value of a certain material.
365
- * Tags are considered as well but have lower priority than material parameters, as these are more specific.
366
- * Unused ATM, but added for consistency as counter part for {@link getParameterValueOfNode}
367
- *
368
- * @internal
369
- */
370
- getParameterValueOfMaterial(material, parameterName) {
371
- const materialParamValue = this.getParameterValue({ materialName: material.name }, parameterName);
372
- if (materialParamValue !== undefined) {
373
- return materialParamValue;
350
+ getNestedVisibilityParameterValueOfNode(node) {
351
+ let curNode = node;
352
+ let visibleByParameter = undefined;
353
+ while (curNode && visibleByParameter !== false) {
354
+ const curNodeVisibleByParameter = this._getParameterValueOfNode(curNode, exports.BuiltInParameter.Visible);
355
+ if (curNodeVisibleByParameter !== undefined) {
356
+ visibleByParameter = curNodeVisibleByParameter;
357
+ }
358
+ curNode = curNode.parent;
374
359
  }
375
- const tags = (0, tags_helper_1.getTagsAsStrArr)(material);
376
- const tagParamValue = tags.reduce((accValue, curTag) => {
377
- const tagParamValue = this.getParameterValue({ tagName: curTag }, parameterName);
378
- return accValue !== null && accValue !== void 0 ? accValue : tagParamValue;
379
- }, undefined);
380
- return tagParamValue;
360
+ // check state of nested visibility parameter value and fall back to basic node enabled state
361
+ const visible = visibleByParameter !== undefined ? ParameterManager.parseBoolean(visibleByParameter) : node.isEnabled();
362
+ return visible;
381
363
  }
382
364
  /**
383
365
  * Parameter observer implementation of default parameters
@@ -385,57 +367,50 @@ class ParameterManager {
385
367
  _addBuiltInParameterObservers() {
386
368
  this.setParameterObserver(exports.BuiltInParameter.Visible, ({ nodes, newValue }) => __awaiter(this, void 0, void 0, function* () {
387
369
  const visible = ParameterManager.parseBoolean(newValue);
388
- for (const node of nodes) {
389
- if (visible) {
370
+ const observerProms = nodes.map((node) => __awaiter(this, void 0, void 0, function* () {
371
+ const visibleNested = this.getNestedVisibilityParameterValueOfNode(node);
372
+ if (visibleNested) {
390
373
  // if a mesh gets visible by this operation we have to activate the assigned material which is stored in the
391
374
  // internal metadata
392
375
  // => consider child meshes as well (CB-10143)
393
376
  const activatedNodes = [node, ...node.getChildMeshes(false)];
394
- for (const activatedNode of activatedNodes) {
395
- const deferredMaterial = (0, metadata_helper_1.getInternalMetadataValue)(activatedNode, 'deferredMaterial');
396
- if (deferredMaterial) {
397
- yield this.viewer.materialManager.setMaterialOnMesh(deferredMaterial,
377
+ const setMaterialProms = activatedNodes.map((an) => __awaiter(this, void 0, void 0, function* () {
378
+ const anVisibleNested = this.getNestedVisibilityParameterValueOfNode(an);
379
+ const anDeferredMaterial = (0, metadata_helper_1.getInternalMetadataValue)(an, 'deferredMaterial');
380
+ // skip applying material if it's already set via the parameter
381
+ const anMaterialParamValue = this._getParameterValueOfNode(an, exports.BuiltInParameter.Material);
382
+ if (anVisibleNested && anDeferredMaterial && !anMaterialParamValue) {
383
+ yield this.viewer.materialManager.setMaterialOnMesh(anDeferredMaterial,
398
384
  // this cast is fine, as deferred material can only be set on meshes
399
- activatedNode);
385
+ an);
400
386
  }
401
- }
402
- node.setEnabled(true);
387
+ }));
388
+ yield Promise.all(setMaterialProms);
403
389
  }
404
- else {
405
- node.setEnabled(false);
406
- }
407
- }
390
+ // set enabled state anyway
391
+ node.setEnabled(visible);
392
+ }));
393
+ yield Promise.all(observerProms);
408
394
  }));
409
395
  this.setParameterObserver(exports.BuiltInParameter.Material, ({ nodes, newValue }) => __awaiter(this, void 0, void 0, function* () {
410
396
  const material = ParameterManager.parseString(newValue);
411
- for (const node of nodes) {
397
+ const observerProms = nodes.map((node) => __awaiter(this, void 0, void 0, function* () {
412
398
  if (!(node instanceof index_1.AbstractMesh)) {
413
399
  throw new index_1.ViewerError({
414
400
  id: index_1.ViewerErrorIds.InvalidParameterSubject,
415
401
  message: `Material can't be set, as the target node "${node.name}" is not a mesh`,
416
402
  });
417
403
  }
418
- // NOTE: don't use node.isEnabled() as visibility observer is probably called in same cycle but later
419
- // however the parameter value is already correct at this stage
420
- // we have to go through all parents as well, because a parent may have been set to false, which also disables
421
- // this child node
422
- let curNode = node;
423
- let visibleByParameter = undefined;
424
- while (curNode && visibleByParameter !== false) {
425
- const curNodeVisibleByParameter = this.getParameterValueOfNode(curNode, exports.BuiltInParameter.Visible);
426
- if (curNodeVisibleByParameter !== undefined) {
427
- visibleByParameter = curNodeVisibleByParameter;
428
- }
429
- curNode = curNode.parent;
430
- }
431
- const visible = visibleByParameter !== undefined ? ParameterManager.parseBoolean(visibleByParameter) : node.isEnabled();
404
+ // only set material if the mesh is visible, or gets visible by the parameter update
405
+ const visible = this.getNestedVisibilityParameterValueOfNode(node);
432
406
  if (visible) {
433
407
  yield this.viewer.materialManager.setMaterialOnMesh(material, node);
434
408
  }
435
409
  else {
436
410
  (0, metadata_helper_1.setInternalMetadataValue)(node, 'deferredMaterial', material);
437
411
  }
438
- }
412
+ }));
413
+ yield Promise.all(observerProms);
439
414
  }));
440
415
  this.setParameterObserver(exports.BuiltInParameter.Position, ({ nodes, newValue }) => __awaiter(this, void 0, void 0, function* () {
441
416
  const position = ParameterManager.parseVector(newValue);
@@ -561,12 +536,10 @@ class ParameterManager {
561
536
  return __awaiter(this, void 0, void 0, function* () {
562
537
  const tagParamEntries = parameterEntries.filter(entry => isTagParameterSubject(entry.subject));
563
538
  const nonTagParamEntries = parameterEntries.filter(entry => !isTagParameterSubject(entry.subject));
564
- for (const entry of tagParamEntries) {
565
- yield this._applyParameterValue(entry.subject, entry.parameterName, assetContainer);
566
- }
567
- for (const entry of nonTagParamEntries) {
568
- yield this._applyParameterValue(entry.subject, entry.parameterName, assetContainer);
569
- }
539
+ const tagParamProms = tagParamEntries.map(entry => this._applyParameterValue(entry.subject, entry.parameterName, assetContainer));
540
+ yield Promise.all(tagParamProms);
541
+ const nonTagParamProms = nonTagParamEntries.map(entry => this._applyParameterValue(entry.subject, entry.parameterName, assetContainer));
542
+ yield Promise.all(nonTagParamProms);
570
543
  });
571
544
  }
572
545
  /**
@@ -644,6 +617,42 @@ class ParameterManager {
644
617
  });
645
618
  return entries;
646
619
  }
620
+ /**
621
+ * @returns Desired parameter value of a certain node.\
622
+ * Tags are considered as well but have lower priority than node parameters, as these are more specific.
623
+ */
624
+ _getParameterValueOfNode(node, parameterName) {
625
+ const nodeParamValue = this.getParameterValue({ nodeName: node.name }, parameterName);
626
+ if (nodeParamValue !== undefined) {
627
+ return nodeParamValue;
628
+ }
629
+ const tags = (0, tags_helper_1.getTagsAsStrArr)(node);
630
+ const tagParamValue = tags.reduce((accValue, curTag) => {
631
+ // NOTE: it is possible that values are available for multiple tags
632
+ // in this case the resulting parameter value is quite "random" as the last tag in the tag string of the node has
633
+ // priority
634
+ const tagParamValue = this.getParameterValue({ tagName: curTag }, parameterName);
635
+ return accValue !== null && accValue !== void 0 ? accValue : tagParamValue;
636
+ }, undefined);
637
+ return tagParamValue;
638
+ }
639
+ /**
640
+ * @returns Desired parameter value of a certain material.\
641
+ * Tags are considered as well but have lower priority than material parameters, as these are more specific.\
642
+ * Unused ATM, but added for consistency as counter part for {@link _getParameterValueOfNode}
643
+ */
644
+ _getParameterValueOfMaterial(material, parameterName) {
645
+ const materialParamValue = this.getParameterValue({ materialName: material.name }, parameterName);
646
+ if (materialParamValue !== undefined) {
647
+ return materialParamValue;
648
+ }
649
+ const tags = (0, tags_helper_1.getTagsAsStrArr)(material);
650
+ const tagParamValue = tags.reduce((accValue, curTag) => {
651
+ const tagParamValue = this.getParameterValue({ tagName: curTag }, parameterName);
652
+ return accValue !== null && accValue !== void 0 ? accValue : tagParamValue;
653
+ }, undefined);
654
+ return tagParamValue;
655
+ }
647
656
  }
648
657
  exports.ParameterManager = ParameterManager;
649
658
  //# sourceMappingURL=parameter-manager.js.map