@babylonjs/gui 5.0.0-rc.7 → 5.0.1

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 (277) 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 -448
  5. package/2D/advancedDynamicTexture.js +1318 -1318
  6. package/2D/advancedDynamicTexture.js.map +1 -1
  7. package/2D/controls/button.d.ts +135 -135
  8. package/2D/controls/button.js +276 -276
  9. package/2D/controls/button.js.map +1 -1
  10. package/2D/controls/checkbox.d.ts +59 -59
  11. package/2D/controls/checkbox.js +188 -188
  12. package/2D/controls/checkbox.js.map +1 -1
  13. package/2D/controls/colorpicker.d.ts +103 -103
  14. package/2D/controls/colorpicker.js +1417 -1417
  15. package/2D/controls/colorpicker.js.map +1 -1
  16. package/2D/controls/container.d.ts +175 -175
  17. package/2D/controls/container.js +570 -570
  18. package/2D/controls/container.js.map +1 -1
  19. package/2D/controls/control.d.ts +866 -866
  20. package/2D/controls/control.js +2433 -2433
  21. package/2D/controls/control.js.map +1 -1
  22. package/2D/controls/displayGrid.d.ts +53 -53
  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 -59
  29. package/2D/controls/focusableButton.js +99 -99
  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 -139
  35. package/2D/controls/grid.js +529 -529
  36. package/2D/controls/grid.js.map +1 -1
  37. package/2D/controls/image.d.ts +204 -204
  38. package/2D/controls/image.js +887 -887
  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/inputPassword.d.ts +9 -8
  43. package/2D/controls/inputPassword.js +28 -25
  44. package/2D/controls/inputPassword.js.map +1 -1
  45. package/2D/controls/inputText.d.ts +201 -201
  46. package/2D/controls/inputText.js +1119 -1119
  47. package/2D/controls/inputText.js.map +1 -1
  48. package/2D/controls/line.d.ts +66 -66
  49. package/2D/controls/line.js +271 -271
  50. package/2D/controls/line.js.map +1 -1
  51. package/2D/controls/multiLine.d.ts +75 -75
  52. package/2D/controls/multiLine.js +262 -262
  53. package/2D/controls/multiLine.js.map +1 -1
  54. package/2D/controls/radioButton.d.ts +49 -49
  55. package/2D/controls/radioButton.js +205 -205
  56. package/2D/controls/radioButton.js.map +1 -1
  57. package/2D/controls/rectangle.d.ts +29 -29
  58. package/2D/controls/rectangle.js +150 -150
  59. package/2D/controls/rectangle.js.map +1 -1
  60. package/2D/controls/scrollViewers/scrollViewer.d.ts +182 -182
  61. package/2D/controls/scrollViewers/scrollViewer.js +677 -677
  62. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  63. package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +57 -57
  64. package/2D/controls/scrollViewers/scrollViewerWindow.js +278 -278
  65. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  66. package/2D/controls/selector.d.ts +263 -263
  67. package/2D/controls/selector.js +692 -692
  68. package/2D/controls/sliders/baseSlider.d.ts +82 -82
  69. package/2D/controls/sliders/baseSlider.js +347 -347
  70. package/2D/controls/sliders/baseSlider.js.map +1 -1
  71. package/2D/controls/sliders/imageBasedSlider.d.ts +49 -49
  72. package/2D/controls/sliders/imageBasedSlider.js +192 -192
  73. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  74. package/2D/controls/sliders/imageScrollBar.d.ts +65 -65
  75. package/2D/controls/sliders/imageScrollBar.js +263 -263
  76. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  77. package/2D/controls/sliders/scrollBar.d.ts +38 -38
  78. package/2D/controls/sliders/scrollBar.js +143 -143
  79. package/2D/controls/sliders/scrollBar.js.map +1 -1
  80. package/2D/controls/sliders/slider.d.ts +35 -35
  81. package/2D/controls/sliders/slider.js +271 -271
  82. package/2D/controls/sliders/slider.js.map +1 -1
  83. package/2D/controls/stackPanel.d.ts +64 -64
  84. package/2D/controls/stackPanel.js +246 -246
  85. package/2D/controls/stackPanel.js.map +1 -1
  86. package/2D/controls/statics.d.ts +6 -6
  87. package/2D/controls/statics.js +49 -49
  88. package/2D/controls/textBlock.d.ts +175 -175
  89. package/2D/controls/textBlock.js +603 -603
  90. package/2D/controls/textBlock.js.map +1 -1
  91. package/2D/controls/textWrapper.d.ts +13 -13
  92. package/2D/controls/textWrapper.js +101 -101
  93. package/2D/controls/toggleButton.d.ts +117 -117
  94. package/2D/controls/toggleButton.js +268 -268
  95. package/2D/controls/toggleButton.js.map +1 -1
  96. package/2D/controls/virtualKeyboard.d.ts +96 -96
  97. package/2D/controls/virtualKeyboard.js +256 -256
  98. package/2D/controls/virtualKeyboard.js.map +1 -1
  99. package/2D/index.d.ts +9 -9
  100. package/2D/index.js +10 -9
  101. package/2D/index.js.map +1 -1
  102. package/2D/math2D.d.ts +117 -117
  103. package/2D/math2D.js +221 -221
  104. package/2D/math2D.js.map +1 -1
  105. package/2D/measure.d.ts +77 -77
  106. package/2D/measure.js +139 -139
  107. package/2D/measure.js.map +1 -1
  108. package/2D/multiLinePoint.d.ts +47 -47
  109. package/2D/multiLinePoint.js +127 -127
  110. package/2D/multiLinePoint.js.map +1 -1
  111. package/2D/style.d.ts +46 -46
  112. package/2D/style.js +97 -97
  113. package/2D/style.js.map +1 -1
  114. package/2D/valueAndUnit.d.ts +89 -89
  115. package/2D/valueAndUnit.js +226 -226
  116. package/2D/valueAndUnit.js.map +1 -1
  117. package/2D/xmlLoader.d.ts +60 -60
  118. package/2D/xmlLoader.js +348 -348
  119. package/2D/xmlLoader.js.map +1 -1
  120. package/3D/behaviors/defaultBehavior.d.ts +73 -73
  121. package/3D/behaviors/defaultBehavior.js +121 -121
  122. package/3D/behaviors/defaultBehavior.js.map +1 -1
  123. package/3D/controls/abstractButton3D.d.ts +15 -15
  124. package/3D/controls/abstractButton3D.js +25 -25
  125. package/3D/controls/abstractButton3D.js.map +1 -1
  126. package/3D/controls/button3D.d.ts +30 -30
  127. package/3D/controls/button3D.js +93 -93
  128. package/3D/controls/button3D.js.map +1 -1
  129. package/3D/controls/container3D.d.ts +72 -72
  130. package/3D/controls/container3D.js +139 -139
  131. package/3D/controls/container3D.js.map +1 -1
  132. package/3D/controls/contentDisplay3D.d.ts +30 -30
  133. package/3D/controls/contentDisplay3D.js +79 -79
  134. package/3D/controls/contentDisplay3D.js.map +1 -1
  135. package/3D/controls/control3D.d.ts +201 -201
  136. package/3D/controls/control3D.js +445 -445
  137. package/3D/controls/control3D.js.map +1 -1
  138. package/3D/controls/cylinderPanel.d.ts +17 -17
  139. package/3D/controls/cylinderPanel.js +66 -66
  140. package/3D/controls/cylinderPanel.js.map +1 -1
  141. package/3D/controls/handMenu.d.ts +28 -28
  142. package/3D/controls/handMenu.js +47 -47
  143. package/3D/controls/handMenu.js.map +1 -1
  144. package/3D/controls/holographicBackplate.d.ts +49 -49
  145. package/3D/controls/holographicBackplate.js +120 -120
  146. package/3D/controls/holographicBackplate.js.map +1 -1
  147. package/3D/controls/holographicButton.d.ts +84 -84
  148. package/3D/controls/holographicButton.js +339 -339
  149. package/3D/controls/holographicButton.js.map +1 -1
  150. package/3D/controls/holographicSlate.d.ts +131 -131
  151. package/3D/controls/holographicSlate.js +431 -431
  152. package/3D/controls/holographicSlate.js.map +1 -1
  153. package/3D/controls/index.d.ts +21 -21
  154. package/3D/controls/index.js +21 -21
  155. package/3D/controls/meshButton3D.d.ts +21 -21
  156. package/3D/controls/meshButton3D.js +62 -62
  157. package/3D/controls/meshButton3D.js.map +1 -1
  158. package/3D/controls/nearMenu.d.ts +44 -44
  159. package/3D/controls/nearMenu.js +114 -114
  160. package/3D/controls/nearMenu.js.map +1 -1
  161. package/3D/controls/planePanel.d.ts +9 -9
  162. package/3D/controls/planePanel.js +36 -36
  163. package/3D/controls/planePanel.js.map +1 -1
  164. package/3D/controls/scatterPanel.d.ts +18 -18
  165. package/3D/controls/scatterPanel.js +108 -108
  166. package/3D/controls/scatterPanel.js.map +1 -1
  167. package/3D/controls/slider3D.d.ts +81 -81
  168. package/3D/controls/slider3D.js +268 -268
  169. package/3D/controls/slider3D.js.map +1 -1
  170. package/3D/controls/spherePanel.d.ts +17 -17
  171. package/3D/controls/spherePanel.js +67 -67
  172. package/3D/controls/spherePanel.js.map +1 -1
  173. package/3D/controls/stackPanel3D.d.ts +22 -22
  174. package/3D/controls/stackPanel3D.js +107 -107
  175. package/3D/controls/touchButton3D.d.ts +80 -80
  176. package/3D/controls/touchButton3D.js +233 -233
  177. package/3D/controls/touchButton3D.js.map +1 -1
  178. package/3D/controls/touchHolographicButton.d.ts +110 -110
  179. package/3D/controls/touchHolographicButton.js +445 -445
  180. package/3D/controls/touchHolographicButton.js.map +1 -1
  181. package/3D/controls/touchHolographicMenu.d.ts +61 -61
  182. package/3D/controls/touchHolographicMenu.js +149 -149
  183. package/3D/controls/touchHolographicMenu.js.map +1 -1
  184. package/3D/controls/touchMeshButton3D.d.ts +21 -21
  185. package/3D/controls/touchMeshButton3D.js +62 -62
  186. package/3D/controls/touchMeshButton3D.js.map +1 -1
  187. package/3D/controls/volumeBasedPanel.d.ts +53 -53
  188. package/3D/controls/volumeBasedPanel.js +174 -174
  189. package/3D/controls/volumeBasedPanel.js.map +1 -1
  190. package/3D/gizmos/gizmoHandle.d.ts +108 -108
  191. package/3D/gizmos/gizmoHandle.js +209 -209
  192. package/3D/gizmos/gizmoHandle.js.map +1 -1
  193. package/3D/gizmos/index.d.ts +2 -2
  194. package/3D/gizmos/index.js +2 -2
  195. package/3D/gizmos/slateGizmo.d.ts +57 -57
  196. package/3D/gizmos/slateGizmo.js +369 -369
  197. package/3D/gizmos/slateGizmo.js.map +1 -1
  198. package/3D/gui3DManager.d.ts +94 -94
  199. package/3D/gui3DManager.js +257 -257
  200. package/3D/gui3DManager.js.map +1 -1
  201. package/3D/index.d.ts +5 -5
  202. package/3D/index.js +6 -5
  203. package/3D/index.js.map +1 -1
  204. package/3D/materials/fluent/fluentMaterial.d.ts +91 -90
  205. package/3D/materials/fluent/fluentMaterial.js +292 -292
  206. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  207. package/3D/materials/fluent/index.d.ts +1 -1
  208. package/3D/materials/fluent/index.js +1 -1
  209. package/3D/materials/fluent/shaders/fluent.fragment.d.ts +5 -5
  210. package/3D/materials/fluent/shaders/fluent.fragment.js +8 -8
  211. package/3D/materials/fluent/shaders/fluent.vertex.d.ts +5 -5
  212. package/3D/materials/fluent/shaders/fluent.vertex.js +8 -8
  213. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +155 -154
  214. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +469 -469
  215. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  216. package/3D/materials/fluentBackplate/index.d.ts +1 -1
  217. package/3D/materials/fluentBackplate/index.js +1 -1
  218. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -5
  219. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +8 -8
  220. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -5
  221. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +8 -8
  222. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +190 -189
  223. package/3D/materials/fluentButton/fluentButtonMaterial.js +539 -539
  224. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  225. package/3D/materials/fluentButton/index.d.ts +1 -1
  226. package/3D/materials/fluentButton/index.js +1 -1
  227. package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -5
  228. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +8 -8
  229. package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -5
  230. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +8 -8
  231. package/3D/materials/fluentMaterial.d.ts +4 -4
  232. package/3D/materials/fluentMaterial.js +4 -4
  233. package/3D/materials/handle/handleMaterial.d.ts +68 -68
  234. package/3D/materials/handle/handleMaterial.js +126 -126
  235. package/3D/materials/handle/handleMaterial.js.map +1 -1
  236. package/3D/materials/handle/index.d.ts +1 -1
  237. package/3D/materials/handle/index.js +1 -1
  238. package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -5
  239. package/3D/materials/handle/shaders/handle.fragment.js +8 -8
  240. package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -5
  241. package/3D/materials/handle/shaders/handle.vertex.js +8 -8
  242. package/3D/materials/index.d.ts +5 -5
  243. package/3D/materials/index.js +6 -5
  244. package/3D/materials/index.js.map +1 -1
  245. package/3D/materials/mrdl/index.d.ts +3 -3
  246. package/3D/materials/mrdl/index.js +3 -3
  247. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +148 -147
  248. package/3D/materials/mrdl/mrdlBackplateMaterial.js +436 -436
  249. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  250. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +334 -333
  251. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +851 -851
  252. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  253. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +334 -333
  254. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +851 -851
  255. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  256. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -5
  257. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +8 -8
  258. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -5
  259. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +8 -8
  260. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -5
  261. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +8 -8
  262. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -5
  263. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +8 -8
  264. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -5
  265. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +8 -8
  266. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -5
  267. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +8 -8
  268. package/3D/vector3WithInfo.d.ts +16 -16
  269. package/3D/vector3WithInfo.js +23 -23
  270. package/index.d.ts +2 -2
  271. package/index.js +3 -2
  272. package/index.js.map +1 -1
  273. package/legacy/legacy.d.ts +1 -1
  274. package/legacy/legacy.js +14 -13
  275. package/legacy/legacy.js.map +1 -1
  276. package/license.md +71 -0
  277. package/package.json +24 -5
@@ -1,432 +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.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 };
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.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 };
432
432
  //# sourceMappingURL=holographicSlate.js.map