@combeenation/3d-viewer 4.0.0-beta3 → 4.0.0-beta4

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 (92) hide show
  1. package/README.md +112 -112
  2. package/dist/lib-cjs/api/classes/animationInterface.d.ts +8 -8
  3. package/dist/lib-cjs/api/classes/animationInterface.js +1 -1
  4. package/dist/lib-cjs/api/classes/dottedPath.d.ts +79 -79
  5. package/dist/lib-cjs/api/classes/dottedPath.js +190 -190
  6. package/dist/lib-cjs/api/classes/element.d.ts +125 -125
  7. package/dist/lib-cjs/api/classes/element.js +682 -682
  8. package/dist/lib-cjs/api/classes/elementParameterizable.d.ts +14 -14
  9. package/dist/lib-cjs/api/classes/elementParameterizable.js +134 -134
  10. package/dist/lib-cjs/api/classes/event.d.ts +312 -312
  11. package/dist/lib-cjs/api/classes/event.js +357 -357
  12. package/dist/lib-cjs/api/classes/eventBroadcaster.d.ts +26 -26
  13. package/dist/lib-cjs/api/classes/eventBroadcaster.js +53 -53
  14. package/dist/lib-cjs/api/classes/parameter.d.ts +165 -165
  15. package/dist/lib-cjs/api/classes/parameter.js +267 -267
  16. package/dist/lib-cjs/api/classes/parameterObservable.d.ts +36 -36
  17. package/dist/lib-cjs/api/classes/parameterObservable.js +126 -126
  18. package/dist/lib-cjs/api/classes/parameterizable.d.ts +15 -15
  19. package/dist/lib-cjs/api/classes/parameterizable.js +149 -149
  20. package/dist/lib-cjs/api/classes/placementAnimation.d.ts +38 -38
  21. package/dist/lib-cjs/api/classes/placementAnimation.js +138 -138
  22. package/dist/lib-cjs/api/classes/variant.d.ts +190 -190
  23. package/dist/lib-cjs/api/classes/variant.js +873 -873
  24. package/dist/lib-cjs/api/classes/variantInstance.d.ts +41 -41
  25. package/dist/lib-cjs/api/classes/variantInstance.js +98 -98
  26. package/dist/lib-cjs/api/classes/variantParameterizable.d.ts +17 -17
  27. package/dist/lib-cjs/api/classes/variantParameterizable.js +92 -92
  28. package/dist/lib-cjs/api/classes/viewer.d.ts +128 -128
  29. package/dist/lib-cjs/api/classes/viewer.js +486 -486
  30. package/dist/lib-cjs/api/classes/viewerLight.d.ts +65 -66
  31. package/dist/lib-cjs/api/classes/viewerLight.js +322 -389
  32. package/dist/lib-cjs/api/classes/viewerLight.js.map +1 -1
  33. package/dist/lib-cjs/api/internal/debugViewer.d.ts +13 -13
  34. package/dist/lib-cjs/api/internal/debugViewer.js +87 -87
  35. package/dist/lib-cjs/api/internal/lensRendering.d.ts +8 -8
  36. package/dist/lib-cjs/api/internal/lensRendering.js +11 -11
  37. package/dist/lib-cjs/api/internal/sceneSetup.d.ts +6 -6
  38. package/dist/lib-cjs/api/internal/sceneSetup.js +227 -227
  39. package/dist/lib-cjs/api/manager/animationManager.d.ts +29 -29
  40. package/dist/lib-cjs/api/manager/animationManager.js +121 -121
  41. package/dist/lib-cjs/api/manager/sceneManager.d.ts +32 -32
  42. package/dist/lib-cjs/api/manager/sceneManager.js +132 -132
  43. package/dist/lib-cjs/api/manager/variantInstanceManager.d.ts +90 -90
  44. package/dist/lib-cjs/api/manager/variantInstanceManager.js +321 -321
  45. package/dist/lib-cjs/api/store/specStorage.d.ts +24 -24
  46. package/dist/lib-cjs/api/store/specStorage.js +51 -51
  47. package/dist/lib-cjs/api/util/babylonHelper.d.ts +125 -125
  48. package/dist/lib-cjs/api/util/babylonHelper.js +368 -368
  49. package/dist/lib-cjs/api/util/globalTypes.d.ts +279 -279
  50. package/dist/lib-cjs/api/util/globalTypes.js +1 -1
  51. package/dist/lib-cjs/api/util/resourceHelper.d.ts +51 -48
  52. package/dist/lib-cjs/api/util/resourceHelper.js +243 -240
  53. package/dist/lib-cjs/api/util/resourceHelper.js.map +1 -1
  54. package/dist/lib-cjs/api/util/stringHelper.d.ts +9 -9
  55. package/dist/lib-cjs/api/util/stringHelper.js +25 -25
  56. package/dist/lib-cjs/buildinfo.json +3 -3
  57. package/dist/lib-cjs/index.d.ts +46 -46
  58. package/dist/lib-cjs/index.js +82 -82
  59. package/dist/webpack-stats.json +0 -0
  60. package/package.json +83 -83
  61. package/src/api/classes/animationInterface.ts +11 -11
  62. package/src/api/classes/dottedPath.ts +189 -189
  63. package/src/api/classes/element.ts +617 -617
  64. package/src/api/classes/elementParameterizable.ts +78 -78
  65. package/src/api/classes/event.ts +355 -355
  66. package/src/api/classes/eventBroadcaster.ts +54 -54
  67. package/src/api/classes/parameter.ts +277 -277
  68. package/src/api/classes/parameterObservable.ts +121 -121
  69. package/src/api/classes/placementAnimation.ts +133 -133
  70. package/src/api/classes/variant.ts +670 -670
  71. package/src/api/classes/variantInstance.ts +81 -81
  72. package/src/api/classes/viewer.ts +421 -421
  73. package/src/api/internal/debugViewer.ts +81 -81
  74. package/src/api/internal/lensRendering.ts +10 -10
  75. package/src/api/internal/sceneSetup.ts +203 -203
  76. package/src/api/manager/animationManager.ts +116 -116
  77. package/src/api/manager/sceneManager.ts +105 -105
  78. package/src/api/manager/variantInstanceManager.ts +236 -236
  79. package/src/api/store/specStorage.ts +53 -53
  80. package/src/api/util/babylonHelper.ts +392 -392
  81. package/src/api/util/globalTypes.ts +318 -318
  82. package/src/api/util/resourceHelper.ts +187 -184
  83. package/src/buildinfo.json +2 -2
  84. package/src/commonjs.tsconfig.json +13 -13
  85. package/src/declaration.tsconfig.json +10 -10
  86. package/src/dev.ts +46 -46
  87. package/src/es6.tsconfig.json +13 -13
  88. package/src/index.ts +87 -87
  89. package/src/pagesconfig.json +57 -57
  90. package/src/tsconfig.json +43 -43
  91. package/src/tsconfig.types.json +9 -9
  92. package/src/types.d.ts +4 -4
@@ -1,369 +1,369 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getClientRectFromMesh = exports.removeFromHighlightLayer = exports.addToHighlightLayer = exports.setMaterialRoughness = exports.setMaterialMetallness = exports.setMaterialTexture = exports.setMaterialColor = exports.setSourceNodeMaterial = exports.setMaterial = exports.deactivateTransformNode = exports.activateTransformNode = exports.assertTransformNode = exports.injectTransformNodeMetadata = exports.cloneTransformNodeMaterial = exports.cloneTransformNode = exports.getDottedPathForTransformNode = exports.mapToDottedNodes = void 0;
4
- var tslib_1 = require("tslib");
5
- var math_vector_1 = require("@babylonjs/core/Maths/math.vector");
6
- var abstractMesh_1 = require("@babylonjs/core/Meshes/abstractMesh");
7
- var instancedMesh_1 = require("@babylonjs/core/Meshes/instancedMesh");
8
- var lodash_es_1 = require("lodash-es");
9
- var dottedPath_1 = require("../classes/dottedPath");
10
- /**
11
- * @param nodes
12
- * @param predicate
13
- * @return Map<DottedPath, T>
14
- */
15
- var mapToDottedNodes = function (nodes, predicate) {
16
- var map = new Map();
17
- var addNodes = function (_node) {
18
- if (predicate && predicate(_node)) {
19
- map.set(_node.metadata.dottedPath, _node);
20
- }
21
- _node.getChildren().forEach(function (child) {
22
- addNodes(child);
23
- });
24
- };
25
- nodes.forEach(function (node) {
26
- addNodes(node);
27
- });
28
- return map;
29
- };
30
- exports.mapToDottedNodes = mapToDottedNodes;
31
- /**
32
- * @param node
33
- * @return DottedPath
34
- */
35
- var getDottedPathForTransformNode = function (node) {
36
- var dottedPath = dottedPath_1.DottedPath.create(node.name);
37
- var _parent = node;
38
- while (_parent.parent) {
39
- _parent = _parent.parent;
40
- dottedPath.unshiftPart(_parent.name);
41
- }
42
- return dottedPath;
43
- };
44
- exports.getDottedPathForTransformNode = getDottedPathForTransformNode;
45
- /**
46
- *
47
- * @param node
48
- * @param predicate
49
- * @param deep
50
- * @return TransformNode | null
51
- */
52
- var cloneTransformNode = function (node, predicate, deep) {
53
- if (deep === void 0) { deep = true; }
54
- if (predicate && !predicate(node)) {
55
- return null;
56
- }
57
- var clone = node.clone(node.name, node.parent, true);
58
- if (clone) {
59
- clone.metadata = lodash_es_1.cloneDeep(node.metadata);
60
- }
61
- if (deep) {
62
- var children = node.getChildTransformNodes(true);
63
- children.forEach(function (child) {
64
- var clonedChild = cloneTransformNode(child, predicate, deep);
65
- if (clonedChild) {
66
- clonedChild.parent = clone;
67
- }
68
- });
69
- }
70
- return clone;
71
- };
72
- exports.cloneTransformNode = cloneTransformNode;
73
- /**
74
- * @param node
75
- * @param deep
76
- * @param prefix
77
- * @return TransformNode
78
- */
79
- var cloneTransformNodeMaterial = function (node, prefix, deep) {
80
- if (prefix === void 0) { prefix = ''; }
81
- if (deep === void 0) { deep = true; }
82
- if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
83
- var _prefix = dottedPath_1.DottedPath.create(prefix).addParts([
84
- 'node',
85
- node.uniqueId.toString()
86
- ]);
87
- node.material = node.material.clone(_prefix.path);
88
- }
89
- if (deep) {
90
- var children = node.getChildTransformNodes(true);
91
- children.forEach(function (child) { return cloneTransformNodeMaterial(child, prefix, deep); });
92
- }
93
- return node;
94
- };
95
- exports.cloneTransformNodeMaterial = cloneTransformNodeMaterial;
96
- /**
97
- * @param node
98
- * @param deep
99
- * @param metadata
100
- */
101
- var injectTransformNodeMetadata = function (node, metadata, deep) {
102
- if (deep === void 0) { deep = true; }
103
- node.metadata = lodash_es_1.merge({}, node.metadata, metadata);
104
- if (deep) {
105
- var children = node.getChildTransformNodes(true);
106
- children.forEach(function (child) { return injectTransformNodeMetadata(child, metadata, deep); });
107
- }
108
- };
109
- exports.injectTransformNodeMetadata = injectTransformNodeMetadata;
110
- /**
111
- * @param node
112
- * @param assertCallable
113
- * @param callableParameters
114
- * @param deep
115
- */
116
- var assertTransformNode = function (node, assertCallable, callableParameters, deep) {
117
- if (callableParameters === void 0) { callableParameters = []; }
118
- if (deep === void 0) { deep = true; }
119
- assertCallable.apply(void 0, tslib_1.__spreadArrays([node], callableParameters));
120
- if (deep) {
121
- var children = node.getChildTransformNodes(true);
122
- children.forEach(function (child) { return assertTransformNode(child, assertCallable, callableParameters, deep); });
123
- }
124
- };
125
- exports.assertTransformNode = assertTransformNode;
126
- /**
127
- * @param node
128
- * @param deep
129
- */
130
- var activateTransformNode = function (node, deep) {
131
- if (deep === void 0) { deep = true; }
132
- node.setEnabled(true);
133
- /*
134
- if( node instanceof AbstractMesh ) {
135
- node.visibility = 1;
136
- node.isPickable = true;
137
- }
138
- */
139
- if (deep) {
140
- node.getChildTransformNodes(true).forEach(function (child) { return activateTransformNode(child, deep); });
141
- }
142
- };
143
- exports.activateTransformNode = activateTransformNode;
144
- /**
145
- * @param node
146
- * @param deep
147
- */
148
- var deactivateTransformNode = function (node, deep) {
149
- if (deep === void 0) { deep = true; }
150
- node.setEnabled(false);
151
- /*
152
- if( node instanceof AbstractMesh ) {
153
- node.visibility = 0;
154
- node.isPickable = false;
155
- }
156
- */
157
- if (deep) {
158
- node.getChildTransformNodes(true).forEach(function (child) { return deactivateTransformNode(child, deep); });
159
- }
160
- };
161
- exports.deactivateTransformNode = deactivateTransformNode;
162
- /**
163
- * @param node
164
- * @param material
165
- * @param deep
166
- */
167
- var setMaterial = function (node, material, deep) {
168
- if (deep === void 0) { deep = true; }
169
- if (node instanceof abstractMesh_1.AbstractMesh) {
170
- node.material = material;
171
- }
172
- if (deep) {
173
- node.getChildTransformNodes(true).forEach(function (child) { return setMaterial(child, material, deep); });
174
- }
175
- };
176
- exports.setMaterial = setMaterial;
177
- /**
178
- * !!! Warning !!!
179
- * This function is not public API. Whilst it can help solving certain problems, it only works reliably in well defined
180
- * situations and can cause unwanted side effects under some conditions. Use carefully at your own risk!
181
- *
182
- * See https://combeenation.myjetbrains.com/youtrack/issue/CB-5906 for further details regarding this warning.
183
- *
184
- * Set material of an instanced meshes source mesh.
185
- * Changes the material of all instanced meshes which have the same source mesh.
186
- *
187
- * @param node
188
- * @param material
189
- * @param deep
190
- *
191
- * @ignore
192
- */
193
- var setSourceNodeMaterial = function (node, material, deep) {
194
- if (deep === void 0) { deep = true; }
195
- var warn = "\tYou're using \"setSourceNodeMaterial\" which is not public API.\n\tWhilst it can help solving certain problems, it only works reliably in well defined situations and can cause unwanted side effects under some conditions.\n\tUse carefully at your own risk!";
196
- console.warn("!!! Warning !!!\n" + warn);
197
- if (node instanceof instancedMesh_1.InstancedMesh) {
198
- node.sourceMesh.material = material;
199
- }
200
- if (deep) {
201
- node.getChildTransformNodes(true).forEach(function (child) { return setSourceNodeMaterial(child, material, deep); });
202
- }
203
- };
204
- exports.setSourceNodeMaterial = setSourceNodeMaterial;
205
- /**
206
- * @param node
207
- * @param color
208
- * @param deep
209
- */
210
- var setMaterialColor = function (node, color, deep) {
211
- if (deep === void 0) { deep = true; }
212
- if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
213
- var materialCls = node.material.getClassName();
214
- switch (materialCls) {
215
- case 'PBRMaterial':
216
- node.material.albedoColor = color.toLinearSpace();
217
- break;
218
- case 'StandardMaterial':
219
- node.material.diffuseColor = color;
220
- break;
221
- default:
222
- throw new Error("Setting color for material of instance \"" + materialCls + "\" not implemented (yet).");
223
- }
224
- }
225
- if (deep) {
226
- node.getChildTransformNodes(true).forEach(function (child) { return setMaterialColor(child, color, deep); });
227
- }
228
- };
229
- exports.setMaterialColor = setMaterialColor;
230
- /**
231
- * @param node
232
- * @param texture
233
- * @param deep
234
- */
235
- var setMaterialTexture = function (node, texture, deep) {
236
- if (deep === void 0) { deep = true; }
237
- if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
238
- var materialCls = node.material.getClassName();
239
- switch (materialCls) {
240
- case 'PBRMaterial':
241
- node.material.albedoTexture = texture;
242
- break;
243
- case 'StandardMaterial':
244
- node.material.diffuseTexture = texture;
245
- break;
246
- default:
247
- throw new Error("Setting texture for material of instance \"" + materialCls + "\" not implemented (yet).");
248
- }
249
- }
250
- if (deep) {
251
- node.getChildTransformNodes(true).forEach(function (child) { return setMaterialTexture(child, texture, deep); });
252
- }
253
- };
254
- exports.setMaterialTexture = setMaterialTexture;
255
- /**
256
- * @param node
257
- * @param metallness
258
- * @param deep
259
- */
260
- var setMaterialMetallness = function (node, metallness, deep) {
261
- if (deep === void 0) { deep = true; }
262
- if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
263
- var materialCls = node.material.getClassName();
264
- switch (materialCls) {
265
- case 'PBRMaterial':
266
- node.material.metallic = metallness;
267
- break;
268
- default:
269
- throw new Error("Setting metallness for material of instance \"" + materialCls + "\" not implemented (yet).");
270
- }
271
- }
272
- if (deep) {
273
- node.getChildTransformNodes(true).forEach(function (child) { return setMaterialMetallness(child, metallness, deep); });
274
- }
275
- };
276
- exports.setMaterialMetallness = setMaterialMetallness;
277
- /**
278
- * @param node
279
- * @param roughness
280
- * @param deep
281
- */
282
- var setMaterialRoughness = function (node, roughness, deep) {
283
- if (deep === void 0) { deep = true; }
284
- if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
285
- var materialCls = node.material.getClassName();
286
- switch (materialCls) {
287
- case 'PBRMaterial':
288
- node.material.roughness = roughness;
289
- break;
290
- case 'StandardMaterial':
291
- node.material.roughness = roughness;
292
- break;
293
- default:
294
- throw new Error("Setting roughness for material of instance \"" + materialCls + "\" not implemented (yet).");
295
- }
296
- }
297
- if (deep) {
298
- node.getChildTransformNodes(true).forEach(function (child) { return setMaterialRoughness(child, roughness, deep); });
299
- }
300
- };
301
- exports.setMaterialRoughness = setMaterialRoughness;
302
- /**
303
- * @param node
304
- * @param layer
305
- * @param color
306
- * @param deep
307
- */
308
- var addToHighlightLayer = function (layer, color, node, deep) {
309
- if (deep === void 0) { deep = true; }
310
- if (node instanceof abstractMesh_1.AbstractMesh) {
311
- layer.addMesh(node, color);
312
- }
313
- if (deep) {
314
- node.getChildTransformNodes(true).forEach(function (child) { return addToHighlightLayer(layer, color, child, deep); });
315
- }
316
- };
317
- exports.addToHighlightLayer = addToHighlightLayer;
318
- /**
319
- * @param node
320
- * @param layer
321
- * @param deep
322
- */
323
- var removeFromHighlightLayer = function (layer, node, deep) {
324
- if (deep === void 0) { deep = true; }
325
- if (node instanceof abstractMesh_1.AbstractMesh) {
326
- layer.removeMesh(node);
327
- }
328
- if (deep) {
329
- node.getChildTransformNodes(true).forEach(function (child) { return removeFromHighlightLayer(layer, child, deep); });
330
- }
331
- };
332
- exports.removeFromHighlightLayer = removeFromHighlightLayer;
333
- /**
334
- * https://forum.babylonjs.com/t/get-mesh-bounding-box-position-and-size-in-2d-screen-coordinates/1058/3
335
- * @param mesh
336
- * @param scene
337
- * @param canvas
338
- */
339
- var getClientRectFromMesh = function (mesh, scene, canvas) {
340
- // get bounding box of the mesh
341
- var meshVectors = mesh.getBoundingInfo().boundingBox.vectors;
342
- // get the matrix and viewport needed to project the vectors onto the screen
343
- var worldMatrix = mesh.getWorldMatrix();
344
- var transformMatrix = scene.getTransformMatrix();
345
- var viewport = scene.activeCamera.viewport;
346
- // loop though all the vectors and project them against the current camera viewport to get a set of coordinates
347
- var coordinates = meshVectors.map(function (vector) {
348
- var projection = math_vector_1.Vector3.Project(vector, worldMatrix, transformMatrix, viewport);
349
- projection.x = projection.x * canvas.clientWidth;
350
- projection.y = projection.y * canvas.clientHeight;
351
- return projection;
352
- });
353
- // get the min and max for all the coordinates so we can calculate the largest possible screen size
354
- var maxX = Math.max.apply(Math, coordinates.map(function (o) { return o.x; }));
355
- var minX = Math.min.apply(Math, coordinates.map(function (o) { return o.x; }));
356
- var maxY = Math.max.apply(Math, coordinates.map(function (o) { return o.y; }));
357
- var minY = Math.min.apply(Math, coordinates.map(function (o) { return o.y; }));
358
- // return a ClientRect from this
359
- return {
360
- width: maxX - minX,
361
- height: maxY - minY,
362
- left: minX,
363
- top: minY,
364
- right: maxX,
365
- bottom: maxY,
366
- };
367
- };
368
- exports.getClientRectFromMesh = getClientRectFromMesh;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getClientRectFromMesh = exports.removeFromHighlightLayer = exports.addToHighlightLayer = exports.setMaterialRoughness = exports.setMaterialMetallness = exports.setMaterialTexture = exports.setMaterialColor = exports.setSourceNodeMaterial = exports.setMaterial = exports.deactivateTransformNode = exports.activateTransformNode = exports.assertTransformNode = exports.injectTransformNodeMetadata = exports.cloneTransformNodeMaterial = exports.cloneTransformNode = exports.getDottedPathForTransformNode = exports.mapToDottedNodes = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var math_vector_1 = require("@babylonjs/core/Maths/math.vector");
6
+ var abstractMesh_1 = require("@babylonjs/core/Meshes/abstractMesh");
7
+ var instancedMesh_1 = require("@babylonjs/core/Meshes/instancedMesh");
8
+ var lodash_es_1 = require("lodash-es");
9
+ var dottedPath_1 = require("../classes/dottedPath");
10
+ /**
11
+ * @param nodes
12
+ * @param predicate
13
+ * @return Map<DottedPath, T>
14
+ */
15
+ var mapToDottedNodes = function (nodes, predicate) {
16
+ var map = new Map();
17
+ var addNodes = function (_node) {
18
+ if (predicate && predicate(_node)) {
19
+ map.set(_node.metadata.dottedPath, _node);
20
+ }
21
+ _node.getChildren().forEach(function (child) {
22
+ addNodes(child);
23
+ });
24
+ };
25
+ nodes.forEach(function (node) {
26
+ addNodes(node);
27
+ });
28
+ return map;
29
+ };
30
+ exports.mapToDottedNodes = mapToDottedNodes;
31
+ /**
32
+ * @param node
33
+ * @return DottedPath
34
+ */
35
+ var getDottedPathForTransformNode = function (node) {
36
+ var dottedPath = dottedPath_1.DottedPath.create(node.name);
37
+ var _parent = node;
38
+ while (_parent.parent) {
39
+ _parent = _parent.parent;
40
+ dottedPath.unshiftPart(_parent.name);
41
+ }
42
+ return dottedPath;
43
+ };
44
+ exports.getDottedPathForTransformNode = getDottedPathForTransformNode;
45
+ /**
46
+ *
47
+ * @param node
48
+ * @param predicate
49
+ * @param deep
50
+ * @return TransformNode | null
51
+ */
52
+ var cloneTransformNode = function (node, predicate, deep) {
53
+ if (deep === void 0) { deep = true; }
54
+ if (predicate && !predicate(node)) {
55
+ return null;
56
+ }
57
+ var clone = node.clone(node.name, node.parent, true);
58
+ if (clone) {
59
+ clone.metadata = lodash_es_1.cloneDeep(node.metadata);
60
+ }
61
+ if (deep) {
62
+ var children = node.getChildTransformNodes(true);
63
+ children.forEach(function (child) {
64
+ var clonedChild = cloneTransformNode(child, predicate, deep);
65
+ if (clonedChild) {
66
+ clonedChild.parent = clone;
67
+ }
68
+ });
69
+ }
70
+ return clone;
71
+ };
72
+ exports.cloneTransformNode = cloneTransformNode;
73
+ /**
74
+ * @param node
75
+ * @param deep
76
+ * @param prefix
77
+ * @return TransformNode
78
+ */
79
+ var cloneTransformNodeMaterial = function (node, prefix, deep) {
80
+ if (prefix === void 0) { prefix = ''; }
81
+ if (deep === void 0) { deep = true; }
82
+ if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
83
+ var _prefix = dottedPath_1.DottedPath.create(prefix).addParts([
84
+ 'node',
85
+ node.uniqueId.toString()
86
+ ]);
87
+ node.material = node.material.clone(_prefix.path);
88
+ }
89
+ if (deep) {
90
+ var children = node.getChildTransformNodes(true);
91
+ children.forEach(function (child) { return cloneTransformNodeMaterial(child, prefix, deep); });
92
+ }
93
+ return node;
94
+ };
95
+ exports.cloneTransformNodeMaterial = cloneTransformNodeMaterial;
96
+ /**
97
+ * @param node
98
+ * @param deep
99
+ * @param metadata
100
+ */
101
+ var injectTransformNodeMetadata = function (node, metadata, deep) {
102
+ if (deep === void 0) { deep = true; }
103
+ node.metadata = lodash_es_1.merge({}, node.metadata, metadata);
104
+ if (deep) {
105
+ var children = node.getChildTransformNodes(true);
106
+ children.forEach(function (child) { return injectTransformNodeMetadata(child, metadata, deep); });
107
+ }
108
+ };
109
+ exports.injectTransformNodeMetadata = injectTransformNodeMetadata;
110
+ /**
111
+ * @param node
112
+ * @param assertCallable
113
+ * @param callableParameters
114
+ * @param deep
115
+ */
116
+ var assertTransformNode = function (node, assertCallable, callableParameters, deep) {
117
+ if (callableParameters === void 0) { callableParameters = []; }
118
+ if (deep === void 0) { deep = true; }
119
+ assertCallable.apply(void 0, tslib_1.__spreadArrays([node], callableParameters));
120
+ if (deep) {
121
+ var children = node.getChildTransformNodes(true);
122
+ children.forEach(function (child) { return assertTransformNode(child, assertCallable, callableParameters, deep); });
123
+ }
124
+ };
125
+ exports.assertTransformNode = assertTransformNode;
126
+ /**
127
+ * @param node
128
+ * @param deep
129
+ */
130
+ var activateTransformNode = function (node, deep) {
131
+ if (deep === void 0) { deep = true; }
132
+ node.setEnabled(true);
133
+ /*
134
+ if( node instanceof AbstractMesh ) {
135
+ node.visibility = 1;
136
+ node.isPickable = true;
137
+ }
138
+ */
139
+ if (deep) {
140
+ node.getChildTransformNodes(true).forEach(function (child) { return activateTransformNode(child, deep); });
141
+ }
142
+ };
143
+ exports.activateTransformNode = activateTransformNode;
144
+ /**
145
+ * @param node
146
+ * @param deep
147
+ */
148
+ var deactivateTransformNode = function (node, deep) {
149
+ if (deep === void 0) { deep = true; }
150
+ node.setEnabled(false);
151
+ /*
152
+ if( node instanceof AbstractMesh ) {
153
+ node.visibility = 0;
154
+ node.isPickable = false;
155
+ }
156
+ */
157
+ if (deep) {
158
+ node.getChildTransformNodes(true).forEach(function (child) { return deactivateTransformNode(child, deep); });
159
+ }
160
+ };
161
+ exports.deactivateTransformNode = deactivateTransformNode;
162
+ /**
163
+ * @param node
164
+ * @param material
165
+ * @param deep
166
+ */
167
+ var setMaterial = function (node, material, deep) {
168
+ if (deep === void 0) { deep = true; }
169
+ if (node instanceof abstractMesh_1.AbstractMesh) {
170
+ node.material = material;
171
+ }
172
+ if (deep) {
173
+ node.getChildTransformNodes(true).forEach(function (child) { return setMaterial(child, material, deep); });
174
+ }
175
+ };
176
+ exports.setMaterial = setMaterial;
177
+ /**
178
+ * !!! Warning !!!
179
+ * This function is not public API. Whilst it can help solving certain problems, it only works reliably in well defined
180
+ * situations and can cause unwanted side effects under some conditions. Use carefully at your own risk!
181
+ *
182
+ * See https://combeenation.myjetbrains.com/youtrack/issue/CB-5906 for further details regarding this warning.
183
+ *
184
+ * Set material of an instanced meshes source mesh.
185
+ * Changes the material of all instanced meshes which have the same source mesh.
186
+ *
187
+ * @param node
188
+ * @param material
189
+ * @param deep
190
+ *
191
+ * @ignore
192
+ */
193
+ var setSourceNodeMaterial = function (node, material, deep) {
194
+ if (deep === void 0) { deep = true; }
195
+ var warn = "\tYou're using \"setSourceNodeMaterial\" which is not public API.\n\tWhilst it can help solving certain problems, it only works reliably in well defined situations and can cause unwanted side effects under some conditions.\n\tUse carefully at your own risk!";
196
+ console.warn("!!! Warning !!!\n" + warn);
197
+ if (node instanceof instancedMesh_1.InstancedMesh) {
198
+ node.sourceMesh.material = material;
199
+ }
200
+ if (deep) {
201
+ node.getChildTransformNodes(true).forEach(function (child) { return setSourceNodeMaterial(child, material, deep); });
202
+ }
203
+ };
204
+ exports.setSourceNodeMaterial = setSourceNodeMaterial;
205
+ /**
206
+ * @param node
207
+ * @param color
208
+ * @param deep
209
+ */
210
+ var setMaterialColor = function (node, color, deep) {
211
+ if (deep === void 0) { deep = true; }
212
+ if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
213
+ var materialCls = node.material.getClassName();
214
+ switch (materialCls) {
215
+ case 'PBRMaterial':
216
+ node.material.albedoColor = color.toLinearSpace();
217
+ break;
218
+ case 'StandardMaterial':
219
+ node.material.diffuseColor = color;
220
+ break;
221
+ default:
222
+ throw new Error("Setting color for material of instance \"" + materialCls + "\" not implemented (yet).");
223
+ }
224
+ }
225
+ if (deep) {
226
+ node.getChildTransformNodes(true).forEach(function (child) { return setMaterialColor(child, color, deep); });
227
+ }
228
+ };
229
+ exports.setMaterialColor = setMaterialColor;
230
+ /**
231
+ * @param node
232
+ * @param texture
233
+ * @param deep
234
+ */
235
+ var setMaterialTexture = function (node, texture, deep) {
236
+ if (deep === void 0) { deep = true; }
237
+ if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
238
+ var materialCls = node.material.getClassName();
239
+ switch (materialCls) {
240
+ case 'PBRMaterial':
241
+ node.material.albedoTexture = texture;
242
+ break;
243
+ case 'StandardMaterial':
244
+ node.material.diffuseTexture = texture;
245
+ break;
246
+ default:
247
+ throw new Error("Setting texture for material of instance \"" + materialCls + "\" not implemented (yet).");
248
+ }
249
+ }
250
+ if (deep) {
251
+ node.getChildTransformNodes(true).forEach(function (child) { return setMaterialTexture(child, texture, deep); });
252
+ }
253
+ };
254
+ exports.setMaterialTexture = setMaterialTexture;
255
+ /**
256
+ * @param node
257
+ * @param metallness
258
+ * @param deep
259
+ */
260
+ var setMaterialMetallness = function (node, metallness, deep) {
261
+ if (deep === void 0) { deep = true; }
262
+ if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
263
+ var materialCls = node.material.getClassName();
264
+ switch (materialCls) {
265
+ case 'PBRMaterial':
266
+ node.material.metallic = metallness;
267
+ break;
268
+ default:
269
+ throw new Error("Setting metallness for material of instance \"" + materialCls + "\" not implemented (yet).");
270
+ }
271
+ }
272
+ if (deep) {
273
+ node.getChildTransformNodes(true).forEach(function (child) { return setMaterialMetallness(child, metallness, deep); });
274
+ }
275
+ };
276
+ exports.setMaterialMetallness = setMaterialMetallness;
277
+ /**
278
+ * @param node
279
+ * @param roughness
280
+ * @param deep
281
+ */
282
+ var setMaterialRoughness = function (node, roughness, deep) {
283
+ if (deep === void 0) { deep = true; }
284
+ if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
285
+ var materialCls = node.material.getClassName();
286
+ switch (materialCls) {
287
+ case 'PBRMaterial':
288
+ node.material.roughness = roughness;
289
+ break;
290
+ case 'StandardMaterial':
291
+ node.material.roughness = roughness;
292
+ break;
293
+ default:
294
+ throw new Error("Setting roughness for material of instance \"" + materialCls + "\" not implemented (yet).");
295
+ }
296
+ }
297
+ if (deep) {
298
+ node.getChildTransformNodes(true).forEach(function (child) { return setMaterialRoughness(child, roughness, deep); });
299
+ }
300
+ };
301
+ exports.setMaterialRoughness = setMaterialRoughness;
302
+ /**
303
+ * @param node
304
+ * @param layer
305
+ * @param color
306
+ * @param deep
307
+ */
308
+ var addToHighlightLayer = function (layer, color, node, deep) {
309
+ if (deep === void 0) { deep = true; }
310
+ if (node instanceof abstractMesh_1.AbstractMesh) {
311
+ layer.addMesh(node, color);
312
+ }
313
+ if (deep) {
314
+ node.getChildTransformNodes(true).forEach(function (child) { return addToHighlightLayer(layer, color, child, deep); });
315
+ }
316
+ };
317
+ exports.addToHighlightLayer = addToHighlightLayer;
318
+ /**
319
+ * @param node
320
+ * @param layer
321
+ * @param deep
322
+ */
323
+ var removeFromHighlightLayer = function (layer, node, deep) {
324
+ if (deep === void 0) { deep = true; }
325
+ if (node instanceof abstractMesh_1.AbstractMesh) {
326
+ layer.removeMesh(node);
327
+ }
328
+ if (deep) {
329
+ node.getChildTransformNodes(true).forEach(function (child) { return removeFromHighlightLayer(layer, child, deep); });
330
+ }
331
+ };
332
+ exports.removeFromHighlightLayer = removeFromHighlightLayer;
333
+ /**
334
+ * https://forum.babylonjs.com/t/get-mesh-bounding-box-position-and-size-in-2d-screen-coordinates/1058/3
335
+ * @param mesh
336
+ * @param scene
337
+ * @param canvas
338
+ */
339
+ var getClientRectFromMesh = function (mesh, scene, canvas) {
340
+ // get bounding box of the mesh
341
+ var meshVectors = mesh.getBoundingInfo().boundingBox.vectors;
342
+ // get the matrix and viewport needed to project the vectors onto the screen
343
+ var worldMatrix = mesh.getWorldMatrix();
344
+ var transformMatrix = scene.getTransformMatrix();
345
+ var viewport = scene.activeCamera.viewport;
346
+ // loop though all the vectors and project them against the current camera viewport to get a set of coordinates
347
+ var coordinates = meshVectors.map(function (vector) {
348
+ var projection = math_vector_1.Vector3.Project(vector, worldMatrix, transformMatrix, viewport);
349
+ projection.x = projection.x * canvas.clientWidth;
350
+ projection.y = projection.y * canvas.clientHeight;
351
+ return projection;
352
+ });
353
+ // get the min and max for all the coordinates so we can calculate the largest possible screen size
354
+ var maxX = Math.max.apply(Math, coordinates.map(function (o) { return o.x; }));
355
+ var minX = Math.min.apply(Math, coordinates.map(function (o) { return o.x; }));
356
+ var maxY = Math.max.apply(Math, coordinates.map(function (o) { return o.y; }));
357
+ var minY = Math.min.apply(Math, coordinates.map(function (o) { return o.y; }));
358
+ // return a ClientRect from this
359
+ return {
360
+ width: maxX - minX,
361
+ height: maxY - minY,
362
+ left: minX,
363
+ top: minY,
364
+ right: maxX,
365
+ bottom: maxY,
366
+ };
367
+ };
368
+ exports.getClientRectFromMesh = getClientRectFromMesh;
369
369
  //# sourceMappingURL=babylonHelper.js.map