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

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