@babylonjs/gui 5.0.0-rc.0 → 5.0.0-rc.11

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 -423
  5. package/2D/advancedDynamicTexture.js +1318 -1286
  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 -182
  47. package/2D/controls/inputText.js +1119 -1096
  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 -172
  92. package/2D/controls/textBlock.js +603 -598
  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 -348
  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 -128
  155. package/3D/controls/holographicSlate.js +431 -428
  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 -75
  182. package/3D/controls/touchButton3D.js +233 -227
  183. package/3D/controls/touchButton3D.js.map +1 -1
  184. package/3D/controls/touchHolographicButton.d.ts +110 -109
  185. package/3D/controls/touchHolographicButton.js +445 -445
  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 -57
  203. package/3D/gizmos/slateGizmo.js +369 -369
  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,429 +1,432 @@
1
- import { __extends } from "tslib";
2
- import { ContentDisplay3D } from "./contentDisplay3D.js";
3
- import { TouchHolographicButton } from "./touchHolographicButton.js";
4
- import { AdvancedDynamicTexture } from "../../2D/advancedDynamicTexture.js";
5
- import { Control } from "../../2D/controls/control.js";
6
- import { TextBlock, TextWrapping } from "../../2D/controls/textBlock.js";
7
- import { DefaultBehavior } from "../behaviors/defaultBehavior.js";
8
- import { SlateGizmo } from "../gizmos/slateGizmo.js";
9
- import { FluentMaterial } from "../materials/fluent/fluentMaterial.js";
10
- import { FluentBackplateMaterial } from "../materials/fluentBackplate/fluentBackplateMaterial.js";
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
180
- .copyFromFloats(this.dimensions.x - this.titleBarHeight / 2, -this.titleBarHeight / 2, 0)
181
- .addInPlace(this.origin);
182
- followButton.position
183
- .copyFromFloats(this.dimensions.x - (3 * this.titleBarHeight) / 2, -this.titleBarHeight / 2, 0)
184
- .addInPlace(this.origin);
185
- var contentPlateHeight = this.dimensions.y - this.titleBarHeight - this.titleBarMargin;
186
- var rightHandScene = contentPlate.getScene().useRightHandedSystem;
187
- titleBar.scaling.set(this.dimensions.x, this.titleBarHeight, Epsilon);
188
- titleBarTitle.scaling.set(this.dimensions.x - (2 * this.titleBarHeight), this.titleBarHeight, Epsilon);
189
- contentPlate.scaling.copyFromFloats(this.dimensions.x, contentPlateHeight, Epsilon);
190
- backPlate.scaling.copyFromFloats(this.dimensions.x, contentPlateHeight, Epsilon);
191
- titleBar.position.copyFromFloats(this.dimensions.x / 2, -(this.titleBarHeight / 2), 0).addInPlace(this.origin);
192
- titleBarTitle.position.copyFromFloats((this.dimensions.x / 2) - this.titleBarHeight, -(this.titleBarHeight / 2), rightHandScene ? Epsilon : -Epsilon).addInPlace(this.origin);
193
- contentPlate.position.copyFromFloats(this.dimensions.x / 2, -(this.titleBarHeight + this.titleBarMargin + contentPlateHeight / 2), 0).addInPlace(this.origin);
194
- backPlate.position.copyFromFloats(this.dimensions.x / 2, -(this.titleBarHeight + this.titleBarMargin + contentPlateHeight / 2), rightHandScene ? -Epsilon : Epsilon).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
- /** @hidden **/
354
- HolographicSlate.prototype._prepareNode = function (scene) {
355
- var _this = this;
356
- _super.prototype._prepareNode.call(this, scene);
357
- this._gizmo = new SlateGizmo(this._host.utilityLayer);
358
- this._gizmo.attachedSlate = this;
359
- this._defaultBehavior = new DefaultBehavior();
360
- this._defaultBehavior.attach(this.node, [this._titleBar]);
361
- this._defaultBehavior.sixDofDragBehavior.onDragStartObservable.add(function () {
362
- _this._followButton.isToggled = false;
363
- });
364
- this._positionChangedObserver = this._defaultBehavior.sixDofDragBehavior.onPositionChangedObservable.add(function () {
365
- _this._gizmo.updateBoundingBox();
366
- });
367
- this._updatePivot();
368
- this.resetDefaultAspectAndPose(false);
369
- };
370
- /**
371
- * Resets the aspect and pose of the slate so it is right in front of the active camera, facing towards it.
372
- * @param resetAspect Should the slate's dimensions/aspect ratio be reset as well
373
- */
374
- HolographicSlate.prototype.resetDefaultAspectAndPose = function (resetAspect) {
375
- if (resetAspect === void 0) { resetAspect = true; }
376
- if (!this._host || !this._host.utilityLayer || !this.node) {
377
- return;
378
- }
379
- var scene = this._host.utilityLayer.utilityLayerScene;
380
- var camera = scene.activeCamera;
381
- if (camera) {
382
- var worldMatrix = camera.getWorldMatrix();
383
- var backward = Vector3.TransformNormal(Vector3.Backward(scene.useRightHandedSystem), worldMatrix);
384
- this.origin.setAll(0);
385
- this._gizmo.updateBoundingBox();
386
- var pivot = this.node.getAbsolutePivotPoint();
387
- this.node.position.copyFrom(camera.position).subtractInPlace(backward).subtractInPlace(pivot);
388
- this.node.rotationQuaternion = Quaternion.FromLookDirectionLH(backward, new Vector3(0, 1, 0));
389
- if (resetAspect) {
390
- this.dimensions = this.defaultDimensions;
391
- }
392
- }
393
- };
394
- /**
395
- * Releases all associated resources
396
- */
397
- HolographicSlate.prototype.dispose = function () {
398
- _super.prototype.dispose.call(this);
399
- this._titleBarMaterial.dispose();
400
- this._contentMaterial.dispose();
401
- this._titleBar.dispose();
402
- this._titleBarTitle.dispose();
403
- this._contentPlate.dispose();
404
- this._backPlate.dispose();
405
- this._followButton.dispose();
406
- this._closeButton.dispose();
407
- this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);
408
- this._defaultBehavior.sixDofDragBehavior.onPositionChangedObservable.remove(this._positionChangedObserver);
409
- this._defaultBehavior.detach();
410
- this._gizmo.dispose();
411
- this._contentDragBehavior.detach();
412
- };
413
- /**
414
- * Base Url for the assets.
415
- */
416
- HolographicSlate.ASSETS_BASE_URL = "https://assets.babylonjs.com/meshes/MRTK/";
417
- /**
418
- * File name for the close icon.
419
- */
420
- HolographicSlate.CLOSE_ICON_FILENAME = "IconClose.png";
421
- /**
422
- * File name for the close icon.
423
- */
424
- HolographicSlate.FOLLOW_ICON_FILENAME = "IconFollowMe.png";
425
- HolographicSlate.DEFAULT_TEXT_RESOLUTION_Y = 102.4;
426
- return HolographicSlate;
427
- }(ContentDisplay3D));
428
- 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 };
429
432
  //# sourceMappingURL=holographicSlate.js.map