@babylonjs/gui 5.0.0-alpha.9 → 5.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/2D/adtInstrumentation.js +1 -1
  2. package/2D/advancedDynamicTexture.d.ts +179 -127
  3. package/2D/advancedDynamicTexture.js +368 -183
  4. package/2D/advancedDynamicTexture.js.map +1 -1
  5. package/2D/controls/button.d.ts +8 -0
  6. package/2D/controls/button.js +33 -10
  7. package/2D/controls/button.js.map +1 -1
  8. package/2D/controls/checkbox.d.ts +2 -1
  9. package/2D/controls/checkbox.js +10 -8
  10. package/2D/controls/checkbox.js.map +1 -1
  11. package/2D/controls/colorpicker.d.ts +4 -3
  12. package/2D/controls/colorpicker.js +40 -23
  13. package/2D/controls/colorpicker.js.map +1 -1
  14. package/2D/controls/container.d.ts +16 -5
  15. package/2D/controls/container.js +99 -15
  16. package/2D/controls/container.js.map +1 -1
  17. package/2D/controls/control.d.ts +115 -47
  18. package/2D/controls/control.js +318 -139
  19. package/2D/controls/control.js.map +1 -1
  20. package/2D/controls/displayGrid.d.ts +2 -1
  21. package/2D/controls/displayGrid.js +6 -6
  22. package/2D/controls/displayGrid.js.map +1 -1
  23. package/2D/controls/ellipse.d.ts +5 -3
  24. package/2D/controls/ellipse.js +9 -5
  25. package/2D/controls/ellipse.js.map +1 -1
  26. package/2D/controls/focusableButton.d.ts +1 -0
  27. package/2D/controls/focusableButton.js +9 -6
  28. package/2D/controls/focusableButton.js.map +1 -1
  29. package/2D/controls/grid.d.ts +13 -2
  30. package/2D/controls/grid.js +117 -33
  31. package/2D/controls/grid.js.map +1 -1
  32. package/2D/controls/image.d.ts +5 -4
  33. package/2D/controls/image.js +52 -31
  34. package/2D/controls/image.js.map +1 -1
  35. package/2D/controls/index.js +29 -29
  36. package/2D/controls/inputPassword.js +4 -4
  37. package/2D/controls/inputPassword.js.map +1 -1
  38. package/2D/controls/inputText.d.ts +4 -1
  39. package/2D/controls/inputText.js +42 -15
  40. package/2D/controls/inputText.js.map +1 -1
  41. package/2D/controls/line.d.ts +3 -2
  42. package/2D/controls/line.js +8 -8
  43. package/2D/controls/line.js.map +1 -1
  44. package/2D/controls/multiLine.d.ts +4 -3
  45. package/2D/controls/multiLine.js +6 -6
  46. package/2D/controls/multiLine.js.map +1 -1
  47. package/2D/controls/radioButton.d.ts +2 -1
  48. package/2D/controls/radioButton.js +10 -7
  49. package/2D/controls/radioButton.js.map +1 -1
  50. package/2D/controls/rectangle.d.ts +8 -3
  51. package/2D/controls/rectangle.js +21 -5
  52. package/2D/controls/rectangle.js.map +1 -1
  53. package/2D/controls/scrollViewers/scrollViewer.d.ts +3 -2
  54. package/2D/controls/scrollViewers/scrollViewer.js +9 -9
  55. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  56. package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +4 -3
  57. package/2D/controls/scrollViewers/scrollViewerWindow.js +4 -4
  58. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  59. package/2D/controls/selector.js +8 -8
  60. package/2D/controls/selector.js.map +1 -1
  61. package/2D/controls/sliders/baseSlider.d.ts +1 -1
  62. package/2D/controls/sliders/baseSlider.js +12 -10
  63. package/2D/controls/sliders/baseSlider.js.map +1 -1
  64. package/2D/controls/sliders/imageBasedSlider.d.ts +10 -1
  65. package/2D/controls/sliders/imageBasedSlider.js +29 -5
  66. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  67. package/2D/controls/sliders/imageScrollBar.d.ts +2 -1
  68. package/2D/controls/sliders/imageScrollBar.js +3 -3
  69. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  70. package/2D/controls/sliders/scrollBar.d.ts +2 -1
  71. package/2D/controls/sliders/scrollBar.js +3 -3
  72. package/2D/controls/sliders/scrollBar.js.map +1 -1
  73. package/2D/controls/sliders/slider.d.ts +2 -1
  74. package/2D/controls/sliders/slider.js +4 -4
  75. package/2D/controls/sliders/slider.js.map +1 -1
  76. package/2D/controls/stackPanel.d.ts +10 -3
  77. package/2D/controls/stackPanel.js +37 -15
  78. package/2D/controls/stackPanel.js.map +1 -1
  79. package/2D/controls/statics.js +3 -3
  80. package/2D/controls/statics.js.map +1 -1
  81. package/2D/controls/textBlock.d.ts +17 -9
  82. package/2D/controls/textBlock.js +91 -40
  83. package/2D/controls/textBlock.js.map +1 -1
  84. package/2D/controls/textWrapper.js +2 -2
  85. package/2D/controls/textWrapper.js.map +1 -1
  86. package/2D/controls/toggleButton.d.ts +1 -13
  87. package/2D/controls/toggleButton.js +29 -38
  88. package/2D/controls/toggleButton.js.map +1 -1
  89. package/2D/controls/virtualKeyboard.js +5 -5
  90. package/2D/controls/virtualKeyboard.js.map +1 -1
  91. package/2D/index.d.ts +1 -1
  92. package/2D/index.js +9 -9
  93. package/2D/index.js.map +1 -1
  94. package/2D/math2D.d.ts +5 -0
  95. package/2D/math2D.js +14 -2
  96. package/2D/math2D.js.map +1 -1
  97. package/2D/measure.js +1 -1
  98. package/2D/measure.js.map +1 -1
  99. package/2D/multiLinePoint.js +3 -3
  100. package/2D/style.js +2 -2
  101. package/2D/valueAndUnit.d.ts +21 -6
  102. package/2D/valueAndUnit.js +57 -13
  103. package/2D/valueAndUnit.js.map +1 -1
  104. package/2D/xmlLoader.d.ts +17 -3
  105. package/2D/xmlLoader.js +54 -15
  106. package/2D/xmlLoader.js.map +1 -1
  107. package/3D/behaviors/defaultBehavior.d.ts +73 -0
  108. package/3D/behaviors/defaultBehavior.js +122 -0
  109. package/3D/behaviors/defaultBehavior.js.map +1 -0
  110. package/3D/controls/abstractButton3D.d.ts +2 -2
  111. package/3D/controls/abstractButton3D.js +3 -3
  112. package/3D/controls/abstractButton3D.js.map +1 -1
  113. package/3D/controls/button3D.d.ts +0 -24
  114. package/3D/controls/button3D.js +15 -84
  115. package/3D/controls/button3D.js.map +1 -1
  116. package/3D/controls/container3D.js +2 -2
  117. package/3D/controls/contentDisplay3D.d.ts +30 -0
  118. package/3D/controls/contentDisplay3D.js +79 -0
  119. package/3D/controls/contentDisplay3D.js.map +1 -0
  120. package/3D/controls/control3D.d.ts +10 -7
  121. package/3D/controls/control3D.js +27 -19
  122. package/3D/controls/control3D.js.map +1 -1
  123. package/3D/controls/cylinderPanel.js +5 -5
  124. package/3D/controls/handMenu.d.ts +28 -0
  125. package/3D/controls/handMenu.js +48 -0
  126. package/3D/controls/handMenu.js.map +1 -0
  127. package/3D/controls/holographicBackplate.d.ts +48 -0
  128. package/3D/controls/holographicBackplate.js +121 -0
  129. package/3D/controls/holographicBackplate.js.map +1 -0
  130. package/3D/controls/holographicButton.d.ts +1 -1
  131. package/3D/controls/holographicButton.js +35 -31
  132. package/3D/controls/holographicButton.js.map +1 -1
  133. package/3D/controls/holographicSlate.d.ts +120 -0
  134. package/3D/controls/holographicSlate.js +372 -0
  135. package/3D/controls/holographicSlate.js.map +1 -0
  136. package/3D/controls/index.d.ts +6 -0
  137. package/3D/controls/index.js +21 -15
  138. package/3D/controls/index.js.map +1 -1
  139. package/3D/controls/meshButton3D.js +2 -2
  140. package/3D/controls/meshButton3D.js.map +1 -1
  141. package/3D/controls/nearMenu.d.ts +44 -0
  142. package/3D/controls/nearMenu.js +113 -0
  143. package/3D/controls/nearMenu.js.map +1 -0
  144. package/3D/controls/planePanel.js +3 -3
  145. package/3D/controls/scatterPanel.js +4 -4
  146. package/3D/controls/slider3D.d.ts +80 -0
  147. package/3D/controls/slider3D.js +268 -0
  148. package/3D/controls/slider3D.js.map +1 -0
  149. package/3D/controls/spherePanel.js +5 -5
  150. package/3D/controls/stackPanel3D.js +3 -3
  151. package/3D/controls/touchButton3D.d.ts +30 -21
  152. package/3D/controls/touchButton3D.js +127 -228
  153. package/3D/controls/touchButton3D.js.map +1 -1
  154. package/3D/controls/touchHolographicButton.d.ts +23 -2
  155. package/3D/controls/touchHolographicButton.js +162 -67
  156. package/3D/controls/touchHolographicButton.js.map +1 -1
  157. package/3D/controls/touchHolographicMenu.d.ts +61 -0
  158. package/3D/controls/touchHolographicMenu.js +149 -0
  159. package/3D/controls/touchHolographicMenu.js.map +1 -0
  160. package/3D/controls/touchMeshButton3D.d.ts +3 -6
  161. package/3D/controls/touchMeshButton3D.js +6 -14
  162. package/3D/controls/touchMeshButton3D.js.map +1 -1
  163. package/3D/controls/volumeBasedPanel.d.ts +1 -1
  164. package/3D/controls/volumeBasedPanel.js +5 -5
  165. package/3D/controls/volumeBasedPanel.js.map +1 -1
  166. package/3D/gizmos/gizmoHandle.d.ts +108 -0
  167. package/3D/gizmos/gizmoHandle.js +210 -0
  168. package/3D/gizmos/gizmoHandle.js.map +1 -0
  169. package/3D/gizmos/index.d.ts +2 -0
  170. package/3D/gizmos/index.js +3 -0
  171. package/3D/gizmos/index.js.map +1 -0
  172. package/3D/gizmos/slateGizmo.d.ts +59 -0
  173. package/3D/gizmos/slateGizmo.js +364 -0
  174. package/3D/gizmos/slateGizmo.js.map +1 -0
  175. package/3D/gui3DManager.d.ts +15 -2
  176. package/3D/gui3DManager.js +62 -41
  177. package/3D/gui3DManager.js.map +1 -1
  178. package/3D/index.d.ts +3 -2
  179. package/3D/index.js +5 -4
  180. package/3D/index.js.map +1 -1
  181. package/3D/materials/fluent/fluentMaterial.d.ts +90 -0
  182. package/3D/materials/fluent/fluentMaterial.js +282 -0
  183. package/3D/materials/fluent/fluentMaterial.js.map +1 -0
  184. package/3D/materials/fluent/index.d.ts +1 -0
  185. package/3D/materials/fluent/index.js +2 -0
  186. package/3D/materials/fluent/index.js.map +1 -0
  187. package/3D/materials/{shaders → fluent/shaders}/fluent.fragment.d.ts +0 -0
  188. package/3D/materials/fluent/shaders/fluent.fragment.js +7 -0
  189. package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -0
  190. package/3D/materials/{shaders → fluent/shaders}/fluent.vertex.d.ts +0 -0
  191. package/3D/materials/{shaders → fluent/shaders}/fluent.vertex.js +2 -2
  192. package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -0
  193. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +154 -0
  194. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +435 -0
  195. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -0
  196. package/3D/materials/fluentBackplate/index.d.ts +1 -0
  197. package/3D/materials/fluentBackplate/index.js +2 -0
  198. package/3D/materials/fluentBackplate/index.js.map +1 -0
  199. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -0
  200. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +7 -0
  201. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -0
  202. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -0
  203. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +7 -0
  204. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -0
  205. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +189 -0
  206. package/3D/materials/fluentButton/fluentButtonMaterial.js +538 -0
  207. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -0
  208. package/3D/materials/fluentButton/index.d.ts +1 -0
  209. package/3D/materials/fluentButton/index.js +2 -0
  210. package/3D/materials/fluentButton/index.js.map +1 -0
  211. package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -0
  212. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +7 -0
  213. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -0
  214. package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -0
  215. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +7 -0
  216. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -0
  217. package/3D/materials/fluentMaterial.d.ts +2 -88
  218. package/3D/materials/fluentMaterial.js +2 -277
  219. package/3D/materials/fluentMaterial.js.map +1 -1
  220. package/3D/materials/handle/handleMaterial.d.ts +68 -0
  221. package/3D/materials/handle/handleMaterial.js +127 -0
  222. package/3D/materials/handle/handleMaterial.js.map +1 -0
  223. package/3D/materials/handle/index.d.ts +1 -0
  224. package/3D/materials/handle/index.js +2 -0
  225. package/3D/materials/handle/index.js.map +1 -0
  226. package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -0
  227. package/3D/materials/handle/shaders/handle.fragment.js +7 -0
  228. package/3D/materials/handle/shaders/handle.fragment.js.map +1 -0
  229. package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -0
  230. package/3D/materials/handle/shaders/handle.vertex.js +7 -0
  231. package/3D/materials/handle/shaders/handle.vertex.js.map +1 -0
  232. package/3D/materials/index.d.ts +5 -1
  233. package/3D/materials/index.js +5 -1
  234. package/3D/materials/index.js.map +1 -1
  235. package/3D/materials/mrdl/index.d.ts +3 -0
  236. package/3D/materials/mrdl/index.js +4 -0
  237. package/3D/materials/mrdl/index.js.map +1 -0
  238. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +147 -0
  239. package/3D/materials/mrdl/mrdlBackplateMaterial.js +410 -0
  240. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -0
  241. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +333 -0
  242. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +787 -0
  243. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -0
  244. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +333 -0
  245. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +787 -0
  246. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -0
  247. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -0
  248. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +7 -0
  249. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -0
  250. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -0
  251. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +7 -0
  252. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -0
  253. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -0
  254. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +7 -0
  255. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -0
  256. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -0
  257. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +7 -0
  258. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -0
  259. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -0
  260. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +7 -0
  261. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -0
  262. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -0
  263. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +7 -0
  264. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -0
  265. package/3D/vector3WithInfo.js +1 -1
  266. package/index.d.ts +2 -2
  267. package/index.js +2 -2
  268. package/index.js.map +1 -1
  269. package/legacy/legacy.js +2 -2
  270. package/package.json +114 -9
  271. package/3D/materials/shaders/fluent.fragment.js +0 -7
  272. package/3D/materials/shaders/fluent.fragment.js.map +0 -1
  273. package/3D/materials/shaders/fluent.vertex.js.map +0 -1
@@ -0,0 +1,372 @@
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
+ /**
21
+ * Class used to create a holographic slate
22
+ * @since 5.0.0
23
+ */
24
+ var HolographicSlate = /** @class */ (function (_super) {
25
+ __extends(HolographicSlate, _super);
26
+ /**
27
+ * Creates a new slate
28
+ * @param name defines the control name
29
+ */
30
+ function HolographicSlate(name) {
31
+ var _this = _super.call(this, name) || this;
32
+ /**
33
+ * 2D dimensions of the slate
34
+ */
35
+ _this.dimensions = new Vector2(21.875, 12.5);
36
+ /**
37
+ * Minimum dimensions of the slate
38
+ */
39
+ _this.minDimensions = new Vector2(15.625, 6.25);
40
+ /**
41
+ * Default dimensions of the slate
42
+ */
43
+ _this.defaultDimensions = _this.dimensions.clone();
44
+ /**
45
+ * Height of the title bar component
46
+ */
47
+ _this.titleBarHeight = 0.625;
48
+ /**
49
+ * Margin between title bar and contentplate
50
+ */
51
+ _this.titleBarMargin = 0.005;
52
+ /**
53
+ * Origin in local coordinates (top left corner)
54
+ */
55
+ _this.origin = new Vector3(0, 0, 0);
56
+ _this._titleText = "";
57
+ _this._contentScaleRatio = 1;
58
+ _this._followButton = new TouchHolographicButton("followButton" + _this.name);
59
+ _this._closeButton = new TouchHolographicButton("closeButton" + _this.name);
60
+ _this._contentViewport = new Viewport(0, 0, 1, 1);
61
+ _this._contentDragBehavior = new PointerDragBehavior({
62
+ dragPlaneNormal: new Vector3(0, 0, -1),
63
+ });
64
+ return _this;
65
+ }
66
+ Object.defineProperty(HolographicSlate.prototype, "defaultBehavior", {
67
+ /**
68
+ * Regroups all mesh behaviors for the slate
69
+ */
70
+ get: function () {
71
+ return this._defaultBehavior;
72
+ },
73
+ enumerable: false,
74
+ configurable: true
75
+ });
76
+ Object.defineProperty(HolographicSlate.prototype, "renderingGroupId", {
77
+ get: function () {
78
+ return this._titleBar.renderingGroupId;
79
+ },
80
+ /**
81
+ * Rendering ground id of all the meshes
82
+ */
83
+ set: function (id) {
84
+ this._titleBar.renderingGroupId = id;
85
+ this._titleBarTitle.renderingGroupId = id;
86
+ this._contentPlate.renderingGroupId = id;
87
+ },
88
+ enumerable: false,
89
+ configurable: true
90
+ });
91
+ Object.defineProperty(HolographicSlate.prototype, "title", {
92
+ get: function () {
93
+ return this._titleText;
94
+ },
95
+ /**
96
+ * The title text displayed at the top of the slate
97
+ */
98
+ set: function (title) {
99
+ this._titleText = title;
100
+ if (this._titleTextComponent) {
101
+ this._titleTextComponent.text = title;
102
+ }
103
+ },
104
+ enumerable: false,
105
+ configurable: true
106
+ });
107
+ /**
108
+ * Apply the facade texture (created from the content property).
109
+ * This function can be overloaded by child classes
110
+ * @param facadeTexture defines the AdvancedDynamicTexture to use
111
+ */
112
+ HolographicSlate.prototype._applyFacade = function (facadeTexture) {
113
+ this._contentMaterial.albedoTexture = facadeTexture;
114
+ this._resetContentPositionAndZoom();
115
+ this._applyContentViewport();
116
+ facadeTexture.attachToMesh(this._contentPlate, true);
117
+ };
118
+ HolographicSlate.prototype._addControl = function (control) {
119
+ control._host = this._host;
120
+ if (this._host.utilityLayer) {
121
+ control._prepareNode(this._host.utilityLayer.utilityLayerScene);
122
+ }
123
+ };
124
+ HolographicSlate.prototype._getTypeName = function () {
125
+ return "HolographicSlate";
126
+ };
127
+ /**
128
+ * @hidden
129
+ */
130
+ HolographicSlate.prototype._positionElements = function () {
131
+ var followButtonMesh = this._followButton.mesh;
132
+ var closeButtonMesh = this._closeButton.mesh;
133
+ var titleBar = this._titleBar;
134
+ var titleBarTitle = this._titleBarTitle;
135
+ var contentPlate = this._contentPlate;
136
+ if (followButtonMesh && closeButtonMesh && titleBar) {
137
+ closeButtonMesh.scaling.setAll(this.titleBarHeight);
138
+ followButtonMesh.scaling.setAll(this.titleBarHeight);
139
+ closeButtonMesh.position
140
+ .copyFromFloats(this.dimensions.x - this.titleBarHeight / 2, -this.titleBarHeight / 2, (-Epsilon / 2) * (this._host.scene.useRightHandedSystem ? -1 : 1))
141
+ .addInPlace(this.origin);
142
+ followButtonMesh.position
143
+ .copyFromFloats(this.dimensions.x - (3 * this.titleBarHeight) / 2, -this.titleBarHeight / 2, (-Epsilon / 2) * (this._host.scene.useRightHandedSystem ? -1 : 1))
144
+ .addInPlace(this.origin);
145
+ var contentPlateHeight = this.dimensions.y - this.titleBarHeight - this.titleBarMargin;
146
+ titleBar.scaling.set(this.dimensions.x, this.titleBarHeight, Epsilon);
147
+ titleBarTitle.scaling.set(this.dimensions.x - (2 * this.titleBarHeight), this.titleBarHeight, Epsilon);
148
+ contentPlate.scaling.copyFromFloats(this.dimensions.x, contentPlateHeight, Epsilon);
149
+ titleBar.position.copyFromFloats(this.dimensions.x / 2, -(this.titleBarHeight / 2), 0).addInPlace(this.origin);
150
+ titleBarTitle.position.copyFromFloats((this.dimensions.x / 2) - this.titleBarHeight, -(this.titleBarHeight / 2), -Epsilon).addInPlace(this.origin);
151
+ contentPlate.position.copyFromFloats(this.dimensions.x / 2, -(this.titleBarHeight + this.titleBarMargin + contentPlateHeight / 2), 0).addInPlace(this.origin);
152
+ // Update the title's AdvancedDynamicTexture scale to avoid visual stretching
153
+ this._titleTextComponent.host.scaleTo(HolographicSlate.DEFAULT_TEXT_RESOLUTION_Y * titleBarTitle.scaling.x / titleBarTitle.scaling.y, HolographicSlate.DEFAULT_TEXT_RESOLUTION_Y);
154
+ var aspectRatio = this.dimensions.x / contentPlateHeight;
155
+ this._contentViewport.width = this._contentScaleRatio;
156
+ this._contentViewport.height = this._contentScaleRatio / aspectRatio;
157
+ this._applyContentViewport();
158
+ }
159
+ };
160
+ HolographicSlate.prototype._applyContentViewport = function () {
161
+ var _a;
162
+ if (((_a = this._contentPlate) === null || _a === void 0 ? void 0 : _a.material) && this._contentPlate.material.albedoTexture) {
163
+ var tex = this._contentPlate.material.albedoTexture;
164
+ tex.uScale = this._contentScaleRatio;
165
+ tex.vScale = (this._contentScaleRatio / this._contentViewport.width) * this._contentViewport.height;
166
+ tex.uOffset = this._contentViewport.x;
167
+ tex.vOffset = this._contentViewport.y;
168
+ }
169
+ };
170
+ HolographicSlate.prototype._resetContentPositionAndZoom = function () {
171
+ this._contentViewport.x = 0;
172
+ this._contentViewport.y = 1 - this._contentViewport.height / this._contentViewport.width;
173
+ this._contentScaleRatio = 1;
174
+ };
175
+ /**
176
+ * @hidden
177
+ */
178
+ HolographicSlate.prototype._updatePivot = function () {
179
+ if (!this.mesh) {
180
+ return;
181
+ }
182
+ // Update pivot point so it is at the center of geometry
183
+ // As origin is topleft corner in 2D, dimensions are calculated towards bottom right corner, thus y axis is downwards
184
+ var center = new Vector3(this.dimensions.x * 0.5, -this.dimensions.y * 0.5, Epsilon);
185
+ center.addInPlace(this.origin);
186
+ center.z = 0;
187
+ var origin = new Vector3(0, 0, 0);
188
+ Vector3.TransformCoordinatesToRef(origin, this.mesh.computeWorldMatrix(true), origin);
189
+ this.mesh.setPivotPoint(center);
190
+ var origin2 = new Vector3(0, 0, 0);
191
+ Vector3.TransformCoordinatesToRef(origin2, this.mesh.computeWorldMatrix(true), origin2);
192
+ this.mesh.position.addInPlace(origin).subtractInPlace(origin2);
193
+ };
194
+ // Mesh association
195
+ HolographicSlate.prototype._createNode = function (scene) {
196
+ var _this = this;
197
+ var node = new Mesh("slate_" + this.name, scene);
198
+ this._titleBar = CreateBox("titleBar_" + this.name, { size: 1 }, scene);
199
+ this._titleBarTitle = CreatePlane("titleText_" + this.name, { size: 1 }, scene);
200
+ this._titleBarTitle.parent = node;
201
+ this._titleBarTitle.isPickable = false;
202
+ var adt = AdvancedDynamicTexture.CreateForMesh(this._titleBarTitle);
203
+ this._titleTextComponent = new TextBlock("titleText_" + this.name, this._titleText);
204
+ this._titleTextComponent.textWrapping = TextWrapping.Ellipsis;
205
+ this._titleTextComponent.textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;
206
+ this._titleTextComponent.color = "white";
207
+ this._titleTextComponent.fontSize = HolographicSlate.DEFAULT_TEXT_RESOLUTION_Y / 2;
208
+ this._titleTextComponent.paddingLeft = HolographicSlate.DEFAULT_TEXT_RESOLUTION_Y / 4;
209
+ adt.addControl(this._titleTextComponent);
210
+ var faceUV = new Array(6).fill(new Vector4(0, 0, 1, 1));
211
+ if (scene.useRightHandedSystem) {
212
+ faceUV[0].copyFromFloats(0, 1, 1, 0);
213
+ }
214
+ this._contentPlate = CreateBox("contentPlate_" + this.name, { size: 1, faceUV: faceUV }, scene);
215
+ this._titleBar.parent = node;
216
+ this._titleBar.isNearGrabbable = true;
217
+ this._contentPlate.parent = node;
218
+ this._attachContentPlateBehavior();
219
+ this._addControl(this._followButton);
220
+ this._addControl(this._closeButton);
221
+ var followButtonMesh = this._followButton.mesh;
222
+ var closeButtonMesh = this._closeButton.mesh;
223
+ followButtonMesh.parent = node;
224
+ closeButtonMesh.parent = node;
225
+ this._positionElements();
226
+ this._followButton.imageUrl = HolographicSlate.ASSETS_BASE_URL + HolographicSlate.FOLLOW_ICON_FILENAME;
227
+ this._closeButton.imageUrl = HolographicSlate.ASSETS_BASE_URL + HolographicSlate.CLOSE_ICON_FILENAME;
228
+ this._followButton.isBackplateVisible = false;
229
+ this._closeButton.isBackplateVisible = false;
230
+ this._followButton.onPointerClickObservable.add(function () {
231
+ _this._defaultBehavior.followBehaviorEnabled = !_this._defaultBehavior.followBehaviorEnabled;
232
+ if (_this._defaultBehavior.followBehaviorEnabled) {
233
+ _this._defaultBehavior.followBehavior.recenter();
234
+ }
235
+ });
236
+ this._closeButton.onPointerClickObservable.add(function () {
237
+ _this.dispose();
238
+ });
239
+ node.rotationQuaternion = Quaternion.Identity();
240
+ node.isVisible = false;
241
+ return node;
242
+ };
243
+ HolographicSlate.prototype._attachContentPlateBehavior = function () {
244
+ var _this = this;
245
+ this._contentDragBehavior.attach(this._contentPlate);
246
+ this._contentDragBehavior.moveAttached = false;
247
+ this._contentDragBehavior.useObjectOrientationForDragging = true;
248
+ this._contentDragBehavior.updateDragPlane = false;
249
+ var origin = new Vector3();
250
+ var worldDimensions = new Vector3();
251
+ var upWorld = new Vector3();
252
+ var rightWorld = new Vector3();
253
+ var projectedOffset = new Vector2();
254
+ var startViewport;
255
+ var worldMatrix;
256
+ this._contentDragBehavior.onDragStartObservable.add(function (event) {
257
+ if (!_this.node) {
258
+ return;
259
+ }
260
+ startViewport = _this._contentViewport.clone();
261
+ worldMatrix = _this.node.computeWorldMatrix(true);
262
+ origin.copyFrom(event.dragPlanePoint);
263
+ worldDimensions.set(_this.dimensions.x, _this.dimensions.y, Epsilon);
264
+ worldDimensions.y -= _this.titleBarHeight + _this.titleBarMargin;
265
+ Vector3.TransformNormalToRef(worldDimensions, worldMatrix, worldDimensions);
266
+ upWorld.copyFromFloats(0, 1, 0);
267
+ Vector3.TransformNormalToRef(upWorld, worldMatrix, upWorld);
268
+ rightWorld.copyFromFloats(1, 0, 0);
269
+ Vector3.TransformNormalToRef(rightWorld, worldMatrix, rightWorld);
270
+ upWorld.normalize();
271
+ upWorld.scaleInPlace(1 / Vector3.Dot(upWorld, worldDimensions));
272
+ rightWorld.normalize();
273
+ rightWorld.scaleInPlace(1 / Vector3.Dot(rightWorld, worldDimensions));
274
+ });
275
+ var offset = new Vector3();
276
+ this._contentDragBehavior.onDragObservable.add(function (event) {
277
+ offset.copyFrom(event.dragPlanePoint);
278
+ offset.subtractInPlace(origin);
279
+ projectedOffset.copyFromFloats(Vector3.Dot(offset, rightWorld), Vector3.Dot(offset, upWorld));
280
+ // By default, content takes full width available and height is cropped to keep aspect ratio
281
+ _this._contentViewport.x = Scalar.Clamp(startViewport.x - offset.x, 0, 1 - _this._contentViewport.width * _this._contentScaleRatio);
282
+ _this._contentViewport.y = Scalar.Clamp(startViewport.y - offset.y, 0, 1 - _this._contentViewport.height * _this._contentScaleRatio);
283
+ _this._applyContentViewport();
284
+ });
285
+ };
286
+ HolographicSlate.prototype._affectMaterial = function (mesh) {
287
+ // TODO share materials
288
+ this._titleBarMaterial = new FluentBackplateMaterial("".concat(this.name, " plateMaterial"), mesh.getScene());
289
+ // this._pickedPointObserver = this._host.onPickedPointChangedObservable.add((pickedPoint) => {
290
+ // if (pickedPoint) {
291
+ // this._titleBarMaterial.globalLeftIndexTipPosition = pickedPoint;
292
+ // this._titleBarMaterial.hoverColor.a = 1.0;
293
+ // } else {
294
+ // this._titleBarMaterial.hoverColor.a = 0;
295
+ // }
296
+ // });
297
+ this._contentMaterial = new FluentMaterial(this.name + "contentMaterial", mesh.getScene());
298
+ this._contentMaterial.renderBorders = true;
299
+ this._titleBar.material = this._titleBarMaterial;
300
+ this._contentPlate.material = this._contentMaterial;
301
+ this._resetContent();
302
+ this._applyContentViewport();
303
+ };
304
+ /** @hidden **/
305
+ HolographicSlate.prototype._prepareNode = function (scene) {
306
+ var _this = this;
307
+ _super.prototype._prepareNode.call(this, scene);
308
+ this._gizmo = new SlateGizmo(this._host.utilityLayer);
309
+ this._gizmo.attachedSlate = this;
310
+ this._defaultBehavior = new DefaultBehavior();
311
+ this._defaultBehavior.attach(this.node, [this._titleBar]);
312
+ this._positionChangedObserver = this._defaultBehavior.sixDofDragBehavior.onPositionChangedObservable.add(function () {
313
+ _this._gizmo.updateBoundingBox();
314
+ });
315
+ this._updatePivot();
316
+ this.resetDefaultAspectAndPose();
317
+ };
318
+ /**
319
+ * Resets the aspect and pose of the slate so it is right in front of the active camera, facing towards it.
320
+ */
321
+ HolographicSlate.prototype.resetDefaultAspectAndPose = function () {
322
+ if (!this._host || !this._host.utilityLayer || !this.node) {
323
+ return;
324
+ }
325
+ var scene = this._host.utilityLayer.utilityLayerScene;
326
+ var camera = scene.activeCamera;
327
+ if (camera) {
328
+ var worldMatrix = camera.getWorldMatrix();
329
+ var backward = Vector3.TransformNormal(Vector3.Backward(scene.useRightHandedSystem), worldMatrix);
330
+ this.dimensions.copyFrom(this.defaultDimensions);
331
+ this.origin.setAll(0);
332
+ this._gizmo.updateBoundingBox();
333
+ var pivot = this.node.getAbsolutePivotPoint();
334
+ this.node.position.copyFrom(camera.position).subtractInPlace(backward).subtractInPlace(pivot);
335
+ this.node.rotationQuaternion = Quaternion.FromLookDirectionLH(backward, new Vector3(0, 1, 0));
336
+ }
337
+ };
338
+ /**
339
+ * Releases all associated resources
340
+ */
341
+ HolographicSlate.prototype.dispose = function () {
342
+ _super.prototype.dispose.call(this);
343
+ this._titleBarMaterial.dispose();
344
+ this._contentMaterial.dispose();
345
+ this._titleBar.dispose();
346
+ this._titleBarTitle.dispose();
347
+ this._contentPlate.dispose();
348
+ this._followButton.dispose();
349
+ this._closeButton.dispose();
350
+ this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);
351
+ this._defaultBehavior.sixDofDragBehavior.onPositionChangedObservable.remove(this._positionChangedObserver);
352
+ this._defaultBehavior.detach();
353
+ this._gizmo.dispose();
354
+ this._contentDragBehavior.detach();
355
+ };
356
+ /**
357
+ * Base Url for the assets.
358
+ */
359
+ HolographicSlate.ASSETS_BASE_URL = "https://assets.babylonjs.com/meshes/MRTK/";
360
+ /**
361
+ * File name for the close icon.
362
+ */
363
+ HolographicSlate.CLOSE_ICON_FILENAME = "IconClose.png";
364
+ /**
365
+ * File name for the close icon.
366
+ */
367
+ HolographicSlate.FOLLOW_ICON_FILENAME = "IconFollowMe.png";
368
+ HolographicSlate.DEFAULT_TEXT_RESOLUTION_Y = 102.4;
369
+ return HolographicSlate;
370
+ }(ContentDisplay3D));
371
+ export { HolographicSlate };
372
+ //# sourceMappingURL=holographicSlate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"holographicSlate.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/controls/holographicSlate.ts"],"names":[],"mappings":"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","sourcesContent":["import { ContentDisplay3D } from \"./contentDisplay3D\";\r\nimport { Control3D } from \"./control3D\";\r\nimport { TouchHolographicButton } from \"./touchHolographicButton\";\r\nimport { AdvancedDynamicTexture } from \"../../2D/advancedDynamicTexture\";\r\nimport { Control } from \"../../2D/controls/control\";\r\nimport { TextBlock, TextWrapping } from \"../../2D/controls/textBlock\";\r\nimport { DefaultBehavior } from \"../behaviors/defaultBehavior\";\r\nimport { SlateGizmo } from \"../gizmos/slateGizmo\";\r\nimport { FluentMaterial } from \"../materials/fluent/fluentMaterial\";\r\nimport { FluentBackplateMaterial } from \"../materials/fluentBackplate/fluentBackplateMaterial\";\r\nimport { PointerDragBehavior } from \"@babylonjs/core/Behaviors/Meshes/pointerDragBehavior\";\r\nimport { Texture } from \"@babylonjs/core/Materials/Textures/texture\";\r\nimport { Vector4 } from \"@babylonjs/core/Maths/math\";\r\nimport { Epsilon } from \"@babylonjs/core/Maths/math.constants\";\r\nimport { Scalar } from \"@babylonjs/core/Maths/math.scalar\";\r\nimport { Matrix, Quaternion, Vector2, Vector3 } from \"@babylonjs/core/Maths/math.vector\";\r\nimport { Viewport } from \"@babylonjs/core/Maths/math.viewport\";\r\nimport { AbstractMesh } from \"@babylonjs/core/Meshes/abstractMesh\";\r\nimport { CreateBox } from \"@babylonjs/core/Meshes/Builders/boxBuilder\";\r\nimport { CreatePlane } from \"@babylonjs/core/Meshes/Builders/planeBuilder\";\r\nimport { TransformNode } from \"@babylonjs/core/Meshes/transformNode\";\r\nimport { Mesh } from \"@babylonjs/core/Meshes/mesh\";\r\nimport { Observer } from \"@babylonjs/core/Misc/observable\";\r\nimport { Scene } from \"@babylonjs/core/scene\";\r\nimport { Nullable } from \"@babylonjs/core/types\";\r\n\r\n/**\r\n * Class used to create a holographic slate\r\n * @since 5.0.0\r\n */\r\nexport class HolographicSlate extends ContentDisplay3D {\r\n /**\r\n * Base Url for the assets.\r\n */\r\n public static ASSETS_BASE_URL: string = \"https://assets.babylonjs.com/meshes/MRTK/\";\r\n /**\r\n * File name for the close icon.\r\n */\r\n public static CLOSE_ICON_FILENAME: string = \"IconClose.png\";\r\n /**\r\n * File name for the close icon.\r\n */\r\n public static FOLLOW_ICON_FILENAME: string = \"IconFollowMe.png\";\r\n\r\n private static DEFAULT_TEXT_RESOLUTION_Y = 102.4;\r\n\r\n /**\r\n * 2D dimensions of the slate\r\n */\r\n public dimensions = new Vector2(21.875, 12.5);\r\n\r\n /**\r\n * Minimum dimensions of the slate\r\n */\r\n public minDimensions = new Vector2(15.625, 6.25);\r\n\r\n /**\r\n * Default dimensions of the slate\r\n */\r\n public readonly defaultDimensions = this.dimensions.clone();\r\n\r\n /**\r\n * Height of the title bar component\r\n */\r\n public titleBarHeight = 0.625;\r\n\r\n /**\r\n * Margin between title bar and contentplate\r\n */\r\n public titleBarMargin = 0.005;\r\n\r\n /**\r\n * Origin in local coordinates (top left corner)\r\n */\r\n public origin = new Vector3(0, 0, 0);\r\n\r\n private _titleBarMaterial: FluentBackplateMaterial;\r\n private _contentMaterial: FluentMaterial;\r\n private _pickedPointObserver: Nullable<Observer<Nullable<Vector3>>>;\r\n private _positionChangedObserver: Nullable<Observer<{ position: Vector3 }>>;\r\n\r\n private _titleText = \"\";\r\n private _titleTextComponent: TextBlock;\r\n\r\n private _contentViewport: Viewport;\r\n private _contentDragBehavior: PointerDragBehavior;\r\n\r\n private _defaultBehavior: DefaultBehavior;\r\n /**\r\n * Regroups all mesh behaviors for the slate\r\n */\r\n public get defaultBehavior(): DefaultBehavior {\r\n return this._defaultBehavior;\r\n }\r\n\r\n /** @hidden */\r\n public _gizmo: SlateGizmo;\r\n\r\n protected _titleBar: Mesh;\r\n protected _titleBarTitle: Mesh;\r\n protected _contentPlate: Mesh;\r\n protected _followButton: TouchHolographicButton;\r\n protected _closeButton: TouchHolographicButton;\r\n protected _contentScaleRatio = 1;\r\n\r\n /**\r\n * Rendering ground id of all the meshes\r\n */\r\n public set renderingGroupId(id: number) {\r\n this._titleBar.renderingGroupId = id;\r\n this._titleBarTitle.renderingGroupId = id;\r\n this._contentPlate.renderingGroupId = id;\r\n }\r\n public get renderingGroupId(): number {\r\n return this._titleBar.renderingGroupId;\r\n }\r\n\r\n /**\r\n * The title text displayed at the top of the slate\r\n */\r\n public set title(title: string) {\r\n this._titleText = title;\r\n if (this._titleTextComponent) {\r\n this._titleTextComponent.text = title;\r\n }\r\n }\r\n public get title() {\r\n return this._titleText;\r\n }\r\n\r\n /**\r\n * Creates a new slate\r\n * @param name defines the control name\r\n */\r\n constructor(name?: string) {\r\n super(name);\r\n\r\n this._followButton = new TouchHolographicButton(\"followButton\" + this.name);\r\n this._closeButton = new TouchHolographicButton(\"closeButton\" + this.name);\r\n\r\n this._contentViewport = new Viewport(0, 0, 1, 1);\r\n this._contentDragBehavior = new PointerDragBehavior({\r\n dragPlaneNormal: new Vector3(0, 0, -1),\r\n });\r\n }\r\n\r\n /**\r\n * Apply the facade texture (created from the content property).\r\n * This function can be overloaded by child classes\r\n * @param facadeTexture defines the AdvancedDynamicTexture to use\r\n */\r\n protected _applyFacade(facadeTexture: AdvancedDynamicTexture) {\r\n this._contentMaterial.albedoTexture = facadeTexture;\r\n this._resetContentPositionAndZoom();\r\n this._applyContentViewport();\r\n\r\n facadeTexture.attachToMesh(this._contentPlate, true);\r\n }\r\n\r\n private _addControl(control: Control3D): void {\r\n control._host = this._host;\r\n if (this._host.utilityLayer) {\r\n control._prepareNode(this._host.utilityLayer.utilityLayerScene);\r\n }\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"HolographicSlate\";\r\n }\r\n\r\n /**\r\n * @hidden\r\n */\r\n public _positionElements() {\r\n const followButtonMesh = this._followButton.mesh;\r\n const closeButtonMesh = this._closeButton.mesh;\r\n const titleBar = this._titleBar;\r\n const titleBarTitle = this._titleBarTitle;\r\n const contentPlate = this._contentPlate;\r\n\r\n if (followButtonMesh && closeButtonMesh && titleBar) {\r\n closeButtonMesh.scaling.setAll(this.titleBarHeight);\r\n followButtonMesh.scaling.setAll(this.titleBarHeight);\r\n closeButtonMesh.position\r\n .copyFromFloats(\r\n this.dimensions.x - this.titleBarHeight / 2,\r\n -this.titleBarHeight / 2,\r\n (-Epsilon / 2) * (this._host.scene.useRightHandedSystem ? -1 : 1)\r\n )\r\n .addInPlace(this.origin);\r\n followButtonMesh.position\r\n .copyFromFloats(\r\n this.dimensions.x - (3 * this.titleBarHeight) / 2,\r\n -this.titleBarHeight / 2,\r\n (-Epsilon / 2) * (this._host.scene.useRightHandedSystem ? -1 : 1)\r\n )\r\n .addInPlace(this.origin);\r\n\r\n const contentPlateHeight = this.dimensions.y - this.titleBarHeight - this.titleBarMargin;\r\n\r\n titleBar.scaling.set(this.dimensions.x, this.titleBarHeight, Epsilon);\r\n titleBarTitle.scaling.set(this.dimensions.x - (2 * this.titleBarHeight), this.titleBarHeight, Epsilon);\r\n contentPlate.scaling.copyFromFloats(this.dimensions.x, contentPlateHeight, Epsilon);\r\n\r\n titleBar.position.copyFromFloats(this.dimensions.x / 2, -(this.titleBarHeight / 2), 0).addInPlace(this.origin);\r\n titleBarTitle.position.copyFromFloats((this.dimensions.x / 2) - this.titleBarHeight, -(this.titleBarHeight / 2), -Epsilon).addInPlace(this.origin);\r\n contentPlate.position.copyFromFloats(this.dimensions.x / 2, -(this.titleBarHeight + this.titleBarMargin + contentPlateHeight / 2), 0).addInPlace(this.origin);\r\n\r\n // Update the title's AdvancedDynamicTexture scale to avoid visual stretching\r\n this._titleTextComponent.host.scaleTo(HolographicSlate.DEFAULT_TEXT_RESOLUTION_Y * titleBarTitle.scaling.x / titleBarTitle.scaling.y, HolographicSlate.DEFAULT_TEXT_RESOLUTION_Y);\r\n\r\n const aspectRatio = this.dimensions.x / contentPlateHeight;\r\n this._contentViewport.width = this._contentScaleRatio;\r\n this._contentViewport.height = this._contentScaleRatio / aspectRatio;\r\n\r\n this._applyContentViewport();\r\n }\r\n }\r\n\r\n private _applyContentViewport() {\r\n if (this._contentPlate?.material && (this._contentPlate.material as FluentMaterial).albedoTexture) {\r\n const tex = (this._contentPlate.material as FluentMaterial).albedoTexture as Texture;\r\n tex.uScale = this._contentScaleRatio;\r\n tex.vScale = (this._contentScaleRatio / this._contentViewport.width) * this._contentViewport.height;\r\n tex.uOffset = this._contentViewport.x;\r\n tex.vOffset = this._contentViewport.y;\r\n }\r\n }\r\n\r\n private _resetContentPositionAndZoom() {\r\n this._contentViewport.x = 0;\r\n this._contentViewport.y = 1 - this._contentViewport.height / this._contentViewport.width;\r\n this._contentScaleRatio = 1;\r\n }\r\n\r\n /**\r\n * @hidden\r\n */\r\n public _updatePivot() {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n\r\n // Update pivot point so it is at the center of geometry\r\n // As origin is topleft corner in 2D, dimensions are calculated towards bottom right corner, thus y axis is downwards\r\n const center = new Vector3(this.dimensions.x * 0.5, -this.dimensions.y * 0.5, Epsilon);\r\n center.addInPlace(this.origin);\r\n center.z = 0;\r\n\r\n const origin = new Vector3(0, 0, 0);\r\n Vector3.TransformCoordinatesToRef(origin, this.mesh.computeWorldMatrix(true), origin);\r\n this.mesh.setPivotPoint(center);\r\n const origin2 = new Vector3(0, 0, 0);\r\n Vector3.TransformCoordinatesToRef(origin2, this.mesh.computeWorldMatrix(true), origin2);\r\n this.mesh.position.addInPlace(origin).subtractInPlace(origin2);\r\n }\r\n\r\n // Mesh association\r\n protected _createNode(scene: Scene): TransformNode {\r\n const node = new Mesh(\"slate_\" + this.name, scene);\r\n\r\n this._titleBar = CreateBox(\"titleBar_\" + this.name, { size: 1 }, scene);\r\n this._titleBarTitle = CreatePlane(\"titleText_\" + this.name, { size: 1 }, scene);\r\n this._titleBarTitle.parent = node;\r\n this._titleBarTitle.isPickable = false;\r\n\r\n var adt = AdvancedDynamicTexture.CreateForMesh(this._titleBarTitle);\r\n this._titleTextComponent = new TextBlock(\"titleText_\" + this.name, this._titleText);\r\n this._titleTextComponent.textWrapping = TextWrapping.Ellipsis;\r\n this._titleTextComponent.textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n this._titleTextComponent.color = \"white\";\r\n this._titleTextComponent.fontSize = HolographicSlate.DEFAULT_TEXT_RESOLUTION_Y / 2;\r\n this._titleTextComponent.paddingLeft = HolographicSlate.DEFAULT_TEXT_RESOLUTION_Y / 4;\r\n adt.addControl(this._titleTextComponent);\r\n\r\n const faceUV = new Array(6).fill(new Vector4(0, 0, 1, 1));\r\n if (scene.useRightHandedSystem) {\r\n faceUV[0].copyFromFloats(0, 1, 1, 0);\r\n }\r\n this._contentPlate = CreateBox(\"contentPlate_\" + this.name, { size: 1, faceUV }, scene);\r\n\r\n this._titleBar.parent = node;\r\n this._titleBar.isNearGrabbable = true;\r\n this._contentPlate.parent = node;\r\n this._attachContentPlateBehavior();\r\n\r\n this._addControl(this._followButton);\r\n this._addControl(this._closeButton);\r\n\r\n const followButtonMesh = this._followButton.mesh!;\r\n const closeButtonMesh = this._closeButton.mesh!;\r\n followButtonMesh.parent = node;\r\n closeButtonMesh.parent = node;\r\n\r\n this._positionElements();\r\n\r\n this._followButton.imageUrl = HolographicSlate.ASSETS_BASE_URL + HolographicSlate.FOLLOW_ICON_FILENAME;\r\n this._closeButton.imageUrl = HolographicSlate.ASSETS_BASE_URL + HolographicSlate.CLOSE_ICON_FILENAME;\r\n\r\n this._followButton.isBackplateVisible = false;\r\n this._closeButton.isBackplateVisible = false;\r\n\r\n this._followButton.onPointerClickObservable.add(() => {\r\n this._defaultBehavior.followBehaviorEnabled = !this._defaultBehavior.followBehaviorEnabled;\r\n if (this._defaultBehavior.followBehaviorEnabled) {\r\n this._defaultBehavior.followBehavior.recenter();\r\n }\r\n });\r\n\r\n this._closeButton.onPointerClickObservable.add(() => {\r\n this.dispose();\r\n });\r\n\r\n node.rotationQuaternion = Quaternion.Identity();\r\n node.isVisible = false;\r\n\r\n return node;\r\n }\r\n\r\n private _attachContentPlateBehavior() {\r\n this._contentDragBehavior.attach(this._contentPlate);\r\n this._contentDragBehavior.moveAttached = false;\r\n this._contentDragBehavior.useObjectOrientationForDragging = true;\r\n this._contentDragBehavior.updateDragPlane = false;\r\n\r\n const origin = new Vector3();\r\n const worldDimensions = new Vector3();\r\n const upWorld = new Vector3();\r\n const rightWorld = new Vector3();\r\n const projectedOffset = new Vector2();\r\n let startViewport: Viewport;\r\n let worldMatrix: Matrix;\r\n\r\n this._contentDragBehavior.onDragStartObservable.add((event) => {\r\n if (!this.node) {\r\n return;\r\n }\r\n startViewport = this._contentViewport.clone();\r\n worldMatrix = this.node.computeWorldMatrix(true);\r\n\r\n origin.copyFrom(event.dragPlanePoint);\r\n worldDimensions.set(this.dimensions.x, this.dimensions.y, Epsilon);\r\n worldDimensions.y -= this.titleBarHeight + this.titleBarMargin;\r\n Vector3.TransformNormalToRef(worldDimensions, worldMatrix, worldDimensions);\r\n upWorld.copyFromFloats(0, 1, 0);\r\n Vector3.TransformNormalToRef(upWorld, worldMatrix, upWorld);\r\n rightWorld.copyFromFloats(1, 0, 0);\r\n Vector3.TransformNormalToRef(rightWorld, worldMatrix, rightWorld);\r\n upWorld.normalize();\r\n upWorld.scaleInPlace(1 / Vector3.Dot(upWorld, worldDimensions));\r\n rightWorld.normalize();\r\n rightWorld.scaleInPlace(1 / Vector3.Dot(rightWorld, worldDimensions));\r\n });\r\n\r\n const offset = new Vector3();\r\n this._contentDragBehavior.onDragObservable.add((event) => {\r\n offset.copyFrom(event.dragPlanePoint);\r\n offset.subtractInPlace(origin);\r\n projectedOffset.copyFromFloats(Vector3.Dot(offset, rightWorld), Vector3.Dot(offset, upWorld));\r\n\r\n // By default, content takes full width available and height is cropped to keep aspect ratio\r\n this._contentViewport.x = Scalar.Clamp(startViewport.x - offset.x, 0, 1 - this._contentViewport.width * this._contentScaleRatio);\r\n this._contentViewport.y = Scalar.Clamp(startViewport.y - offset.y, 0, 1 - this._contentViewport.height * this._contentScaleRatio);\r\n this._applyContentViewport();\r\n });\r\n }\r\n\r\n protected _affectMaterial(mesh: AbstractMesh) {\r\n // TODO share materials\r\n this._titleBarMaterial = new FluentBackplateMaterial(`${this.name} plateMaterial`, mesh.getScene());\r\n\r\n // this._pickedPointObserver = this._host.onPickedPointChangedObservable.add((pickedPoint) => {\r\n // if (pickedPoint) {\r\n // this._titleBarMaterial.globalLeftIndexTipPosition = pickedPoint;\r\n // this._titleBarMaterial.hoverColor.a = 1.0;\r\n // } else {\r\n // this._titleBarMaterial.hoverColor.a = 0;\r\n // }\r\n // });\r\n\r\n this._contentMaterial = new FluentMaterial(this.name + \"contentMaterial\", mesh.getScene());\r\n this._contentMaterial.renderBorders = true;\r\n\r\n this._titleBar.material = this._titleBarMaterial;\r\n this._contentPlate.material = this._contentMaterial;\r\n\r\n this._resetContent();\r\n this._applyContentViewport();\r\n }\r\n\r\n /** @hidden **/\r\n public _prepareNode(scene: Scene): void {\r\n super._prepareNode(scene);\r\n this._gizmo = new SlateGizmo(this._host.utilityLayer!);\r\n this._gizmo.attachedSlate = this;\r\n this._defaultBehavior = new DefaultBehavior();\r\n this._defaultBehavior.attach(this.node as Mesh, [this._titleBar]);\r\n\r\n this._positionChangedObserver = this._defaultBehavior.sixDofDragBehavior.onPositionChangedObservable.add(() => {\r\n this._gizmo.updateBoundingBox();\r\n });\r\n\r\n this._updatePivot();\r\n this.resetDefaultAspectAndPose();\r\n }\r\n\r\n /**\r\n * Resets the aspect and pose of the slate so it is right in front of the active camera, facing towards it.\r\n */\r\n public resetDefaultAspectAndPose() {\r\n if (!this._host || !this._host.utilityLayer || !this.node) {\r\n return;\r\n }\r\n const scene = this._host.utilityLayer.utilityLayerScene;\r\n const camera = scene.activeCamera;\r\n if (camera) {\r\n const worldMatrix = camera.getWorldMatrix();\r\n const backward = Vector3.TransformNormal(Vector3.Backward(scene.useRightHandedSystem), worldMatrix);\r\n this.dimensions.copyFrom(this.defaultDimensions);\r\n this.origin.setAll(0);\r\n this._gizmo.updateBoundingBox();\r\n const pivot = this.node.getAbsolutePivotPoint();\r\n this.node.position.copyFrom(camera.position).subtractInPlace(backward).subtractInPlace(pivot);\r\n this.node.rotationQuaternion = Quaternion.FromLookDirectionLH(backward, new Vector3(0, 1, 0));\r\n }\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n super.dispose();\r\n this._titleBarMaterial.dispose();\r\n this._contentMaterial.dispose();\r\n\r\n this._titleBar.dispose();\r\n this._titleBarTitle.dispose();\r\n this._contentPlate.dispose();\r\n\r\n this._followButton.dispose();\r\n this._closeButton.dispose();\r\n\r\n this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);\r\n this._defaultBehavior.sixDofDragBehavior.onPositionChangedObservable.remove(this._positionChangedObserver);\r\n\r\n this._defaultBehavior.detach();\r\n this._gizmo.dispose();\r\n this._contentDragBehavior.detach();\r\n }\r\n}\r\n"]}
@@ -4,12 +4,18 @@ export * from "./container3D";
4
4
  export * from "./control3D";
5
5
  export * from "./cylinderPanel";
6
6
  export * from "./holographicButton";
7
+ export * from "./holographicSlate";
8
+ export * from "./handMenu";
7
9
  export * from "./meshButton3D";
10
+ export * from "./nearMenu";
8
11
  export * from "./planePanel";
9
12
  export * from "./scatterPanel";
13
+ export * from "./slider3D";
10
14
  export * from "./spherePanel";
11
15
  export * from "./stackPanel3D";
12
16
  export * from "./touchButton3D";
13
17
  export * from "./touchMeshButton3D";
14
18
  export * from "./touchHolographicButton";
19
+ export * from "./touchHolographicMenu";
15
20
  export * from "./volumeBasedPanel";
21
+ export * from "./holographicBackplate";
@@ -1,16 +1,22 @@
1
- export * from "./abstractButton3D";
2
- export * from "./button3D";
3
- export * from "./container3D";
4
- export * from "./control3D";
5
- export * from "./cylinderPanel";
6
- export * from "./holographicButton";
7
- export * from "./meshButton3D";
8
- export * from "./planePanel";
9
- export * from "./scatterPanel";
10
- export * from "./spherePanel";
11
- export * from "./stackPanel3D";
12
- export * from "./touchButton3D";
13
- export * from "./touchMeshButton3D";
14
- export * from "./touchHolographicButton";
15
- export * from "./volumeBasedPanel";
1
+ export * from "./abstractButton3D.js";
2
+ export * from "./button3D.js";
3
+ export * from "./container3D.js";
4
+ export * from "./control3D.js";
5
+ export * from "./cylinderPanel.js";
6
+ export * from "./holographicButton.js";
7
+ export * from "./holographicSlate.js";
8
+ export * from "./handMenu.js";
9
+ export * from "./meshButton3D.js";
10
+ export * from "./nearMenu.js";
11
+ export * from "./planePanel.js";
12
+ export * from "./scatterPanel.js";
13
+ export * from "./slider3D.js";
14
+ export * from "./spherePanel.js";
15
+ export * from "./stackPanel3D.js";
16
+ export * from "./touchButton3D.js";
17
+ export * from "./touchMeshButton3D.js";
18
+ export * from "./touchHolographicButton.js";
19
+ export * from "./touchHolographicMenu.js";
20
+ export * from "./volumeBasedPanel.js";
21
+ export * from "./holographicBackplate.js";
16
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/controls/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC","sourcesContent":["export * from \"./abstractButton3D\";\r\nexport * from \"./button3D\";\r\nexport * from \"./container3D\";\r\nexport * from \"./control3D\";\r\nexport * from \"./cylinderPanel\";\r\nexport * from \"./holographicButton\";\r\nexport * from \"./meshButton3D\";\r\nexport * from \"./planePanel\";\r\nexport * from \"./scatterPanel\";\r\nexport * from \"./spherePanel\";\r\nexport * from \"./stackPanel3D\";\r\nexport * from \"./touchButton3D\";\r\nexport * from \"./touchMeshButton3D\";\r\nexport * from \"./touchHolographicButton\";\r\nexport * from \"./volumeBasedPanel\";"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/controls/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC","sourcesContent":["export * from \"./abstractButton3D\";\r\nexport * from \"./button3D\";\r\nexport * from \"./container3D\";\r\nexport * from \"./control3D\";\r\nexport * from \"./cylinderPanel\";\r\nexport * from \"./holographicButton\";\r\nexport * from \"./holographicSlate\";\r\nexport * from \"./handMenu\";\r\nexport * from \"./meshButton3D\";\r\nexport * from \"./nearMenu\";\r\nexport * from \"./planePanel\";\r\nexport * from \"./scatterPanel\";\r\nexport * from \"./slider3D\";\r\nexport * from \"./spherePanel\";\r\nexport * from \"./stackPanel3D\";\r\nexport * from \"./touchButton3D\";\r\nexport * from \"./touchMeshButton3D\";\r\nexport * from \"./touchHolographicButton\";\r\nexport * from \"./touchHolographicMenu\";\r\nexport * from \"./volumeBasedPanel\";\r\nexport * from \"./holographicBackplate\";\r\n"]}
@@ -1,5 +1,5 @@
1
1
  import { __extends } from "tslib";
2
- import { Button3D } from "./button3D";
2
+ import { Button3D } from "./button3D.js";
3
3
  /**
4
4
  * Class used to create an interactable object. It's a 3D button using a mesh coming from the current scene
5
5
  */
@@ -50,7 +50,7 @@ var MeshButton3D = /** @class */ (function (_super) {
50
50
  MeshButton3D.prototype._createNode = function (scene) {
51
51
  var _this = this;
52
52
  this._currentMesh.getChildMeshes().forEach(function (mesh) {
53
- _this._injectGUI3DMetadata(mesh).control = _this;
53
+ _this._injectGUI3DReservedDataStore(mesh).control = _this;
54
54
  });
55
55
  return this._currentMesh;
56
56
  };
@@ -1 +1 @@
1
- {"version":3,"file":"meshButton3D.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/controls/meshButton3D.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;GAEG;AACH;IAAkC,gCAAQ;IAItC;;;;OAIG;IACH,sBAAY,IAAU,EAAE,IAAa;QAArC,YACI,kBAAM,IAAI,CAAC,SAkCd;QAjCG,KAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB;;;WAGG;QACH,KAAI,CAAC,qBAAqB,GAAG;YACzB,IAAI,CAAC,KAAI,CAAC,IAAI,EAAE;gBACZ,OAAO;aACV;YACD,KAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC;QAEF,KAAI,CAAC,mBAAmB,GAAG;YACvB,IAAI,CAAC,KAAI,CAAC,IAAI,EAAE;gBACZ,OAAO;aACV;YACD,KAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEF,KAAI,CAAC,oBAAoB,GAAG;YACxB,IAAI,CAAC,KAAI,CAAC,IAAI,EAAE;gBACZ,OAAO;aACV;YACD,KAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,KAAI,CAAC,kBAAkB,GAAG;YACtB,IAAI,CAAC,KAAI,CAAC,IAAI,EAAE;gBACZ,OAAO;aACV;YACD,KAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC;;IACN,CAAC;IAES,mCAAY,GAAtB;QACI,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,mBAAmB;IACT,kCAAW,GAArB,UAAsB,KAAY;QAAlC,iBAKC;QAJG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,UAAC,IAAI;YAC5C,KAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,KAAI,CAAC;QACnD,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAES,sCAAe,GAAzB,UAA0B,IAAkB;IAC5C,CAAC;IACL,mBAAC;AAAD,CAAC,AA5DD,CAAkC,QAAQ,GA4DzC","sourcesContent":["import { TransformNode } from \"@babylonjs/core/Meshes/transformNode\";\r\nimport { AbstractMesh } from \"@babylonjs/core/Meshes/abstractMesh\";\r\nimport { Mesh } from \"@babylonjs/core/Meshes/mesh\";\r\nimport { Scene } from \"@babylonjs/core/scene\";\r\n\r\nimport { Button3D } from \"./button3D\";\r\n\r\n/**\r\n * Class used to create an interactable object. It's a 3D button using a mesh coming from the current scene\r\n */\r\nexport class MeshButton3D extends Button3D {\r\n /** @hidden */\r\n protected _currentMesh: Mesh;\r\n\r\n /**\r\n * Creates a new 3D button based on a mesh\r\n * @param mesh mesh to become a 3D button\r\n * @param name defines the control name\r\n */\r\n constructor(mesh: Mesh, name?: string) {\r\n super(name);\r\n this._currentMesh = mesh;\r\n\r\n /**\r\n * Provides a default behavior on hover/out & up/down\r\n * Override those function to create your own desired behavior specific to your mesh\r\n */\r\n this.pointerEnterAnimation = () => {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n this.mesh.scaling.scaleInPlace(1.1);\r\n };\r\n\r\n this.pointerOutAnimation = () => {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n this.mesh.scaling.scaleInPlace(1.0 / 1.1);\r\n };\r\n\r\n this.pointerDownAnimation = () => {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n this.mesh.scaling.scaleInPlace(0.95);\r\n };\r\n\r\n this.pointerUpAnimation = () => {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n this.mesh.scaling.scaleInPlace(1.0 / 0.95);\r\n };\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"MeshButton3D\";\r\n }\r\n\r\n // Mesh association\r\n protected _createNode(scene: Scene): TransformNode {\r\n this._currentMesh.getChildMeshes().forEach((mesh) => {\r\n this._injectGUI3DMetadata(mesh).control = this;\r\n });\r\n return this._currentMesh;\r\n }\r\n\r\n protected _affectMaterial(mesh: AbstractMesh) {\r\n }\r\n}"]}
1
+ {"version":3,"file":"meshButton3D.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/controls/meshButton3D.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;GAEG;AACH;IAAkC,gCAAQ;IAItC;;;;OAIG;IACH,sBAAY,IAAU,EAAE,IAAa;QAArC,YACI,kBAAM,IAAI,CAAC,SAkCd;QAjCG,KAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB;;;WAGG;QACH,KAAI,CAAC,qBAAqB,GAAG;YACzB,IAAI,CAAC,KAAI,CAAC,IAAI,EAAE;gBACZ,OAAO;aACV;YACD,KAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC;QAEF,KAAI,CAAC,mBAAmB,GAAG;YACvB,IAAI,CAAC,KAAI,CAAC,IAAI,EAAE;gBACZ,OAAO;aACV;YACD,KAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEF,KAAI,CAAC,oBAAoB,GAAG;YACxB,IAAI,CAAC,KAAI,CAAC,IAAI,EAAE;gBACZ,OAAO;aACV;YACD,KAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,KAAI,CAAC,kBAAkB,GAAG;YACtB,IAAI,CAAC,KAAI,CAAC,IAAI,EAAE;gBACZ,OAAO;aACV;YACD,KAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC;;IACN,CAAC;IAES,mCAAY,GAAtB;QACI,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,mBAAmB;IACT,kCAAW,GAArB,UAAsB,KAAY;QAAlC,iBAKC;QAJG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,UAAC,IAAI;YAC5C,KAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,KAAI,CAAC;QAC5D,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAES,sCAAe,GAAzB,UAA0B,IAAkB;IAC5C,CAAC;IACL,mBAAC;AAAD,CAAC,AA5DD,CAAkC,QAAQ,GA4DzC","sourcesContent":["import { TransformNode } from \"@babylonjs/core/Meshes/transformNode\";\r\nimport { AbstractMesh } from \"@babylonjs/core/Meshes/abstractMesh\";\r\nimport { Mesh } from \"@babylonjs/core/Meshes/mesh\";\r\nimport { Scene } from \"@babylonjs/core/scene\";\r\n\r\nimport { Button3D } from \"./button3D\";\r\n\r\n/**\r\n * Class used to create an interactable object. It's a 3D button using a mesh coming from the current scene\r\n */\r\nexport class MeshButton3D extends Button3D {\r\n /** @hidden */\r\n protected _currentMesh: Mesh;\r\n\r\n /**\r\n * Creates a new 3D button based on a mesh\r\n * @param mesh mesh to become a 3D button\r\n * @param name defines the control name\r\n */\r\n constructor(mesh: Mesh, name?: string) {\r\n super(name);\r\n this._currentMesh = mesh;\r\n\r\n /**\r\n * Provides a default behavior on hover/out & up/down\r\n * Override those function to create your own desired behavior specific to your mesh\r\n */\r\n this.pointerEnterAnimation = () => {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n this.mesh.scaling.scaleInPlace(1.1);\r\n };\r\n\r\n this.pointerOutAnimation = () => {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n this.mesh.scaling.scaleInPlace(1.0 / 1.1);\r\n };\r\n\r\n this.pointerDownAnimation = () => {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n this.mesh.scaling.scaleInPlace(0.95);\r\n };\r\n\r\n this.pointerUpAnimation = () => {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n this.mesh.scaling.scaleInPlace(1.0 / 0.95);\r\n };\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"MeshButton3D\";\r\n }\r\n\r\n // Mesh association\r\n protected _createNode(scene: Scene): TransformNode {\r\n this._currentMesh.getChildMeshes().forEach((mesh) => {\r\n this._injectGUI3DReservedDataStore(mesh).control = this;\r\n });\r\n return this._currentMesh;\r\n }\r\n\r\n protected _affectMaterial(mesh: AbstractMesh) {\r\n }\r\n}"]}
@@ -0,0 +1,44 @@
1
+ import { Scene } from "@babylonjs/core/scene";
2
+ import { TransformNode } from "@babylonjs/core/Meshes/transformNode";
3
+ import { Nullable } from "@babylonjs/core/types";
4
+ import { DefaultBehavior } from "../behaviors/defaultBehavior";
5
+ import { TouchHolographicMenu } from "./touchHolographicMenu";
6
+ /**
7
+ * NearMenu that displays buttons and follows the camera
8
+ * @since 5.0.0
9
+ */
10
+ export declare class NearMenu extends TouchHolographicMenu {
11
+ /**
12
+ * Base Url for the assets.
13
+ */
14
+ private static ASSETS_BASE_URL;
15
+ /**
16
+ * File name for the close icon.
17
+ */
18
+ private static PIN_ICON_FILENAME;
19
+ private _pinButton;
20
+ private _dragObserver;
21
+ private _defaultBehavior;
22
+ /**
23
+ * Regroups all mesh behaviors for the near menu
24
+ */
25
+ get defaultBehavior(): DefaultBehavior;
26
+ private _isPinned;
27
+ /**
28
+ * Indicates if the near menu is world-pinned
29
+ */
30
+ get isPinned(): boolean;
31
+ set isPinned(value: boolean);
32
+ private _createPinButton;
33
+ protected _createNode(scene: Scene): Nullable<TransformNode>;
34
+ protected _finalProcessing(): void;
35
+ /**
36
+ * Creates a near menu GUI 3D control
37
+ * @param name name of the near menu
38
+ */
39
+ constructor(name?: string);
40
+ /**
41
+ * Disposes the near menu
42
+ */
43
+ dispose(): void;
44
+ }