@babylonjs/gui 5.0.0-beta.9 → 5.0.0-rc.10

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 (305) hide show
  1. package/2D/adtInstrumentation.d.ts +52 -52
  2. package/2D/adtInstrumentation.js +126 -126
  3. package/2D/adtInstrumentation.js.map +1 -1
  4. package/2D/advancedDynamicTexture.d.ts +449 -412
  5. package/2D/advancedDynamicTexture.js +1318 -1239
  6. package/2D/advancedDynamicTexture.js.map +1 -1
  7. package/2D/controls/button.d.ts +135 -97
  8. package/2D/controls/button.js +276 -238
  9. package/2D/controls/button.js.map +1 -1
  10. package/2D/controls/checkbox.d.ts +59 -51
  11. package/2D/controls/checkbox.js +188 -178
  12. package/2D/controls/checkbox.js.map +1 -1
  13. package/2D/controls/colorpicker.d.ts +103 -90
  14. package/2D/controls/colorpicker.js +1417 -1400
  15. package/2D/controls/colorpicker.js.map +1 -1
  16. package/2D/controls/container.d.ts +175 -130
  17. package/2D/controls/container.js +570 -525
  18. package/2D/controls/container.js.map +1 -1
  19. package/2D/controls/control.d.ts +866 -743
  20. package/2D/controls/control.js +2433 -2308
  21. package/2D/controls/control.js.map +1 -1
  22. package/2D/controls/displayGrid.d.ts +53 -55
  23. package/2D/controls/displayGrid.js +245 -245
  24. package/2D/controls/displayGrid.js.map +1 -1
  25. package/2D/controls/ellipse.d.ts +21 -21
  26. package/2D/controls/ellipse.js +85 -85
  27. package/2D/controls/ellipse.js.map +1 -1
  28. package/2D/controls/focusableButton.d.ts +59 -52
  29. package/2D/controls/focusableButton.js +99 -92
  30. package/2D/controls/focusableButton.js.map +1 -1
  31. package/2D/controls/focusableControl.d.ts +34 -34
  32. package/2D/controls/focusableControl.js +1 -1
  33. package/2D/controls/focusableControl.js.map +1 -1
  34. package/2D/controls/grid.d.ts +139 -135
  35. package/2D/controls/grid.js +529 -525
  36. package/2D/controls/grid.js.map +1 -1
  37. package/2D/controls/image.d.ts +204 -197
  38. package/2D/controls/image.js +887 -879
  39. package/2D/controls/image.js.map +1 -1
  40. package/2D/controls/index.d.ts +29 -29
  41. package/2D/controls/index.js +29 -29
  42. package/2D/controls/index.js.map +1 -1
  43. package/2D/controls/inputPassword.d.ts +9 -8
  44. package/2D/controls/inputPassword.js +28 -25
  45. package/2D/controls/inputPassword.js.map +1 -1
  46. package/2D/controls/inputText.d.ts +201 -180
  47. package/2D/controls/inputText.js +1119 -1095
  48. package/2D/controls/inputText.js.map +1 -1
  49. package/2D/controls/line.d.ts +66 -66
  50. package/2D/controls/line.js +271 -271
  51. package/2D/controls/line.js.map +1 -1
  52. package/2D/controls/multiLine.d.ts +75 -77
  53. package/2D/controls/multiLine.js +262 -262
  54. package/2D/controls/multiLine.js.map +1 -1
  55. package/2D/controls/radioButton.d.ts +49 -49
  56. package/2D/controls/radioButton.js +205 -205
  57. package/2D/controls/radioButton.js.map +1 -1
  58. package/2D/controls/rectangle.d.ts +29 -29
  59. package/2D/controls/rectangle.js +150 -150
  60. package/2D/controls/rectangle.js.map +1 -1
  61. package/2D/controls/scrollViewers/scrollViewer.d.ts +182 -175
  62. package/2D/controls/scrollViewers/scrollViewer.js +677 -676
  63. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  64. package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +57 -45
  65. package/2D/controls/scrollViewers/scrollViewerWindow.js +278 -263
  66. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  67. package/2D/controls/selector.d.ts +263 -209
  68. package/2D/controls/selector.js +692 -629
  69. package/2D/controls/selector.js.map +1 -1
  70. package/2D/controls/sliders/baseSlider.d.ts +82 -78
  71. package/2D/controls/sliders/baseSlider.js +347 -343
  72. package/2D/controls/sliders/baseSlider.js.map +1 -1
  73. package/2D/controls/sliders/imageBasedSlider.d.ts +49 -47
  74. package/2D/controls/sliders/imageBasedSlider.js +192 -188
  75. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  76. package/2D/controls/sliders/imageScrollBar.d.ts +65 -61
  77. package/2D/controls/sliders/imageScrollBar.js +263 -256
  78. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  79. package/2D/controls/sliders/scrollBar.d.ts +38 -34
  80. package/2D/controls/sliders/scrollBar.js +143 -136
  81. package/2D/controls/sliders/scrollBar.js.map +1 -1
  82. package/2D/controls/sliders/slider.d.ts +35 -37
  83. package/2D/controls/sliders/slider.js +271 -271
  84. package/2D/controls/sliders/slider.js.map +1 -1
  85. package/2D/controls/stackPanel.d.ts +64 -56
  86. package/2D/controls/stackPanel.js +246 -236
  87. package/2D/controls/stackPanel.js.map +1 -1
  88. package/2D/controls/statics.d.ts +6 -6
  89. package/2D/controls/statics.js +49 -47
  90. package/2D/controls/statics.js.map +1 -1
  91. package/2D/controls/textBlock.d.ts +175 -171
  92. package/2D/controls/textBlock.js +603 -588
  93. package/2D/controls/textBlock.js.map +1 -1
  94. package/2D/controls/textWrapper.d.ts +13 -13
  95. package/2D/controls/textWrapper.js +101 -101
  96. package/2D/controls/textWrapper.js.map +1 -1
  97. package/2D/controls/toggleButton.d.ts +117 -83
  98. package/2D/controls/toggleButton.js +268 -234
  99. package/2D/controls/toggleButton.js.map +1 -1
  100. package/2D/controls/virtualKeyboard.d.ts +96 -96
  101. package/2D/controls/virtualKeyboard.js +256 -256
  102. package/2D/controls/virtualKeyboard.js.map +1 -1
  103. package/2D/index.d.ts +9 -9
  104. package/2D/index.js +10 -9
  105. package/2D/index.js.map +1 -1
  106. package/2D/math2D.d.ts +117 -117
  107. package/2D/math2D.js +221 -221
  108. package/2D/math2D.js.map +1 -1
  109. package/2D/measure.d.ts +77 -77
  110. package/2D/measure.js +139 -149
  111. package/2D/measure.js.map +1 -1
  112. package/2D/multiLinePoint.d.ts +47 -47
  113. package/2D/multiLinePoint.js +127 -127
  114. package/2D/multiLinePoint.js.map +1 -1
  115. package/2D/style.d.ts +46 -46
  116. package/2D/style.js +97 -97
  117. package/2D/style.js.map +1 -1
  118. package/2D/valueAndUnit.d.ts +89 -89
  119. package/2D/valueAndUnit.js +226 -222
  120. package/2D/valueAndUnit.js.map +1 -1
  121. package/2D/xmlLoader.d.ts +60 -60
  122. package/2D/xmlLoader.js +348 -341
  123. package/2D/xmlLoader.js.map +1 -1
  124. package/3D/behaviors/defaultBehavior.d.ts +73 -73
  125. package/3D/behaviors/defaultBehavior.js +121 -121
  126. package/3D/behaviors/defaultBehavior.js.map +1 -1
  127. package/3D/controls/abstractButton3D.d.ts +15 -15
  128. package/3D/controls/abstractButton3D.js +25 -25
  129. package/3D/controls/abstractButton3D.js.map +1 -1
  130. package/3D/controls/button3D.d.ts +30 -30
  131. package/3D/controls/button3D.js +93 -93
  132. package/3D/controls/button3D.js.map +1 -1
  133. package/3D/controls/container3D.d.ts +72 -72
  134. package/3D/controls/container3D.js +139 -140
  135. package/3D/controls/container3D.js.map +1 -1
  136. package/3D/controls/contentDisplay3D.d.ts +30 -30
  137. package/3D/controls/contentDisplay3D.js +79 -78
  138. package/3D/controls/contentDisplay3D.js.map +1 -1
  139. package/3D/controls/control3D.d.ts +201 -165
  140. package/3D/controls/control3D.js +445 -408
  141. package/3D/controls/control3D.js.map +1 -1
  142. package/3D/controls/cylinderPanel.d.ts +17 -17
  143. package/3D/controls/cylinderPanel.js +66 -66
  144. package/3D/controls/cylinderPanel.js.map +1 -1
  145. package/3D/controls/handMenu.d.ts +28 -28
  146. package/3D/controls/handMenu.js +47 -47
  147. package/3D/controls/handMenu.js.map +1 -1
  148. package/3D/controls/holographicBackplate.d.ts +49 -48
  149. package/3D/controls/holographicBackplate.js +120 -120
  150. package/3D/controls/holographicBackplate.js.map +1 -1
  151. package/3D/controls/holographicButton.d.ts +84 -83
  152. package/3D/controls/holographicButton.js +339 -338
  153. package/3D/controls/holographicButton.js.map +1 -1
  154. package/3D/controls/holographicSlate.d.ts +131 -118
  155. package/3D/controls/holographicSlate.js +431 -369
  156. package/3D/controls/holographicSlate.js.map +1 -1
  157. package/3D/controls/index.d.ts +21 -21
  158. package/3D/controls/index.js +21 -21
  159. package/3D/controls/index.js.map +1 -1
  160. package/3D/controls/meshButton3D.d.ts +21 -21
  161. package/3D/controls/meshButton3D.js +62 -61
  162. package/3D/controls/meshButton3D.js.map +1 -1
  163. package/3D/controls/nearMenu.d.ts +44 -44
  164. package/3D/controls/nearMenu.js +114 -112
  165. package/3D/controls/nearMenu.js.map +1 -1
  166. package/3D/controls/planePanel.d.ts +9 -9
  167. package/3D/controls/planePanel.js +36 -36
  168. package/3D/controls/planePanel.js.map +1 -1
  169. package/3D/controls/scatterPanel.d.ts +18 -18
  170. package/3D/controls/scatterPanel.js +108 -108
  171. package/3D/controls/scatterPanel.js.map +1 -1
  172. package/3D/controls/slider3D.d.ts +81 -80
  173. package/3D/controls/slider3D.js +268 -267
  174. package/3D/controls/slider3D.js.map +1 -1
  175. package/3D/controls/spherePanel.d.ts +17 -17
  176. package/3D/controls/spherePanel.js +67 -67
  177. package/3D/controls/spherePanel.js.map +1 -1
  178. package/3D/controls/stackPanel3D.d.ts +22 -22
  179. package/3D/controls/stackPanel3D.js +107 -107
  180. package/3D/controls/stackPanel3D.js.map +1 -1
  181. package/3D/controls/touchButton3D.d.ts +80 -64
  182. package/3D/controls/touchButton3D.js +233 -188
  183. package/3D/controls/touchButton3D.js.map +1 -1
  184. package/3D/controls/touchHolographicButton.d.ts +110 -104
  185. package/3D/controls/touchHolographicButton.js +445 -432
  186. package/3D/controls/touchHolographicButton.js.map +1 -1
  187. package/3D/controls/touchHolographicMenu.d.ts +61 -61
  188. package/3D/controls/touchHolographicMenu.js +149 -148
  189. package/3D/controls/touchHolographicMenu.js.map +1 -1
  190. package/3D/controls/touchMeshButton3D.d.ts +21 -22
  191. package/3D/controls/touchMeshButton3D.js +62 -62
  192. package/3D/controls/touchMeshButton3D.js.map +1 -1
  193. package/3D/controls/volumeBasedPanel.d.ts +53 -52
  194. package/3D/controls/volumeBasedPanel.js +174 -174
  195. package/3D/controls/volumeBasedPanel.js.map +1 -1
  196. package/3D/gizmos/gizmoHandle.d.ts +108 -108
  197. package/3D/gizmos/gizmoHandle.js +209 -209
  198. package/3D/gizmos/gizmoHandle.js.map +1 -1
  199. package/3D/gizmos/index.d.ts +2 -2
  200. package/3D/gizmos/index.js +2 -2
  201. package/3D/gizmos/index.js.map +1 -1
  202. package/3D/gizmos/slateGizmo.d.ts +57 -59
  203. package/3D/gizmos/slateGizmo.js +369 -363
  204. package/3D/gizmos/slateGizmo.js.map +1 -1
  205. package/3D/gui3DManager.d.ts +94 -94
  206. package/3D/gui3DManager.js +257 -257
  207. package/3D/gui3DManager.js.map +1 -1
  208. package/3D/index.d.ts +5 -5
  209. package/3D/index.js +6 -5
  210. package/3D/index.js.map +1 -1
  211. package/3D/materials/fluent/fluentMaterial.d.ts +91 -90
  212. package/3D/materials/fluent/fluentMaterial.js +292 -281
  213. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  214. package/3D/materials/fluent/index.d.ts +1 -1
  215. package/3D/materials/fluent/index.js +1 -1
  216. package/3D/materials/fluent/index.js.map +1 -1
  217. package/3D/materials/fluent/shaders/fluent.fragment.d.ts +5 -5
  218. package/3D/materials/fluent/shaders/fluent.fragment.js +8 -6
  219. package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -1
  220. package/3D/materials/fluent/shaders/fluent.vertex.d.ts +5 -5
  221. package/3D/materials/fluent/shaders/fluent.vertex.js +8 -6
  222. package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -1
  223. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +155 -154
  224. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +469 -434
  225. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  226. package/3D/materials/fluentBackplate/index.d.ts +1 -1
  227. package/3D/materials/fluentBackplate/index.js +1 -1
  228. package/3D/materials/fluentBackplate/index.js.map +1 -1
  229. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -5
  230. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +8 -6
  231. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -1
  232. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -5
  233. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +8 -6
  234. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -1
  235. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +190 -189
  236. package/3D/materials/fluentButton/fluentButtonMaterial.js +539 -537
  237. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  238. package/3D/materials/fluentButton/index.d.ts +1 -1
  239. package/3D/materials/fluentButton/index.js +1 -1
  240. package/3D/materials/fluentButton/index.js.map +1 -1
  241. package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -5
  242. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +8 -6
  243. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -1
  244. package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -5
  245. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +8 -6
  246. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -1
  247. package/3D/materials/fluentMaterial.d.ts +4 -4
  248. package/3D/materials/fluentMaterial.js +4 -4
  249. package/3D/materials/fluentMaterial.js.map +1 -1
  250. package/3D/materials/handle/handleMaterial.d.ts +68 -68
  251. package/3D/materials/handle/handleMaterial.js +126 -126
  252. package/3D/materials/handle/handleMaterial.js.map +1 -1
  253. package/3D/materials/handle/index.d.ts +1 -1
  254. package/3D/materials/handle/index.js +1 -1
  255. package/3D/materials/handle/index.js.map +1 -1
  256. package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -5
  257. package/3D/materials/handle/shaders/handle.fragment.js +8 -6
  258. package/3D/materials/handle/shaders/handle.fragment.js.map +1 -1
  259. package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -5
  260. package/3D/materials/handle/shaders/handle.vertex.js +8 -6
  261. package/3D/materials/handle/shaders/handle.vertex.js.map +1 -1
  262. package/3D/materials/index.d.ts +5 -5
  263. package/3D/materials/index.js +6 -5
  264. package/3D/materials/index.js.map +1 -1
  265. package/3D/materials/mrdl/index.d.ts +3 -3
  266. package/3D/materials/mrdl/index.js +3 -3
  267. package/3D/materials/mrdl/index.js.map +1 -1
  268. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +148 -147
  269. package/3D/materials/mrdl/mrdlBackplateMaterial.js +436 -409
  270. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  271. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +334 -333
  272. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +851 -786
  273. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  274. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +334 -333
  275. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +851 -786
  276. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  277. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -5
  278. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +8 -6
  279. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -1
  280. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -5
  281. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +8 -6
  282. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -1
  283. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -5
  284. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +8 -6
  285. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -1
  286. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -5
  287. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +8 -6
  288. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -1
  289. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -5
  290. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +8 -6
  291. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -1
  292. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -5
  293. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +8 -6
  294. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -1
  295. package/3D/vector3WithInfo.d.ts +16 -16
  296. package/3D/vector3WithInfo.js +23 -23
  297. package/3D/vector3WithInfo.js.map +1 -1
  298. package/index.d.ts +2 -2
  299. package/index.js +3 -2
  300. package/index.js.map +1 -1
  301. package/legacy/legacy.d.ts +1 -1
  302. package/legacy/legacy.js +14 -13
  303. package/legacy/legacy.js.map +1 -1
  304. package/package.json +21 -328
  305. package/readme.md +2 -2
@@ -1,370 +1,432 @@
1
- import { __extends } from "tslib";
2
- import { CreateBox } from "@babylonjs/core/Meshes/Builders/boxBuilder.js";
3
- import { Mesh } from "@babylonjs/core/Meshes/mesh.js";
4
- import { FluentMaterial } from "../materials/fluent/fluentMaterial.js";
5
- import { TouchHolographicButton } from "./touchHolographicButton.js";
6
- import { Quaternion, Vector2, Vector3 } from "@babylonjs/core/Maths/math.vector.js";
7
- import { ContentDisplay3D } from "./contentDisplay3D.js";
8
- import { Image } from "../../2D/controls/image.js";
9
- import { SlateGizmo } from "../gizmos/slateGizmo.js";
10
- import { DefaultBehavior } from "../behaviors/defaultBehavior.js";
11
- import { Viewport } from "@babylonjs/core/Maths/math.viewport.js";
12
- import { PointerDragBehavior } from "@babylonjs/core/Behaviors/Meshes/pointerDragBehavior.js";
13
- import { Scalar } from "@babylonjs/core/Maths/math.scalar.js";
14
- import { FluentBackplateMaterial } from "../materials/fluentBackplate/fluentBackplateMaterial.js";
15
- import { DomManagement } from "@babylonjs/core/Misc/domManagement.js";
16
- import { Vector4 } from "@babylonjs/core/Maths/math.js";
17
- /**
18
- * Class used to create a holographic slate
19
- * @since 5.0.0
20
- */
21
- var HolographicSlate = /** @class */ (function (_super) {
22
- __extends(HolographicSlate, _super);
23
- /**
24
- * Creates a new slate
25
- * @param name defines the control name
26
- */
27
- function HolographicSlate(name) {
28
- var _this = _super.call(this, name) || this;
29
- /**
30
- * Dimensions of the slate
31
- */
32
- _this.dimensions = new Vector3(21.875, 12.5, 0.001);
33
- /**
34
- * Minimum dimensions of the slate
35
- */
36
- _this.minDimensions = new Vector3(15.625, 6.25, 0.001);
37
- /**
38
- * Default dimensions of the slate
39
- */
40
- _this.defaultDimensions = _this.dimensions.clone();
41
- /**
42
- * Dimensions of the backplate
43
- */
44
- _this.backplateDimensions = new Vector3(21.875, 0.625, 0.001);
45
- /**
46
- * Margin between backplate and contentplate
47
- */
48
- _this.backPlateMargin = 0.005;
49
- /**
50
- * Origin in local coordinates (top left corner)
51
- */
52
- _this.origin = new Vector3(0, 0, 0);
53
- _this._contentScaleRatio = 1;
54
- _this._followButton = new TouchHolographicButton("followButton" + _this.name);
55
- _this._closeButton = new TouchHolographicButton("closeButton" + _this.name);
56
- _this._contentViewport = new Viewport(0, 0, 1, 1);
57
- _this._contentDragBehavior = new PointerDragBehavior({
58
- dragPlaneNormal: new Vector3(0, 0, -1),
59
- });
60
- return _this;
61
- }
62
- Object.defineProperty(HolographicSlate.prototype, "defaultBehavior", {
63
- /**
64
- * Regroups all mesh behaviors for the slate
65
- */
66
- get: function () {
67
- return this._defaultBehavior;
68
- },
69
- enumerable: false,
70
- configurable: true
71
- });
72
- Object.defineProperty(HolographicSlate.prototype, "renderingGroupId", {
73
- get: function () {
74
- return this._backPlate.renderingGroupId;
75
- },
76
- /**
77
- * Rendering ground id of all the mesh in the button
78
- */
79
- set: function (id) {
80
- this._backPlate.renderingGroupId = id;
81
- this._contentPlate.renderingGroupId = id;
82
- },
83
- enumerable: false,
84
- configurable: true
85
- });
86
- Object.defineProperty(HolographicSlate.prototype, "imageUrl", {
87
- /**
88
- * Gets or sets the image url for the button
89
- */
90
- get: function () {
91
- return this._imageUrl;
92
- },
93
- set: function (value) {
94
- if (this._imageUrl === value) {
95
- return;
96
- }
97
- this._imageUrl = value;
98
- this._rebuildContent();
99
- this._resetContentPositionAndZoom();
100
- this._applyContentViewport();
101
- },
102
- enumerable: false,
103
- configurable: true
104
- });
105
- /**
106
- * Apply the facade texture (created from the content property).
107
- * This function can be overloaded by child classes
108
- * @param facadeTexture defines the AdvancedDynamicTexture to use
109
- */
110
- HolographicSlate.prototype._applyFacade = function (facadeTexture) {
111
- this._contentMaterial.albedoTexture = facadeTexture;
112
- // We should have a content plate by this point, but check for safety
113
- if (this._contentPlate) {
114
- facadeTexture.attachToMesh(this._contentPlate, true);
115
- }
116
- };
117
- HolographicSlate.prototype._rebuildContent = function () {
118
- this._disposeFacadeTexture();
119
- if (DomManagement.IsDocumentAvailable() && !!document.createElement) {
120
- if (this._imageUrl) {
121
- var image = new Image();
122
- image.source = this._imageUrl;
123
- if (this._contentPlate) {
124
- this.content = image;
125
- }
126
- }
127
- }
128
- };
129
- HolographicSlate.prototype._addControl = function (control) {
130
- control._host = this._host;
131
- if (this._host.utilityLayer) {
132
- control._prepareNode(this._host.utilityLayer.utilityLayerScene);
133
- }
134
- };
135
- HolographicSlate.prototype._getTypeName = function () {
136
- return "HolographicSlate";
137
- };
138
- /**
139
- * @hidden
140
- */
141
- HolographicSlate.prototype._positionElements = function () {
142
- var followButtonMesh = this._followButton.mesh;
143
- var closeButtonMesh = this._closeButton.mesh;
144
- var backPlate = this._backPlate;
145
- var contentPlate = this._contentPlate;
146
- if (followButtonMesh && closeButtonMesh && backPlate) {
147
- // World size of a button with 1 scaling
148
- var buttonBaseSize = 1;
149
- // Buttons take full backPlate on Y axis
150
- var backPlateYScale = this.backplateDimensions.y / buttonBaseSize;
151
- closeButtonMesh.scaling.setAll(backPlateYScale);
152
- followButtonMesh.scaling.setAll(backPlateYScale);
153
- closeButtonMesh.position
154
- .copyFromFloats(this.backplateDimensions.x - backPlateYScale / 2, -this.backplateDimensions.y / 2, (-this.backplateDimensions.z / 2) * (this._host.scene.useRightHandedSystem ? -1 : 1))
155
- .addInPlace(this.origin);
156
- followButtonMesh.position
157
- .copyFromFloats(this.backplateDimensions.x - (3 * backPlateYScale) / 2, -this.backplateDimensions.y / 2, (-this.backplateDimensions.z / 2) * (this._host.scene.useRightHandedSystem ? -1 : 1))
158
- .addInPlace(this.origin);
159
- var contentPlateHeight = this.dimensions.y - this.backplateDimensions.y - this.backPlateMargin;
160
- backPlate.scaling.copyFrom(this.backplateDimensions);
161
- contentPlate.scaling.copyFromFloats(this.dimensions.x, contentPlateHeight, this.dimensions.z);
162
- backPlate.position.copyFromFloats(this.backplateDimensions.x / 2, -(this.backplateDimensions.y / 2), 0).addInPlace(this.origin);
163
- contentPlate.position.copyFromFloats(this.dimensions.x / 2, -(this.backplateDimensions.y + this.backPlateMargin + contentPlateHeight / 2), 0).addInPlace(this.origin);
164
- var aspectRatio = this.dimensions.x / contentPlateHeight;
165
- this._contentViewport.width = this._contentScaleRatio;
166
- this._contentViewport.height = this._contentScaleRatio / aspectRatio;
167
- this._applyContentViewport();
168
- }
169
- };
170
- HolographicSlate.prototype._applyContentViewport = function () {
171
- var _a;
172
- if (((_a = this._contentPlate) === null || _a === void 0 ? void 0 : _a.material) && this._contentPlate.material.albedoTexture) {
173
- var tex = this._contentPlate.material.albedoTexture;
174
- tex.uScale = this._contentScaleRatio;
175
- tex.vScale = (this._contentScaleRatio / this._contentViewport.width) * this._contentViewport.height;
176
- tex.uOffset = this._contentViewport.x;
177
- tex.vOffset = this._contentViewport.y;
178
- }
179
- };
180
- HolographicSlate.prototype._resetContentPositionAndZoom = function () {
181
- this._contentViewport.x = 0;
182
- this._contentViewport.y = 1 - this._contentViewport.height / this._contentViewport.width;
183
- this._contentScaleRatio = 1;
184
- };
185
- /**
186
- * @hidden
187
- */
188
- HolographicSlate.prototype._updatePivot = function () {
189
- if (!this.mesh) {
190
- return;
191
- }
192
- // Update pivot point so it is at the center of geometry
193
- var center = this.dimensions.scale(0.5);
194
- // As origin is topleft corner in 2D, dimensions are calculated towards bottom right corner, thus y axis is downwards
195
- center.y *= -1;
196
- center.addInPlace(this.origin);
197
- center.z = 0;
198
- var origin = new Vector3(0, 0, 0);
199
- Vector3.TransformCoordinatesToRef(origin, this.mesh.computeWorldMatrix(true), origin);
200
- this.mesh.setPivotPoint(center);
201
- var origin2 = new Vector3(0, 0, 0);
202
- Vector3.TransformCoordinatesToRef(origin2, this.mesh.computeWorldMatrix(true), origin2);
203
- this.mesh.position.addInPlace(origin).subtractInPlace(origin2);
204
- };
205
- // Mesh association
206
- HolographicSlate.prototype._createNode = function (scene) {
207
- var _this = this;
208
- var node = new Mesh("slate" + this.name, scene);
209
- this._backPlate = CreateBox("backPlate" + this.name, { size: 1 }, scene);
210
- var faceUV = new Array(6).fill(new Vector4(0, 0, 1, 1));
211
- if (scene.useRightHandedSystem) {
212
- faceUV[0].copyFromFloats(0, 1, 1, 0);
213
- }
214
- this._contentPlate = CreateBox("contentPlate" + this.name, { size: 1, faceUV: faceUV }, scene);
215
- this._backPlate.parent = node;
216
- this._backPlate.isNearGrabbable = true;
217
- this._contentPlate.parent = node;
218
- this._attachContentPlateBehavior();
219
- this._addControl(this._followButton);
220
- this._addControl(this._closeButton);
221
- var followButtonMesh = this._followButton.mesh;
222
- var closeButtonMesh = this._closeButton.mesh;
223
- followButtonMesh.parent = node;
224
- closeButtonMesh.parent = node;
225
- this._positionElements();
226
- this._followButton.imageUrl = HolographicSlate.ASSETS_BASE_URL + HolographicSlate.FOLLOW_ICON_FILENAME;
227
- this._closeButton.imageUrl = HolographicSlate.ASSETS_BASE_URL + HolographicSlate.CLOSE_ICON_FILENAME;
228
- this._followButton.isBackplateVisible = false;
229
- this._closeButton.isBackplateVisible = false;
230
- this._followButton.onPointerClickObservable.add(function () {
231
- _this._defaultBehavior.followBehaviorEnabled = !_this._defaultBehavior.followBehaviorEnabled;
232
- if (_this._defaultBehavior.followBehaviorEnabled) {
233
- _this._defaultBehavior.followBehavior.recenter();
234
- }
235
- });
236
- this._closeButton.onPointerClickObservable.add(function () {
237
- _this.dispose();
238
- });
239
- node.rotationQuaternion = Quaternion.Identity();
240
- node.isVisible = false;
241
- return node;
242
- };
243
- HolographicSlate.prototype._attachContentPlateBehavior = function () {
244
- var _this = this;
245
- this._contentDragBehavior.attach(this._contentPlate);
246
- this._contentDragBehavior.moveAttached = false;
247
- this._contentDragBehavior.useObjectOrientationForDragging = true;
248
- this._contentDragBehavior.updateDragPlane = false;
249
- var origin = new Vector3();
250
- var worldDimensions = new Vector3();
251
- var upWorld = new Vector3();
252
- var rightWorld = new Vector3();
253
- var projectedOffset = new Vector2();
254
- var startViewport;
255
- var worldMatrix;
256
- this._contentDragBehavior.onDragStartObservable.add(function (event) {
257
- if (!_this.node) {
258
- return;
259
- }
260
- startViewport = _this._contentViewport.clone();
261
- worldMatrix = _this.node.computeWorldMatrix(true);
262
- origin.copyFrom(event.dragPlanePoint);
263
- worldDimensions.copyFrom(_this.dimensions);
264
- worldDimensions.y -= _this.backplateDimensions.y + _this.backPlateMargin;
265
- Vector3.TransformNormalToRef(worldDimensions, worldMatrix, worldDimensions);
266
- upWorld.copyFromFloats(0, 1, 0);
267
- Vector3.TransformNormalToRef(upWorld, worldMatrix, upWorld);
268
- rightWorld.copyFromFloats(1, 0, 0);
269
- Vector3.TransformNormalToRef(rightWorld, worldMatrix, rightWorld);
270
- upWorld.normalize();
271
- upWorld.scaleInPlace(1 / Vector3.Dot(upWorld, worldDimensions));
272
- rightWorld.normalize();
273
- rightWorld.scaleInPlace(1 / Vector3.Dot(rightWorld, worldDimensions));
274
- });
275
- var offset = new Vector3();
276
- this._contentDragBehavior.onDragObservable.add(function (event) {
277
- offset.copyFrom(event.dragPlanePoint);
278
- offset.subtractInPlace(origin);
279
- projectedOffset.copyFromFloats(Vector3.Dot(offset, rightWorld), Vector3.Dot(offset, upWorld));
280
- // By default, content takes full width available and height is cropped to keep aspect ratio
281
- _this._contentViewport.x = Scalar.Clamp(startViewport.x - offset.x, 0, 1 - _this._contentViewport.width * _this._contentScaleRatio);
282
- _this._contentViewport.y = Scalar.Clamp(startViewport.y - offset.y, 0, 1 - _this._contentViewport.height * _this._contentScaleRatio);
283
- _this._applyContentViewport();
284
- });
285
- };
286
- HolographicSlate.prototype._affectMaterial = function (mesh) {
287
- // TODO share materials
288
- this._backPlateMaterial = new FluentBackplateMaterial("".concat(this.name, " plateMaterial"), mesh.getScene());
289
- this._pickedPointObserver = this._host.onPickedPointChangedObservable.add(function (pickedPoint) {
290
- // if (pickedPoint) {
291
- // this._backPlateMaterial. = pickedPoint;
292
- // this._backPlateMaterial.hoverColor.a = 1.0;
293
- // } else {
294
- // this._backPlateMaterial.hoverColor.a = 0;
295
- // }
296
- });
297
- this._contentMaterial = new FluentMaterial(this.name + "contentMaterial", mesh.getScene());
298
- this._contentMaterial.renderBorders = true;
299
- this._backPlate.material = this._backPlateMaterial;
300
- this._contentPlate.material = this._contentMaterial;
301
- this._rebuildContent();
302
- this._applyContentViewport();
303
- };
304
- /** @hidden **/
305
- HolographicSlate.prototype._prepareNode = function (scene) {
306
- var _this = this;
307
- _super.prototype._prepareNode.call(this, scene);
308
- this._gizmo = new SlateGizmo(this._host.utilityLayer);
309
- this._gizmo.attachedSlate = this;
310
- this._defaultBehavior = new DefaultBehavior();
311
- this._defaultBehavior.attach(this.node, [this._backPlate]);
312
- this._positionChangedObserver = this._defaultBehavior.sixDofDragBehavior.onPositionChangedObservable.add(function () {
313
- _this._gizmo.updateBoundingBox();
314
- });
315
- this._updatePivot();
316
- this.resetDefaultAspectAndPose();
317
- };
318
- /**
319
- * Resets the aspect and pose of the slate so it is right in front of the active camera, facing towards it.
320
- */
321
- HolographicSlate.prototype.resetDefaultAspectAndPose = function () {
322
- if (!this._host || !this._host.utilityLayer || !this.node) {
323
- return;
324
- }
325
- var scene = this._host.utilityLayer.utilityLayerScene;
326
- var camera = scene.activeCamera;
327
- if (camera) {
328
- var worldMatrix = camera.getWorldMatrix();
329
- var backward = Vector3.TransformNormal(Vector3.Backward(scene.useRightHandedSystem), worldMatrix);
330
- this.dimensions.copyFrom(this.defaultDimensions);
331
- this.origin.setAll(0);
332
- this._gizmo.updateBoundingBox();
333
- var pivot = this.node.getAbsolutePivotPoint();
334
- this.node.position.copyFrom(camera.position).subtractInPlace(backward).subtractInPlace(pivot);
335
- this.node.rotationQuaternion = Quaternion.FromLookDirectionLH(backward, new Vector3(0, 1, 0));
336
- }
337
- };
338
- /**
339
- * Releases all associated resources
340
- */
341
- HolographicSlate.prototype.dispose = function () {
342
- _super.prototype.dispose.call(this);
343
- this._backPlateMaterial.dispose();
344
- this._contentMaterial.dispose();
345
- this._backPlate.dispose();
346
- this._contentPlate.dispose();
347
- this._followButton.dispose();
348
- this._closeButton.dispose();
349
- this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);
350
- this._defaultBehavior.sixDofDragBehavior.onPositionChangedObservable.remove(this._positionChangedObserver);
351
- this._defaultBehavior.detach();
352
- this._gizmo.dispose();
353
- this._contentDragBehavior.detach();
354
- };
355
- /**
356
- * Base Url for the assets.
357
- */
358
- HolographicSlate.ASSETS_BASE_URL = "https://assets.babylonjs.com/meshes/MRTK/";
359
- /**
360
- * File name for the close icon.
361
- */
362
- HolographicSlate.CLOSE_ICON_FILENAME = "IconClose.png";
363
- /**
364
- * File name for the close icon.
365
- */
366
- HolographicSlate.FOLLOW_ICON_FILENAME = "IconFollowMe.png";
367
- return HolographicSlate;
368
- }(ContentDisplay3D));
369
- export { HolographicSlate };
1
+ import { __extends } from "tslib";
2
+ import { ContentDisplay3D } from "./contentDisplay3D";
3
+ import { TouchHolographicButton } from "./touchHolographicButton";
4
+ import { AdvancedDynamicTexture } from "../../2D/advancedDynamicTexture";
5
+ import { Control } from "../../2D/controls/control";
6
+ import { TextBlock, TextWrapping } from "../../2D/controls/textBlock";
7
+ import { DefaultBehavior } from "../behaviors/defaultBehavior";
8
+ import { SlateGizmo } from "../gizmos/slateGizmo";
9
+ import { FluentMaterial } from "../materials/fluent/fluentMaterial";
10
+ import { FluentBackplateMaterial } from "../materials/fluentBackplate/fluentBackplateMaterial";
11
+ import { PointerDragBehavior } from "@babylonjs/core/Behaviors/Meshes/pointerDragBehavior.js";
12
+ import { Vector4 } from "@babylonjs/core/Maths/math.js";
13
+ import { Epsilon } from "@babylonjs/core/Maths/math.constants.js";
14
+ import { Scalar } from "@babylonjs/core/Maths/math.scalar.js";
15
+ import { Quaternion, Vector2, Vector3 } from "@babylonjs/core/Maths/math.vector.js";
16
+ import { Viewport } from "@babylonjs/core/Maths/math.viewport.js";
17
+ import { CreateBox } from "@babylonjs/core/Meshes/Builders/boxBuilder.js";
18
+ import { CreatePlane } from "@babylonjs/core/Meshes/Builders/planeBuilder.js";
19
+ import { Mesh } from "@babylonjs/core/Meshes/mesh.js";
20
+ import { VertexData } from "@babylonjs/core/Meshes/mesh.vertexData.js";
21
+ /**
22
+ * Class used to create a holographic slate
23
+ * @since 5.0.0
24
+ */
25
+ var HolographicSlate = /** @class */ (function (_super) {
26
+ __extends(HolographicSlate, _super);
27
+ /**
28
+ * Creates a new slate
29
+ * @param name defines the control name
30
+ */
31
+ function HolographicSlate(name) {
32
+ var _this = _super.call(this, name) || this;
33
+ /**
34
+ * Margin between title bar and contentplate
35
+ */
36
+ _this.titleBarMargin = 0.005;
37
+ /**
38
+ * Origin in local coordinates (top left corner)
39
+ */
40
+ _this.origin = new Vector3(0, 0, 0);
41
+ _this._dimensions = new Vector2(21.875, 12.5);
42
+ _this._titleBarHeight = 0.625;
43
+ _this._titleText = "";
44
+ _this._contentScaleRatio = 1;
45
+ /**
46
+ * Minimum dimensions of the slate
47
+ */
48
+ _this.minDimensions = new Vector2(15.625, 6.25);
49
+ /**
50
+ * Default dimensions of the slate
51
+ */
52
+ _this.defaultDimensions = _this._dimensions.clone();
53
+ _this._followButton = new TouchHolographicButton("followButton" + _this.name);
54
+ _this._followButton.isToggleButton = true;
55
+ _this._closeButton = new TouchHolographicButton("closeButton" + _this.name);
56
+ _this._contentViewport = new Viewport(0, 0, 1, 1);
57
+ _this._contentDragBehavior = new PointerDragBehavior({
58
+ dragPlaneNormal: new Vector3(0, 0, -1),
59
+ });
60
+ return _this;
61
+ }
62
+ Object.defineProperty(HolographicSlate.prototype, "defaultBehavior", {
63
+ /**
64
+ * Regroups all mesh behaviors for the slate
65
+ */
66
+ get: function () {
67
+ return this._defaultBehavior;
68
+ },
69
+ enumerable: false,
70
+ configurable: true
71
+ });
72
+ Object.defineProperty(HolographicSlate.prototype, "dimensions", {
73
+ /**
74
+ * 2D dimensions of the slate
75
+ */
76
+ get: function () {
77
+ return this._dimensions;
78
+ },
79
+ set: function (value) {
80
+ //clamp, respecting ratios
81
+ var scale = 1.0;
82
+ if (value.x < this.minDimensions.x || value.y < this.minDimensions.y) {
83
+ var newRatio = value.x / value.y;
84
+ var minRatio = this.minDimensions.x / this.minDimensions.y;
85
+ if (minRatio > newRatio) {
86
+ // We just need to make sure the x-val is greater than the min
87
+ scale = this.minDimensions.x / value.x;
88
+ }
89
+ else {
90
+ // We just need to make sure the y-val is greater than the min
91
+ scale = this.minDimensions.y / value.y;
92
+ }
93
+ }
94
+ this._dimensions.copyFrom(value).scaleInPlace(scale);
95
+ this._updatePivot();
96
+ this._positionElements();
97
+ },
98
+ enumerable: false,
99
+ configurable: true
100
+ });
101
+ Object.defineProperty(HolographicSlate.prototype, "titleBarHeight", {
102
+ /**
103
+ * Height of the title bar component
104
+ */
105
+ get: function () {
106
+ return this._titleBarHeight;
107
+ },
108
+ set: function (value) {
109
+ this._titleBarHeight = value;
110
+ },
111
+ enumerable: false,
112
+ configurable: true
113
+ });
114
+ Object.defineProperty(HolographicSlate.prototype, "renderingGroupId", {
115
+ get: function () {
116
+ return this._titleBar.renderingGroupId;
117
+ },
118
+ /**
119
+ * Rendering ground id of all the meshes
120
+ */
121
+ set: function (id) {
122
+ this._titleBar.renderingGroupId = id;
123
+ this._titleBarTitle.renderingGroupId = id;
124
+ this._contentPlate.renderingGroupId = id;
125
+ this._backPlate.renderingGroupId = id;
126
+ },
127
+ enumerable: false,
128
+ configurable: true
129
+ });
130
+ Object.defineProperty(HolographicSlate.prototype, "title", {
131
+ get: function () {
132
+ return this._titleText;
133
+ },
134
+ /**
135
+ * The title text displayed at the top of the slate
136
+ */
137
+ set: function (title) {
138
+ this._titleText = title;
139
+ if (this._titleTextComponent) {
140
+ this._titleTextComponent.text = title;
141
+ }
142
+ },
143
+ enumerable: false,
144
+ configurable: true
145
+ });
146
+ /**
147
+ * Apply the facade texture (created from the content property).
148
+ * This function can be overloaded by child classes
149
+ * @param facadeTexture defines the AdvancedDynamicTexture to use
150
+ */
151
+ HolographicSlate.prototype._applyFacade = function (facadeTexture) {
152
+ this._contentMaterial.albedoTexture = facadeTexture;
153
+ this._resetContentPositionAndZoom();
154
+ this._applyContentViewport();
155
+ facadeTexture.attachToMesh(this._contentPlate, true);
156
+ };
157
+ HolographicSlate.prototype._addControl = function (control) {
158
+ control._host = this._host;
159
+ if (this._host.utilityLayer) {
160
+ control._prepareNode(this._host.utilityLayer.utilityLayerScene);
161
+ }
162
+ };
163
+ HolographicSlate.prototype._getTypeName = function () {
164
+ return "HolographicSlate";
165
+ };
166
+ /**
167
+ * @hidden
168
+ */
169
+ HolographicSlate.prototype._positionElements = function () {
170
+ var followButton = this._followButton;
171
+ var closeButton = this._closeButton;
172
+ var titleBar = this._titleBar;
173
+ var titleBarTitle = this._titleBarTitle;
174
+ var contentPlate = this._contentPlate;
175
+ var backPlate = this._backPlate;
176
+ if (followButton && closeButton && titleBar) {
177
+ closeButton.scaling.setAll(this.titleBarHeight);
178
+ followButton.scaling.setAll(this.titleBarHeight);
179
+ closeButton.position.copyFromFloats(this.dimensions.x - this.titleBarHeight / 2, -this.titleBarHeight / 2, 0).addInPlace(this.origin);
180
+ followButton.position.copyFromFloats(this.dimensions.x - (3 * this.titleBarHeight) / 2, -this.titleBarHeight / 2, 0).addInPlace(this.origin);
181
+ var contentPlateHeight = this.dimensions.y - this.titleBarHeight - this.titleBarMargin;
182
+ var rightHandScene = contentPlate.getScene().useRightHandedSystem;
183
+ titleBar.scaling.set(this.dimensions.x, this.titleBarHeight, Epsilon);
184
+ titleBarTitle.scaling.set(this.dimensions.x - 2 * this.titleBarHeight, this.titleBarHeight, Epsilon);
185
+ contentPlate.scaling.copyFromFloats(this.dimensions.x, contentPlateHeight, Epsilon);
186
+ backPlate.scaling.copyFromFloats(this.dimensions.x, contentPlateHeight, Epsilon);
187
+ titleBar.position.copyFromFloats(this.dimensions.x / 2, -(this.titleBarHeight / 2), 0).addInPlace(this.origin);
188
+ titleBarTitle.position
189
+ .copyFromFloats(this.dimensions.x / 2 - this.titleBarHeight, -(this.titleBarHeight / 2), rightHandScene ? Epsilon : -Epsilon)
190
+ .addInPlace(this.origin);
191
+ contentPlate.position.copyFromFloats(this.dimensions.x / 2, -(this.titleBarHeight + this.titleBarMargin + contentPlateHeight / 2), 0).addInPlace(this.origin);
192
+ backPlate.position
193
+ .copyFromFloats(this.dimensions.x / 2, -(this.titleBarHeight + this.titleBarMargin + contentPlateHeight / 2), rightHandScene ? -Epsilon : Epsilon)
194
+ .addInPlace(this.origin);
195
+ // Update the title's AdvancedDynamicTexture scale to avoid visual stretching
196
+ this._titleTextComponent.host.scaleTo((HolographicSlate._DEFAULT_TEXT_RESOLUTION_Y * titleBarTitle.scaling.x) / titleBarTitle.scaling.y, HolographicSlate._DEFAULT_TEXT_RESOLUTION_Y);
197
+ var aspectRatio = this.dimensions.x / contentPlateHeight;
198
+ this._contentViewport.width = this._contentScaleRatio;
199
+ this._contentViewport.height = this._contentScaleRatio / aspectRatio;
200
+ this._applyContentViewport();
201
+ if (this._gizmo) {
202
+ this._gizmo.updateBoundingBox();
203
+ }
204
+ }
205
+ };
206
+ HolographicSlate.prototype._applyContentViewport = function () {
207
+ var _a;
208
+ if (((_a = this._contentPlate) === null || _a === void 0 ? void 0 : _a.material) && this._contentPlate.material.albedoTexture) {
209
+ var tex = this._contentPlate.material.albedoTexture;
210
+ tex.uScale = this._contentScaleRatio;
211
+ tex.vScale = (this._contentScaleRatio / this._contentViewport.width) * this._contentViewport.height;
212
+ tex.uOffset = this._contentViewport.x;
213
+ tex.vOffset = this._contentViewport.y;
214
+ }
215
+ };
216
+ HolographicSlate.prototype._resetContentPositionAndZoom = function () {
217
+ this._contentViewport.x = 0;
218
+ this._contentViewport.y = 1 - this._contentViewport.height / this._contentViewport.width;
219
+ this._contentScaleRatio = 1;
220
+ };
221
+ /**
222
+ * @hidden
223
+ */
224
+ HolographicSlate.prototype._updatePivot = function () {
225
+ if (!this.mesh) {
226
+ return;
227
+ }
228
+ // Update pivot point so it is at the center of geometry
229
+ // As origin is topleft corner in 2D, dimensions are calculated towards bottom right corner, thus y axis is downwards
230
+ var center = new Vector3(this.dimensions.x * 0.5, -this.dimensions.y * 0.5, Epsilon);
231
+ center.addInPlace(this.origin);
232
+ center.z = 0;
233
+ var origin = new Vector3(0, 0, 0);
234
+ Vector3.TransformCoordinatesToRef(origin, this.mesh.computeWorldMatrix(true), origin);
235
+ this.mesh.setPivotPoint(center);
236
+ var origin2 = new Vector3(0, 0, 0);
237
+ Vector3.TransformCoordinatesToRef(origin2, this.mesh.computeWorldMatrix(true), origin2);
238
+ this.mesh.position.addInPlace(origin).subtractInPlace(origin2);
239
+ };
240
+ // Mesh association
241
+ HolographicSlate.prototype._createNode = function (scene) {
242
+ var _this = this;
243
+ var node = new Mesh("slate_" + this.name, scene);
244
+ this._titleBar = CreateBox("titleBar_" + this.name, { size: 1 }, scene);
245
+ this._titleBarTitle = CreatePlane("titleText_" + this.name, { size: 1 }, scene);
246
+ this._titleBarTitle.parent = node;
247
+ this._titleBarTitle.isPickable = false;
248
+ var adt = AdvancedDynamicTexture.CreateForMesh(this._titleBarTitle);
249
+ this._titleTextComponent = new TextBlock("titleText_" + this.name, this._titleText);
250
+ this._titleTextComponent.textWrapping = TextWrapping.Ellipsis;
251
+ this._titleTextComponent.textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;
252
+ this._titleTextComponent.color = "white";
253
+ this._titleTextComponent.fontSize = HolographicSlate._DEFAULT_TEXT_RESOLUTION_Y / 2;
254
+ this._titleTextComponent.paddingLeft = HolographicSlate._DEFAULT_TEXT_RESOLUTION_Y / 4;
255
+ adt.addControl(this._titleTextComponent);
256
+ if (scene.useRightHandedSystem) {
257
+ var faceUV = new Vector4(0, 0, 1, 1);
258
+ this._contentPlate = CreatePlane("contentPlate_" + this.name, { size: 1, sideOrientation: VertexData.BACKSIDE, frontUVs: faceUV }, scene);
259
+ this._backPlate = CreatePlane("backPlate_" + this.name, { size: 1, sideOrientation: VertexData.FRONTSIDE }, scene);
260
+ }
261
+ else {
262
+ var faceUV = new Vector4(0, 0, 1, 1);
263
+ this._contentPlate = CreatePlane("contentPlate_" + this.name, { size: 1, sideOrientation: VertexData.FRONTSIDE, frontUVs: faceUV }, scene);
264
+ this._backPlate = CreatePlane("backPlate_" + this.name, { size: 1, sideOrientation: VertexData.BACKSIDE }, scene);
265
+ }
266
+ this._titleBar.parent = node;
267
+ this._titleBar.isNearGrabbable = true;
268
+ this._contentPlate.parent = node;
269
+ this._backPlate.parent = node;
270
+ this._attachContentPlateBehavior();
271
+ this._addControl(this._followButton);
272
+ this._addControl(this._closeButton);
273
+ var followButton = this._followButton;
274
+ var closeButton = this._closeButton;
275
+ followButton.node.parent = node;
276
+ closeButton.node.parent = node;
277
+ this._positionElements();
278
+ this._followButton.imageUrl = HolographicSlate.ASSETS_BASE_URL + HolographicSlate.FOLLOW_ICON_FILENAME;
279
+ this._closeButton.imageUrl = HolographicSlate.ASSETS_BASE_URL + HolographicSlate.CLOSE_ICON_FILENAME;
280
+ this._followButton.isBackplateVisible = false;
281
+ this._closeButton.isBackplateVisible = false;
282
+ this._followButton.onToggleObservable.add(function (isToggled) {
283
+ _this._defaultBehavior.followBehaviorEnabled = isToggled;
284
+ if (_this._defaultBehavior.followBehaviorEnabled) {
285
+ _this._defaultBehavior.followBehavior.recenter();
286
+ }
287
+ });
288
+ this._closeButton.onPointerClickObservable.add(function () {
289
+ _this.dispose();
290
+ });
291
+ node.rotationQuaternion = Quaternion.Identity();
292
+ node.isVisible = false;
293
+ return node;
294
+ };
295
+ HolographicSlate.prototype._attachContentPlateBehavior = function () {
296
+ var _this = this;
297
+ this._contentDragBehavior.attach(this._contentPlate);
298
+ this._contentDragBehavior.moveAttached = false;
299
+ this._contentDragBehavior.useObjectOrientationForDragging = true;
300
+ this._contentDragBehavior.updateDragPlane = false;
301
+ var origin = new Vector3();
302
+ var worldDimensions = new Vector3();
303
+ var upWorld = new Vector3();
304
+ var rightWorld = new Vector3();
305
+ var projectedOffset = new Vector2();
306
+ var startViewport;
307
+ var worldMatrix;
308
+ this._contentDragBehavior.onDragStartObservable.add(function (event) {
309
+ if (!_this.node) {
310
+ return;
311
+ }
312
+ startViewport = _this._contentViewport.clone();
313
+ worldMatrix = _this.node.computeWorldMatrix(true);
314
+ origin.copyFrom(event.dragPlanePoint);
315
+ worldDimensions.set(_this.dimensions.x, _this.dimensions.y, Epsilon);
316
+ worldDimensions.y -= _this.titleBarHeight + _this.titleBarMargin;
317
+ Vector3.TransformNormalToRef(worldDimensions, worldMatrix, worldDimensions);
318
+ upWorld.copyFromFloats(0, 1, 0);
319
+ Vector3.TransformNormalToRef(upWorld, worldMatrix, upWorld);
320
+ rightWorld.copyFromFloats(1, 0, 0);
321
+ Vector3.TransformNormalToRef(rightWorld, worldMatrix, rightWorld);
322
+ upWorld.normalize();
323
+ upWorld.scaleInPlace(1 / Vector3.Dot(upWorld, worldDimensions));
324
+ rightWorld.normalize();
325
+ rightWorld.scaleInPlace(1 / Vector3.Dot(rightWorld, worldDimensions));
326
+ });
327
+ var offset = new Vector3();
328
+ this._contentDragBehavior.onDragObservable.add(function (event) {
329
+ offset.copyFrom(event.dragPlanePoint);
330
+ offset.subtractInPlace(origin);
331
+ projectedOffset.copyFromFloats(Vector3.Dot(offset, rightWorld), Vector3.Dot(offset, upWorld));
332
+ // By default, content takes full width available and height is cropped to keep aspect ratio
333
+ _this._contentViewport.x = Scalar.Clamp(startViewport.x - offset.x, 0, 1 - _this._contentViewport.width * _this._contentScaleRatio);
334
+ _this._contentViewport.y = Scalar.Clamp(startViewport.y - offset.y, 0, 1 - _this._contentViewport.height * _this._contentScaleRatio);
335
+ _this._applyContentViewport();
336
+ });
337
+ };
338
+ HolographicSlate.prototype._affectMaterial = function (mesh) {
339
+ // TODO share materials
340
+ this._titleBarMaterial = new FluentBackplateMaterial("".concat(this.name, " plateMaterial"), mesh.getScene());
341
+ this._contentMaterial = new FluentMaterial("".concat(this.name, " contentMaterial"), mesh.getScene());
342
+ this._contentMaterial.renderBorders = true;
343
+ this._backMaterial = new FluentBackplateMaterial("".concat(this.name, " backPlate"), mesh.getScene());
344
+ this._backMaterial.lineWidth = Epsilon;
345
+ this._backMaterial.radius = 0.005;
346
+ this._backMaterial.backFaceCulling = true;
347
+ this._titleBar.material = this._titleBarMaterial;
348
+ this._contentPlate.material = this._contentMaterial;
349
+ this._backPlate.material = this._backMaterial;
350
+ this._resetContent();
351
+ this._applyContentViewport();
352
+ };
353
+ /**
354
+ * @param scene
355
+ * @hidden*
356
+ */
357
+ HolographicSlate.prototype._prepareNode = function (scene) {
358
+ var _this = this;
359
+ _super.prototype._prepareNode.call(this, scene);
360
+ this._gizmo = new SlateGizmo(this._host.utilityLayer);
361
+ this._gizmo.attachedSlate = this;
362
+ this._defaultBehavior = new DefaultBehavior();
363
+ this._defaultBehavior.attach(this.node, [this._titleBar]);
364
+ this._defaultBehavior.sixDofDragBehavior.onDragStartObservable.add(function () {
365
+ _this._followButton.isToggled = false;
366
+ });
367
+ this._positionChangedObserver = this._defaultBehavior.sixDofDragBehavior.onPositionChangedObservable.add(function () {
368
+ _this._gizmo.updateBoundingBox();
369
+ });
370
+ this._updatePivot();
371
+ this.resetDefaultAspectAndPose(false);
372
+ };
373
+ /**
374
+ * Resets the aspect and pose of the slate so it is right in front of the active camera, facing towards it.
375
+ * @param resetAspect Should the slate's dimensions/aspect ratio be reset as well
376
+ */
377
+ HolographicSlate.prototype.resetDefaultAspectAndPose = function (resetAspect) {
378
+ if (resetAspect === void 0) { resetAspect = true; }
379
+ if (!this._host || !this._host.utilityLayer || !this.node) {
380
+ return;
381
+ }
382
+ var scene = this._host.utilityLayer.utilityLayerScene;
383
+ var camera = scene.activeCamera;
384
+ if (camera) {
385
+ var worldMatrix = camera.getWorldMatrix();
386
+ var backward = Vector3.TransformNormal(Vector3.Backward(scene.useRightHandedSystem), worldMatrix);
387
+ this.origin.setAll(0);
388
+ this._gizmo.updateBoundingBox();
389
+ var pivot = this.node.getAbsolutePivotPoint();
390
+ this.node.position.copyFrom(camera.position).subtractInPlace(backward).subtractInPlace(pivot);
391
+ this.node.rotationQuaternion = Quaternion.FromLookDirectionLH(backward, new Vector3(0, 1, 0));
392
+ if (resetAspect) {
393
+ this.dimensions = this.defaultDimensions;
394
+ }
395
+ }
396
+ };
397
+ /**
398
+ * Releases all associated resources
399
+ */
400
+ HolographicSlate.prototype.dispose = function () {
401
+ _super.prototype.dispose.call(this);
402
+ this._titleBarMaterial.dispose();
403
+ this._contentMaterial.dispose();
404
+ this._titleBar.dispose();
405
+ this._titleBarTitle.dispose();
406
+ this._contentPlate.dispose();
407
+ this._backPlate.dispose();
408
+ this._followButton.dispose();
409
+ this._closeButton.dispose();
410
+ this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);
411
+ this._defaultBehavior.sixDofDragBehavior.onPositionChangedObservable.remove(this._positionChangedObserver);
412
+ this._defaultBehavior.detach();
413
+ this._gizmo.dispose();
414
+ this._contentDragBehavior.detach();
415
+ };
416
+ /**
417
+ * Base Url for the assets.
418
+ */
419
+ HolographicSlate.ASSETS_BASE_URL = "https://assets.babylonjs.com/meshes/MRTK/";
420
+ /**
421
+ * File name for the close icon.
422
+ */
423
+ HolographicSlate.CLOSE_ICON_FILENAME = "IconClose.png";
424
+ /**
425
+ * File name for the close icon.
426
+ */
427
+ HolographicSlate.FOLLOW_ICON_FILENAME = "IconFollowMe.png";
428
+ HolographicSlate._DEFAULT_TEXT_RESOLUTION_Y = 102.4;
429
+ return HolographicSlate;
430
+ }(ContentDisplay3D));
431
+ export { HolographicSlate };
370
432
  //# sourceMappingURL=holographicSlate.js.map