@combeenation/3d-viewer 3.1.1-alpha7 → 3.1.2

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 (94) hide show
  1. package/README.md +111 -111
  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 -126
  7. package/dist/lib-cjs/api/classes/element.js +678 -674
  8. package/dist/lib-cjs/api/classes/element.js.map +1 -1
  9. package/dist/lib-cjs/api/classes/elementParameterizable.d.ts +14 -14
  10. package/dist/lib-cjs/api/classes/elementParameterizable.js +134 -134
  11. package/dist/lib-cjs/api/classes/event.d.ts +312 -312
  12. package/dist/lib-cjs/api/classes/event.js +357 -357
  13. package/dist/lib-cjs/api/classes/eventBroadcaster.d.ts +26 -26
  14. package/dist/lib-cjs/api/classes/eventBroadcaster.js +53 -53
  15. package/dist/lib-cjs/api/classes/parameter.d.ts +165 -165
  16. package/dist/lib-cjs/api/classes/parameter.js +267 -267
  17. package/dist/lib-cjs/api/classes/parameterObservable.d.ts +36 -36
  18. package/dist/lib-cjs/api/classes/parameterObservable.js +126 -126
  19. package/dist/lib-cjs/api/classes/parameterizable.d.ts +15 -15
  20. package/dist/lib-cjs/api/classes/parameterizable.js +149 -149
  21. package/dist/lib-cjs/api/classes/placementAnimation.d.ts +38 -38
  22. package/dist/lib-cjs/api/classes/placementAnimation.js +138 -138
  23. package/dist/lib-cjs/api/classes/variant.d.ts +180 -190
  24. package/dist/lib-cjs/api/classes/variant.js +863 -873
  25. package/dist/lib-cjs/api/classes/variant.js.map +1 -1
  26. package/dist/lib-cjs/api/classes/variantInstance.d.ts +41 -41
  27. package/dist/lib-cjs/api/classes/variantInstance.js +98 -98
  28. package/dist/lib-cjs/api/classes/variantParameterizable.d.ts +17 -17
  29. package/dist/lib-cjs/api/classes/variantParameterizable.js +92 -92
  30. package/dist/lib-cjs/api/classes/viewer.d.ts +128 -128
  31. package/dist/lib-cjs/api/classes/viewer.js +486 -486
  32. package/dist/lib-cjs/api/classes/viewerLight.d.ts +65 -66
  33. package/dist/lib-cjs/api/classes/viewerLight.js +322 -389
  34. package/dist/lib-cjs/api/classes/viewerLight.js.map +1 -1
  35. package/dist/lib-cjs/api/internal/debugViewer.d.ts +13 -13
  36. package/dist/lib-cjs/api/internal/debugViewer.js +87 -87
  37. package/dist/lib-cjs/api/internal/lensRendering.d.ts +8 -8
  38. package/dist/lib-cjs/api/internal/lensRendering.js +11 -11
  39. package/dist/lib-cjs/api/internal/sceneSetup.d.ts +6 -6
  40. package/dist/lib-cjs/api/internal/sceneSetup.js +227 -227
  41. package/dist/lib-cjs/api/manager/animationManager.d.ts +29 -29
  42. package/dist/lib-cjs/api/manager/animationManager.js +121 -121
  43. package/dist/lib-cjs/api/manager/sceneManager.d.ts +32 -32
  44. package/dist/lib-cjs/api/manager/sceneManager.js +132 -132
  45. package/dist/lib-cjs/api/manager/variantInstanceManager.d.ts +90 -90
  46. package/dist/lib-cjs/api/manager/variantInstanceManager.js +321 -321
  47. package/dist/lib-cjs/api/store/specStorage.d.ts +24 -24
  48. package/dist/lib-cjs/api/store/specStorage.js +51 -51
  49. package/dist/lib-cjs/api/util/babylonHelper.d.ts +125 -125
  50. package/dist/lib-cjs/api/util/babylonHelper.js +368 -368
  51. package/dist/lib-cjs/api/util/globalTypes.d.ts +275 -275
  52. package/dist/lib-cjs/api/util/globalTypes.js +1 -1
  53. package/dist/lib-cjs/api/util/resourceHelper.d.ts +30 -30
  54. package/dist/lib-cjs/api/util/resourceHelper.js +247 -203
  55. package/dist/lib-cjs/api/util/resourceHelper.js.map +1 -1
  56. package/dist/lib-cjs/api/util/stringHelper.d.ts +9 -9
  57. package/dist/lib-cjs/api/util/stringHelper.js +25 -25
  58. package/dist/lib-cjs/buildinfo.json +3 -3
  59. package/dist/lib-cjs/index.d.ts +46 -46
  60. package/dist/lib-cjs/index.js +82 -82
  61. package/dist/webpack-stats.json +0 -0
  62. package/package.json +83 -83
  63. package/src/api/classes/animationInterface.ts +11 -11
  64. package/src/api/classes/dottedPath.ts +189 -189
  65. package/src/api/classes/element.ts +608 -606
  66. package/src/api/classes/elementParameterizable.ts +78 -78
  67. package/src/api/classes/event.ts +355 -355
  68. package/src/api/classes/eventBroadcaster.ts +54 -54
  69. package/src/api/classes/parameter.ts +277 -277
  70. package/src/api/classes/parameterObservable.ts +121 -121
  71. package/src/api/classes/placementAnimation.ts +133 -133
  72. package/src/api/classes/variant.ts +659 -670
  73. package/src/api/classes/variantInstance.ts +81 -81
  74. package/src/api/classes/viewer.ts +421 -421
  75. package/src/api/internal/debugViewer.ts +81 -81
  76. package/src/api/internal/lensRendering.ts +10 -10
  77. package/src/api/internal/sceneSetup.ts +203 -203
  78. package/src/api/manager/animationManager.ts +116 -116
  79. package/src/api/manager/sceneManager.ts +105 -105
  80. package/src/api/manager/variantInstanceManager.ts +236 -236
  81. package/src/api/store/specStorage.ts +53 -53
  82. package/src/api/util/babylonHelper.ts +392 -392
  83. package/src/api/util/globalTypes.ts +314 -314
  84. package/src/api/util/resourceHelper.ts +168 -155
  85. package/src/buildinfo.json +2 -2
  86. package/src/commonjs.tsconfig.json +13 -13
  87. package/src/declaration.tsconfig.json +10 -10
  88. package/src/dev.ts +44 -46
  89. package/src/es6.tsconfig.json +13 -13
  90. package/src/index.ts +87 -87
  91. package/src/pagesconfig.json +47 -47
  92. package/src/tsconfig.json +43 -43
  93. package/src/tsconfig.types.json +9 -9
  94. 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