@babylonjs/gui 5.0.0-alpha.8 → 5.0.0-beta.3

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 (276) hide show
  1. package/2D/adtInstrumentation.js +1 -1
  2. package/2D/advancedDynamicTexture.d.ts +165 -125
  3. package/2D/advancedDynamicTexture.js +342 -181
  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 +91 -13
  16. package/2D/controls/container.js.map +1 -1
  17. package/2D/controls/control.d.ts +103 -44
  18. package/2D/controls/control.js +278 -129
  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 +108 -24
  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 +2 -1
  39. package/2D/controls/inputText.js +40 -14
  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 +35 -13
  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 +16 -9
  82. package/2D/controls/textBlock.js +75 -34
  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 +118 -0
  134. package/3D/controls/holographicSlate.js +365 -0
  135. package/3D/controls/holographicSlate.js.map +1 -0
  136. package/3D/controls/index.d.ts +7 -0
  137. package/3D/controls/index.js +22 -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 +45 -0
  142. package/3D/controls/nearMenu.js +111 -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 +9 -21
  152. package/3D/controls/touchButton3D.js +52 -224
  153. package/3D/controls/touchButton3D.js.map +1 -1
  154. package/3D/controls/touchHolographicButton.d.ts +20 -3
  155. package/3D/controls/touchHolographicButton.js +137 -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/touchToggleButton3D.d.ts +35 -0
  164. package/3D/controls/touchToggleButton3D.js +60 -0
  165. package/3D/controls/touchToggleButton3D.js.map +1 -0
  166. package/3D/controls/volumeBasedPanel.d.ts +1 -1
  167. package/3D/controls/volumeBasedPanel.js +5 -5
  168. package/3D/controls/volumeBasedPanel.js.map +1 -1
  169. package/3D/gizmos/gizmoHandle.d.ts +108 -0
  170. package/3D/gizmos/gizmoHandle.js +210 -0
  171. package/3D/gizmos/gizmoHandle.js.map +1 -0
  172. package/3D/gizmos/index.d.ts +2 -0
  173. package/3D/gizmos/index.js +3 -0
  174. package/3D/gizmos/index.js.map +1 -0
  175. package/3D/gizmos/slateGizmo.d.ts +59 -0
  176. package/3D/gizmos/slateGizmo.js +364 -0
  177. package/3D/gizmos/slateGizmo.js.map +1 -0
  178. package/3D/gui3DManager.d.ts +15 -2
  179. package/3D/gui3DManager.js +62 -41
  180. package/3D/gui3DManager.js.map +1 -1
  181. package/3D/index.d.ts +3 -2
  182. package/3D/index.js +5 -4
  183. package/3D/index.js.map +1 -1
  184. package/3D/materials/fluent/fluentMaterial.d.ts +90 -0
  185. package/3D/materials/fluent/fluentMaterial.js +282 -0
  186. package/3D/materials/fluent/fluentMaterial.js.map +1 -0
  187. package/3D/materials/fluent/index.d.ts +1 -0
  188. package/3D/materials/fluent/index.js +2 -0
  189. package/3D/materials/fluent/index.js.map +1 -0
  190. package/3D/materials/{shaders → fluent/shaders}/fluent.fragment.d.ts +0 -0
  191. package/3D/materials/fluent/shaders/fluent.fragment.js +7 -0
  192. package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -0
  193. package/3D/materials/{shaders → fluent/shaders}/fluent.vertex.d.ts +0 -0
  194. package/3D/materials/{shaders → fluent/shaders}/fluent.vertex.js +2 -2
  195. package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -0
  196. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +154 -0
  197. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +435 -0
  198. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -0
  199. package/3D/materials/fluentBackplate/index.d.ts +1 -0
  200. package/3D/materials/fluentBackplate/index.js +2 -0
  201. package/3D/materials/fluentBackplate/index.js.map +1 -0
  202. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -0
  203. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +7 -0
  204. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -0
  205. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -0
  206. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +7 -0
  207. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -0
  208. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +189 -0
  209. package/3D/materials/fluentButton/fluentButtonMaterial.js +538 -0
  210. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -0
  211. package/3D/materials/fluentButton/index.d.ts +1 -0
  212. package/3D/materials/fluentButton/index.js +2 -0
  213. package/3D/materials/fluentButton/index.js.map +1 -0
  214. package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -0
  215. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +7 -0
  216. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -0
  217. package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -0
  218. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +7 -0
  219. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -0
  220. package/3D/materials/fluentMaterial.d.ts +2 -88
  221. package/3D/materials/fluentMaterial.js +2 -277
  222. package/3D/materials/fluentMaterial.js.map +1 -1
  223. package/3D/materials/handle/handleMaterial.d.ts +68 -0
  224. package/3D/materials/handle/handleMaterial.js +127 -0
  225. package/3D/materials/handle/handleMaterial.js.map +1 -0
  226. package/3D/materials/handle/index.d.ts +1 -0
  227. package/3D/materials/handle/index.js +2 -0
  228. package/3D/materials/handle/index.js.map +1 -0
  229. package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -0
  230. package/3D/materials/handle/shaders/handle.fragment.js +7 -0
  231. package/3D/materials/handle/shaders/handle.fragment.js.map +1 -0
  232. package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -0
  233. package/3D/materials/handle/shaders/handle.vertex.js +7 -0
  234. package/3D/materials/handle/shaders/handle.vertex.js.map +1 -0
  235. package/3D/materials/index.d.ts +5 -1
  236. package/3D/materials/index.js +5 -1
  237. package/3D/materials/index.js.map +1 -1
  238. package/3D/materials/mrdl/index.d.ts +3 -0
  239. package/3D/materials/mrdl/index.js +4 -0
  240. package/3D/materials/mrdl/index.js.map +1 -0
  241. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +147 -0
  242. package/3D/materials/mrdl/mrdlBackplateMaterial.js +410 -0
  243. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -0
  244. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +333 -0
  245. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +787 -0
  246. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -0
  247. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +333 -0
  248. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +787 -0
  249. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -0
  250. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -0
  251. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +7 -0
  252. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -0
  253. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -0
  254. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +7 -0
  255. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -0
  256. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -0
  257. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +7 -0
  258. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -0
  259. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -0
  260. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +7 -0
  261. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -0
  262. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -0
  263. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +7 -0
  264. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -0
  265. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -0
  266. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +7 -0
  267. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -0
  268. package/3D/vector3WithInfo.js +1 -1
  269. package/index.d.ts +2 -2
  270. package/index.js +2 -2
  271. package/index.js.map +1 -1
  272. package/legacy/legacy.js +2 -2
  273. package/package.json +117 -9
  274. package/3D/materials/shaders/fluent.fragment.js +0 -7
  275. package/3D/materials/shaders/fluent.fragment.js.map +0 -1
  276. package/3D/materials/shaders/fluent.vertex.js.map +0 -1
@@ -1,8 +1,8 @@
1
- import { Observable } from "@babylonjs/core/Misc/observable";
2
- import { Vector3 } from "@babylonjs/core/Maths/math.vector";
3
- import { PointerEventTypes } from "@babylonjs/core/Events/pointerEvents";
4
- import { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh";
5
- import { Vector3WithInfo } from "../vector3WithInfo";
1
+ import { Observable } from "@babylonjs/core/Misc/observable.js";
2
+ import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
3
+ import { PointerEventTypes } from "@babylonjs/core/Events/pointerEvents.js";
4
+ import { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh.js";
5
+ import { Vector3WithInfo } from "../vector3WithInfo.js";
6
6
  /**
7
7
  * Class used as base class for controls
8
8
  */
@@ -19,12 +19,14 @@ var Control3D = /** @class */ (function () {
19
19
  this._enterCount = -1;
20
20
  this._downPointerIds = {}; // Store number of pointer downs per ID, from near and far interactions
21
21
  this._isVisible = true;
22
+ /** @hidden */
23
+ this._isScaledByManager = false;
22
24
  /**
23
- * An event triggered when the pointer move over the control
24
- */
25
+ * An event triggered when the pointer moves over the control
26
+ */
25
27
  this.onPointerMoveObservable = new Observable();
26
28
  /**
27
- * An event triggered when the pointer move out of the control
29
+ * An event triggered when the pointer moves out of the control
28
30
  */
29
31
  this.onPointerOutObservable = new Observable();
30
32
  /**
@@ -47,7 +49,7 @@ var Control3D = /** @class */ (function () {
47
49
  this._behaviors = new Array();
48
50
  }
49
51
  Object.defineProperty(Control3D.prototype, "position", {
50
- /** Gets or sets the control position in world space */
52
+ /** Gets or sets the control position in world space */
51
53
  get: function () {
52
54
  if (!this._node) {
53
55
  return Vector3.Zero();
@@ -64,7 +66,7 @@ var Control3D = /** @class */ (function () {
64
66
  configurable: true
65
67
  });
66
68
  Object.defineProperty(Control3D.prototype, "scaling", {
67
- /** Gets or sets the control scaling in world space */
69
+ /** Gets or sets the control scaling in world space */
68
70
  get: function () {
69
71
  if (!this._node) {
70
72
  return new Vector3(1, 1, 1);
@@ -75,6 +77,7 @@ var Control3D = /** @class */ (function () {
75
77
  if (!this._node) {
76
78
  return;
77
79
  }
80
+ this._isScaledByManager = false;
78
81
  this._node.scaling = value;
79
82
  },
80
83
  enumerable: false,
@@ -226,9 +229,7 @@ var Control3D = /** @class */ (function () {
226
229
  if (!this.node) {
227
230
  return;
228
231
  }
229
- this._injectGUI3DMetadata(this._node).control = this; // Store the control on the metadata field in order to get it when picking
230
- this._node.position = this.position;
231
- this._node.scaling = this.scaling;
232
+ this._injectGUI3DReservedDataStore(this.node).control = this; // Store the control on the reservedDataStore field in order to get it when picking
232
233
  var mesh = this.mesh;
233
234
  if (mesh) {
234
235
  mesh.isPickable = true;
@@ -236,11 +237,11 @@ var Control3D = /** @class */ (function () {
236
237
  }
237
238
  }
238
239
  };
239
- Control3D.prototype._injectGUI3DMetadata = function (node) {
240
+ Control3D.prototype._injectGUI3DReservedDataStore = function (node) {
240
241
  var _a, _b;
241
- node.metadata = (_a = node.metadata) !== null && _a !== void 0 ? _a : {};
242
- node.metadata.GUI3D = (_b = node.metadata.GUI3D) !== null && _b !== void 0 ? _b : {};
243
- return node.metadata.GUI3D;
242
+ node.reservedDataStore = (_a = node.reservedDataStore) !== null && _a !== void 0 ? _a : {};
243
+ node.reservedDataStore.GUI3D = (_b = node.reservedDataStore.GUI3D) !== null && _b !== void 0 ? _b : {};
244
+ return node.reservedDataStore.GUI3D;
244
245
  };
245
246
  /**
246
247
  * Node creation.
@@ -259,6 +260,9 @@ var Control3D = /** @class */ (function () {
259
260
  Control3D.prototype._affectMaterial = function (mesh) {
260
261
  mesh.material = null;
261
262
  };
263
+ Control3D.prototype._IsTouchButton3D = function (control) {
264
+ return control._generatePointerEventType !== undefined;
265
+ };
262
266
  // Pointers
263
267
  /** @hidden */
264
268
  Control3D.prototype._onPointerMove = function (target, coordinates) {
@@ -266,7 +270,8 @@ var Control3D = /** @class */ (function () {
266
270
  };
267
271
  /** @hidden */
268
272
  Control3D.prototype._onPointerEnter = function (target) {
269
- if (this._enterCount === -1) { // -1 is for touch input, we are now sure we are with a mouse or pencil
273
+ if (this._enterCount === -1) {
274
+ // -1 is for touch input, we are now sure we are with a mouse or pencil
270
275
  this._enterCount = 0;
271
276
  }
272
277
  this._enterCount++;
@@ -343,7 +348,10 @@ var Control3D = /** @class */ (function () {
343
348
  }
344
349
  };
345
350
  /** @hidden */
346
- Control3D.prototype._processObservables = function (type, pickedPoint, pointerId, buttonIndex) {
351
+ Control3D.prototype._processObservables = function (type, pickedPoint, originMeshPosition, pointerId, buttonIndex) {
352
+ if (this._IsTouchButton3D(this) && originMeshPosition) {
353
+ type = this._generatePointerEventType(type, originMeshPosition, this._downCount);
354
+ }
347
355
  if (type === PointerEventTypes.POINTERMOVE) {
348
356
  this._onPointerMove(this, pickedPoint);
349
357
  var previousControlOver = this._host._lastControlOver[pointerId];
@@ -1 +1 @@
1
- {"version":3,"file":"control3D.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/controls/control3D.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"@babylonjs/core/types\";\r\nimport { Observable } from \"@babylonjs/core/Misc/observable\";\r\nimport { Vector3 } from \"@babylonjs/core/Maths/math.vector\";\r\nimport { PointerEventTypes } from \"@babylonjs/core/Events/pointerEvents\";\r\nimport { TransformNode } from \"@babylonjs/core/Meshes/transformNode\";\r\nimport { AbstractMesh } from \"@babylonjs/core/Meshes/abstractMesh\";\r\nimport { IBehaviorAware, Behavior } from \"@babylonjs/core/Behaviors/behavior\";\r\nimport { IDisposable, Scene } from \"@babylonjs/core/scene\";\r\n\r\nimport { GUI3DManager } from \"../gui3DManager\";\r\nimport { Vector3WithInfo } from \"../vector3WithInfo\";\r\nimport { Container3D } from \"./container3D\";\r\n\r\n/**\r\n * Class used as base class for controls\r\n */\r\nexport class Control3D implements IDisposable, IBehaviorAware<Control3D> {\r\n /** @hidden */\r\n public _host: GUI3DManager;\r\n private _node: Nullable<TransformNode>;\r\n private _downCount = 0;\r\n private _enterCount = -1;\r\n private _downPointerIds: { [id: number]: number } = {}; // Store number of pointer downs per ID, from near and far interactions\r\n private _isVisible = true;\r\n\r\n /** Gets or sets the control position in world space */\r\n public get position(): Vector3 {\r\n if (!this._node) {\r\n return Vector3.Zero();\r\n }\r\n\r\n return this._node.position;\r\n }\r\n\r\n public set position(value: Vector3) {\r\n if (!this._node) {\r\n return;\r\n }\r\n\r\n this._node.position = value;\r\n }\r\n\r\n /** Gets or sets the control scaling in world space */\r\n public get scaling(): Vector3 {\r\n if (!this._node) {\r\n return new Vector3(1, 1, 1);\r\n }\r\n\r\n return this._node.scaling;\r\n }\r\n\r\n public set scaling(value: Vector3) {\r\n if (!this._node) {\r\n return;\r\n }\r\n\r\n this._node.scaling = value;\r\n }\r\n\r\n /** Callback used to start pointer enter animation */\r\n public pointerEnterAnimation: () => void;\r\n /** Callback used to start pointer out animation */\r\n public pointerOutAnimation: () => void;\r\n /** Callback used to start pointer down animation */\r\n public pointerDownAnimation: () => void;\r\n /** Callback used to start pointer up animation */\r\n public pointerUpAnimation: () => void;\r\n\r\n /**\r\n * An event triggered when the pointer move over the control\r\n */\r\n public onPointerMoveObservable = new Observable<Vector3>();\r\n\r\n /**\r\n * An event triggered when the pointer move out of the control\r\n */\r\n public onPointerOutObservable = new Observable<Control3D>();\r\n\r\n /**\r\n * An event triggered when the pointer taps the control\r\n */\r\n public onPointerDownObservable = new Observable<Vector3WithInfo>();\r\n\r\n /**\r\n * An event triggered when pointer is up\r\n */\r\n public onPointerUpObservable = new Observable<Vector3WithInfo>();\r\n\r\n /**\r\n * An event triggered when a control is clicked on (with a mouse)\r\n */\r\n public onPointerClickObservable = new Observable<Vector3WithInfo>();\r\n\r\n /**\r\n * An event triggered when pointer enters the control\r\n */\r\n public onPointerEnterObservable = new Observable<Control3D>();\r\n\r\n /**\r\n * Gets or sets the parent container\r\n */\r\n public parent: Nullable<Container3D>;\r\n\r\n // Behaviors\r\n private _behaviors = new Array<Behavior<Control3D>>();\r\n\r\n /**\r\n * Gets the list of attached behaviors\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n */\r\n public get behaviors(): Behavior<Control3D>[] {\r\n return this._behaviors;\r\n }\r\n\r\n /**\r\n * Attach a behavior to the control\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n * @param behavior defines the behavior to attach\r\n * @returns the current control\r\n */\r\n public addBehavior(behavior: Behavior<Control3D>): Control3D {\r\n var index = this._behaviors.indexOf(behavior);\r\n\r\n if (index !== -1) {\r\n return this;\r\n }\r\n\r\n behavior.init();\r\n let scene = this._host.scene;\r\n if (scene.isLoading) {\r\n // We defer the attach when the scene will be loaded\r\n scene.onDataLoadedObservable.addOnce(() => {\r\n behavior.attach(this);\r\n });\r\n } else {\r\n behavior.attach(this);\r\n }\r\n this._behaviors.push(behavior);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove an attached behavior\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n * @param behavior defines the behavior to attach\r\n * @returns the current control\r\n */\r\n public removeBehavior(behavior: Behavior<Control3D>): Control3D {\r\n var index = this._behaviors.indexOf(behavior);\r\n\r\n if (index === -1) {\r\n return this;\r\n }\r\n\r\n this._behaviors[index].detach();\r\n this._behaviors.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets an attached behavior by name\r\n * @param name defines the name of the behavior to look for\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n * @returns null if behavior was not found else the requested behavior\r\n */\r\n public getBehaviorByName(name: string): Nullable<Behavior<Control3D>> {\r\n for (var behavior of this._behaviors) {\r\n if (behavior.name === name) {\r\n return behavior;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the control is visible */\r\n public get isVisible(): boolean {\r\n return this._isVisible;\r\n }\r\n\r\n public set isVisible(value: boolean) {\r\n if (this._isVisible === value) {\r\n return;\r\n }\r\n\r\n this._isVisible = value;\r\n\r\n let mesh = this.mesh;\r\n if (mesh) {\r\n mesh.setEnabled(value);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new control\r\n * @param name defines the control name\r\n */\r\n constructor(\r\n /** Defines the control name */\r\n public name?: string) {\r\n }\r\n\r\n /**\r\n * Gets a string representing the class name\r\n */\r\n public get typeName(): string {\r\n return this._getTypeName();\r\n }\r\n\r\n /**\r\n * Get the current class name of the control.\r\n * @returns current class name\r\n */\r\n public getClassName(): string {\r\n return this._getTypeName();\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"Control3D\";\r\n }\r\n\r\n /**\r\n * Gets the transform node used by this control\r\n */\r\n public get node(): Nullable<TransformNode> {\r\n return this._node;\r\n }\r\n\r\n /**\r\n * Gets the mesh used to render this control\r\n */\r\n public get mesh(): Nullable<AbstractMesh> {\r\n if (this._node instanceof AbstractMesh) {\r\n return this._node as AbstractMesh;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Link the control as child of the given node\r\n * @param node defines the node to link to. Use null to unlink the control\r\n * @returns the current control\r\n */\r\n public linkToTransformNode(node: Nullable<TransformNode>): Control3D {\r\n if (this._node) {\r\n this._node.parent = node;\r\n }\r\n return this;\r\n }\r\n\r\n /** @hidden **/\r\n public _prepareNode(scene: Scene): void {\r\n if (!this._node) {\r\n this._node = this._createNode(scene);\r\n\r\n if (!this.node) {\r\n return;\r\n }\r\n this._injectGUI3DMetadata(this._node!).control = this; // Store the control on the metadata field in order to get it when picking\r\n this._node!.position = this.position;\r\n this._node!.scaling = this.scaling;\r\n\r\n let mesh = this.mesh;\r\n if (mesh) {\r\n mesh.isPickable = true;\r\n\r\n this._affectMaterial(mesh);\r\n }\r\n }\r\n }\r\n\r\n protected _injectGUI3DMetadata(node: TransformNode): any {\r\n node.metadata = node.metadata ?? {};\r\n node.metadata.GUI3D = node.metadata.GUI3D ?? {};\r\n return node.metadata.GUI3D;\r\n }\r\n\r\n /**\r\n * Node creation.\r\n * Can be overriden by children\r\n * @param scene defines the scene where the node must be attached\r\n * @returns the attached node or null if none. Must return a Mesh or AbstractMesh if there is an atttached visible object\r\n */\r\n protected _createNode(scene: Scene): Nullable<TransformNode> {\r\n // Do nothing by default\r\n return null;\r\n }\r\n\r\n /**\r\n * Affect a material to the given mesh\r\n * @param mesh defines the mesh which will represent the control\r\n */\r\n protected _affectMaterial(mesh: AbstractMesh) {\r\n mesh.material = null;\r\n }\r\n\r\n // Pointers\r\n\r\n /** @hidden */\r\n public _onPointerMove(target: Control3D, coordinates: Vector3): void {\r\n this.onPointerMoveObservable.notifyObservers(coordinates, -1, target, this);\r\n }\r\n\r\n /** @hidden */\r\n public _onPointerEnter(target: Control3D): boolean {\r\n if (this._enterCount === -1) { // -1 is for touch input, we are now sure we are with a mouse or pencil\r\n this._enterCount = 0;\r\n }\r\n\r\n this._enterCount++;\r\n\r\n if (this._enterCount > 1) {\r\n return false;\r\n }\r\n\r\n this.onPointerEnterObservable.notifyObservers(this, -1, target, this);\r\n\r\n if (this.pointerEnterAnimation) {\r\n this.pointerEnterAnimation();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** @hidden */\r\n public _onPointerOut(target: Control3D): void {\r\n this._enterCount--;\r\n\r\n if (this._enterCount > 0) {\r\n return;\r\n }\r\n\r\n this._enterCount = 0;\r\n\r\n this.onPointerOutObservable.notifyObservers(this, -1, target, this);\r\n\r\n if (this.pointerOutAnimation) {\r\n this.pointerOutAnimation();\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _onPointerDown(target: Control3D, coordinates: Vector3, pointerId: number, buttonIndex: number): boolean {\r\n this._downCount++;\r\n this._downPointerIds[pointerId] = this._downPointerIds[pointerId] + 1 || 1;\r\n\r\n if (this._downCount !== 1) {\r\n return false;\r\n }\r\n\r\n this.onPointerDownObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);\r\n\r\n if (this.pointerDownAnimation) {\r\n this.pointerDownAnimation();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** @hidden */\r\n public _onPointerUp(target: Control3D, coordinates: Vector3, pointerId: number, buttonIndex: number, notifyClick: boolean): void {\r\n this._downCount--;\r\n this._downPointerIds[pointerId]--;\r\n\r\n if (this._downPointerIds[pointerId] <= 0) {\r\n delete this._downPointerIds[pointerId];\r\n }\r\n\r\n if (this._downCount < 0) {\r\n // Handle if forcePointerUp was called prior to this\r\n this._downCount = 0;\r\n return;\r\n }\r\n\r\n if (this._downCount == 0) {\r\n if (notifyClick && (this._enterCount > 0 || this._enterCount === -1)) {\r\n this.onPointerClickObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);\r\n }\r\n this.onPointerUpObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);\r\n\r\n if (this.pointerUpAnimation) {\r\n this.pointerUpAnimation();\r\n }\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public forcePointerUp(pointerId: Nullable<number> = null) {\r\n if (pointerId !== null) {\r\n this._onPointerUp(this, Vector3.Zero(), pointerId, 0, true);\r\n } else {\r\n for (var key in this._downPointerIds) {\r\n this._onPointerUp(this, Vector3.Zero(), +key as number, 0, true);\r\n }\r\n if (this._downCount > 0) {\r\n this._downCount = 1;\r\n this._onPointerUp(this, Vector3.Zero(), 0, 0, true);\r\n }\r\n\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _processObservables(type: number, pickedPoint: Vector3, pointerId: number, buttonIndex: number): boolean {\r\n if (type === PointerEventTypes.POINTERMOVE) {\r\n this._onPointerMove(this, pickedPoint);\r\n\r\n var previousControlOver = this._host._lastControlOver[pointerId];\r\n if (previousControlOver && previousControlOver !== this) {\r\n previousControlOver._onPointerOut(this);\r\n }\r\n\r\n if (previousControlOver !== this) {\r\n this._onPointerEnter(this);\r\n }\r\n\r\n this._host._lastControlOver[pointerId] = this;\r\n return true;\r\n }\r\n\r\n if (type === PointerEventTypes.POINTERDOWN) {\r\n this._onPointerDown(this, pickedPoint, pointerId, buttonIndex);\r\n this._host._lastControlDown[pointerId] = this;\r\n this._host._lastPickedControl = this;\r\n return true;\r\n }\r\n\r\n if (type === PointerEventTypes.POINTERUP || type === PointerEventTypes.POINTERDOUBLETAP) {\r\n if (this._host._lastControlDown[pointerId]) {\r\n this._host._lastControlDown[pointerId]._onPointerUp(this, pickedPoint, pointerId, buttonIndex, true);\r\n }\r\n delete this._host._lastControlDown[pointerId];\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @hidden */\r\n public _disposeNode(): void {\r\n if (this._node) {\r\n this._node.dispose();\r\n this._node = null;\r\n }\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n this.onPointerDownObservable.clear();\r\n this.onPointerEnterObservable.clear();\r\n this.onPointerMoveObservable.clear();\r\n this.onPointerOutObservable.clear();\r\n this.onPointerUpObservable.clear();\r\n this.onPointerClickObservable.clear();\r\n\r\n this._disposeNode();\r\n\r\n // Behaviors\r\n for (var behavior of this._behaviors) {\r\n behavior.detach();\r\n }\r\n }\r\n}"]}
1
+ {"version":3,"file":"control3D.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/controls/control3D.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"@babylonjs/core/types\";\r\nimport { Observable } from \"@babylonjs/core/Misc/observable\";\r\nimport { Vector3 } from \"@babylonjs/core/Maths/math.vector\";\r\nimport { PointerEventTypes } from \"@babylonjs/core/Events/pointerEvents\";\r\nimport { TransformNode } from \"@babylonjs/core/Meshes/transformNode\";\r\nimport { AbstractMesh } from \"@babylonjs/core/Meshes/abstractMesh\";\r\nimport { IBehaviorAware, Behavior } from \"@babylonjs/core/Behaviors/behavior\";\r\nimport { IDisposable, Scene } from \"@babylonjs/core/scene\";\r\n\r\nimport { GUI3DManager } from \"../gui3DManager\";\r\nimport { Vector3WithInfo } from \"../vector3WithInfo\";\r\nimport { Container3D } from \"./container3D\";\r\n\r\ndeclare type TouchButton3D = import(\"./touchButton3D\").TouchButton3D;\r\n\r\n/**\r\n * Class used as base class for controls\r\n */\r\nexport class Control3D implements IDisposable, IBehaviorAware<Control3D> {\r\n /** @hidden */\r\n public _host: GUI3DManager;\r\n private _node: Nullable<TransformNode>;\r\n private _downCount = 0;\r\n private _enterCount = -1;\r\n private _downPointerIds: { [id: number]: number } = {}; // Store number of pointer downs per ID, from near and far interactions\r\n private _isVisible = true;\r\n /** @hidden */\r\n public _isScaledByManager = false;\r\n\r\n /** Gets or sets the control position in world space */\r\n public get position(): Vector3 {\r\n if (!this._node) {\r\n return Vector3.Zero();\r\n }\r\n\r\n return this._node.position;\r\n }\r\n\r\n public set position(value: Vector3) {\r\n if (!this._node) {\r\n return;\r\n }\r\n\r\n this._node.position = value;\r\n }\r\n\r\n /** Gets or sets the control scaling in world space */\r\n public get scaling(): Vector3 {\r\n if (!this._node) {\r\n return new Vector3(1, 1, 1);\r\n }\r\n\r\n return this._node.scaling;\r\n }\r\n\r\n public set scaling(value: Vector3) {\r\n if (!this._node) {\r\n return;\r\n }\r\n\r\n this._isScaledByManager = false;\r\n this._node.scaling = value;\r\n }\r\n\r\n /** Callback used to start pointer enter animation */\r\n public pointerEnterAnimation: () => void;\r\n /** Callback used to start pointer out animation */\r\n public pointerOutAnimation: () => void;\r\n /** Callback used to start pointer down animation */\r\n public pointerDownAnimation: () => void;\r\n /** Callback used to start pointer up animation */\r\n public pointerUpAnimation: () => void;\r\n\r\n /**\r\n * An event triggered when the pointer moves over the control\r\n */\r\n public onPointerMoveObservable = new Observable<Vector3>();\r\n\r\n /**\r\n * An event triggered when the pointer moves out of the control\r\n */\r\n public onPointerOutObservable = new Observable<Control3D>();\r\n\r\n /**\r\n * An event triggered when the pointer taps the control\r\n */\r\n public onPointerDownObservable = new Observable<Vector3WithInfo>();\r\n\r\n /**\r\n * An event triggered when pointer is up\r\n */\r\n public onPointerUpObservable = new Observable<Vector3WithInfo>();\r\n\r\n /**\r\n * An event triggered when a control is clicked on (with a mouse)\r\n */\r\n public onPointerClickObservable = new Observable<Vector3WithInfo>();\r\n\r\n /**\r\n * An event triggered when pointer enters the control\r\n */\r\n public onPointerEnterObservable = new Observable<Control3D>();\r\n\r\n /**\r\n * Gets or sets the parent container\r\n */\r\n public parent: Nullable<Container3D>;\r\n\r\n // Behaviors\r\n private _behaviors = new Array<Behavior<Control3D>>();\r\n\r\n /**\r\n * Gets the list of attached behaviors\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n */\r\n public get behaviors(): Behavior<Control3D>[] {\r\n return this._behaviors;\r\n }\r\n\r\n /**\r\n * Attach a behavior to the control\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n * @param behavior defines the behavior to attach\r\n * @returns the current control\r\n */\r\n public addBehavior(behavior: Behavior<Control3D>): Control3D {\r\n var index = this._behaviors.indexOf(behavior);\r\n\r\n if (index !== -1) {\r\n return this;\r\n }\r\n\r\n behavior.init();\r\n let scene = this._host.scene;\r\n if (scene.isLoading) {\r\n // We defer the attach when the scene will be loaded\r\n scene.onDataLoadedObservable.addOnce(() => {\r\n behavior.attach(this);\r\n });\r\n } else {\r\n behavior.attach(this);\r\n }\r\n this._behaviors.push(behavior);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove an attached behavior\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n * @param behavior defines the behavior to attach\r\n * @returns the current control\r\n */\r\n public removeBehavior(behavior: Behavior<Control3D>): Control3D {\r\n var index = this._behaviors.indexOf(behavior);\r\n\r\n if (index === -1) {\r\n return this;\r\n }\r\n\r\n this._behaviors[index].detach();\r\n this._behaviors.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets an attached behavior by name\r\n * @param name defines the name of the behavior to look for\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n * @returns null if behavior was not found else the requested behavior\r\n */\r\n public getBehaviorByName(name: string): Nullable<Behavior<Control3D>> {\r\n for (var behavior of this._behaviors) {\r\n if (behavior.name === name) {\r\n return behavior;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the control is visible */\r\n public get isVisible(): boolean {\r\n return this._isVisible;\r\n }\r\n\r\n public set isVisible(value: boolean) {\r\n if (this._isVisible === value) {\r\n return;\r\n }\r\n\r\n this._isVisible = value;\r\n\r\n let mesh = this.mesh;\r\n if (mesh) {\r\n mesh.setEnabled(value);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new control\r\n * @param name defines the control name\r\n */\r\n constructor(\r\n /** Defines the control name */\r\n public name?: string\r\n ) { }\r\n\r\n /**\r\n * Gets a string representing the class name\r\n */\r\n public get typeName(): string {\r\n return this._getTypeName();\r\n }\r\n\r\n /**\r\n * Get the current class name of the control.\r\n * @returns current class name\r\n */\r\n public getClassName(): string {\r\n return this._getTypeName();\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"Control3D\";\r\n }\r\n\r\n /**\r\n * Gets the transform node used by this control\r\n */\r\n public get node(): Nullable<TransformNode> {\r\n return this._node;\r\n }\r\n\r\n /**\r\n * Gets the mesh used to render this control\r\n */\r\n public get mesh(): Nullable<AbstractMesh> {\r\n if (this._node instanceof AbstractMesh) {\r\n return this._node as AbstractMesh;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Link the control as child of the given node\r\n * @param node defines the node to link to. Use null to unlink the control\r\n * @returns the current control\r\n */\r\n public linkToTransformNode(node: Nullable<TransformNode>): Control3D {\r\n if (this._node) {\r\n this._node.parent = node;\r\n }\r\n return this;\r\n }\r\n\r\n /** @hidden **/\r\n public _prepareNode(scene: Scene): void {\r\n if (!this._node) {\r\n this._node = this._createNode(scene);\r\n\r\n if (!this.node) {\r\n return;\r\n }\r\n this._injectGUI3DReservedDataStore(this.node).control = this; // Store the control on the reservedDataStore field in order to get it when picking\r\n\r\n let mesh = this.mesh;\r\n if (mesh) {\r\n mesh.isPickable = true;\r\n\r\n this._affectMaterial(mesh);\r\n }\r\n }\r\n }\r\n\r\n protected _injectGUI3DReservedDataStore(node: TransformNode): any {\r\n node.reservedDataStore = node.reservedDataStore ?? {};\r\n node.reservedDataStore.GUI3D = node.reservedDataStore.GUI3D ?? {};\r\n return node.reservedDataStore.GUI3D;\r\n }\r\n\r\n /**\r\n * Node creation.\r\n * Can be overriden by children\r\n * @param scene defines the scene where the node must be attached\r\n * @returns the attached node or null if none. Must return a Mesh or AbstractMesh if there is an atttached visible object\r\n */\r\n protected _createNode(scene: Scene): Nullable<TransformNode> {\r\n // Do nothing by default\r\n return null;\r\n }\r\n\r\n /**\r\n * Affect a material to the given mesh\r\n * @param mesh defines the mesh which will represent the control\r\n */\r\n protected _affectMaterial(mesh: AbstractMesh) {\r\n mesh.material = null;\r\n }\r\n\r\n private _IsTouchButton3D(control: Control3D): control is TouchButton3D {\r\n return (control as TouchButton3D)._generatePointerEventType !== undefined;\r\n }\r\n\r\n // Pointers\r\n\r\n /** @hidden */\r\n public _onPointerMove(target: Control3D, coordinates: Vector3): void {\r\n this.onPointerMoveObservable.notifyObservers(coordinates, -1, target, this);\r\n }\r\n\r\n /** @hidden */\r\n public _onPointerEnter(target: Control3D): boolean {\r\n if (this._enterCount === -1) {\r\n // -1 is for touch input, we are now sure we are with a mouse or pencil\r\n this._enterCount = 0;\r\n }\r\n\r\n this._enterCount++;\r\n\r\n if (this._enterCount > 1) {\r\n return false;\r\n }\r\n\r\n this.onPointerEnterObservable.notifyObservers(this, -1, target, this);\r\n\r\n if (this.pointerEnterAnimation) {\r\n this.pointerEnterAnimation();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** @hidden */\r\n public _onPointerOut(target: Control3D): void {\r\n this._enterCount--;\r\n\r\n if (this._enterCount > 0) {\r\n return;\r\n }\r\n\r\n this._enterCount = 0;\r\n\r\n this.onPointerOutObservable.notifyObservers(this, -1, target, this);\r\n\r\n if (this.pointerOutAnimation) {\r\n this.pointerOutAnimation();\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _onPointerDown(target: Control3D, coordinates: Vector3, pointerId: number, buttonIndex: number): boolean {\r\n this._downCount++;\r\n this._downPointerIds[pointerId] = this._downPointerIds[pointerId] + 1 || 1;\r\n\r\n if (this._downCount !== 1) {\r\n return false;\r\n }\r\n\r\n this.onPointerDownObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);\r\n\r\n if (this.pointerDownAnimation) {\r\n this.pointerDownAnimation();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** @hidden */\r\n public _onPointerUp(target: Control3D, coordinates: Vector3, pointerId: number, buttonIndex: number, notifyClick: boolean): void {\r\n this._downCount--;\r\n this._downPointerIds[pointerId]--;\r\n\r\n if (this._downPointerIds[pointerId] <= 0) {\r\n delete this._downPointerIds[pointerId];\r\n }\r\n\r\n if (this._downCount < 0) {\r\n // Handle if forcePointerUp was called prior to this\r\n this._downCount = 0;\r\n return;\r\n }\r\n\r\n if (this._downCount == 0) {\r\n if (notifyClick && (this._enterCount > 0 || this._enterCount === -1)) {\r\n this.onPointerClickObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);\r\n }\r\n this.onPointerUpObservable.notifyObservers(new Vector3WithInfo(coordinates, buttonIndex), -1, target, this);\r\n\r\n if (this.pointerUpAnimation) {\r\n this.pointerUpAnimation();\r\n }\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public forcePointerUp(pointerId: Nullable<number> = null) {\r\n if (pointerId !== null) {\r\n this._onPointerUp(this, Vector3.Zero(), pointerId, 0, true);\r\n } else {\r\n for (var key in this._downPointerIds) {\r\n this._onPointerUp(this, Vector3.Zero(), +key as number, 0, true);\r\n }\r\n if (this._downCount > 0) {\r\n this._downCount = 1;\r\n this._onPointerUp(this, Vector3.Zero(), 0, 0, true);\r\n }\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _processObservables(type: number, pickedPoint: Vector3, originMeshPosition: Nullable<Vector3>, pointerId: number, buttonIndex: number): boolean {\r\n if (this._IsTouchButton3D(this) && originMeshPosition) {\r\n type = this._generatePointerEventType(type, originMeshPosition, this._downCount);\r\n }\r\n\r\n if (type === PointerEventTypes.POINTERMOVE) {\r\n this._onPointerMove(this, pickedPoint);\r\n\r\n var previousControlOver = this._host._lastControlOver[pointerId];\r\n if (previousControlOver && previousControlOver !== this) {\r\n previousControlOver._onPointerOut(this);\r\n }\r\n\r\n if (previousControlOver !== this) {\r\n this._onPointerEnter(this);\r\n }\r\n\r\n this._host._lastControlOver[pointerId] = this;\r\n return true;\r\n }\r\n\r\n if (type === PointerEventTypes.POINTERDOWN) {\r\n this._onPointerDown(this, pickedPoint, pointerId, buttonIndex);\r\n this._host._lastControlDown[pointerId] = this;\r\n this._host._lastPickedControl = this;\r\n return true;\r\n }\r\n\r\n if (type === PointerEventTypes.POINTERUP || type === PointerEventTypes.POINTERDOUBLETAP) {\r\n if (this._host._lastControlDown[pointerId]) {\r\n this._host._lastControlDown[pointerId]._onPointerUp(this, pickedPoint, pointerId, buttonIndex, true);\r\n }\r\n delete this._host._lastControlDown[pointerId];\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @hidden */\r\n public _disposeNode(): void {\r\n if (this._node) {\r\n this._node.dispose();\r\n this._node = null;\r\n }\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n this.onPointerDownObservable.clear();\r\n this.onPointerEnterObservable.clear();\r\n this.onPointerMoveObservable.clear();\r\n this.onPointerOutObservable.clear();\r\n this.onPointerUpObservable.clear();\r\n this.onPointerClickObservable.clear();\r\n\r\n this._disposeNode();\r\n\r\n // Behaviors\r\n for (var behavior of this._behaviors) {\r\n behavior.detach();\r\n }\r\n }\r\n}\r\n"]}
@@ -1,9 +1,9 @@
1
1
  import { __extends } from "tslib";
2
- import { Tools } from "@babylonjs/core/Misc/tools";
3
- import { Matrix, TmpVectors, Vector3 } from "@babylonjs/core/Maths/math.vector";
4
- import { VolumeBasedPanel } from "./volumeBasedPanel";
5
- import { Container3D } from "./container3D";
6
- import { Axis, Space } from '@babylonjs/core/Maths/math.axis';
2
+ import { Tools } from "@babylonjs/core/Misc/tools.js";
3
+ import { Matrix, TmpVectors, Vector3 } from "@babylonjs/core/Maths/math.vector.js";
4
+ import { VolumeBasedPanel } from "./volumeBasedPanel.js";
5
+ import { Container3D } from "./container3D.js";
6
+ import { Axis, Space } from '@babylonjs/core/Maths/math.axis.js';
7
7
  /**
8
8
  * Class used to create a container panel deployed on the surface of a cylinder
9
9
  */
@@ -0,0 +1,28 @@
1
+ import { Scene } from "@babylonjs/core/scene";
2
+ import { TransformNode } from "@babylonjs/core/Meshes/transformNode";
3
+ import { Nullable } from "@babylonjs/core/types";
4
+ import { TouchHolographicMenu } from "./touchHolographicMenu";
5
+ import { HandConstraintBehavior } from "@babylonjs/core/Behaviors/Meshes/handConstraintBehavior";
6
+ import { WebXRExperienceHelper } from "@babylonjs/core/XR/webXRExperienceHelper";
7
+ /**
8
+ * Hand menu that displays buttons and floats around the hand.
9
+ * @since 5.0.0
10
+ */
11
+ export declare class HandMenu extends TouchHolographicMenu {
12
+ private _handConstraintBehavior;
13
+ /**
14
+ * The hand constraint behavior setting the transformation of this node
15
+ */
16
+ get handConstraintBehavior(): HandConstraintBehavior;
17
+ protected _createNode(scene: Scene): Nullable<TransformNode>;
18
+ /**
19
+ * Creates a hand menu GUI 3D control
20
+ * @param xr the WebXRExperienceHelper used to link this control to the enabled WebXRHandTracking feature
21
+ * @param name name of the hand menu
22
+ */
23
+ constructor(xr: WebXRExperienceHelper, name?: string);
24
+ /**
25
+ * Disposes the hand menu
26
+ */
27
+ dispose(): void;
28
+ }
@@ -0,0 +1,48 @@
1
+ import { __extends } from "tslib";
2
+ import { TouchHolographicMenu } from "./touchHolographicMenu.js";
3
+ import { HandConstraintBehavior } from "@babylonjs/core/Behaviors/Meshes/handConstraintBehavior.js";
4
+ /**
5
+ * Hand menu that displays buttons and floats around the hand.
6
+ * @since 5.0.0
7
+ */
8
+ var HandMenu = /** @class */ (function (_super) {
9
+ __extends(HandMenu, _super);
10
+ /**
11
+ * Creates a hand menu GUI 3D control
12
+ * @param xr the WebXRExperienceHelper used to link this control to the enabled WebXRHandTracking feature
13
+ * @param name name of the hand menu
14
+ */
15
+ function HandMenu(xr, name) {
16
+ var _this = _super.call(this, name) || this;
17
+ _this._handConstraintBehavior = new HandConstraintBehavior();
18
+ _this._handConstraintBehavior.linkToXRExperience(xr);
19
+ _this.backPlateMargin = 0.15;
20
+ _this.rows = 3;
21
+ return _this;
22
+ }
23
+ Object.defineProperty(HandMenu.prototype, "handConstraintBehavior", {
24
+ /**
25
+ * The hand constraint behavior setting the transformation of this node
26
+ */
27
+ get: function () {
28
+ return this._handConstraintBehavior;
29
+ },
30
+ enumerable: false,
31
+ configurable: true
32
+ });
33
+ HandMenu.prototype._createNode = function (scene) {
34
+ var node = _super.prototype._createNode.call(this, scene);
35
+ this._handConstraintBehavior.attach(node);
36
+ return node;
37
+ };
38
+ /**
39
+ * Disposes the hand menu
40
+ */
41
+ HandMenu.prototype.dispose = function () {
42
+ _super.prototype.dispose.call(this);
43
+ this._handConstraintBehavior.detach();
44
+ };
45
+ return HandMenu;
46
+ }(TouchHolographicMenu));
47
+ export { HandMenu };
48
+ //# sourceMappingURL=handMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handMenu.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/controls/handMenu.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AAGjG;;;GAGG;AACH;IAA8B,4BAAoB;IAkB9C;;;;OAIG;IACH,kBAAY,EAAyB,EAAE,IAAa;QAApD,YACI,kBAAM,IAAI,CAAC,SAMd;QAJG,KAAI,CAAC,uBAAuB,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC5D,KAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACpD,KAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,KAAI,CAAC,IAAI,GAAG,CAAC,CAAC;;IAClB,CAAC;IAxBD,sBAAW,4CAAsB;QAHjC;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,uBAAuB,CAAC;QACxC,CAAC;;;OAAA;IAES,8BAAW,GAArB,UAAsB,KAAY;QAC9B,IAAM,IAAI,GAAG,iBAAM,WAAW,YAAC,KAAK,CAAU,CAAC;QAE/C,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE1C,OAAO,IAAI,CAAC;IAChB,CAAC;IAgBD;;OAEG;IACI,0BAAO,GAAd;QACI,iBAAM,OAAO,WAAE,CAAC;QAEhB,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC;IAC1C,CAAC;IACL,eAAC;AAAD,CAAC,AAxCD,CAA8B,oBAAoB,GAwCjD","sourcesContent":["import { Scene } from \"@babylonjs/core/scene\";\r\nimport { TransformNode } from \"@babylonjs/core/Meshes/transformNode\";\r\nimport { Nullable } from \"@babylonjs/core/types\";\r\nimport { Mesh } from \"@babylonjs/core/Meshes/mesh\";\r\nimport { TouchHolographicMenu } from \"./touchHolographicMenu\";\r\nimport { HandConstraintBehavior } from \"@babylonjs/core/Behaviors/Meshes/handConstraintBehavior\";\r\nimport { WebXRExperienceHelper } from \"@babylonjs/core/XR/webXRExperienceHelper\";\r\n\r\n/**\r\n * Hand menu that displays buttons and floats around the hand.\r\n * @since 5.0.0\r\n */\r\nexport class HandMenu extends TouchHolographicMenu {\r\n private _handConstraintBehavior: HandConstraintBehavior;\r\n\r\n /**\r\n * The hand constraint behavior setting the transformation of this node\r\n */\r\n public get handConstraintBehavior() {\r\n return this._handConstraintBehavior;\r\n }\r\n\r\n protected _createNode(scene: Scene): Nullable<TransformNode> {\r\n const node = super._createNode(scene)! as Mesh;\r\n\r\n this._handConstraintBehavior.attach(node);\r\n\r\n return node;\r\n }\r\n\r\n /**\r\n * Creates a hand menu GUI 3D control\r\n * @param xr the WebXRExperienceHelper used to link this control to the enabled WebXRHandTracking feature\r\n * @param name name of the hand menu\r\n */\r\n constructor(xr: WebXRExperienceHelper, name?: string) {\r\n super(name);\r\n\r\n this._handConstraintBehavior = new HandConstraintBehavior();\r\n this._handConstraintBehavior.linkToXRExperience(xr);\r\n this.backPlateMargin = 0.15;\r\n this.rows = 3;\r\n }\r\n\r\n /**\r\n * Disposes the hand menu\r\n */\r\n public dispose() {\r\n super.dispose();\r\n\r\n this._handConstraintBehavior.detach();\r\n }\r\n}\r\n"]}
@@ -0,0 +1,48 @@
1
+ import { TransformNode } from "@babylonjs/core/Meshes/transformNode";
2
+ import { Mesh } from "@babylonjs/core/Meshes/mesh";
3
+ import { Scene } from "@babylonjs/core/scene";
4
+ import { FluentBackplateMaterial } from "../materials/fluentBackplate/fluentBackplateMaterial";
5
+ import { Control3D } from "./control3D";
6
+ /**
7
+ * Class used to create a holographic backplate in 3D
8
+ * @since 5.0.0
9
+ */
10
+ export declare class HolographicBackplate extends Control3D {
11
+ private _shareMaterials;
12
+ /**
13
+ * Base Url for the button model.
14
+ */
15
+ static MODEL_BASE_URL: string;
16
+ /**
17
+ * File name for the button model.
18
+ */
19
+ static MODEL_FILENAME: string;
20
+ private _model;
21
+ private _material;
22
+ /**
23
+ * Rendering ground id of the backplate mesh.
24
+ */
25
+ set renderingGroupId(id: number);
26
+ get renderingGroupId(): number;
27
+ /**
28
+ * Gets the material used by the backplate
29
+ */
30
+ get material(): FluentBackplateMaterial;
31
+ /**
32
+ * Gets a boolean indicating if this backplate shares its material with other HolographicBackplates
33
+ */
34
+ get shareMaterials(): boolean;
35
+ /**
36
+ * Creates a new holographic backplate
37
+ * @param name defines the control name
38
+ */
39
+ constructor(name?: string, _shareMaterials?: boolean);
40
+ protected _getTypeName(): string;
41
+ protected _createNode(scene: Scene): TransformNode;
42
+ private _createMaterial;
43
+ protected _affectMaterial(mesh: Mesh): void;
44
+ /**
45
+ * Releases all associated resources
46
+ */
47
+ dispose(): void;
48
+ }
@@ -0,0 +1,121 @@
1
+ import { __extends } from "tslib";
2
+ import { CreateBox } from "@babylonjs/core/Meshes/Builders/boxBuilder.js";
3
+ import { FluentBackplateMaterial } from "../materials/fluentBackplate/fluentBackplateMaterial.js";
4
+ import { Control3D } from "./control3D.js";
5
+ import { SceneLoader } from "@babylonjs/core/Loading/sceneLoader.js";
6
+ /**
7
+ * Class used to create a holographic backplate in 3D
8
+ * @since 5.0.0
9
+ */
10
+ var HolographicBackplate = /** @class */ (function (_super) {
11
+ __extends(HolographicBackplate, _super);
12
+ /**
13
+ * Creates a new holographic backplate
14
+ * @param name defines the control name
15
+ */
16
+ function HolographicBackplate(name, _shareMaterials) {
17
+ if (_shareMaterials === void 0) { _shareMaterials = true; }
18
+ var _this = _super.call(this, name) || this;
19
+ _this._shareMaterials = _shareMaterials;
20
+ return _this;
21
+ }
22
+ Object.defineProperty(HolographicBackplate.prototype, "renderingGroupId", {
23
+ get: function () {
24
+ return this._model.renderingGroupId;
25
+ },
26
+ /**
27
+ * Rendering ground id of the backplate mesh.
28
+ */
29
+ set: function (id) {
30
+ this._model.renderingGroupId = id;
31
+ },
32
+ enumerable: false,
33
+ configurable: true
34
+ });
35
+ Object.defineProperty(HolographicBackplate.prototype, "material", {
36
+ /**
37
+ * Gets the material used by the backplate
38
+ */
39
+ get: function () {
40
+ return this._material;
41
+ },
42
+ enumerable: false,
43
+ configurable: true
44
+ });
45
+ Object.defineProperty(HolographicBackplate.prototype, "shareMaterials", {
46
+ /**
47
+ * Gets a boolean indicating if this backplate shares its material with other HolographicBackplates
48
+ */
49
+ get: function () {
50
+ return this._shareMaterials;
51
+ },
52
+ enumerable: false,
53
+ configurable: true
54
+ });
55
+ HolographicBackplate.prototype._getTypeName = function () {
56
+ return "HolographicBackplate";
57
+ };
58
+ // Mesh association
59
+ HolographicBackplate.prototype._createNode = function (scene) {
60
+ var _this = this;
61
+ var _a;
62
+ var collisionMesh = CreateBox(((_a = this.name) !== null && _a !== void 0 ? _a : "HolographicBackplate") + "_CollisionMesh", {
63
+ width: 1.0,
64
+ height: 1.0,
65
+ depth: 1.0,
66
+ }, scene);
67
+ collisionMesh.isPickable = true;
68
+ collisionMesh.visibility = 0;
69
+ SceneLoader.ImportMeshAsync(undefined, HolographicBackplate.MODEL_BASE_URL, HolographicBackplate.MODEL_FILENAME, scene)
70
+ .then(function (result) {
71
+ var importedModel = result.meshes[1];
72
+ importedModel.name = _this.name + "_frontPlate";
73
+ importedModel.isPickable = false;
74
+ importedModel.parent = collisionMesh;
75
+ if (!!_this._material) {
76
+ importedModel.material = _this._material;
77
+ }
78
+ _this._model = importedModel;
79
+ });
80
+ return collisionMesh;
81
+ };
82
+ HolographicBackplate.prototype._createMaterial = function (mesh) {
83
+ this._material = new FluentBackplateMaterial(this.name + " Material", mesh.getScene());
84
+ };
85
+ HolographicBackplate.prototype._affectMaterial = function (mesh) {
86
+ // Back
87
+ if (this._shareMaterials) {
88
+ if (!this._host._touchSharedMaterials["fluentBackplateMaterial"]) {
89
+ this._createMaterial(mesh);
90
+ this._host._touchSharedMaterials["fluentBackplateMaterial"] = this._material;
91
+ }
92
+ else {
93
+ this._material = this._host._touchSharedMaterials["fluentBackplateMaterial"];
94
+ }
95
+ }
96
+ else {
97
+ this._createMaterial(mesh);
98
+ }
99
+ };
100
+ /**
101
+ * Releases all associated resources
102
+ */
103
+ HolographicBackplate.prototype.dispose = function () {
104
+ _super.prototype.dispose.call(this); // will dispose main mesh ie. back plate
105
+ if (!this.shareMaterials) {
106
+ this._material.dispose();
107
+ }
108
+ this._model.dispose();
109
+ };
110
+ /**
111
+ * Base Url for the button model.
112
+ */
113
+ HolographicBackplate.MODEL_BASE_URL = "https://assets.babylonjs.com/meshes/MRTK/";
114
+ /**
115
+ * File name for the button model.
116
+ */
117
+ HolographicBackplate.MODEL_FILENAME = 'mrtk-fluent-backplate.glb';
118
+ return HolographicBackplate;
119
+ }(Control3D));
120
+ export { HolographicBackplate };
121
+ //# sourceMappingURL=holographicBackplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"holographicBackplate.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/controls/holographicBackplate.ts"],"names":[],"mappings":"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","sourcesContent":["import { TransformNode } from \"@babylonjs/core/Meshes/transformNode\";\r\nimport { Mesh } from \"@babylonjs/core/Meshes/mesh\";\r\nimport { CreateBox } from \"@babylonjs/core/Meshes/Builders/boxBuilder\";\r\nimport { Scene } from \"@babylonjs/core/scene\";\r\nimport { FluentBackplateMaterial } from \"../materials/fluentBackplate/fluentBackplateMaterial\";\r\nimport { Control3D } from \"./control3D\";\r\nimport { SceneLoader } from \"@babylonjs/core/Loading/sceneLoader\";\r\nimport { AbstractMesh } from \"@babylonjs/core/Meshes/abstractMesh\";\r\n\r\n/**\r\n * Class used to create a holographic backplate in 3D\r\n * @since 5.0.0\r\n */\r\nexport class HolographicBackplate extends Control3D {\r\n /**\r\n * Base Url for the button model.\r\n */\r\n public static MODEL_BASE_URL: string = \"https://assets.babylonjs.com/meshes/MRTK/\";\r\n /**\r\n * File name for the button model.\r\n */\r\n public static MODEL_FILENAME: string = 'mrtk-fluent-backplate.glb';\r\n\r\n private _model: AbstractMesh;\r\n private _material: FluentBackplateMaterial;\r\n\r\n /**\r\n * Rendering ground id of the backplate mesh.\r\n */\r\n public set renderingGroupId(id: number) {\r\n this._model.renderingGroupId = id;\r\n }\r\n public get renderingGroupId(): number {\r\n return this._model.renderingGroupId;\r\n }\r\n\r\n /**\r\n * Gets the material used by the backplate\r\n */\r\n public get material(): FluentBackplateMaterial {\r\n return this._material;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this backplate shares its material with other HolographicBackplates\r\n */\r\n public get shareMaterials(): boolean {\r\n return this._shareMaterials;\r\n }\r\n\r\n /**\r\n * Creates a new holographic backplate\r\n * @param name defines the control name\r\n */\r\n constructor(name?: string, private _shareMaterials = true) {\r\n super(name);\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"HolographicBackplate\";\r\n }\r\n\r\n // Mesh association\r\n protected _createNode(scene: Scene): TransformNode {\r\n const collisionMesh = CreateBox((this.name ?? \"HolographicBackplate\") + \"_CollisionMesh\", {\r\n width: 1.0,\r\n height: 1.0,\r\n depth: 1.0,\r\n }, scene);\r\n collisionMesh.isPickable = true;\r\n collisionMesh.visibility = 0;\r\n\r\n SceneLoader.ImportMeshAsync(\r\n undefined,\r\n HolographicBackplate.MODEL_BASE_URL,\r\n HolographicBackplate.MODEL_FILENAME,\r\n scene)\r\n .then((result) => {\r\n var importedModel = result.meshes[1];\r\n importedModel.name = `${this.name}_frontPlate`;\r\n importedModel.isPickable = false;\r\n importedModel.parent = collisionMesh;\r\n if (!!this._material) {\r\n importedModel.material = this._material;\r\n }\r\n this._model = importedModel;\r\n });\r\n\r\n return collisionMesh;\r\n }\r\n\r\n private _createMaterial(mesh: Mesh) {\r\n this._material = new FluentBackplateMaterial(this.name + \" Material\", mesh.getScene());\r\n }\r\n\r\n protected _affectMaterial(mesh: Mesh) {\r\n // Back\r\n if (this._shareMaterials) {\r\n if (!this._host._touchSharedMaterials[\"fluentBackplateMaterial\"]) {\r\n this._createMaterial(mesh);\r\n this._host._touchSharedMaterials[\"fluentBackplateMaterial\"] = this._material;\r\n } else {\r\n this._material = this._host._touchSharedMaterials[\"fluentBackplateMaterial\"] as FluentBackplateMaterial;\r\n }\r\n } else {\r\n this._createMaterial(mesh);\r\n }\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n super.dispose(); // will dispose main mesh ie. back plate\r\n\r\n if (!this.shareMaterials) {\r\n this._material.dispose();\r\n }\r\n\r\n this._model.dispose();\r\n }\r\n}"]}
@@ -4,7 +4,7 @@ import { StandardMaterial } from "@babylonjs/core/Materials/standardMaterial";
4
4
  import { TransformNode } from "@babylonjs/core/Meshes/transformNode";
5
5
  import { Mesh } from "@babylonjs/core/Meshes/mesh";
6
6
  import { Scene } from "@babylonjs/core/scene";
7
- import { FluentMaterial } from "../materials/fluentMaterial";
7
+ import { FluentMaterial } from "../materials/fluent/fluentMaterial";
8
8
  import { AdvancedDynamicTexture } from "../../2D/advancedDynamicTexture";
9
9
  /**
10
10
  * Class used to create a holographic button in 3D