@combeenation/3d-viewer 5.1.2 → 5.2.0-alpha4

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 (221) 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 +2 -1
  4. package/dist/lib-cjs/api/classes/dottedPath.d.ts +79 -79
  5. package/dist/lib-cjs/api/classes/dottedPath.js +166 -187
  6. package/dist/lib-cjs/api/classes/dottedPath.js.map +1 -1
  7. package/dist/lib-cjs/api/classes/element.d.ts +149 -149
  8. package/dist/lib-cjs/api/classes/element.js +668 -823
  9. package/dist/lib-cjs/api/classes/element.js.map +1 -1
  10. package/dist/lib-cjs/api/classes/event.d.ts +326 -326
  11. package/dist/lib-cjs/api/classes/event.js +349 -371
  12. package/dist/lib-cjs/api/classes/event.js.map +1 -1
  13. package/dist/lib-cjs/api/classes/eventBroadcaster.d.ts +26 -26
  14. package/dist/lib-cjs/api/classes/eventBroadcaster.js +49 -53
  15. package/dist/lib-cjs/api/classes/eventBroadcaster.js.map +1 -1
  16. package/dist/lib-cjs/api/classes/parameter.d.ts +336 -336
  17. package/dist/lib-cjs/api/classes/parameter.js +461 -471
  18. package/dist/lib-cjs/api/classes/parameter.js.map +1 -1
  19. package/dist/lib-cjs/api/classes/parameterObservable.d.ts +36 -36
  20. package/dist/lib-cjs/api/classes/parameterObservable.js +97 -101
  21. package/dist/lib-cjs/api/classes/parameterObservable.js.map +1 -1
  22. package/dist/lib-cjs/api/classes/parameterizable.d.ts +15 -15
  23. package/dist/lib-cjs/api/classes/parameterizable.js +102 -149
  24. package/dist/lib-cjs/api/classes/parameterizable.js.map +1 -1
  25. package/dist/lib-cjs/api/classes/placementAnimation.d.ts +45 -44
  26. package/dist/lib-cjs/api/classes/placementAnimation.js +175 -163
  27. package/dist/lib-cjs/api/classes/placementAnimation.js.map +1 -1
  28. package/dist/lib-cjs/api/classes/variant.d.ts +234 -234
  29. package/dist/lib-cjs/api/classes/variant.js +836 -1203
  30. package/dist/lib-cjs/api/classes/variant.js.map +1 -1
  31. package/dist/lib-cjs/api/classes/variantInstance.d.ts +45 -45
  32. package/dist/lib-cjs/api/classes/variantInstance.js +101 -108
  33. package/dist/lib-cjs/api/classes/variantInstance.js.map +1 -1
  34. package/dist/lib-cjs/api/classes/variantParameterizable.d.ts +17 -17
  35. package/dist/lib-cjs/api/classes/variantParameterizable.js +88 -99
  36. package/dist/lib-cjs/api/classes/variantParameterizable.js.map +1 -1
  37. package/dist/lib-cjs/api/classes/viewer.d.ts +187 -184
  38. package/dist/lib-cjs/api/classes/viewer.js +593 -731
  39. package/dist/lib-cjs/api/classes/viewer.js.map +1 -1
  40. package/dist/lib-cjs/api/classes/viewerLight.d.ts +66 -66
  41. package/dist/lib-cjs/api/classes/viewerLight.js +343 -392
  42. package/dist/lib-cjs/api/classes/viewerLight.js.map +1 -1
  43. package/dist/lib-cjs/api/internal/lensRendering.d.ts +8 -8
  44. package/dist/lib-cjs/api/internal/lensRendering.js +11 -11
  45. package/dist/lib-cjs/api/internal/lensRendering.js.map +1 -1
  46. package/dist/lib-cjs/api/internal/sceneSetup.d.ts +13 -13
  47. package/dist/lib-cjs/api/internal/sceneSetup.js +225 -238
  48. package/dist/lib-cjs/api/internal/sceneSetup.js.map +1 -1
  49. package/dist/lib-cjs/api/manager/animationManager.d.ts +30 -29
  50. package/dist/lib-cjs/api/manager/animationManager.js +126 -130
  51. package/dist/lib-cjs/api/manager/animationManager.js.map +1 -1
  52. package/dist/lib-cjs/api/manager/gltfExportManager.d.ts +65 -65
  53. package/dist/lib-cjs/api/manager/gltfExportManager.js +196 -223
  54. package/dist/lib-cjs/api/manager/gltfExportManager.js.map +1 -1
  55. package/dist/lib-cjs/api/manager/sceneManager.d.ts +31 -31
  56. package/dist/lib-cjs/api/manager/sceneManager.js +127 -152
  57. package/dist/lib-cjs/api/manager/sceneManager.js.map +1 -1
  58. package/dist/lib-cjs/api/manager/variantInstanceManager.d.ts +92 -92
  59. package/dist/lib-cjs/api/manager/variantInstanceManager.js +260 -335
  60. package/dist/lib-cjs/api/manager/variantInstanceManager.js.map +1 -1
  61. package/dist/lib-cjs/api/store/specStorage.d.ts +24 -24
  62. package/dist/lib-cjs/api/store/specStorage.js +50 -51
  63. package/dist/lib-cjs/api/store/specStorage.js.map +1 -1
  64. package/dist/lib-cjs/api/util/babylonHelper.d.ts +174 -174
  65. package/dist/lib-cjs/api/util/babylonHelper.js +591 -611
  66. package/dist/lib-cjs/api/util/babylonHelper.js.map +1 -1
  67. package/dist/lib-cjs/api/util/globalTypes.d.ts +366 -366
  68. package/dist/lib-cjs/api/util/globalTypes.js +1 -1
  69. package/dist/lib-cjs/api/util/resourceHelper.d.ts +58 -58
  70. package/dist/lib-cjs/api/util/resourceHelper.js +201 -257
  71. package/dist/lib-cjs/api/util/resourceHelper.js.map +1 -1
  72. package/dist/lib-cjs/api/util/sceneLoaderHelper.d.ts +35 -35
  73. package/dist/lib-cjs/api/util/sceneLoaderHelper.js +141 -140
  74. package/dist/lib-cjs/api/util/sceneLoaderHelper.js.map +1 -1
  75. package/dist/lib-cjs/api/util/stringHelper.d.ts +9 -9
  76. package/dist/lib-cjs/api/util/stringHelper.js +23 -25
  77. package/dist/lib-cjs/api/util/stringHelper.js.map +1 -1
  78. package/dist/lib-cjs/api/util/structureHelper.d.ts +9 -9
  79. package/dist/lib-cjs/api/util/structureHelper.js +48 -48
  80. package/dist/lib-cjs/api/util/structureHelper.js.map +1 -1
  81. package/dist/lib-cjs/buildinfo.json +3 -3
  82. package/dist/lib-cjs/index.d.ts +51 -49
  83. package/dist/lib-cjs/index.js +110 -89
  84. package/dist/lib-cjs/index.js.map +1 -1
  85. package/dist/lib-es6/api/classes/animationInterface.d.ts +8 -8
  86. package/dist/lib-es6/api/classes/animationInterface.js +1 -1
  87. package/dist/lib-es6/api/classes/dottedPath.d.ts +79 -79
  88. package/dist/lib-es6/api/classes/dottedPath.js +162 -184
  89. package/dist/lib-es6/api/classes/dottedPath.js.map +1 -1
  90. package/dist/lib-es6/api/classes/element.d.ts +149 -149
  91. package/dist/lib-es6/api/classes/element.js +664 -820
  92. package/dist/lib-es6/api/classes/element.js.map +1 -1
  93. package/dist/lib-es6/api/classes/event.d.ts +326 -326
  94. package/dist/lib-es6/api/classes/event.js +345 -368
  95. package/dist/lib-es6/api/classes/event.js.map +1 -1
  96. package/dist/lib-es6/api/classes/eventBroadcaster.d.ts +26 -26
  97. package/dist/lib-es6/api/classes/eventBroadcaster.js +42 -50
  98. package/dist/lib-es6/api/classes/eventBroadcaster.js.map +1 -1
  99. package/dist/lib-es6/api/classes/parameter.d.ts +336 -336
  100. package/dist/lib-es6/api/classes/parameter.js +457 -468
  101. package/dist/lib-es6/api/classes/parameter.js.map +1 -1
  102. package/dist/lib-es6/api/classes/parameterObservable.d.ts +36 -36
  103. package/dist/lib-es6/api/classes/parameterObservable.js +93 -98
  104. package/dist/lib-es6/api/classes/parameterObservable.js.map +1 -1
  105. package/dist/lib-es6/api/classes/parameterizable.d.ts +15 -15
  106. package/dist/lib-es6/api/classes/parameterizable.js +98 -146
  107. package/dist/lib-es6/api/classes/parameterizable.js.map +1 -1
  108. package/dist/lib-es6/api/classes/placementAnimation.d.ts +45 -44
  109. package/dist/lib-es6/api/classes/placementAnimation.js +171 -160
  110. package/dist/lib-es6/api/classes/placementAnimation.js.map +1 -1
  111. package/dist/lib-es6/api/classes/variant.d.ts +234 -234
  112. package/dist/lib-es6/api/classes/variant.js +832 -1198
  113. package/dist/lib-es6/api/classes/variant.js.map +1 -1
  114. package/dist/lib-es6/api/classes/variantInstance.d.ts +45 -45
  115. package/dist/lib-es6/api/classes/variantInstance.js +97 -105
  116. package/dist/lib-es6/api/classes/variantInstance.js.map +1 -1
  117. package/dist/lib-es6/api/classes/variantParameterizable.d.ts +17 -17
  118. package/dist/lib-es6/api/classes/variantParameterizable.js +84 -96
  119. package/dist/lib-es6/api/classes/variantParameterizable.js.map +1 -1
  120. package/dist/lib-es6/api/classes/viewer.d.ts +187 -184
  121. package/dist/lib-es6/api/classes/viewer.js +586 -728
  122. package/dist/lib-es6/api/classes/viewer.js.map +1 -1
  123. package/dist/lib-es6/api/classes/viewerLight.d.ts +66 -66
  124. package/dist/lib-es6/api/classes/viewerLight.js +316 -389
  125. package/dist/lib-es6/api/classes/viewerLight.js.map +1 -1
  126. package/dist/lib-es6/api/internal/lensRendering.d.ts +8 -8
  127. package/dist/lib-es6/api/internal/lensRendering.js +8 -8
  128. package/dist/lib-es6/api/internal/lensRendering.js.map +1 -1
  129. package/dist/lib-es6/api/internal/sceneSetup.d.ts +13 -13
  130. package/dist/lib-es6/api/internal/sceneSetup.js +197 -233
  131. package/dist/lib-es6/api/internal/sceneSetup.js.map +1 -1
  132. package/dist/lib-es6/api/manager/animationManager.d.ts +30 -29
  133. package/dist/lib-es6/api/manager/animationManager.js +122 -127
  134. package/dist/lib-es6/api/manager/animationManager.js.map +1 -1
  135. package/dist/lib-es6/api/manager/gltfExportManager.d.ts +65 -65
  136. package/dist/lib-es6/api/manager/gltfExportManager.js +192 -220
  137. package/dist/lib-es6/api/manager/gltfExportManager.js.map +1 -1
  138. package/dist/lib-es6/api/manager/sceneManager.d.ts +31 -31
  139. package/dist/lib-es6/api/manager/sceneManager.js +123 -149
  140. package/dist/lib-es6/api/manager/sceneManager.js.map +1 -1
  141. package/dist/lib-es6/api/manager/variantInstanceManager.d.ts +92 -92
  142. package/dist/lib-es6/api/manager/variantInstanceManager.js +256 -332
  143. package/dist/lib-es6/api/manager/variantInstanceManager.js.map +1 -1
  144. package/dist/lib-es6/api/store/specStorage.d.ts +24 -24
  145. package/dist/lib-es6/api/store/specStorage.js +46 -48
  146. package/dist/lib-es6/api/store/specStorage.js.map +1 -1
  147. package/dist/lib-es6/api/util/babylonHelper.d.ts +174 -174
  148. package/dist/lib-es6/api/util/babylonHelper.js +561 -581
  149. package/dist/lib-es6/api/util/babylonHelper.js.map +1 -1
  150. package/dist/lib-es6/api/util/globalTypes.d.ts +366 -366
  151. package/dist/lib-es6/api/util/globalTypes.js +1 -1
  152. package/dist/lib-es6/api/util/resourceHelper.d.ts +58 -58
  153. package/dist/lib-es6/api/util/resourceHelper.js +191 -247
  154. package/dist/lib-es6/api/util/resourceHelper.js.map +1 -1
  155. package/dist/lib-es6/api/util/sceneLoaderHelper.d.ts +35 -35
  156. package/dist/lib-es6/api/util/sceneLoaderHelper.js +131 -133
  157. package/dist/lib-es6/api/util/sceneLoaderHelper.js.map +1 -1
  158. package/dist/lib-es6/api/util/stringHelper.d.ts +9 -9
  159. package/dist/lib-es6/api/util/stringHelper.js +19 -21
  160. package/dist/lib-es6/api/util/stringHelper.js.map +1 -1
  161. package/dist/lib-es6/api/util/structureHelper.d.ts +9 -9
  162. package/dist/lib-es6/api/util/structureHelper.js +45 -45
  163. package/dist/lib-es6/api/util/structureHelper.js.map +1 -1
  164. package/dist/lib-es6/buildinfo.json +3 -3
  165. package/dist/lib-es6/index.d.ts +51 -49
  166. package/dist/lib-es6/index.js +48 -50
  167. package/dist/lib-es6/index.js.map +1 -1
  168. package/dist/lib-full/lens-rendering.js +2 -0
  169. package/dist/lib-full/lens-rendering.js.map +1 -0
  170. package/dist/lib-full/main.js +3 -0
  171. package/dist/lib-full/main.js.LICENSE.txt +9 -0
  172. package/dist/lib-full/main.js.map +1 -0
  173. package/package.json +76 -88
  174. package/src/api/classes/animationInterface.ts +10 -10
  175. package/src/api/classes/dottedPath.ts +181 -181
  176. package/src/api/classes/element.ts +716 -716
  177. package/src/api/classes/event.ts +367 -367
  178. package/src/api/classes/eventBroadcaster.ts +52 -52
  179. package/src/api/classes/parameter.ts +494 -494
  180. package/src/api/classes/parameterObservable.ts +100 -100
  181. package/src/api/classes/parameterizable.ts +87 -87
  182. package/src/api/classes/placementAnimation.ts +161 -160
  183. package/src/api/classes/variant.ts +904 -905
  184. package/src/api/classes/variantInstance.ts +97 -97
  185. package/src/api/classes/variantParameterizable.ts +85 -85
  186. package/src/api/classes/viewer.ts +669 -668
  187. package/src/api/classes/viewerLight.ts +334 -334
  188. package/src/api/internal/debugViewer.ts +90 -90
  189. package/src/api/internal/lensRendering.ts +9 -10
  190. package/src/api/internal/sceneSetup.ts +204 -204
  191. package/src/api/manager/animationManager.ts +143 -142
  192. package/src/api/manager/gltfExportManager.ts +191 -191
  193. package/src/api/manager/sceneManager.ts +127 -127
  194. package/src/api/manager/variantInstanceManager.ts +265 -265
  195. package/src/api/store/specStorage.ts +51 -51
  196. package/src/api/util/babylonHelper.ts +663 -663
  197. package/src/api/util/globalTypes.ts +413 -413
  198. package/src/api/util/resourceHelper.ts +189 -189
  199. package/src/api/util/sceneLoaderHelper.ts +148 -147
  200. package/src/api/util/stringHelper.ts +23 -23
  201. package/src/api/util/structureHelper.ts +49 -49
  202. package/src/buildinfo.json +3 -3
  203. package/src/dev.ts +61 -64
  204. package/src/index.ts +96 -94
  205. package/src/types.d.ts +28 -28
  206. package/dist/lib-cjs/api/classes/elementParameterizable.d.ts +0 -14
  207. package/dist/lib-cjs/api/classes/elementParameterizable.js +0 -135
  208. package/dist/lib-cjs/api/classes/elementParameterizable.js.map +0 -1
  209. package/dist/lib-cjs/api/internal/debugViewer.d.ts +0 -13
  210. package/dist/lib-cjs/api/internal/debugViewer.js +0 -87
  211. package/dist/lib-cjs/api/internal/debugViewer.js.map +0 -1
  212. package/dist/lib-es6/api/internal/debugViewer.d.ts +0 -13
  213. package/dist/lib-es6/api/internal/debugViewer.js +0 -84
  214. package/dist/lib-es6/api/internal/debugViewer.js.map +0 -1
  215. package/dist/webpack-stats.json +0 -0
  216. package/src/commonjs.tsconfig.json +0 -10
  217. package/src/declaration.tsconfig.json +0 -8
  218. package/src/es6.tsconfig.json +0 -10
  219. package/src/pagesconfig.json +0 -81
  220. package/src/tsconfig.json +0 -33
  221. package/src/tsconfig.types.json +0 -9
@@ -1,612 +1,592 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.envHelperMetadataName = exports.backgroundDomeName = exports.changeEnvironment = exports.getClientRectFromMesh = exports.removeFromShadowGenerator = exports.addToShadowGenerator = exports.setReceiveShadows = exports.removeFromHighlightLayer = exports.addToHighlightLayer = exports.setMaterialRoughness = exports.setMaterialMetallness = exports.setMaterialTexture = exports.setMaterialColor = exports.setSourceNodeMaterial = exports.setMaterial = exports.transformTransformNode = exports.disableNodeWithParents = exports.enableNodeWithParents = exports.deactivateTransformNode = exports.activateTransformNode = exports.assertTransformNode = exports.injectNodeMetadata = exports.cloneTransformNodeMaterial = exports.cloneNodeWithParents = exports.cloneTransformNode = exports.getDottedPathForNode = exports.mapToDottedNodes = exports.getRootNode = void 0;
4
- var tslib_1 = require("tslib");
5
- var photoDome_1 = require("@babylonjs/core/Helpers/photoDome");
6
- var light_1 = require("@babylonjs/core/Lights/light");
7
- var cubeTexture_1 = require("@babylonjs/core/Materials/Textures/cubeTexture");
8
- var math_axis_1 = require("@babylonjs/core/Maths/math.axis");
9
- var math_color_1 = require("@babylonjs/core/Maths/math.color");
10
- var math_vector_1 = require("@babylonjs/core/Maths/math.vector");
11
- var abstractMesh_1 = require("@babylonjs/core/Meshes/abstractMesh");
12
- var instancedMesh_1 = require("@babylonjs/core/Meshes/instancedMesh");
13
- var transformNode_1 = require("@babylonjs/core/Meshes/transformNode");
14
- var tools_1 = require("@babylonjs/core/Misc/tools");
15
- var sceneSetup_1 = require("../internal/sceneSetup");
16
- var lodash_es_1 = require("lodash-es");
17
- var dottedPath_1 = require("../classes/dottedPath");
18
- var sceneLoaderHelper_1 = require("./sceneLoaderHelper");
19
- var backgroundDomeName = 'BackgroundDome_ViewerGenerated';
20
- exports.backgroundDomeName = backgroundDomeName;
21
- var envHelperMetadataName = 'viewerEnvHelper';
22
- exports.envHelperMetadataName = envHelperMetadataName;
23
- /**
24
- * @param node
25
- * @return Node
26
- */
27
- var getRootNode = function (node) {
28
- var _node = node;
29
- while (_node.parent) {
30
- _node = _node.parent;
31
- }
32
- return _node;
33
- };
34
- exports.getRootNode = getRootNode;
35
- /**
36
- * @param nodes
37
- * @param predicate
38
- * @return Map<DottedPath, T>
39
- */
40
- var mapToDottedNodes = function (nodes, predicate) {
41
- var map = new Map();
42
- var addNodes = function (_node) {
43
- if (predicate && predicate(_node)) {
44
- map.set(_node.metadata.dottedPath, _node);
45
- }
46
- _node.getChildren().forEach(function (child) {
47
- addNodes(child);
48
- });
49
- };
50
- nodes.forEach(function (node) {
51
- addNodes(node);
52
- });
53
- return map;
54
- };
55
- exports.mapToDottedNodes = mapToDottedNodes;
56
- /**
57
- * @param node
58
- * @return DottedPath
59
- */
60
- var getDottedPathForNode = function (node) {
61
- var dottedPath = dottedPath_1.DottedPath.create(node.name);
62
- var _parent = node;
63
- while (_parent.parent) {
64
- _parent = _parent.parent;
65
- dottedPath.unshiftPart(_parent.name);
66
- }
67
- return dottedPath;
68
- };
69
- exports.getDottedPathForNode = getDottedPathForNode;
70
- /**
71
- * @param node
72
- * @param predicate
73
- * @param deep
74
- * @return TransformNode | null
75
- */
76
- var cloneTransformNode = function (node, predicate, deep) {
77
- if (deep === void 0) { deep = true; }
78
- if (predicate && !predicate(node)) {
79
- return null;
80
- }
81
- var clone = node.clone(node.name, node.parent, true);
82
- if (clone) {
83
- clone.metadata = lodash_es_1.cloneDeep(node.metadata);
84
- // if the cloned node is of type InstancedMesh, due to a bug(?),
85
- // the InstancedMesh.isEnabled state may have changed after cloning.
86
- // in that case, set the clone's enabled state to the original's state
87
- if (node.constructor.name === 'InstancedMesh') {
88
- clone.setEnabled(node.isEnabled(false));
89
- }
90
- }
91
- if (deep) {
92
- var children = node.getChildTransformNodes(true);
93
- children.forEach(function (child) {
94
- var clonedChild = cloneTransformNode(child, predicate, deep);
95
- if (clonedChild) {
96
- clonedChild.parent = clone;
97
- }
98
- });
99
- }
100
- return clone;
101
- };
102
- exports.cloneTransformNode = cloneTransformNode;
103
- /**
104
- * @param node
105
- */
106
- var cloneNodeWithParents = function (node) {
107
- var clone = null;
108
- if (node instanceof transformNode_1.TransformNode) {
109
- clone = node.clone(node.name, cloneNodeWithParents(node.parent), true);
110
- }
111
- else if (node instanceof light_1.Light) {
112
- clone = node.clone(node.name, cloneNodeWithParents(node.parent));
113
- }
114
- else if (node) {
115
- throw new Error("Cloning of \"" + (node === null || node === void 0 ? void 0 : node.constructor.name) + "\" is not implemented (yet).");
116
- }
117
- return clone;
118
- };
119
- exports.cloneNodeWithParents = cloneNodeWithParents;
120
- /**
121
- * @param node
122
- * @param deep
123
- * @param prefix
124
- * @return TransformNode
125
- */
126
- var cloneTransformNodeMaterial = function (node, prefix, deep) {
127
- if (prefix === void 0) { prefix = ''; }
128
- if (deep === void 0) { deep = true; }
129
- if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
130
- var newMatName = dottedPath_1.DottedPath.create(prefix).addParts([node.material.name, 'clone', node.uniqueId.toString()]);
131
- node.material = node.material.clone(newMatName.path);
132
- }
133
- if (deep) {
134
- var children = node.getChildTransformNodes(true);
135
- children.forEach(function (child) { return cloneTransformNodeMaterial(child, prefix, deep); });
136
- }
137
- return node;
138
- };
139
- exports.cloneTransformNodeMaterial = cloneTransformNodeMaterial;
140
- /**
141
- * @param node
142
- * @param deep
143
- * @param metadata
144
- */
145
- var injectNodeMetadata = function (node, metadata, deep) {
146
- if (deep === void 0) { deep = true; }
147
- node.metadata = lodash_es_1.merge({}, node.metadata, metadata);
148
- if (deep && node instanceof transformNode_1.TransformNode) {
149
- var children = node.getChildTransformNodes(true);
150
- children.forEach(function (child) { return injectNodeMetadata(child, metadata, deep); });
151
- }
152
- };
153
- exports.injectNodeMetadata = injectNodeMetadata;
154
- /**
155
- * @param node
156
- * @param assertCallable
157
- * @param callableParameters
158
- * @param deep
159
- */
160
- var assertTransformNode = function (node, assertCallable, callableParameters, deep) {
161
- if (callableParameters === void 0) { callableParameters = []; }
162
- if (deep === void 0) { deep = true; }
163
- assertCallable.apply(void 0, tslib_1.__spreadArrays([node], callableParameters));
164
- if (deep) {
165
- var children = node.getChildTransformNodes(true);
166
- children.forEach(function (child) { return assertTransformNode(child, assertCallable, callableParameters, deep); });
167
- }
168
- };
169
- exports.assertTransformNode = assertTransformNode;
170
- /**
171
- * @param node
172
- * @param deep
173
- */
174
- var activateTransformNode = function (node, deep) {
175
- if (deep === void 0) { deep = true; }
176
- node.setEnabled(true);
177
- /*
178
- if( node instanceof AbstractMesh ) {
179
- node.visibility = 1;
180
- node.isPickable = true;
181
- }
182
- */
183
- if (deep) {
184
- node.getChildTransformNodes(true).forEach(function (child) { return activateTransformNode(child, deep); });
185
- }
186
- };
187
- exports.activateTransformNode = activateTransformNode;
188
- /**
189
- * @param node
190
- * @param deep
191
- */
192
- var deactivateTransformNode = function (node, deep) {
193
- if (deep === void 0) { deep = true; }
194
- node.setEnabled(false);
195
- /*
196
- if( node instanceof AbstractMesh ) {
197
- node.visibility = 0;
198
- node.isPickable = false;
199
- }
200
- */
201
- if (deep) {
202
- node.getChildTransformNodes(true).forEach(function (child) { return deactivateTransformNode(child, deep); });
203
- }
204
- };
205
- exports.deactivateTransformNode = deactivateTransformNode;
206
- /**
207
- * @param node
208
- */
209
- var enableNodeWithParents = function (node) {
210
- node.setEnabled(true);
211
- if (node.parent) {
212
- enableNodeWithParents(node.parent);
213
- }
214
- };
215
- exports.enableNodeWithParents = enableNodeWithParents;
216
- /**
217
- * @param node
218
- */
219
- var disableNodeWithParents = function (node) {
220
- node.setEnabled(false);
221
- if (node.parent) {
222
- disableNodeWithParents(node.parent);
223
- }
224
- };
225
- exports.disableNodeWithParents = disableNodeWithParents;
226
- /**
227
- * Applies a {@link TransformationDefinition} consecutively to ensure dependencies in positioning etc.
228
- * @param node
229
- * @param transformation
230
- */
231
- var transformTransformNode = function (node, transformation) {
232
- // scaling
233
- if (!lodash_es_1.has(node.metadata, 'scaling.initial')) {
234
- injectNodeMetadata(node, { 'scaling.initial': node.scaling }, false);
235
- }
236
- var initialScaling = lodash_es_1.get(node.metadata, 'scaling.initial');
237
- node.scaling = initialScaling.multiply(transformation.scaling);
238
- // position
239
- if (!lodash_es_1.has(node.metadata, 'position.initial')) {
240
- injectNodeMetadata(node, { 'position.initial': node.absolutePosition.clone() }, false);
241
- }
242
- var initialPosition = lodash_es_1.get(node.metadata, 'position.initial');
243
- node.setAbsolutePosition(initialPosition.add(transformation.position).multiply(transformation.scaling));
244
- // rotation
245
- if (!lodash_es_1.has(node.metadata, 'rotation.initial')) {
246
- var rotationQuaternion = node.rotationQuaternion;
247
- if (!rotationQuaternion) {
248
- rotationQuaternion = math_vector_1.Quaternion.RotationYawPitchRoll(node.rotation.x, node.rotation.y, node.rotation.z);
249
- }
250
- injectNodeMetadata(node, { 'rotation.initial': rotationQuaternion.asArray() }, false);
251
- }
252
- var initialRotationQuaternion = math_vector_1.Quaternion.FromArray(lodash_es_1.get(node.metadata, 'rotation.initial'));
253
- node.rotationQuaternion = initialRotationQuaternion;
254
- node.rotateAround(math_vector_1.Vector3.Zero(), math_axis_1.Axis.X, transformation.rotation.x);
255
- node.rotateAround(math_vector_1.Vector3.Zero(), math_axis_1.Axis.Y, transformation.rotation.y);
256
- node.rotateAround(math_vector_1.Vector3.Zero(), math_axis_1.Axis.Z, transformation.rotation.z);
257
- node.computeWorldMatrix(true);
258
- };
259
- exports.transformTransformNode = transformTransformNode;
260
- /**
261
- * Apply changes of environment (background texture, etc.) consecutively in order to avoid dependency related issues.
262
- * @param scene
263
- * @param envDef
264
- */
265
- var changeEnvironment = function (scene, envDef) {
266
- var _a;
267
- var _b, _c;
268
- // issue warning if both background texture and usedefault are set
269
- if (envDef.environmentUseDefault && envDef.environmentBackground) {
270
- console.warn("!!! Warning !!! Spec parameter 'environment.usedefault' is being overruled by 'environment.background'.");
271
- }
272
- var useDefaultEnv = envDef.environmentUseDefault && !envDef.environmentBackground;
273
- // 1) set ENVIRONMENT_COLOR
274
- var clearColorBefore = scene.clearColor.toString();
275
- scene.clearColor = envDef.environmentColor
276
- ? math_color_1.Color4.FromColor3(envDef.environmentColor)
277
- : useDefaultEnv
278
- ? sceneSetup_1.defaultEnvHelperColor
279
- : sceneSetup_1.defaultSceneClearColor;
280
- var clearColorChanged = clearColorBefore !== scene.clearColor.toString();
281
- // Remove all URI params from given env URL as `CubeTexture.CreateFromPrefilteredData` does not work correctly with
282
- // URLs which contain URI params.
283
- // E.g. `https://some.url/.../studio.env?name=defaultEnv` throws an exception whilst `https://some.url/.../studio.env`
284
- // works as expected.
285
- //
286
- // See BJS forum for more details:
287
- // https://forum.babylonjs.com/t/cubetexture-createfromprefiltereddata-does-not-work-with-url-that-contains-uri-params/34097
288
- var newEnvUrl = (_b = envDef.environment) === null || _b === void 0 ? void 0 : _b.split('?')[0];
289
- // 2) dispose existing & set new ENVIRONMENT (==texture)
290
- var curEnvTexture = scene.environmentTexture;
291
- var envTextureChanged = newEnvUrl !== (curEnvTexture === null || curEnvTexture === void 0 ? void 0 : curEnvTexture.url);
292
- if (curEnvTexture && (!newEnvUrl || envTextureChanged)) {
293
- curEnvTexture.dispose();
294
- }
295
- var rotation = envDef.environmentRotation !== undefined ? tools_1.Tools.ToRadians(envDef.environmentRotation) : 0;
296
- if (newEnvUrl && envTextureChanged) {
297
- var envTexture = cubeTexture_1.CubeTexture.CreateFromPrefilteredData(newEnvUrl, scene);
298
- envTexture.rotationY = rotation;
299
- scene.environmentTexture = envTexture;
300
- }
301
- else if (curEnvTexture && curEnvTexture.rotationY !== rotation) {
302
- curEnvTexture.rotationY = rotation;
303
- }
304
- // 3) dispose existing & set new ENVIRONMENT_BACKGROUND
305
- var curDome = scene.getNodeByName(backgroundDomeName);
306
- var backgroundUrlChanged = envDef.environmentBackground !== (curDome === null || curDome === void 0 ? void 0 : curDome.texture.url);
307
- if (curDome && (!envDef.environmentBackground || backgroundUrlChanged)) {
308
- curDome.dispose();
309
- }
310
- var rotationPhotoDome = -1 * rotation;
311
- if (envDef.environmentBackground && backgroundUrlChanged) {
312
- var textureUrl = envDef.environmentBackground;
313
- var dome = new photoDome_1.PhotoDome(backgroundDomeName, textureUrl, { resolution: 32, size: 450 }, scene);
314
- // Rotate submesh to get them in line with environment texture
315
- dome.getChildMeshes(true)[0].rotation.y = tools_1.Tools.ToRadians(90);
316
- dome.rotation.y = rotationPhotoDome;
317
- }
318
- else if (curDome && curDome.rotation.y !== rotationPhotoDome) {
319
- curDome.rotation.y = rotationPhotoDome;
320
- }
321
- // 4) dispose existing & set new ENVIRONMENT_USEDEFAULT (only if no background is set)
322
- var curEnvHelper = (_c = scene.metadata) === null || _c === void 0 ? void 0 : _c[envHelperMetadataName];
323
- if (curEnvHelper && !useDefaultEnv) {
324
- curEnvHelper.dispose();
325
- delete scene.metadata[envHelperMetadataName];
326
- }
327
- var envHelperMainColor = math_color_1.Color3.FromArray(scene.clearColor.asArray());
328
- if (useDefaultEnv && !curEnvHelper) {
329
- var envHelper = scene.createDefaultEnvironment({ sizeAuto: true });
330
- envHelper === null || envHelper === void 0 ? void 0 : envHelper.setMainColor(envHelperMainColor);
331
- if (envHelper) {
332
- scene.metadata = lodash_es_1.merge({}, scene.metadata, (_a = {}, _a[envHelperMetadataName] = envHelper, _a));
333
- }
334
- }
335
- else if (curEnvHelper && useDefaultEnv && clearColorChanged) {
336
- curEnvHelper.setMainColor(envHelperMainColor);
337
- }
338
- // 5) set ENVIRONMENT_INTENSITY
339
- if (envDef.environmentIntensity !== undefined) {
340
- scene.environmentIntensity = envDef.environmentIntensity;
341
- }
342
- };
343
- exports.changeEnvironment = changeEnvironment;
344
- /**
345
- * @param node
346
- * @param materialName
347
- * @param deep
348
- */
349
- var setMaterial = function (variant, node, materialName, deep) {
350
- var _a;
351
- if (deep === void 0) { deep = true; }
352
- if (node instanceof abstractMesh_1.AbstractMesh) {
353
- var hasMissingMaterial = lodash_es_1.has(node.metadata, sceneLoaderHelper_1.missingMaterialMetadataName);
354
- if (node.isEnabled()) {
355
- node.material = variant.getMaterial(materialName);
356
- if (hasMissingMaterial) {
357
- delete node.metadata[sceneLoaderHelper_1.missingMaterialMetadataName];
358
- }
359
- }
360
- else {
361
- injectNodeMetadata(node, (_a = {}, _a[sceneLoaderHelper_1.missingMaterialMetadataName] = materialName, _a), false);
362
- // If it already had the missing material flag before, there already exists an observer...
363
- if (!hasMissingMaterial) {
364
- sceneLoaderHelper_1.addMissingMaterialObserver(node);
365
- }
366
- }
367
- }
368
- if (deep) {
369
- node.getChildTransformNodes(true).forEach(function (child) { return setMaterial(variant, child, materialName, deep); });
370
- }
371
- };
372
- exports.setMaterial = setMaterial;
373
- /**
374
- * !!! Warning !!!
375
- * This function is not public API. Whilst it can help solving certain problems, it only works reliably in well defined
376
- * situations and can cause unwanted side effects under some conditions. Use carefully at your own risk!
377
- *
378
- * See https://combeenation.myjetbrains.com/youtrack/issue/CB-5906 for further details regarding this warning.
379
- *
380
- * Set material of an instanced meshes source mesh.
381
- * Changes the material of all instanced meshes which have the same source mesh.
382
- *
383
- * @param node
384
- * @param material
385
- * @param deep
386
- *
387
- * @ignore
388
- */
389
- var setSourceNodeMaterial = function (node, material, deep) {
390
- if (deep === void 0) { deep = true; }
391
- 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!";
392
- console.warn("!!! Warning !!!\n" + warn);
393
- if (node instanceof instancedMesh_1.InstancedMesh) {
394
- node.sourceMesh.material = material;
395
- }
396
- if (deep) {
397
- node.getChildTransformNodes(true).forEach(function (child) { return setSourceNodeMaterial(child, material, deep); });
398
- }
399
- };
400
- exports.setSourceNodeMaterial = setSourceNodeMaterial;
401
- /**
402
- * @param node
403
- * @param color
404
- * @param deep
405
- */
406
- var setMaterialColor = function (node, color, deep) {
407
- if (deep === void 0) { deep = true; }
408
- if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
409
- var materialCls = node.material.getClassName();
410
- switch (materialCls) {
411
- case 'PBRMaterial':
412
- node.material.albedoColor = color.toLinearSpace();
413
- break;
414
- case 'StandardMaterial':
415
- node.material.diffuseColor = color;
416
- break;
417
- default:
418
- throw new Error("Setting color for material of instance \"" + materialCls + "\" not implemented (yet).");
419
- }
420
- }
421
- if (deep) {
422
- node.getChildTransformNodes(true).forEach(function (child) { return setMaterialColor(child, color, deep); });
423
- }
424
- };
425
- exports.setMaterialColor = setMaterialColor;
426
- /**
427
- * @param node
428
- * @param texture
429
- * @param deep
430
- */
431
- var setMaterialTexture = function (node, texture, deep) {
432
- if (deep === void 0) { deep = true; }
433
- if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
434
- var materialCls = node.material.getClassName();
435
- switch (materialCls) {
436
- case 'PBRMaterial':
437
- node.material.albedoTexture = texture;
438
- break;
439
- case 'StandardMaterial':
440
- node.material.diffuseTexture = texture;
441
- break;
442
- default:
443
- throw new Error("Setting texture for material of instance \"" + materialCls + "\" not implemented (yet).");
444
- }
445
- }
446
- if (deep) {
447
- node.getChildTransformNodes(true).forEach(function (child) { return setMaterialTexture(child, texture, deep); });
448
- }
449
- };
450
- exports.setMaterialTexture = setMaterialTexture;
451
- /**
452
- * @param node
453
- * @param metallness
454
- * @param deep
455
- */
456
- var setMaterialMetallness = function (node, metallness, deep) {
457
- if (deep === void 0) { deep = true; }
458
- if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
459
- var materialCls = node.material.getClassName();
460
- switch (materialCls) {
461
- case 'PBRMaterial':
462
- node.material.metallic = metallness;
463
- break;
464
- default:
465
- throw new Error("Setting metallness for material of instance \"" + materialCls + "\" not implemented (yet).");
466
- }
467
- }
468
- if (deep) {
469
- node.getChildTransformNodes(true).forEach(function (child) { return setMaterialMetallness(child, metallness, deep); });
470
- }
471
- };
472
- exports.setMaterialMetallness = setMaterialMetallness;
473
- /**
474
- * @param node
475
- * @param roughness
476
- * @param deep
477
- */
478
- var setMaterialRoughness = function (node, roughness, deep) {
479
- if (deep === void 0) { deep = true; }
480
- if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
481
- var materialCls = node.material.getClassName();
482
- switch (materialCls) {
483
- case 'PBRMaterial':
484
- node.material.roughness = roughness;
485
- break;
486
- case 'StandardMaterial':
487
- node.material.roughness = roughness;
488
- break;
489
- default:
490
- throw new Error("Setting roughness for material of instance \"" + materialCls + "\" not implemented (yet).");
491
- }
492
- }
493
- if (deep) {
494
- node.getChildTransformNodes(true).forEach(function (child) { return setMaterialRoughness(child, roughness, deep); });
495
- }
496
- };
497
- exports.setMaterialRoughness = setMaterialRoughness;
498
- /**
499
- * @param node
500
- * @param layer
501
- * @param color
502
- * @param deep
503
- */
504
- var addToHighlightLayer = function (layer, color, node, deep) {
505
- if (deep === void 0) { deep = true; }
506
- if (node instanceof abstractMesh_1.AbstractMesh) {
507
- layer.addMesh(node, color);
508
- }
509
- if (deep) {
510
- node.getChildTransformNodes(true).forEach(function (child) { return addToHighlightLayer(layer, color, child, deep); });
511
- }
512
- };
513
- exports.addToHighlightLayer = addToHighlightLayer;
514
- /**
515
- * @param node
516
- * @param layer
517
- * @param deep
518
- */
519
- var removeFromHighlightLayer = function (layer, node, deep) {
520
- if (deep === void 0) { deep = true; }
521
- if (node instanceof abstractMesh_1.AbstractMesh) {
522
- layer.removeMesh(node);
523
- }
524
- if (deep) {
525
- node.getChildTransformNodes(true).forEach(function (child) { return removeFromHighlightLayer(layer, child, deep); });
526
- }
527
- };
528
- exports.removeFromHighlightLayer = removeFromHighlightLayer;
529
- /**
530
- * @param node
531
- * @param receiveShadows
532
- * @param deep
533
- */
534
- var setReceiveShadows = function (node, receiveShadows, deep) {
535
- if (deep === void 0) { deep = true; }
536
- if (node instanceof abstractMesh_1.AbstractMesh) {
537
- node.receiveShadows = receiveShadows;
538
- }
539
- if (deep) {
540
- node.getChildTransformNodes(true).forEach(function (child) { return setReceiveShadows(child, receiveShadows, deep); });
541
- }
542
- };
543
- exports.setReceiveShadows = setReceiveShadows;
544
- /**
545
- * @param node
546
- * @param generator
547
- * @param deep
548
- */
549
- var addToShadowGenerator = function (generator, node, deep) {
550
- if (deep === void 0) { deep = true; }
551
- if (node instanceof abstractMesh_1.AbstractMesh) {
552
- // We have to remove the node because there's no duplicate check in babylon
553
- generator.removeShadowCaster(node, false);
554
- generator.addShadowCaster(node, false);
555
- }
556
- if (deep) {
557
- node.getChildTransformNodes(true).forEach(function (child) { return addToShadowGenerator(generator, child, deep); });
558
- }
559
- };
560
- exports.addToShadowGenerator = addToShadowGenerator;
561
- /**
562
- * @param node
563
- * @param generator
564
- * @param deep
565
- */
566
- var removeFromShadowGenerator = function (generator, node, deep) {
567
- if (deep === void 0) { deep = true; }
568
- if (node instanceof abstractMesh_1.AbstractMesh) {
569
- generator.removeShadowCaster(node, false);
570
- }
571
- if (deep) {
572
- node.getChildTransformNodes(true).forEach(function (child) { return removeFromShadowGenerator(generator, child, deep); });
573
- }
574
- };
575
- exports.removeFromShadowGenerator = removeFromShadowGenerator;
576
- /**
577
- * https://forum.babylonjs.com/t/get-mesh-bounding-box-position-and-size-in-2d-screen-coordinates/1058/3
578
- * @param mesh
579
- * @param scene
580
- * @param canvas
581
- */
582
- var getClientRectFromMesh = function (mesh, scene, canvas) {
583
- // get bounding box of the mesh
584
- var meshVectors = mesh.getBoundingInfo().boundingBox.vectors;
585
- // get the matrix and viewport needed to project the vectors onto the screen
586
- var worldMatrix = mesh.getWorldMatrix();
587
- var transformMatrix = scene.getTransformMatrix();
588
- var viewport = scene.activeCamera.viewport;
589
- // loop though all the vectors and project them against the current camera viewport to get a set of coordinates
590
- var coordinates = meshVectors.map(function (vector) {
591
- var projection = math_vector_1.Vector3.Project(vector, worldMatrix, transformMatrix, viewport);
592
- projection.x = projection.x * canvas.clientWidth;
593
- projection.y = projection.y * canvas.clientHeight;
594
- return projection;
595
- });
596
- // get the min and max for all the coordinates so we can calculate the largest possible screen size
597
- var maxX = Math.max.apply(Math, coordinates.map(function (o) { return o.x; }));
598
- var minX = Math.min.apply(Math, coordinates.map(function (o) { return o.x; }));
599
- var maxY = Math.max.apply(Math, coordinates.map(function (o) { return o.y; }));
600
- var minY = Math.min.apply(Math, coordinates.map(function (o) { return o.y; }));
601
- // return a ClientRect from this
602
- return {
603
- width: maxX - minX,
604
- height: maxY - minY,
605
- left: minX,
606
- top: minY,
607
- right: maxX,
608
- bottom: maxY,
609
- };
610
- };
611
- exports.getClientRectFromMesh = getClientRectFromMesh;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.envHelperMetadataName = exports.backgroundDomeName = exports.changeEnvironment = exports.getClientRectFromMesh = exports.removeFromShadowGenerator = exports.addToShadowGenerator = exports.setReceiveShadows = exports.removeFromHighlightLayer = exports.addToHighlightLayer = exports.setMaterialRoughness = exports.setMaterialMetallness = exports.setMaterialTexture = exports.setMaterialColor = exports.setSourceNodeMaterial = exports.setMaterial = exports.transformTransformNode = exports.disableNodeWithParents = exports.enableNodeWithParents = exports.deactivateTransformNode = exports.activateTransformNode = exports.assertTransformNode = exports.injectNodeMetadata = exports.cloneTransformNodeMaterial = exports.cloneNodeWithParents = exports.cloneTransformNode = exports.getDottedPathForNode = exports.mapToDottedNodes = exports.getRootNode = void 0;
4
+ const dottedPath_1 = require("../classes/dottedPath");
5
+ const sceneSetup_1 = require("../internal/sceneSetup");
6
+ const sceneLoaderHelper_1 = require("./sceneLoaderHelper");
7
+ const photoDome_1 = require("@babylonjs/core/Helpers/photoDome");
8
+ const light_1 = require("@babylonjs/core/Lights/light");
9
+ const cubeTexture_1 = require("@babylonjs/core/Materials/Textures/cubeTexture");
10
+ const math_axis_1 = require("@babylonjs/core/Maths/math.axis");
11
+ const math_color_1 = require("@babylonjs/core/Maths/math.color");
12
+ const math_vector_1 = require("@babylonjs/core/Maths/math.vector");
13
+ const abstractMesh_1 = require("@babylonjs/core/Meshes/abstractMesh");
14
+ const instancedMesh_1 = require("@babylonjs/core/Meshes/instancedMesh");
15
+ const transformNode_1 = require("@babylonjs/core/Meshes/transformNode");
16
+ const tools_1 = require("@babylonjs/core/Misc/tools");
17
+ const lodash_es_1 = require("lodash-es");
18
+ const backgroundDomeName = 'BackgroundDome_ViewerGenerated';
19
+ exports.backgroundDomeName = backgroundDomeName;
20
+ const envHelperMetadataName = 'viewerEnvHelper';
21
+ exports.envHelperMetadataName = envHelperMetadataName;
22
+ /**
23
+ * @param node
24
+ * @return Node
25
+ */
26
+ const getRootNode = function (node) {
27
+ let _node = node;
28
+ while (_node.parent) {
29
+ _node = _node.parent;
30
+ }
31
+ return _node;
32
+ };
33
+ exports.getRootNode = getRootNode;
34
+ /**
35
+ * @param nodes
36
+ * @param predicate
37
+ * @return Map<DottedPath, T>
38
+ */
39
+ const mapToDottedNodes = function (nodes, predicate) {
40
+ const map = new Map();
41
+ const addNodes = function (_node) {
42
+ if (predicate && predicate(_node)) {
43
+ map.set(_node.metadata.dottedPath, _node);
44
+ }
45
+ _node.getChildren().forEach(child => {
46
+ addNodes(child);
47
+ });
48
+ };
49
+ nodes.forEach(node => {
50
+ addNodes(node);
51
+ });
52
+ return map;
53
+ };
54
+ exports.mapToDottedNodes = mapToDottedNodes;
55
+ /**
56
+ * @param node
57
+ * @return DottedPath
58
+ */
59
+ const getDottedPathForNode = function (node) {
60
+ const dottedPath = dottedPath_1.DottedPath.create(node.name);
61
+ let _parent = node;
62
+ while (_parent.parent) {
63
+ _parent = _parent.parent;
64
+ dottedPath.unshiftPart(_parent.name);
65
+ }
66
+ return dottedPath;
67
+ };
68
+ exports.getDottedPathForNode = getDottedPathForNode;
69
+ /**
70
+ * @param node
71
+ * @param predicate
72
+ * @param deep
73
+ * @return TransformNode | null
74
+ */
75
+ const cloneTransformNode = function (node, predicate, deep = true) {
76
+ if (predicate && !predicate(node)) {
77
+ return null;
78
+ }
79
+ const clone = node.clone(node.name, node.parent, true);
80
+ if (clone) {
81
+ clone.metadata = (0, lodash_es_1.cloneDeep)(node.metadata);
82
+ // if the cloned node is of type InstancedMesh, due to a bug(?),
83
+ // the InstancedMesh.isEnabled state may have changed after cloning.
84
+ // in that case, set the clone's enabled state to the original's state
85
+ if (node.constructor.name === 'InstancedMesh') {
86
+ clone.setEnabled(node.isEnabled(false));
87
+ }
88
+ }
89
+ if (deep) {
90
+ const children = node.getChildTransformNodes(true);
91
+ children.forEach(child => {
92
+ const clonedChild = cloneTransformNode(child, predicate, deep);
93
+ if (clonedChild) {
94
+ clonedChild.parent = clone;
95
+ }
96
+ });
97
+ }
98
+ return clone;
99
+ };
100
+ exports.cloneTransformNode = cloneTransformNode;
101
+ /**
102
+ * @param node
103
+ */
104
+ const cloneNodeWithParents = function (node) {
105
+ let clone = null;
106
+ if (node instanceof transformNode_1.TransformNode) {
107
+ clone = node.clone(node.name, cloneNodeWithParents(node.parent), true);
108
+ }
109
+ else if (node instanceof light_1.Light) {
110
+ clone = node.clone(node.name, cloneNodeWithParents(node.parent));
111
+ }
112
+ else if (node) {
113
+ throw new Error(`Cloning of "${node === null || node === void 0 ? void 0 : node.constructor.name}" is not implemented (yet).`);
114
+ }
115
+ return clone;
116
+ };
117
+ exports.cloneNodeWithParents = cloneNodeWithParents;
118
+ /**
119
+ * @param node
120
+ * @param deep
121
+ * @param prefix
122
+ * @return TransformNode
123
+ */
124
+ const cloneTransformNodeMaterial = function (node, prefix = '', deep = true) {
125
+ if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
126
+ const newMatName = dottedPath_1.DottedPath.create(prefix).addParts([node.material.name, 'clone', node.uniqueId.toString()]);
127
+ node.material = node.material.clone(newMatName.path);
128
+ }
129
+ if (deep) {
130
+ const children = node.getChildTransformNodes(true);
131
+ children.forEach(child => cloneTransformNodeMaterial(child, prefix, deep));
132
+ }
133
+ return node;
134
+ };
135
+ exports.cloneTransformNodeMaterial = cloneTransformNodeMaterial;
136
+ /**
137
+ * @param node
138
+ * @param deep
139
+ * @param metadata
140
+ */
141
+ const injectNodeMetadata = function (node, metadata, deep = true) {
142
+ node.metadata = (0, lodash_es_1.merge)({}, node.metadata, metadata);
143
+ if (deep && node instanceof transformNode_1.TransformNode) {
144
+ const children = node.getChildTransformNodes(true);
145
+ children.forEach(child => injectNodeMetadata(child, metadata, deep));
146
+ }
147
+ };
148
+ exports.injectNodeMetadata = injectNodeMetadata;
149
+ /**
150
+ * @param node
151
+ * @param assertCallable
152
+ * @param callableParameters
153
+ * @param deep
154
+ */
155
+ const assertTransformNode = function (node, assertCallable, callableParameters = [], deep = true) {
156
+ assertCallable(node, ...callableParameters);
157
+ if (deep) {
158
+ const children = node.getChildTransformNodes(true);
159
+ children.forEach(child => assertTransformNode(child, assertCallable, callableParameters, deep));
160
+ }
161
+ };
162
+ exports.assertTransformNode = assertTransformNode;
163
+ /**
164
+ * @param node
165
+ * @param deep
166
+ */
167
+ const activateTransformNode = function (node, deep = true) {
168
+ node.setEnabled(true);
169
+ /*
170
+ if( node instanceof AbstractMesh ) {
171
+ node.visibility = 1;
172
+ node.isPickable = true;
173
+ }
174
+ */
175
+ if (deep) {
176
+ node.getChildTransformNodes(true).forEach(child => activateTransformNode(child, deep));
177
+ }
178
+ };
179
+ exports.activateTransformNode = activateTransformNode;
180
+ /**
181
+ * @param node
182
+ * @param deep
183
+ */
184
+ const deactivateTransformNode = function (node, deep = true) {
185
+ node.setEnabled(false);
186
+ /*
187
+ if( node instanceof AbstractMesh ) {
188
+ node.visibility = 0;
189
+ node.isPickable = false;
190
+ }
191
+ */
192
+ if (deep) {
193
+ node.getChildTransformNodes(true).forEach(child => deactivateTransformNode(child, deep));
194
+ }
195
+ };
196
+ exports.deactivateTransformNode = deactivateTransformNode;
197
+ /**
198
+ * @param node
199
+ */
200
+ const enableNodeWithParents = function (node) {
201
+ node.setEnabled(true);
202
+ if (node.parent) {
203
+ enableNodeWithParents(node.parent);
204
+ }
205
+ };
206
+ exports.enableNodeWithParents = enableNodeWithParents;
207
+ /**
208
+ * @param node
209
+ */
210
+ const disableNodeWithParents = function (node) {
211
+ node.setEnabled(false);
212
+ if (node.parent) {
213
+ disableNodeWithParents(node.parent);
214
+ }
215
+ };
216
+ exports.disableNodeWithParents = disableNodeWithParents;
217
+ /**
218
+ * Applies a {@link TransformationDefinition} consecutively to ensure dependencies in positioning etc.
219
+ * @param node
220
+ * @param transformation
221
+ */
222
+ const transformTransformNode = function (node, transformation) {
223
+ // scaling
224
+ if (!(0, lodash_es_1.has)(node.metadata, 'scaling.initial')) {
225
+ injectNodeMetadata(node, { 'scaling.initial': node.scaling }, false);
226
+ }
227
+ const initialScaling = (0, lodash_es_1.get)(node.metadata, 'scaling.initial');
228
+ node.scaling = initialScaling.multiply(transformation.scaling);
229
+ // position
230
+ if (!(0, lodash_es_1.has)(node.metadata, 'position.initial')) {
231
+ injectNodeMetadata(node, { 'position.initial': node.absolutePosition.clone() }, false);
232
+ }
233
+ const initialPosition = (0, lodash_es_1.get)(node.metadata, 'position.initial');
234
+ node.setAbsolutePosition(initialPosition.add(transformation.position).multiply(transformation.scaling));
235
+ // rotation
236
+ if (!(0, lodash_es_1.has)(node.metadata, 'rotation.initial')) {
237
+ let rotationQuaternion = node.rotationQuaternion;
238
+ if (!rotationQuaternion) {
239
+ rotationQuaternion = math_vector_1.Quaternion.RotationYawPitchRoll(node.rotation.x, node.rotation.y, node.rotation.z);
240
+ }
241
+ injectNodeMetadata(node, { 'rotation.initial': rotationQuaternion.asArray() }, false);
242
+ }
243
+ const initialRotationQuaternion = math_vector_1.Quaternion.FromArray((0, lodash_es_1.get)(node.metadata, 'rotation.initial'));
244
+ node.rotationQuaternion = initialRotationQuaternion;
245
+ node.rotateAround(math_vector_1.Vector3.Zero(), math_axis_1.Axis.X, transformation.rotation.x);
246
+ node.rotateAround(math_vector_1.Vector3.Zero(), math_axis_1.Axis.Y, transformation.rotation.y);
247
+ node.rotateAround(math_vector_1.Vector3.Zero(), math_axis_1.Axis.Z, transformation.rotation.z);
248
+ node.computeWorldMatrix(true);
249
+ };
250
+ exports.transformTransformNode = transformTransformNode;
251
+ /**
252
+ * Apply changes of environment (background texture, etc.) consecutively in order to avoid dependency related issues.
253
+ * @param scene
254
+ * @param envDef
255
+ */
256
+ const changeEnvironment = function (scene, envDef) {
257
+ var _a, _b;
258
+ // issue warning if both background texture and usedefault are set
259
+ if (envDef.environmentUseDefault && envDef.environmentBackground) {
260
+ console.warn(`!!! Warning !!! Spec parameter \'environment.usedefault\' is being overruled by \'environment.background\'.`);
261
+ }
262
+ const useDefaultEnv = envDef.environmentUseDefault && !envDef.environmentBackground;
263
+ // 1) set ENVIRONMENT_COLOR
264
+ const clearColorBefore = scene.clearColor.toString();
265
+ scene.clearColor = envDef.environmentColor
266
+ ? math_color_1.Color4.FromColor3(envDef.environmentColor)
267
+ : useDefaultEnv
268
+ ? sceneSetup_1.defaultEnvHelperColor
269
+ : sceneSetup_1.defaultSceneClearColor;
270
+ const clearColorChanged = clearColorBefore !== scene.clearColor.toString();
271
+ // Remove all URI params from given env URL as `CubeTexture.CreateFromPrefilteredData` does not work correctly with
272
+ // URLs which contain URI params.
273
+ // E.g. `https://some.url/.../studio.env?name=defaultEnv` throws an exception whilst `https://some.url/.../studio.env`
274
+ // works as expected.
275
+ //
276
+ // See BJS forum for more details:
277
+ // https://forum.babylonjs.com/t/cubetexture-createfromprefiltereddata-does-not-work-with-url-that-contains-uri-params/34097
278
+ const newEnvUrl = (_a = envDef.environment) === null || _a === void 0 ? void 0 : _a.split('?')[0];
279
+ // 2) dispose existing & set new ENVIRONMENT (==texture)
280
+ const curEnvTexture = scene.environmentTexture;
281
+ const envTextureChanged = newEnvUrl !== (curEnvTexture === null || curEnvTexture === void 0 ? void 0 : curEnvTexture.url);
282
+ if (curEnvTexture && (!newEnvUrl || envTextureChanged)) {
283
+ curEnvTexture.dispose();
284
+ }
285
+ const rotation = envDef.environmentRotation !== undefined ? tools_1.Tools.ToRadians(envDef.environmentRotation) : 0;
286
+ if (newEnvUrl && envTextureChanged) {
287
+ const envTexture = cubeTexture_1.CubeTexture.CreateFromPrefilteredData(newEnvUrl, scene);
288
+ envTexture.rotationY = rotation;
289
+ scene.environmentTexture = envTexture;
290
+ }
291
+ else if (curEnvTexture && curEnvTexture.rotationY !== rotation) {
292
+ curEnvTexture.rotationY = rotation;
293
+ }
294
+ // 3) dispose existing & set new ENVIRONMENT_BACKGROUND
295
+ const curDome = scene.getNodeByName(backgroundDomeName);
296
+ const backgroundUrlChanged = envDef.environmentBackground !== (curDome === null || curDome === void 0 ? void 0 : curDome.texture.url);
297
+ if (curDome && (!envDef.environmentBackground || backgroundUrlChanged)) {
298
+ curDome.dispose();
299
+ }
300
+ const rotationPhotoDome = -1 * rotation;
301
+ if (envDef.environmentBackground && backgroundUrlChanged) {
302
+ const textureUrl = envDef.environmentBackground;
303
+ const dome = new photoDome_1.PhotoDome(backgroundDomeName, textureUrl, { resolution: 32, size: 450 }, scene);
304
+ // Rotate submesh to get them in line with environment texture
305
+ dome.getChildMeshes(true)[0].rotation.y = tools_1.Tools.ToRadians(90);
306
+ dome.rotation.y = rotationPhotoDome;
307
+ }
308
+ else if (curDome && curDome.rotation.y !== rotationPhotoDome) {
309
+ curDome.rotation.y = rotationPhotoDome;
310
+ }
311
+ // 4) dispose existing & set new ENVIRONMENT_USEDEFAULT (only if no background is set)
312
+ const curEnvHelper = (_b = scene.metadata) === null || _b === void 0 ? void 0 : _b[envHelperMetadataName];
313
+ if (curEnvHelper && !useDefaultEnv) {
314
+ curEnvHelper.dispose();
315
+ delete scene.metadata[envHelperMetadataName];
316
+ }
317
+ const envHelperMainColor = math_color_1.Color3.FromArray(scene.clearColor.asArray());
318
+ if (useDefaultEnv && !curEnvHelper) {
319
+ const envHelper = scene.createDefaultEnvironment({ sizeAuto: true });
320
+ envHelper === null || envHelper === void 0 ? void 0 : envHelper.setMainColor(envHelperMainColor);
321
+ if (envHelper) {
322
+ scene.metadata = (0, lodash_es_1.merge)({}, scene.metadata, { [envHelperMetadataName]: envHelper });
323
+ }
324
+ }
325
+ else if (curEnvHelper && useDefaultEnv && clearColorChanged) {
326
+ curEnvHelper.setMainColor(envHelperMainColor);
327
+ }
328
+ // 5) set ENVIRONMENT_INTENSITY
329
+ if (envDef.environmentIntensity !== undefined) {
330
+ scene.environmentIntensity = envDef.environmentIntensity;
331
+ }
332
+ };
333
+ exports.changeEnvironment = changeEnvironment;
334
+ /**
335
+ * @param node
336
+ * @param materialName
337
+ * @param deep
338
+ */
339
+ const setMaterial = function (variant, node, materialName, deep = true) {
340
+ if (node instanceof abstractMesh_1.AbstractMesh) {
341
+ const hasMissingMaterial = (0, lodash_es_1.has)(node.metadata, sceneLoaderHelper_1.missingMaterialMetadataName);
342
+ if (node.isEnabled()) {
343
+ node.material = variant.getMaterial(materialName);
344
+ if (hasMissingMaterial) {
345
+ delete node.metadata[sceneLoaderHelper_1.missingMaterialMetadataName];
346
+ }
347
+ }
348
+ else {
349
+ injectNodeMetadata(node, { [sceneLoaderHelper_1.missingMaterialMetadataName]: materialName }, false);
350
+ // If it already had the missing material flag before, there already exists an observer...
351
+ if (!hasMissingMaterial) {
352
+ (0, sceneLoaderHelper_1.addMissingMaterialObserver)(node);
353
+ }
354
+ }
355
+ }
356
+ if (deep) {
357
+ node.getChildTransformNodes(true).forEach(child => setMaterial(variant, child, materialName, deep));
358
+ }
359
+ };
360
+ exports.setMaterial = setMaterial;
361
+ /**
362
+ * !!! Warning !!!
363
+ * This function is not public API. Whilst it can help solving certain problems, it only works reliably in well defined
364
+ * situations and can cause unwanted side effects under some conditions. Use carefully at your own risk!
365
+ *
366
+ * See https://combeenation.myjetbrains.com/youtrack/issue/CB-5906 for further details regarding this warning.
367
+ *
368
+ * Set material of an instanced meshes source mesh.
369
+ * Changes the material of all instanced meshes which have the same source mesh.
370
+ *
371
+ * @param node
372
+ * @param material
373
+ * @param deep
374
+ *
375
+ * @ignore
376
+ */
377
+ const setSourceNodeMaterial = function (node, material, deep = true) {
378
+ const warn = ` You're using "setSourceNodeMaterial" which is not public API.
379
+ Whilst it can help solving certain problems, it only works reliably in well defined situations and can cause unwanted side effects under some conditions.
380
+ Use carefully at your own risk!`;
381
+ console.warn(`!!! Warning !!!\n${warn}`);
382
+ if (node instanceof instancedMesh_1.InstancedMesh) {
383
+ node.sourceMesh.material = material;
384
+ }
385
+ if (deep) {
386
+ node.getChildTransformNodes(true).forEach(child => setSourceNodeMaterial(child, material, deep));
387
+ }
388
+ };
389
+ exports.setSourceNodeMaterial = setSourceNodeMaterial;
390
+ /**
391
+ * @param node
392
+ * @param color
393
+ * @param deep
394
+ */
395
+ const setMaterialColor = function (node, color, deep = true) {
396
+ if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
397
+ const materialCls = node.material.getClassName();
398
+ switch (materialCls) {
399
+ case 'PBRMaterial':
400
+ node.material.albedoColor = color.toLinearSpace();
401
+ break;
402
+ case 'StandardMaterial':
403
+ node.material.diffuseColor = color;
404
+ break;
405
+ default:
406
+ throw new Error(`Setting color for material of instance "${materialCls}" not implemented (yet).`);
407
+ }
408
+ }
409
+ if (deep) {
410
+ node.getChildTransformNodes(true).forEach(child => setMaterialColor(child, color, deep));
411
+ }
412
+ };
413
+ exports.setMaterialColor = setMaterialColor;
414
+ /**
415
+ * @param node
416
+ * @param texture
417
+ * @param deep
418
+ */
419
+ const setMaterialTexture = function (node, texture, deep = true) {
420
+ if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
421
+ const materialCls = node.material.getClassName();
422
+ switch (materialCls) {
423
+ case 'PBRMaterial':
424
+ node.material.albedoTexture = texture;
425
+ break;
426
+ case 'StandardMaterial':
427
+ node.material.diffuseTexture = texture;
428
+ break;
429
+ default:
430
+ throw new Error(`Setting texture for material of instance "${materialCls}" not implemented (yet).`);
431
+ }
432
+ }
433
+ if (deep) {
434
+ node.getChildTransformNodes(true).forEach(child => setMaterialTexture(child, texture, deep));
435
+ }
436
+ };
437
+ exports.setMaterialTexture = setMaterialTexture;
438
+ /**
439
+ * @param node
440
+ * @param metallness
441
+ * @param deep
442
+ */
443
+ const setMaterialMetallness = function (node, metallness, deep = true) {
444
+ if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
445
+ const materialCls = node.material.getClassName();
446
+ switch (materialCls) {
447
+ case 'PBRMaterial':
448
+ node.material.metallic = metallness;
449
+ break;
450
+ default:
451
+ throw new Error(`Setting metallness for material of instance "${materialCls}" not implemented (yet).`);
452
+ }
453
+ }
454
+ if (deep) {
455
+ node.getChildTransformNodes(true).forEach(child => setMaterialMetallness(child, metallness, deep));
456
+ }
457
+ };
458
+ exports.setMaterialMetallness = setMaterialMetallness;
459
+ /**
460
+ * @param node
461
+ * @param roughness
462
+ * @param deep
463
+ */
464
+ const setMaterialRoughness = function (node, roughness, deep = true) {
465
+ if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
466
+ const materialCls = node.material.getClassName();
467
+ switch (materialCls) {
468
+ case 'PBRMaterial':
469
+ node.material.roughness = roughness;
470
+ break;
471
+ case 'StandardMaterial':
472
+ node.material.roughness = roughness;
473
+ break;
474
+ default:
475
+ throw new Error(`Setting roughness for material of instance "${materialCls}" not implemented (yet).`);
476
+ }
477
+ }
478
+ if (deep) {
479
+ node.getChildTransformNodes(true).forEach(child => setMaterialRoughness(child, roughness, deep));
480
+ }
481
+ };
482
+ exports.setMaterialRoughness = setMaterialRoughness;
483
+ /**
484
+ * @param node
485
+ * @param layer
486
+ * @param color
487
+ * @param deep
488
+ */
489
+ const addToHighlightLayer = function (layer, color, node, deep = true) {
490
+ if (node instanceof abstractMesh_1.AbstractMesh) {
491
+ layer.addMesh(node, color);
492
+ }
493
+ if (deep) {
494
+ node.getChildTransformNodes(true).forEach(child => addToHighlightLayer(layer, color, child, deep));
495
+ }
496
+ };
497
+ exports.addToHighlightLayer = addToHighlightLayer;
498
+ /**
499
+ * @param node
500
+ * @param layer
501
+ * @param deep
502
+ */
503
+ const removeFromHighlightLayer = function (layer, node, deep = true) {
504
+ if (node instanceof abstractMesh_1.AbstractMesh) {
505
+ layer.removeMesh(node);
506
+ }
507
+ if (deep) {
508
+ node.getChildTransformNodes(true).forEach(child => removeFromHighlightLayer(layer, child, deep));
509
+ }
510
+ };
511
+ exports.removeFromHighlightLayer = removeFromHighlightLayer;
512
+ /**
513
+ * @param node
514
+ * @param receiveShadows
515
+ * @param deep
516
+ */
517
+ const setReceiveShadows = function (node, receiveShadows, deep = true) {
518
+ if (node instanceof abstractMesh_1.AbstractMesh) {
519
+ node.receiveShadows = receiveShadows;
520
+ }
521
+ if (deep) {
522
+ node.getChildTransformNodes(true).forEach(child => setReceiveShadows(child, receiveShadows, deep));
523
+ }
524
+ };
525
+ exports.setReceiveShadows = setReceiveShadows;
526
+ /**
527
+ * @param node
528
+ * @param generator
529
+ * @param deep
530
+ */
531
+ const addToShadowGenerator = function (generator, node, deep = true) {
532
+ if (node instanceof abstractMesh_1.AbstractMesh) {
533
+ // We have to remove the node because there's no duplicate check in babylon
534
+ generator.removeShadowCaster(node, false);
535
+ generator.addShadowCaster(node, false);
536
+ }
537
+ if (deep) {
538
+ node.getChildTransformNodes(true).forEach(child => addToShadowGenerator(generator, child, deep));
539
+ }
540
+ };
541
+ exports.addToShadowGenerator = addToShadowGenerator;
542
+ /**
543
+ * @param node
544
+ * @param generator
545
+ * @param deep
546
+ */
547
+ const removeFromShadowGenerator = function (generator, node, deep = true) {
548
+ if (node instanceof abstractMesh_1.AbstractMesh) {
549
+ generator.removeShadowCaster(node, false);
550
+ }
551
+ if (deep) {
552
+ node.getChildTransformNodes(true).forEach(child => removeFromShadowGenerator(generator, child, deep));
553
+ }
554
+ };
555
+ exports.removeFromShadowGenerator = removeFromShadowGenerator;
556
+ /**
557
+ * https://forum.babylonjs.com/t/get-mesh-bounding-box-position-and-size-in-2d-screen-coordinates/1058/3
558
+ * @param mesh
559
+ * @param scene
560
+ * @param canvas
561
+ */
562
+ const getClientRectFromMesh = function (mesh, scene, canvas) {
563
+ // get bounding box of the mesh
564
+ const meshVectors = mesh.getBoundingInfo().boundingBox.vectors;
565
+ // get the matrix and viewport needed to project the vectors onto the screen
566
+ const worldMatrix = mesh.getWorldMatrix();
567
+ const transformMatrix = scene.getTransformMatrix();
568
+ const viewport = scene.activeCamera.viewport;
569
+ // loop though all the vectors and project them against the current camera viewport to get a set of coordinates
570
+ const coordinates = meshVectors.map(vector => {
571
+ const projection = math_vector_1.Vector3.Project(vector, worldMatrix, transformMatrix, viewport);
572
+ projection.x = projection.x * canvas.clientWidth;
573
+ projection.y = projection.y * canvas.clientHeight;
574
+ return projection;
575
+ });
576
+ // get the min and max for all the coordinates so we can calculate the largest possible screen size
577
+ const maxX = Math.max.apply(Math, coordinates.map(o => o.x));
578
+ const minX = Math.min.apply(Math, coordinates.map(o => o.x));
579
+ const maxY = Math.max.apply(Math, coordinates.map(o => o.y));
580
+ const minY = Math.min.apply(Math, coordinates.map(o => o.y));
581
+ // return a ClientRect from this
582
+ return {
583
+ width: maxX - minX,
584
+ height: maxY - minY,
585
+ left: minX,
586
+ top: minY,
587
+ right: maxX,
588
+ bottom: maxY,
589
+ };
590
+ };
591
+ exports.getClientRectFromMesh = getClientRectFromMesh;
612
592
  //# sourceMappingURL=babylonHelper.js.map