@babylonjs/gui 5.0.0-rc.5 → 5.0.0-rc.9

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