@combeenation/3d-viewer 3.0.0-rc2 → 4.0.0-alpha6

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 (212) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +111 -111
  3. package/dist/lib-cjs/api/classes/animationInterface.d.ts +8 -8
  4. package/dist/lib-cjs/api/classes/animationInterface.js +1 -1
  5. package/dist/lib-cjs/api/classes/animationInterface.js.map +0 -0
  6. package/dist/lib-cjs/api/classes/dottedPath.d.ts +79 -79
  7. package/dist/lib-cjs/api/classes/dottedPath.js +190 -190
  8. package/dist/lib-cjs/api/classes/dottedPath.js.map +0 -0
  9. package/dist/lib-cjs/api/classes/element.d.ts +130 -125
  10. package/dist/lib-cjs/api/classes/element.js +752 -638
  11. package/dist/lib-cjs/api/classes/element.js.map +1 -1
  12. package/dist/lib-cjs/api/classes/elementParameterizable.d.ts +14 -14
  13. package/dist/lib-cjs/api/classes/elementParameterizable.js +134 -134
  14. package/dist/lib-cjs/api/classes/elementParameterizable.js.map +0 -0
  15. package/dist/lib-cjs/api/classes/event.d.ts +326 -312
  16. package/dist/lib-cjs/api/classes/event.js +371 -357
  17. package/dist/lib-cjs/api/classes/event.js.map +1 -1
  18. package/dist/lib-cjs/api/classes/eventBroadcaster.d.ts +26 -26
  19. package/dist/lib-cjs/api/classes/eventBroadcaster.js +53 -53
  20. package/dist/lib-cjs/api/classes/eventBroadcaster.js.map +0 -0
  21. package/dist/lib-cjs/api/classes/parameter.d.ts +259 -161
  22. package/dist/lib-cjs/api/classes/parameter.js +387 -261
  23. package/dist/lib-cjs/api/classes/parameter.js.map +1 -1
  24. package/dist/lib-cjs/api/classes/parameterObservable.d.ts +36 -36
  25. package/dist/lib-cjs/api/classes/parameterObservable.js +101 -126
  26. package/dist/lib-cjs/api/classes/parameterObservable.js.map +1 -1
  27. package/dist/lib-cjs/api/classes/parameterizable.d.ts +15 -0
  28. package/dist/lib-cjs/api/classes/parameterizable.js +150 -0
  29. package/dist/lib-cjs/api/classes/parameterizable.js.map +1 -0
  30. package/dist/lib-cjs/api/classes/placementAnimation.d.ts +38 -38
  31. package/dist/lib-cjs/api/classes/placementAnimation.js +138 -138
  32. package/dist/lib-cjs/api/classes/placementAnimation.js.map +0 -0
  33. package/dist/lib-cjs/api/classes/variant.d.ts +224 -176
  34. package/dist/lib-cjs/api/classes/variant.js +1126 -770
  35. package/dist/lib-cjs/api/classes/variant.js.map +1 -1
  36. package/dist/lib-cjs/api/classes/variantInstance.d.ts +45 -41
  37. package/dist/lib-cjs/api/classes/variantInstance.js +108 -98
  38. package/dist/lib-cjs/api/classes/variantInstance.js.map +1 -1
  39. package/dist/lib-cjs/api/classes/variantParameterizable.d.ts +17 -0
  40. package/dist/lib-cjs/api/classes/variantParameterizable.js +93 -0
  41. package/dist/lib-cjs/api/classes/variantParameterizable.js.map +1 -0
  42. package/dist/lib-cjs/api/classes/viewer.d.ts +127 -128
  43. package/dist/lib-cjs/api/classes/viewer.js +486 -486
  44. package/dist/lib-cjs/api/classes/viewer.js.map +1 -1
  45. package/dist/lib-cjs/api/classes/viewerLight.d.ts +66 -0
  46. package/dist/lib-cjs/api/classes/viewerLight.js +350 -0
  47. package/dist/lib-cjs/api/classes/viewerLight.js.map +1 -0
  48. package/dist/lib-cjs/api/emitter.d.ts +35 -0
  49. package/dist/lib-cjs/api/emitter.js +61 -0
  50. package/dist/lib-cjs/api/emitter.js.map +1 -0
  51. package/dist/lib-cjs/api/internal/debugViewer.d.ts +13 -13
  52. package/dist/lib-cjs/api/internal/debugViewer.js +87 -87
  53. package/dist/lib-cjs/api/internal/debugViewer.js.map +0 -0
  54. package/dist/lib-cjs/api/internal/lensRendering.d.ts +8 -8
  55. package/dist/lib-cjs/api/internal/lensRendering.js +11 -11
  56. package/dist/lib-cjs/api/internal/lensRendering.js.map +0 -0
  57. package/dist/lib-cjs/api/internal/sceneSetup.d.ts +10 -6
  58. package/dist/lib-cjs/api/internal/sceneSetup.js +231 -227
  59. package/dist/lib-cjs/api/internal/sceneSetup.js.map +1 -1
  60. package/dist/lib-cjs/api/manager/animationManager.d.ts +29 -29
  61. package/dist/lib-cjs/api/manager/animationManager.js +121 -121
  62. package/dist/lib-cjs/api/manager/animationManager.js.map +0 -0
  63. package/dist/lib-cjs/api/manager/sceneManager.d.ts +32 -32
  64. package/dist/lib-cjs/api/manager/sceneManager.js +132 -132
  65. package/dist/lib-cjs/api/manager/sceneManager.js.map +0 -0
  66. package/dist/lib-cjs/api/manager/variantInstanceManager.d.ts +90 -90
  67. package/dist/lib-cjs/api/manager/variantInstanceManager.js +321 -321
  68. package/dist/lib-cjs/api/manager/variantInstanceManager.js.map +0 -0
  69. package/dist/lib-cjs/api/store/specStorage.d.ts +24 -24
  70. package/dist/lib-cjs/api/store/specStorage.js +51 -51
  71. package/dist/lib-cjs/api/store/specStorage.js.map +0 -0
  72. package/dist/lib-cjs/api/util/babylonHelper.d.ts +160 -125
  73. package/dist/lib-cjs/api/util/babylonHelper.js +465 -368
  74. package/dist/lib-cjs/api/util/babylonHelper.js.map +1 -1
  75. package/dist/lib-cjs/api/util/globalTypes.d.ts +321 -275
  76. package/dist/lib-cjs/api/util/globalTypes.js +1 -1
  77. package/dist/lib-cjs/api/util/globalTypes.js.map +0 -0
  78. package/dist/lib-cjs/api/util/resourceHelper.d.ts +26 -30
  79. package/dist/lib-cjs/api/util/resourceHelper.js +237 -247
  80. package/dist/lib-cjs/api/util/resourceHelper.js.map +1 -1
  81. package/dist/lib-cjs/api/util/stringHelper.d.ts +9 -0
  82. package/dist/lib-cjs/api/util/stringHelper.js +26 -0
  83. package/dist/lib-cjs/api/util/stringHelper.js.map +1 -0
  84. package/dist/lib-cjs/buildinfo.json +3 -3
  85. package/dist/lib-cjs/index.d.ts +48 -46
  86. package/dist/lib-cjs/index.js +86 -82
  87. package/dist/lib-cjs/index.js.map +1 -1
  88. package/package.json +83 -83
  89. package/src/api/classes/animationInterface.ts +11 -11
  90. package/src/api/classes/dottedPath.ts +189 -189
  91. package/src/api/classes/element.ts +648 -606
  92. package/src/api/classes/event.ts +370 -355
  93. package/src/api/classes/eventBroadcaster.ts +54 -54
  94. package/src/api/classes/parameter.ts +408 -270
  95. package/src/api/classes/parameterObservable.ts +99 -121
  96. package/src/api/classes/{elementParameterizable.ts → parameterizable.ts} +89 -78
  97. package/src/api/classes/placementAnimation.ts +133 -133
  98. package/src/api/classes/variant.ts +799 -652
  99. package/src/api/classes/variantInstance.ts +88 -81
  100. package/src/api/classes/variantParameterizable.ts +73 -0
  101. package/src/api/classes/viewer.ts +420 -421
  102. package/src/api/classes/viewerLight.ts +295 -0
  103. package/src/api/internal/debugViewer.ts +81 -81
  104. package/src/api/internal/lensRendering.ts +10 -10
  105. package/src/api/internal/sceneSetup.ts +194 -204
  106. package/src/api/manager/animationManager.ts +116 -116
  107. package/src/api/manager/sceneManager.ts +105 -105
  108. package/src/api/manager/variantInstanceManager.ts +236 -236
  109. package/src/api/store/specStorage.ts +53 -53
  110. package/src/api/util/babylonHelper.ts +497 -392
  111. package/src/api/util/globalTypes.ts +369 -314
  112. package/src/api/util/resourceHelper.ts +157 -168
  113. package/src/api/util/stringHelper.ts +26 -0
  114. package/src/buildinfo.json +2 -2
  115. package/src/commonjs.tsconfig.json +13 -13
  116. package/src/declaration.tsconfig.json +10 -10
  117. package/src/dev.ts +45 -60
  118. package/src/es6.tsconfig.json +13 -13
  119. package/src/index.ts +91 -87
  120. package/src/pagesconfig.json +51 -47
  121. package/src/tsconfig.json +43 -43
  122. package/src/tsconfig.types.json +9 -9
  123. package/src/types.d.ts +4 -4
  124. package/src/assets/02_environment.env +0 -0
  125. package/src/assets/02_test_hdri_flipped.hdr +0 -0
  126. package/src/assets/07rDvxP2xTk.glb +0 -0
  127. package/src/assets/08L8DrdZt8y.glb +0 -0
  128. package/src/assets/CB-6250/main.js +0 -427
  129. package/src/assets/CB-6250/models/.gitkeep +0 -1
  130. package/src/assets/CB-6250/models/candle.glb +0 -0
  131. package/src/assets/CB-6250/models/lamp.glb +0 -0
  132. package/src/assets/CB-6250/models/molto-bido.glb +0 -0
  133. package/src/assets/CB-6250/models/mtron.glb +0 -0
  134. package/src/assets/CB-6250/models/mtron_split_geometry.glb +0 -0
  135. package/src/assets/CB-6250/models/mtron_split_material.glb +0 -0
  136. package/src/assets/KTM1290SA/AvatarAdv.glb +0 -0
  137. package/src/assets/KTM1290SA/ktm1290SA.ts +0 -77
  138. package/src/assets/KTM1290SA/scene.json +0 -16
  139. package/src/assets/_draft/main.js +0 -117
  140. package/src/assets/_draft/models/.gitkeep +0 -1
  141. package/src/assets/_draft/models/_demo.glb +0 -0
  142. package/src/assets/_draft/studio.env +0 -0
  143. package/src/assets/bike/CompleteBike_Optim_986K_01.glb +0 -0
  144. package/src/assets/bike/complete.json +0 -19
  145. package/src/assets/bike/index.json +0 -9
  146. package/src/assets/bike/setup.json +0 -11
  147. package/src/assets/ctrls-helper.ts +0 -89
  148. package/src/assets/cube/10 environment.env +0 -0
  149. package/src/assets/cube/bin_svg_logo_test.glb +0 -0
  150. package/src/assets/cube/cube.ts +0 -42
  151. package/src/assets/cube/cube_v2.glb +0 -0
  152. package/src/assets/cube/scene.ts +0 -83
  153. package/src/assets/cube/testCylinderUVs.glb +0 -0
  154. package/src/assets/environment.env +0 -0
  155. package/src/assets/hoferkerzen/hoferkerzen.glb +0 -0
  156. package/src/assets/hoferkerzen/index.json +0 -9
  157. package/src/assets/hoferkerzen/setup.json +0 -11
  158. package/src/assets/hoferkerzen/variant_kgl.json +0 -41
  159. package/src/assets/husqvarna-instanced-meshes/husqvarna.env +0 -0
  160. package/src/assets/husqvarna-instanced-meshes/husqvarna.glb +0 -0
  161. package/src/assets/husqvarna-instanced-meshes/main.ts +0 -108
  162. package/src/assets/index.html +0 -144
  163. package/src/assets/index.json +0 -9
  164. package/src/assets/linkeddups/example_2_instances.glb +0 -0
  165. package/src/assets/linkeddups/spec.ts +0 -32
  166. package/src/assets/molto-mova-multi-instance-shown-bug/main.ts +0 -106
  167. package/src/assets/molto-mova-multi-instance-shown-bug/molto-mova-rc82.glb +0 -0
  168. package/src/assets/molto-mova-multi-instance-shown-bug/molto-mova-volare.glb +0 -0
  169. package/src/assets/molto-mova-multi-instance-shown-bug/studio.env +0 -0
  170. package/src/assets/moltomova/10 environment.env +0 -0
  171. package/src/assets/moltomova/RC65.glb +0 -0
  172. package/src/assets/moltomova/RC82.glb +0 -0
  173. package/src/assets/moltomova/TPH67.glb +0 -0
  174. package/src/assets/moltomova/TPH82.glb +0 -0
  175. package/src/assets/moltomova/Volare.glb +0 -0
  176. package/src/assets/moltomova/moltomova-cl3d-spec-rc65.ts +0 -159
  177. package/src/assets/moltomova/moltomova-cl3d-spec-rc82.ts +0 -118
  178. package/src/assets/moltomova/moltomova-cl3d-spec-scene.ts +0 -57
  179. package/src/assets/moltomova/moltomova-cl3d-spec-tph67.ts +0 -199
  180. package/src/assets/moltomova/moltomova-cl3d-spec-tph82.ts +0 -173
  181. package/src/assets/moltomova/moltomova-cl3d-spec-volare65.ts +0 -173
  182. package/src/assets/moltomova/moltomova.ts +0 -175
  183. package/src/assets/mova.json +0 -18
  184. package/src/assets/mova_3_phase_rail.glb +0 -0
  185. package/src/assets/mova_3_phase_rail.json +0 -86
  186. package/src/assets/mova_recessed_luminaire.glb +0 -0
  187. package/src/assets/mova_recessed_luminaire.json +0 -81
  188. package/src/assets/nessie/gltf-test-no-material.gltf +0 -142
  189. package/src/assets/nessie/gltf-test-no-material_data.bin +0 -0
  190. package/src/assets/nessie/gltf-test-rotation.gltf +0 -142
  191. package/src/assets/nessie/gltf-test-rotation_data.bin +0 -0
  192. package/src/assets/nessie/gltf-test.gltf +0 -178
  193. package/src/assets/nessie/gltf-test_data.bin +0 -0
  194. package/src/assets/nessie/index.json +0 -9
  195. package/src/assets/nessie/nessie_basic.json +0 -24
  196. package/src/assets/nessie/setup.json +0 -12
  197. package/src/assets/scene.json +0 -64
  198. package/src/assets/setup.json +0 -25
  199. package/src/assets/small_cave_1k.hdr +0 -0
  200. package/src/assets/svgTo3D/09aJssVZrjk.env +0 -0
  201. package/src/assets/svgTo3D/09f0zfBQBWK.glb +0 -0
  202. package/src/assets/svgTo3D/9bae062709f8a7803769ba955cde3c4a.jpg +0 -0
  203. package/src/assets/svgTo3D/logo-cyledge.svg +0 -19
  204. package/src/assets/svgTo3D/spec.ts +0 -56
  205. package/src/assets/svgTo3D/svg_assets/09fmVjc59hQ.png +0 -0
  206. package/src/assets/svgTo3D/svg_assets/LDI2apCSOBg7S-QT7pb0EPOreec.woff2 +0 -0
  207. package/src/assets/svgTo3D/svg_assets/unineue_regular.woff2 +0 -0
  208. package/src/assets/svgTo3D/testCube.glb +0 -0
  209. package/src/assets/svgTo3D/testCube001.glb +0 -0
  210. package/src/assets/svgTo3D/testCubeSpec.ts +0 -49
  211. package/src/assets/textures/grass.png +0 -0
  212. package/src/assets/textures/seamless-grunge-scratched-texture.jpg +0 -0
@@ -1,369 +1,466 @@
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.removeFromShadowGenerator = exports.addToShadowGenerator = exports.setReceiveShadows = exports.removeFromHighlightLayer = exports.addToHighlightLayer = exports.setMaterialRoughness = exports.setMaterialMetallness = exports.setMaterialTexture = exports.setMaterialColor = exports.setSourceNodeMaterial = exports.setMaterial = 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 light_1 = require("@babylonjs/core/Lights/light");
6
+ var math_vector_1 = require("@babylonjs/core/Maths/math.vector");
7
+ var abstractMesh_1 = require("@babylonjs/core/Meshes/abstractMesh");
8
+ var instancedMesh_1 = require("@babylonjs/core/Meshes/instancedMesh");
9
+ var transformNode_1 = require("@babylonjs/core/Meshes/transformNode");
10
+ var lodash_es_1 = require("lodash-es");
11
+ var dottedPath_1 = require("../classes/dottedPath");
12
+ /**
13
+ * @param node
14
+ * @return Node
15
+ */
16
+ var getRootNode = function (node) {
17
+ var _node = node;
18
+ while (_node.parent) {
19
+ _node = _node.parent;
20
+ }
21
+ return _node;
22
+ };
23
+ exports.getRootNode = getRootNode;
24
+ /**
25
+ * @param nodes
26
+ * @param predicate
27
+ * @return Map<DottedPath, T>
28
+ */
29
+ var mapToDottedNodes = function (nodes, predicate) {
30
+ var map = new Map();
31
+ var addNodes = function (_node) {
32
+ if (predicate && predicate(_node)) {
33
+ map.set(_node.metadata.dottedPath, _node);
34
+ }
35
+ _node.getChildren().forEach(function (child) {
36
+ addNodes(child);
37
+ });
38
+ };
39
+ nodes.forEach(function (node) {
40
+ addNodes(node);
41
+ });
42
+ return map;
43
+ };
44
+ exports.mapToDottedNodes = mapToDottedNodes;
45
+ /**
46
+ * @param node
47
+ * @return DottedPath
48
+ */
49
+ var getDottedPathForNode = function (node) {
50
+ var dottedPath = dottedPath_1.DottedPath.create(node.name);
51
+ var _parent = node;
52
+ while (_parent.parent) {
53
+ _parent = _parent.parent;
54
+ dottedPath.unshiftPart(_parent.name);
55
+ }
56
+ return dottedPath;
57
+ };
58
+ exports.getDottedPathForNode = getDottedPathForNode;
59
+ /**
60
+ * @param node
61
+ * @param predicate
62
+ * @param deep
63
+ * @return TransformNode | null
64
+ */
65
+ var cloneTransformNode = function (node, predicate, deep) {
66
+ if (deep === void 0) { deep = true; }
67
+ if (predicate && !predicate(node)) {
68
+ return null;
69
+ }
70
+ var clone = node.clone(node.name, node.parent, true);
71
+ if (clone) {
72
+ clone.metadata = lodash_es_1.cloneDeep(node.metadata);
73
+ }
74
+ if (deep) {
75
+ var children = node.getChildTransformNodes(true);
76
+ children.forEach(function (child) {
77
+ var clonedChild = cloneTransformNode(child, predicate, deep);
78
+ if (clonedChild) {
79
+ clonedChild.parent = clone;
80
+ }
81
+ });
82
+ }
83
+ return clone;
84
+ };
85
+ exports.cloneTransformNode = cloneTransformNode;
86
+ /**
87
+ * @param node
88
+ */
89
+ var cloneNodeWithParents = function (node) {
90
+ var clone = null;
91
+ if (node instanceof transformNode_1.TransformNode) {
92
+ clone = node.clone(node.name, cloneNodeWithParents(node.parent), true);
93
+ }
94
+ else if (node instanceof light_1.Light) {
95
+ clone = node.clone(node.name, cloneNodeWithParents(node.parent));
96
+ }
97
+ else if (node) {
98
+ throw new Error("Cloning of \"" + (node === null || node === void 0 ? void 0 : node.constructor.name) + "\" is not implemented (yet).");
99
+ }
100
+ return clone;
101
+ };
102
+ exports.cloneNodeWithParents = cloneNodeWithParents;
103
+ /**
104
+ * @param node
105
+ * @param deep
106
+ * @param prefix
107
+ * @return TransformNode
108
+ */
109
+ var cloneTransformNodeMaterial = function (node, prefix, deep) {
110
+ if (prefix === void 0) { prefix = ''; }
111
+ if (deep === void 0) { deep = true; }
112
+ if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
113
+ var _prefix = dottedPath_1.DottedPath.create(prefix).addParts([
114
+ 'node',
115
+ node.uniqueId.toString()
116
+ ]);
117
+ node.material = node.material.clone(_prefix.path);
118
+ }
119
+ if (deep) {
120
+ var children = node.getChildTransformNodes(true);
121
+ children.forEach(function (child) { return cloneTransformNodeMaterial(child, prefix, deep); });
122
+ }
123
+ return node;
124
+ };
125
+ exports.cloneTransformNodeMaterial = cloneTransformNodeMaterial;
126
+ /**
127
+ * @param node
128
+ * @param deep
129
+ * @param metadata
130
+ */
131
+ var injectNodeMetadata = function (node, metadata, deep) {
132
+ if (deep === void 0) { deep = true; }
133
+ node.metadata = lodash_es_1.merge({}, node.metadata, metadata);
134
+ if (deep && node instanceof transformNode_1.TransformNode) {
135
+ var children = node.getChildTransformNodes(true);
136
+ children.forEach(function (child) { return injectNodeMetadata(child, metadata, deep); });
137
+ }
138
+ };
139
+ exports.injectNodeMetadata = injectNodeMetadata;
140
+ /**
141
+ * @param node
142
+ * @param assertCallable
143
+ * @param callableParameters
144
+ * @param deep
145
+ */
146
+ var assertTransformNode = function (node, assertCallable, callableParameters, deep) {
147
+ if (callableParameters === void 0) { callableParameters = []; }
148
+ if (deep === void 0) { deep = true; }
149
+ assertCallable.apply(void 0, tslib_1.__spreadArrays([node], callableParameters));
150
+ if (deep) {
151
+ var children = node.getChildTransformNodes(true);
152
+ children.forEach(function (child) { return assertTransformNode(child, assertCallable, callableParameters, deep); });
153
+ }
154
+ };
155
+ exports.assertTransformNode = assertTransformNode;
156
+ /**
157
+ * @param node
158
+ * @param deep
159
+ */
160
+ var activateTransformNode = function (node, deep) {
161
+ if (deep === void 0) { deep = true; }
162
+ node.setEnabled(true);
163
+ /*
164
+ if( node instanceof AbstractMesh ) {
165
+ node.visibility = 1;
166
+ node.isPickable = true;
167
+ }
168
+ */
169
+ if (deep) {
170
+ node.getChildTransformNodes(true).forEach(function (child) { return activateTransformNode(child, deep); });
171
+ }
172
+ };
173
+ exports.activateTransformNode = activateTransformNode;
174
+ /**
175
+ * @param node
176
+ * @param deep
177
+ */
178
+ var deactivateTransformNode = function (node, deep) {
179
+ if (deep === void 0) { deep = true; }
180
+ node.setEnabled(false);
181
+ /*
182
+ if( node instanceof AbstractMesh ) {
183
+ node.visibility = 0;
184
+ node.isPickable = false;
185
+ }
186
+ */
187
+ if (deep) {
188
+ node.getChildTransformNodes(true).forEach(function (child) { return deactivateTransformNode(child, deep); });
189
+ }
190
+ };
191
+ exports.deactivateTransformNode = deactivateTransformNode;
192
+ /**
193
+ * @param node
194
+ */
195
+ var enableNodeWithParents = function (node) {
196
+ node.setEnabled(true);
197
+ if (node.parent) {
198
+ enableNodeWithParents(node.parent);
199
+ }
200
+ };
201
+ exports.enableNodeWithParents = enableNodeWithParents;
202
+ /**
203
+ * @param node
204
+ */
205
+ var disableNodeWithParents = function (node) {
206
+ node.setEnabled(false);
207
+ if (node.parent) {
208
+ disableNodeWithParents(node.parent);
209
+ }
210
+ };
211
+ exports.disableNodeWithParents = disableNodeWithParents;
212
+ /**
213
+ * @param node
214
+ * @param material
215
+ * @param deep
216
+ */
217
+ var setMaterial = function (node, material, deep) {
218
+ if (deep === void 0) { deep = true; }
219
+ if (node instanceof abstractMesh_1.AbstractMesh) {
220
+ node.material = material;
221
+ }
222
+ if (deep) {
223
+ node.getChildTransformNodes(true).forEach(function (child) { return setMaterial(child, material, deep); });
224
+ }
225
+ };
226
+ exports.setMaterial = setMaterial;
227
+ /**
228
+ * !!! Warning !!!
229
+ * This function is not public API. Whilst it can help solving certain problems, it only works reliably in well defined
230
+ * situations and can cause unwanted side effects under some conditions. Use carefully at your own risk!
231
+ *
232
+ * See https://combeenation.myjetbrains.com/youtrack/issue/CB-5906 for further details regarding this warning.
233
+ *
234
+ * Set material of an instanced meshes source mesh.
235
+ * Changes the material of all instanced meshes which have the same source mesh.
236
+ *
237
+ * @param node
238
+ * @param material
239
+ * @param deep
240
+ *
241
+ * @ignore
242
+ */
243
+ var setSourceNodeMaterial = function (node, material, deep) {
244
+ if (deep === void 0) { deep = true; }
245
+ 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!";
246
+ console.warn("!!! Warning !!!\n" + warn);
247
+ if (node instanceof instancedMesh_1.InstancedMesh) {
248
+ node.sourceMesh.material = material;
249
+ }
250
+ if (deep) {
251
+ node.getChildTransformNodes(true).forEach(function (child) { return setSourceNodeMaterial(child, material, deep); });
252
+ }
253
+ };
254
+ exports.setSourceNodeMaterial = setSourceNodeMaterial;
255
+ /**
256
+ * @param node
257
+ * @param color
258
+ * @param deep
259
+ */
260
+ var setMaterialColor = function (node, color, 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.albedoColor = color.toLinearSpace();
267
+ break;
268
+ case 'StandardMaterial':
269
+ node.material.diffuseColor = color;
270
+ break;
271
+ default:
272
+ throw new Error("Setting color for material of instance \"" + materialCls + "\" not implemented (yet).");
273
+ }
274
+ }
275
+ if (deep) {
276
+ node.getChildTransformNodes(true).forEach(function (child) { return setMaterialColor(child, color, deep); });
277
+ }
278
+ };
279
+ exports.setMaterialColor = setMaterialColor;
280
+ /**
281
+ * @param node
282
+ * @param texture
283
+ * @param deep
284
+ */
285
+ var setMaterialTexture = function (node, texture, deep) {
286
+ if (deep === void 0) { deep = true; }
287
+ if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
288
+ var materialCls = node.material.getClassName();
289
+ switch (materialCls) {
290
+ case 'PBRMaterial':
291
+ node.material.albedoTexture = texture;
292
+ break;
293
+ case 'StandardMaterial':
294
+ node.material.diffuseTexture = texture;
295
+ break;
296
+ default:
297
+ throw new Error("Setting texture for material of instance \"" + materialCls + "\" not implemented (yet).");
298
+ }
299
+ }
300
+ if (deep) {
301
+ node.getChildTransformNodes(true).forEach(function (child) { return setMaterialTexture(child, texture, deep); });
302
+ }
303
+ };
304
+ exports.setMaterialTexture = setMaterialTexture;
305
+ /**
306
+ * @param node
307
+ * @param metallness
308
+ * @param deep
309
+ */
310
+ var setMaterialMetallness = function (node, metallness, deep) {
311
+ if (deep === void 0) { deep = true; }
312
+ if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
313
+ var materialCls = node.material.getClassName();
314
+ switch (materialCls) {
315
+ case 'PBRMaterial':
316
+ node.material.metallic = metallness;
317
+ break;
318
+ default:
319
+ throw new Error("Setting metallness for material of instance \"" + materialCls + "\" not implemented (yet).");
320
+ }
321
+ }
322
+ if (deep) {
323
+ node.getChildTransformNodes(true).forEach(function (child) { return setMaterialMetallness(child, metallness, deep); });
324
+ }
325
+ };
326
+ exports.setMaterialMetallness = setMaterialMetallness;
327
+ /**
328
+ * @param node
329
+ * @param roughness
330
+ * @param deep
331
+ */
332
+ var setMaterialRoughness = function (node, roughness, deep) {
333
+ if (deep === void 0) { deep = true; }
334
+ if (node instanceof abstractMesh_1.AbstractMesh && node.material) {
335
+ var materialCls = node.material.getClassName();
336
+ switch (materialCls) {
337
+ case 'PBRMaterial':
338
+ node.material.roughness = roughness;
339
+ break;
340
+ case 'StandardMaterial':
341
+ node.material.roughness = roughness;
342
+ break;
343
+ default:
344
+ throw new Error("Setting roughness for material of instance \"" + materialCls + "\" not implemented (yet).");
345
+ }
346
+ }
347
+ if (deep) {
348
+ node.getChildTransformNodes(true).forEach(function (child) { return setMaterialRoughness(child, roughness, deep); });
349
+ }
350
+ };
351
+ exports.setMaterialRoughness = setMaterialRoughness;
352
+ /**
353
+ * @param node
354
+ * @param layer
355
+ * @param color
356
+ * @param deep
357
+ */
358
+ var addToHighlightLayer = function (layer, color, node, deep) {
359
+ if (deep === void 0) { deep = true; }
360
+ if (node instanceof abstractMesh_1.AbstractMesh) {
361
+ layer.addMesh(node, color);
362
+ }
363
+ if (deep) {
364
+ node.getChildTransformNodes(true).forEach(function (child) { return addToHighlightLayer(layer, color, child, deep); });
365
+ }
366
+ };
367
+ exports.addToHighlightLayer = addToHighlightLayer;
368
+ /**
369
+ * @param node
370
+ * @param layer
371
+ * @param deep
372
+ */
373
+ var removeFromHighlightLayer = function (layer, node, deep) {
374
+ if (deep === void 0) { deep = true; }
375
+ if (node instanceof abstractMesh_1.AbstractMesh) {
376
+ layer.removeMesh(node);
377
+ }
378
+ if (deep) {
379
+ node.getChildTransformNodes(true).forEach(function (child) { return removeFromHighlightLayer(layer, child, deep); });
380
+ }
381
+ };
382
+ exports.removeFromHighlightLayer = removeFromHighlightLayer;
383
+ /**
384
+ * @param node
385
+ * @param receiveShadows
386
+ * @param deep
387
+ */
388
+ var setReceiveShadows = function (node, receiveShadows, deep) {
389
+ if (deep === void 0) { deep = true; }
390
+ if (node instanceof abstractMesh_1.AbstractMesh) {
391
+ node.receiveShadows = receiveShadows;
392
+ }
393
+ if (deep) {
394
+ node.getChildTransformNodes(true).forEach(function (child) { return setReceiveShadows(child, receiveShadows, deep); });
395
+ }
396
+ };
397
+ exports.setReceiveShadows = setReceiveShadows;
398
+ /**
399
+ * @param node
400
+ * @param generator
401
+ * @param deep
402
+ */
403
+ var addToShadowGenerator = function (generator, node, deep) {
404
+ if (deep === void 0) { deep = true; }
405
+ if (node instanceof abstractMesh_1.AbstractMesh) {
406
+ // We have to remove the node because there's no duplicate check in babylon
407
+ generator.removeShadowCaster(node, false);
408
+ generator.addShadowCaster(node, false);
409
+ }
410
+ if (deep) {
411
+ node.getChildTransformNodes(true).forEach(function (child) { return addToShadowGenerator(generator, child, deep); });
412
+ }
413
+ };
414
+ exports.addToShadowGenerator = addToShadowGenerator;
415
+ /**
416
+ * @param node
417
+ * @param generator
418
+ * @param deep
419
+ */
420
+ var removeFromShadowGenerator = function (generator, node, deep) {
421
+ if (deep === void 0) { deep = true; }
422
+ if (node instanceof abstractMesh_1.AbstractMesh) {
423
+ generator.removeShadowCaster(node, false);
424
+ }
425
+ if (deep) {
426
+ node.getChildTransformNodes(true).forEach(function (child) { return removeFromShadowGenerator(generator, child, deep); });
427
+ }
428
+ };
429
+ exports.removeFromShadowGenerator = removeFromShadowGenerator;
430
+ /**
431
+ * https://forum.babylonjs.com/t/get-mesh-bounding-box-position-and-size-in-2d-screen-coordinates/1058/3
432
+ * @param mesh
433
+ * @param scene
434
+ * @param canvas
435
+ */
436
+ var getClientRectFromMesh = function (mesh, scene, canvas) {
437
+ // get bounding box of the mesh
438
+ var meshVectors = mesh.getBoundingInfo().boundingBox.vectors;
439
+ // get the matrix and viewport needed to project the vectors onto the screen
440
+ var worldMatrix = mesh.getWorldMatrix();
441
+ var transformMatrix = scene.getTransformMatrix();
442
+ var viewport = scene.activeCamera.viewport;
443
+ // loop though all the vectors and project them against the current camera viewport to get a set of coordinates
444
+ var coordinates = meshVectors.map(function (vector) {
445
+ var projection = math_vector_1.Vector3.Project(vector, worldMatrix, transformMatrix, viewport);
446
+ projection.x = projection.x * canvas.clientWidth;
447
+ projection.y = projection.y * canvas.clientHeight;
448
+ return projection;
449
+ });
450
+ // get the min and max for all the coordinates so we can calculate the largest possible screen size
451
+ var maxX = Math.max.apply(Math, coordinates.map(function (o) { return o.x; }));
452
+ var minX = Math.min.apply(Math, coordinates.map(function (o) { return o.x; }));
453
+ var maxY = Math.max.apply(Math, coordinates.map(function (o) { return o.y; }));
454
+ var minY = Math.min.apply(Math, coordinates.map(function (o) { return o.y; }));
455
+ // return a ClientRect from this
456
+ return {
457
+ width: maxX - minX,
458
+ height: maxY - minY,
459
+ left: minX,
460
+ top: minY,
461
+ right: maxX,
462
+ bottom: maxY,
463
+ };
464
+ };
465
+ exports.getClientRectFromMesh = getClientRectFromMesh;
369
466
  //# sourceMappingURL=babylonHelper.js.map