@babylonjs/gui 5.0.0-rc.1 → 5.0.0-rc.12

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 (306) hide show
  1. package/2D/adtInstrumentation.d.ts +52 -52
  2. package/2D/adtInstrumentation.js +126 -126
  3. package/2D/adtInstrumentation.js.map +1 -1
  4. package/2D/advancedDynamicTexture.d.ts +449 -423
  5. package/2D/advancedDynamicTexture.js +1318 -1286
  6. package/2D/advancedDynamicTexture.js.map +1 -1
  7. package/2D/controls/button.d.ts +135 -97
  8. package/2D/controls/button.js +276 -238
  9. package/2D/controls/button.js.map +1 -1
  10. package/2D/controls/checkbox.d.ts +59 -51
  11. package/2D/controls/checkbox.js +188 -178
  12. package/2D/controls/checkbox.js.map +1 -1
  13. package/2D/controls/colorpicker.d.ts +103 -90
  14. package/2D/controls/colorpicker.js +1417 -1400
  15. package/2D/controls/colorpicker.js.map +1 -1
  16. package/2D/controls/container.d.ts +175 -130
  17. package/2D/controls/container.js +570 -525
  18. package/2D/controls/container.js.map +1 -1
  19. package/2D/controls/control.d.ts +866 -743
  20. package/2D/controls/control.js +2433 -2308
  21. package/2D/controls/control.js.map +1 -1
  22. package/2D/controls/displayGrid.d.ts +53 -55
  23. package/2D/controls/displayGrid.js +245 -245
  24. package/2D/controls/displayGrid.js.map +1 -1
  25. package/2D/controls/ellipse.d.ts +21 -21
  26. package/2D/controls/ellipse.js +85 -85
  27. package/2D/controls/ellipse.js.map +1 -1
  28. package/2D/controls/focusableButton.d.ts +59 -52
  29. package/2D/controls/focusableButton.js +99 -92
  30. package/2D/controls/focusableButton.js.map +1 -1
  31. package/2D/controls/focusableControl.d.ts +34 -34
  32. package/2D/controls/focusableControl.js +1 -1
  33. package/2D/controls/focusableControl.js.map +1 -1
  34. package/2D/controls/grid.d.ts +139 -135
  35. package/2D/controls/grid.js +529 -525
  36. package/2D/controls/grid.js.map +1 -1
  37. package/2D/controls/image.d.ts +204 -197
  38. package/2D/controls/image.js +887 -879
  39. package/2D/controls/image.js.map +1 -1
  40. package/2D/controls/index.d.ts +29 -29
  41. package/2D/controls/index.js +29 -29
  42. package/2D/controls/index.js.map +1 -1
  43. package/2D/controls/inputPassword.d.ts +9 -8
  44. package/2D/controls/inputPassword.js +28 -25
  45. package/2D/controls/inputPassword.js.map +1 -1
  46. package/2D/controls/inputText.d.ts +201 -182
  47. package/2D/controls/inputText.js +1119 -1096
  48. package/2D/controls/inputText.js.map +1 -1
  49. package/2D/controls/line.d.ts +66 -66
  50. package/2D/controls/line.js +271 -271
  51. package/2D/controls/line.js.map +1 -1
  52. package/2D/controls/multiLine.d.ts +75 -77
  53. package/2D/controls/multiLine.js +262 -262
  54. package/2D/controls/multiLine.js.map +1 -1
  55. package/2D/controls/radioButton.d.ts +49 -49
  56. package/2D/controls/radioButton.js +205 -205
  57. package/2D/controls/radioButton.js.map +1 -1
  58. package/2D/controls/rectangle.d.ts +29 -29
  59. package/2D/controls/rectangle.js +150 -150
  60. package/2D/controls/rectangle.js.map +1 -1
  61. package/2D/controls/scrollViewers/scrollViewer.d.ts +182 -175
  62. package/2D/controls/scrollViewers/scrollViewer.js +677 -676
  63. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  64. package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +57 -45
  65. package/2D/controls/scrollViewers/scrollViewerWindow.js +278 -263
  66. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  67. package/2D/controls/selector.d.ts +263 -209
  68. package/2D/controls/selector.js +692 -629
  69. package/2D/controls/selector.js.map +1 -1
  70. package/2D/controls/sliders/baseSlider.d.ts +82 -78
  71. package/2D/controls/sliders/baseSlider.js +347 -343
  72. package/2D/controls/sliders/baseSlider.js.map +1 -1
  73. package/2D/controls/sliders/imageBasedSlider.d.ts +49 -47
  74. package/2D/controls/sliders/imageBasedSlider.js +192 -188
  75. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  76. package/2D/controls/sliders/imageScrollBar.d.ts +65 -61
  77. package/2D/controls/sliders/imageScrollBar.js +263 -256
  78. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  79. package/2D/controls/sliders/scrollBar.d.ts +38 -34
  80. package/2D/controls/sliders/scrollBar.js +143 -136
  81. package/2D/controls/sliders/scrollBar.js.map +1 -1
  82. package/2D/controls/sliders/slider.d.ts +35 -37
  83. package/2D/controls/sliders/slider.js +271 -271
  84. package/2D/controls/sliders/slider.js.map +1 -1
  85. package/2D/controls/stackPanel.d.ts +64 -56
  86. package/2D/controls/stackPanel.js +246 -236
  87. package/2D/controls/stackPanel.js.map +1 -1
  88. package/2D/controls/statics.d.ts +6 -6
  89. package/2D/controls/statics.js +49 -47
  90. package/2D/controls/statics.js.map +1 -1
  91. package/2D/controls/textBlock.d.ts +175 -172
  92. package/2D/controls/textBlock.js +603 -598
  93. package/2D/controls/textBlock.js.map +1 -1
  94. package/2D/controls/textWrapper.d.ts +13 -13
  95. package/2D/controls/textWrapper.js +101 -101
  96. package/2D/controls/textWrapper.js.map +1 -1
  97. package/2D/controls/toggleButton.d.ts +117 -83
  98. package/2D/controls/toggleButton.js +268 -234
  99. package/2D/controls/toggleButton.js.map +1 -1
  100. package/2D/controls/virtualKeyboard.d.ts +96 -96
  101. package/2D/controls/virtualKeyboard.js +256 -256
  102. package/2D/controls/virtualKeyboard.js.map +1 -1
  103. package/2D/index.d.ts +9 -9
  104. package/2D/index.js +10 -9
  105. package/2D/index.js.map +1 -1
  106. package/2D/math2D.d.ts +117 -117
  107. package/2D/math2D.js +221 -221
  108. package/2D/math2D.js.map +1 -1
  109. package/2D/measure.d.ts +77 -77
  110. package/2D/measure.js +139 -149
  111. package/2D/measure.js.map +1 -1
  112. package/2D/multiLinePoint.d.ts +47 -47
  113. package/2D/multiLinePoint.js +127 -127
  114. package/2D/multiLinePoint.js.map +1 -1
  115. package/2D/style.d.ts +46 -46
  116. package/2D/style.js +97 -97
  117. package/2D/style.js.map +1 -1
  118. package/2D/valueAndUnit.d.ts +89 -89
  119. package/2D/valueAndUnit.js +226 -222
  120. package/2D/valueAndUnit.js.map +1 -1
  121. package/2D/xmlLoader.d.ts +60 -60
  122. package/2D/xmlLoader.js +348 -348
  123. package/2D/xmlLoader.js.map +1 -1
  124. package/3D/behaviors/defaultBehavior.d.ts +73 -73
  125. package/3D/behaviors/defaultBehavior.js +121 -121
  126. package/3D/behaviors/defaultBehavior.js.map +1 -1
  127. package/3D/controls/abstractButton3D.d.ts +15 -15
  128. package/3D/controls/abstractButton3D.js +25 -25
  129. package/3D/controls/abstractButton3D.js.map +1 -1
  130. package/3D/controls/button3D.d.ts +30 -30
  131. package/3D/controls/button3D.js +93 -93
  132. package/3D/controls/button3D.js.map +1 -1
  133. package/3D/controls/container3D.d.ts +72 -72
  134. package/3D/controls/container3D.js +139 -140
  135. package/3D/controls/container3D.js.map +1 -1
  136. package/3D/controls/contentDisplay3D.d.ts +30 -30
  137. package/3D/controls/contentDisplay3D.js +79 -78
  138. package/3D/controls/contentDisplay3D.js.map +1 -1
  139. package/3D/controls/control3D.d.ts +201 -165
  140. package/3D/controls/control3D.js +445 -408
  141. package/3D/controls/control3D.js.map +1 -1
  142. package/3D/controls/cylinderPanel.d.ts +17 -17
  143. package/3D/controls/cylinderPanel.js +66 -66
  144. package/3D/controls/cylinderPanel.js.map +1 -1
  145. package/3D/controls/handMenu.d.ts +28 -28
  146. package/3D/controls/handMenu.js +47 -47
  147. package/3D/controls/handMenu.js.map +1 -1
  148. package/3D/controls/holographicBackplate.d.ts +49 -48
  149. package/3D/controls/holographicBackplate.js +120 -120
  150. package/3D/controls/holographicBackplate.js.map +1 -1
  151. package/3D/controls/holographicButton.d.ts +84 -83
  152. package/3D/controls/holographicButton.js +339 -338
  153. package/3D/controls/holographicButton.js.map +1 -1
  154. package/3D/controls/holographicSlate.d.ts +131 -128
  155. package/3D/controls/holographicSlate.js +431 -428
  156. package/3D/controls/holographicSlate.js.map +1 -1
  157. package/3D/controls/index.d.ts +21 -21
  158. package/3D/controls/index.js +21 -21
  159. package/3D/controls/index.js.map +1 -1
  160. package/3D/controls/meshButton3D.d.ts +21 -21
  161. package/3D/controls/meshButton3D.js +62 -61
  162. package/3D/controls/meshButton3D.js.map +1 -1
  163. package/3D/controls/nearMenu.d.ts +44 -44
  164. package/3D/controls/nearMenu.js +114 -112
  165. package/3D/controls/nearMenu.js.map +1 -1
  166. package/3D/controls/planePanel.d.ts +9 -9
  167. package/3D/controls/planePanel.js +36 -36
  168. package/3D/controls/planePanel.js.map +1 -1
  169. package/3D/controls/scatterPanel.d.ts +18 -18
  170. package/3D/controls/scatterPanel.js +108 -108
  171. package/3D/controls/scatterPanel.js.map +1 -1
  172. package/3D/controls/slider3D.d.ts +81 -81
  173. package/3D/controls/slider3D.js +268 -267
  174. package/3D/controls/slider3D.js.map +1 -1
  175. package/3D/controls/spherePanel.d.ts +17 -17
  176. package/3D/controls/spherePanel.js +67 -67
  177. package/3D/controls/spherePanel.js.map +1 -1
  178. package/3D/controls/stackPanel3D.d.ts +22 -22
  179. package/3D/controls/stackPanel3D.js +107 -107
  180. package/3D/controls/stackPanel3D.js.map +1 -1
  181. package/3D/controls/touchButton3D.d.ts +80 -75
  182. package/3D/controls/touchButton3D.js +233 -227
  183. package/3D/controls/touchButton3D.js.map +1 -1
  184. package/3D/controls/touchHolographicButton.d.ts +110 -109
  185. package/3D/controls/touchHolographicButton.js +445 -445
  186. package/3D/controls/touchHolographicButton.js.map +1 -1
  187. package/3D/controls/touchHolographicMenu.d.ts +61 -61
  188. package/3D/controls/touchHolographicMenu.js +149 -148
  189. package/3D/controls/touchHolographicMenu.js.map +1 -1
  190. package/3D/controls/touchMeshButton3D.d.ts +21 -22
  191. package/3D/controls/touchMeshButton3D.js +62 -62
  192. package/3D/controls/touchMeshButton3D.js.map +1 -1
  193. package/3D/controls/volumeBasedPanel.d.ts +53 -52
  194. package/3D/controls/volumeBasedPanel.js +174 -174
  195. package/3D/controls/volumeBasedPanel.js.map +1 -1
  196. package/3D/gizmos/gizmoHandle.d.ts +108 -108
  197. package/3D/gizmos/gizmoHandle.js +209 -209
  198. package/3D/gizmos/gizmoHandle.js.map +1 -1
  199. package/3D/gizmos/index.d.ts +2 -2
  200. package/3D/gizmos/index.js +2 -2
  201. package/3D/gizmos/index.js.map +1 -1
  202. package/3D/gizmos/slateGizmo.d.ts +57 -57
  203. package/3D/gizmos/slateGizmo.js +369 -369
  204. package/3D/gizmos/slateGizmo.js.map +1 -1
  205. package/3D/gui3DManager.d.ts +94 -94
  206. package/3D/gui3DManager.js +257 -257
  207. package/3D/gui3DManager.js.map +1 -1
  208. package/3D/index.d.ts +5 -5
  209. package/3D/index.js +6 -5
  210. package/3D/index.js.map +1 -1
  211. package/3D/materials/fluent/fluentMaterial.d.ts +91 -90
  212. package/3D/materials/fluent/fluentMaterial.js +292 -281
  213. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  214. package/3D/materials/fluent/index.d.ts +1 -1
  215. package/3D/materials/fluent/index.js +1 -1
  216. package/3D/materials/fluent/index.js.map +1 -1
  217. package/3D/materials/fluent/shaders/fluent.fragment.d.ts +5 -5
  218. package/3D/materials/fluent/shaders/fluent.fragment.js +8 -6
  219. package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -1
  220. package/3D/materials/fluent/shaders/fluent.vertex.d.ts +5 -5
  221. package/3D/materials/fluent/shaders/fluent.vertex.js +8 -6
  222. package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -1
  223. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +155 -154
  224. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +469 -434
  225. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  226. package/3D/materials/fluentBackplate/index.d.ts +1 -1
  227. package/3D/materials/fluentBackplate/index.js +1 -1
  228. package/3D/materials/fluentBackplate/index.js.map +1 -1
  229. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -5
  230. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +8 -6
  231. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -1
  232. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -5
  233. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +8 -6
  234. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -1
  235. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +190 -189
  236. package/3D/materials/fluentButton/fluentButtonMaterial.js +539 -537
  237. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  238. package/3D/materials/fluentButton/index.d.ts +1 -1
  239. package/3D/materials/fluentButton/index.js +1 -1
  240. package/3D/materials/fluentButton/index.js.map +1 -1
  241. package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -5
  242. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +8 -6
  243. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -1
  244. package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -5
  245. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +8 -6
  246. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -1
  247. package/3D/materials/fluentMaterial.d.ts +4 -4
  248. package/3D/materials/fluentMaterial.js +4 -4
  249. package/3D/materials/fluentMaterial.js.map +1 -1
  250. package/3D/materials/handle/handleMaterial.d.ts +68 -68
  251. package/3D/materials/handle/handleMaterial.js +126 -126
  252. package/3D/materials/handle/handleMaterial.js.map +1 -1
  253. package/3D/materials/handle/index.d.ts +1 -1
  254. package/3D/materials/handle/index.js +1 -1
  255. package/3D/materials/handle/index.js.map +1 -1
  256. package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -5
  257. package/3D/materials/handle/shaders/handle.fragment.js +8 -6
  258. package/3D/materials/handle/shaders/handle.fragment.js.map +1 -1
  259. package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -5
  260. package/3D/materials/handle/shaders/handle.vertex.js +8 -6
  261. package/3D/materials/handle/shaders/handle.vertex.js.map +1 -1
  262. package/3D/materials/index.d.ts +5 -5
  263. package/3D/materials/index.js +6 -5
  264. package/3D/materials/index.js.map +1 -1
  265. package/3D/materials/mrdl/index.d.ts +3 -3
  266. package/3D/materials/mrdl/index.js +3 -3
  267. package/3D/materials/mrdl/index.js.map +1 -1
  268. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +148 -147
  269. package/3D/materials/mrdl/mrdlBackplateMaterial.js +436 -409
  270. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  271. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +334 -333
  272. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +851 -786
  273. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  274. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +334 -333
  275. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +851 -786
  276. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  277. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -5
  278. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +8 -6
  279. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -1
  280. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -5
  281. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +8 -6
  282. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -1
  283. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -5
  284. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +8 -6
  285. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -1
  286. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -5
  287. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +8 -6
  288. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -1
  289. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -5
  290. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +8 -6
  291. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -1
  292. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -5
  293. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +8 -6
  294. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -1
  295. package/3D/vector3WithInfo.d.ts +16 -16
  296. package/3D/vector3WithInfo.js +23 -23
  297. package/3D/vector3WithInfo.js.map +1 -1
  298. package/index.d.ts +2 -2
  299. package/index.js +3 -2
  300. package/index.js.map +1 -1
  301. package/legacy/legacy.d.ts +1 -1
  302. package/legacy/legacy.js +14 -13
  303. package/legacy/legacy.js.map +1 -1
  304. package/license.md +71 -0
  305. package/package.json +37 -325
  306. package/readme.md +2 -2
@@ -1,370 +1,370 @@
1
- import { __extends } from "tslib";
2
- import { Gizmo } from "@babylonjs/core/Gizmos/gizmo.js";
3
- import { Epsilon } from "@babylonjs/core/Maths/math.constants.js";
4
- import { Matrix, Quaternion, TmpVectors, Vector3 } from "@babylonjs/core/Maths/math.vector.js";
5
- import { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
6
- import { PivotTools } from "@babylonjs/core/Misc/pivotTools.js";
7
- import { CornerHandle, SideHandle } from "./gizmoHandle.js";
8
- /**
9
- * Gizmo to resize 2D slates
10
- */
11
- var SlateGizmo = /** @class */ (function (_super) {
12
- __extends(SlateGizmo, _super);
13
- function SlateGizmo(utilityLayer) {
14
- var _this = _super.call(this, utilityLayer) || this;
15
- _this._boundingDimensions = new Vector3(0, 0, 0);
16
- _this._renderObserver = null;
17
- _this._tmpQuaternion = new Quaternion();
18
- _this._tmpVector = new Vector3(0, 0, 0);
19
- // Ordered bl, br, tr, tl
20
- _this._corners = [];
21
- // Ordered left, bottom, right, top
22
- _this._sides = [];
23
- _this._boundingBoxGizmo = {
24
- min: new Vector3(),
25
- max: new Vector3(),
26
- };
27
- /**
28
- * Value we use to offset handles from mesh
29
- */
30
- _this._margin = 0.35;
31
- _this._handleSize = 0.075;
32
- _this._attachedSlate = null;
33
- _this._existingSlateScale = new Vector3();
34
- /**
35
- * If set, the handles will increase in size based on the distance away from the camera to have a consistent screen size (Default: true)
36
- */
37
- _this.fixedScreenSize = false;
38
- /**
39
- * The distance away from the object which the draggable meshes should appear world sized when fixedScreenSize is set to true (default: 10)
40
- */
41
- _this.fixedScreenSizeDistanceFactor = 10;
42
- _this._createNode();
43
- _this.updateScale = false;
44
- _this._renderObserver = _this.gizmoLayer.originalScene.onBeforeRenderObservable.add(function () {
45
- // Only update the bounding box if scaling has changed
46
- if (_this.attachedMesh && !_this._existingSlateScale.equals(_this.attachedMesh.scaling)) {
47
- _this.updateBoundingBox();
48
- }
49
- });
50
- return _this;
51
- }
52
- Object.defineProperty(SlateGizmo.prototype, "attachedSlate", {
53
- get: function () {
54
- return this._attachedSlate;
55
- },
56
- /**
57
- * The slate attached to this gizmo
58
- */
59
- set: function (control) {
60
- var _this = this;
61
- if (control) {
62
- this.attachedMesh = control.mesh;
63
- this.updateBoundingBox();
64
- this._pickedPointObserver = control._host.onPickingObservable.add(function (pickedMesh) {
65
- if (_this._handleHovered && (!pickedMesh || pickedMesh.parent !== _this._handleHovered.node)) {
66
- _this._handleHovered.hover = false;
67
- _this._handleHovered = null;
68
- }
69
- if (pickedMesh && pickedMesh.parent && pickedMesh.parent.reservedDataStore && pickedMesh.parent.reservedDataStore.handle) {
70
- var handle = pickedMesh.parent.reservedDataStore.handle;
71
- if (handle.gizmo === _this) {
72
- _this._handleHovered = handle;
73
- _this._handleHovered.hover = true;
74
- }
75
- }
76
- });
77
- }
78
- else if (this._attachedSlate) {
79
- this._attachedSlate._host.onPickingObservable.remove(this._pickedPointObserver);
80
- }
81
- this._attachedSlate = control;
82
- },
83
- enumerable: false,
84
- configurable: true
85
- });
86
- SlateGizmo.prototype._createNode = function () {
87
- var _this = this;
88
- this._handlesParent = new TransformNode("handlesParent", this.gizmoLayer.utilityLayerScene);
89
- this._handlesParent.rotationQuaternion = Quaternion.Identity();
90
- var masksCorners = [
91
- {
92
- dimensions: new Vector3(-1, -1, 0),
93
- origin: new Vector3(1, 0, 0),
94
- },
95
- {
96
- dimensions: new Vector3(1, -1, 0),
97
- origin: new Vector3(0, 0, 0),
98
- },
99
- {
100
- dimensions: new Vector3(1, 1, 0),
101
- origin: new Vector3(0, 1, 0),
102
- },
103
- {
104
- dimensions: new Vector3(-1, 1, 0),
105
- origin: new Vector3(1, 1, 0),
106
- },
107
- ];
108
- for (var i = 0; i < 4; i++) {
109
- var corner = new CornerHandle(this, this.gizmoLayer.utilityLayerScene);
110
- this._corners.push(corner);
111
- corner.node.rotation.z = (Math.PI / 2) * i;
112
- corner.node.parent = this._handlesParent;
113
- this._assignDragBehaviorCorners(corner, function (originStart, dimensionsStart, offset, masks) { return _this._moveHandle(originStart, dimensionsStart, offset, masks, true); }, masksCorners[i]);
114
- }
115
- for (var i = 0; i < 4; i++) {
116
- var side = new SideHandle(this, this.gizmoLayer.utilityLayerScene);
117
- this._sides.push(side);
118
- side.node.rotation.z = (Math.PI / 2) * i;
119
- side.node.parent = this._handlesParent;
120
- this._assignDragBehaviorSides(side, i % 2 === 0 ? new Vector3(0, 1, 0) : new Vector3(1, 0, 0));
121
- }
122
- this._handlesParent.parent = this._rootMesh;
123
- };
124
- SlateGizmo.prototype._keepAspectRatio = function (vector, aspectRatio, invertDiagonal) {
125
- if (invertDiagonal === void 0) { invertDiagonal = false; }
126
- var axis = TmpVectors.Vector3[0];
127
- axis.copyFromFloats(aspectRatio, 1, 0).normalize();
128
- if (invertDiagonal) {
129
- axis.y *= -1;
130
- }
131
- var dot = Vector3.Dot(vector, axis);
132
- vector.copyFrom(axis).scaleInPlace(dot);
133
- };
134
- SlateGizmo.prototype._clampDimensions = function (vector, dimensions, mask, keepAspectRatio) {
135
- if (keepAspectRatio === void 0) { keepAspectRatio = false; }
136
- var impact = TmpVectors.Vector3[0];
137
- impact.copyFrom(vector).multiplyInPlace(mask);
138
- var clampedDimensions = TmpVectors.Vector3[1];
139
- clampedDimensions.copyFromFloats(Math.max(this._attachedSlate.minDimensions.x, impact.x + dimensions.x), Math.max(this._attachedSlate.minDimensions.y, impact.y + dimensions.y), 0);
140
- if (keepAspectRatio) {
141
- // Extra logic to ensure the ratio is maintained when the vector has been clamped
142
- var ratio = dimensions.x / dimensions.y;
143
- clampedDimensions.x = Math.max(clampedDimensions.x, clampedDimensions.y * ratio);
144
- clampedDimensions.y = Math.max(clampedDimensions.y, clampedDimensions.x / ratio);
145
- }
146
- // Calculating the real impact of vector on clamped dimensions
147
- impact.copyFrom(clampedDimensions).subtractInPlace(dimensions);
148
- vector.x = Math.sign(vector.x) * Math.abs(impact.x);
149
- vector.y = Math.sign(vector.y) * Math.abs(impact.y);
150
- };
151
- SlateGizmo.prototype._moveHandle = function (originStart, dimensionsStart, offset, masks, isCorner) {
152
- if (!this._attachedSlate) {
153
- return;
154
- }
155
- if (isCorner) {
156
- var aspectRatio = dimensionsStart.x / dimensionsStart.y;
157
- this._keepAspectRatio(offset, aspectRatio, masks.dimensions.x * masks.dimensions.y < 0);
158
- }
159
- this._clampDimensions(offset, dimensionsStart, masks.dimensions, isCorner);
160
- var offsetOriginMasked = TmpVectors.Vector3[0];
161
- var offsetDimensionsMasked = TmpVectors.Vector3[1];
162
- offsetOriginMasked.copyFrom(offset).multiplyInPlace(masks.origin);
163
- offsetDimensionsMasked.copyFrom(offset).multiplyInPlace(masks.dimensions);
164
- this._attachedSlate.origin.copyFrom(originStart).addInPlace(offsetOriginMasked);
165
- this._attachedSlate.dimensions.set(dimensionsStart.x + offsetDimensionsMasked.x, dimensionsStart.y + offsetDimensionsMasked.y);
166
- };
167
- SlateGizmo.prototype._assignDragBehaviorCorners = function (handle, moveFn, masks) {
168
- var _this = this;
169
- var dimensionsStart = new Vector3();
170
- var originStart = new Vector3();
171
- var dragOrigin = new Vector3();
172
- var toObjectFrame = new Matrix();
173
- var dragPlaneNormal = new Vector3();
174
- var projectToRef = function (position, normal, origin, ref) {
175
- // Projects on the plane with its normal and origin
176
- position.subtractToRef(origin, TmpVectors.Vector3[0]);
177
- var dot = Vector3.Dot(TmpVectors.Vector3[0], normal);
178
- TmpVectors.Vector3[1].copyFrom(normal).scaleInPlace(dot);
179
- TmpVectors.Vector3[0].subtractInPlace(TmpVectors.Vector3[1]);
180
- TmpVectors.Vector3[0].addToRef(origin, ref);
181
- };
182
- var dragStart = function (event) {
183
- if (_this.attachedSlate && _this.attachedMesh) {
184
- dimensionsStart.set(_this.attachedSlate.dimensions.x, _this.attachedSlate.dimensions.y, Epsilon);
185
- originStart.copyFrom(_this.attachedSlate.origin);
186
- dragOrigin.copyFrom(event.position);
187
- toObjectFrame.copyFrom(_this.attachedMesh.computeWorldMatrix(true));
188
- toObjectFrame.invert();
189
- _this.attachedSlate._followButton.isToggled = false;
190
- Vector3.TransformNormalToRef(Vector3.Forward(), _this.attachedMesh.getWorldMatrix(), dragPlaneNormal);
191
- dragPlaneNormal.normalize();
192
- if (_this._handleHovered) {
193
- _this._handleDragged = _this._handleHovered;
194
- _this._handleDragged.drag = true;
195
- }
196
- }
197
- };
198
- var dragging = function (event) {
199
- if (_this.attachedSlate && _this.attachedMesh) {
200
- projectToRef(event.position, dragPlaneNormal, dragOrigin, _this._tmpVector);
201
- _this._tmpVector.subtractInPlace(dragOrigin);
202
- Vector3.TransformNormalToRef(_this._tmpVector, toObjectFrame, _this._tmpVector);
203
- moveFn(originStart, dimensionsStart, _this._tmpVector, masks);
204
- _this.attachedSlate._positionElements();
205
- _this.updateBoundingBox();
206
- }
207
- };
208
- var dragEnd = function () {
209
- if (_this.attachedSlate && _this.attachedNode) {
210
- _this.attachedSlate._updatePivot();
211
- if (_this._handleDragged) {
212
- _this._handleDragged.drag = false;
213
- _this._handleDragged = null;
214
- }
215
- }
216
- };
217
- handle.setDragBehavior(dragStart, dragging, dragEnd);
218
- };
219
- SlateGizmo.prototype._assignDragBehaviorSides = function (handle, dragPlaneNormal) {
220
- var _this = this;
221
- var quaternionOrigin = new Quaternion();
222
- var dragOrigin = new Vector3();
223
- var directionOrigin = new Vector3();
224
- var worldPivot = new Vector3();
225
- var worldPlaneNormal = new Vector3();
226
- var dragStart = function (event) {
227
- if (_this.attachedSlate && _this.attachedMesh) {
228
- quaternionOrigin.copyFrom(_this.attachedMesh.rotationQuaternion);
229
- dragOrigin.copyFrom(event.position);
230
- worldPivot.copyFrom(_this.attachedMesh.getAbsolutePivotPoint());
231
- directionOrigin.copyFrom(dragOrigin).subtractInPlace(worldPivot).normalize();
232
- _this.attachedSlate._followButton.isToggled = false;
233
- Vector3.TransformNormalToRef(dragPlaneNormal, _this.attachedMesh.getWorldMatrix(), worldPlaneNormal);
234
- worldPlaneNormal.normalize();
235
- if (_this._handleHovered) {
236
- _this._handleDragged = _this._handleHovered;
237
- _this._handleDragged.drag = true;
238
- }
239
- }
240
- };
241
- var dragging = function (event) {
242
- if (_this.attachedSlate && _this.attachedMesh) {
243
- _this._tmpVector.copyFrom(event.position);
244
- _this._tmpVector.subtractInPlace(worldPivot);
245
- _this._tmpVector.normalize();
246
- var angle = -Vector3.GetAngleBetweenVectorsOnPlane(_this._tmpVector, directionOrigin, worldPlaneNormal);
247
- Quaternion.RotationAxisToRef(dragPlaneNormal, angle, _this._tmpQuaternion);
248
- quaternionOrigin.multiplyToRef(_this._tmpQuaternion, _this.attachedMesh.rotationQuaternion);
249
- }
250
- };
251
- var dragEnd = function () {
252
- if (_this.attachedSlate && _this.attachedNode) {
253
- _this.attachedSlate._updatePivot();
254
- if (_this._handleDragged) {
255
- _this._handleDragged.drag = false;
256
- _this._handleDragged = null;
257
- }
258
- }
259
- };
260
- handle.setDragBehavior(dragStart, dragging, dragEnd);
261
- };
262
- SlateGizmo.prototype._attachedNodeChanged = function (value) {
263
- if (value) {
264
- this.updateBoundingBox();
265
- }
266
- };
267
- /**
268
- * Updates the bounding box information for the gizmo
269
- */
270
- SlateGizmo.prototype.updateBoundingBox = function () {
271
- if (this.attachedMesh) {
272
- PivotTools._RemoveAndStorePivotPoint(this.attachedMesh);
273
- // Store original parent
274
- var originalParent = this.attachedMesh.parent;
275
- this.attachedMesh.setParent(null);
276
- this._update();
277
- // Rotate based on axis
278
- if (!this.attachedMesh.rotationQuaternion) {
279
- this.attachedMesh.rotationQuaternion = Quaternion.RotationYawPitchRoll(this.attachedMesh.rotation.y, this.attachedMesh.rotation.x, this.attachedMesh.rotation.z);
280
- }
281
- // Store original position and reset mesh to origin before computing the bounding box
282
- this._tmpQuaternion.copyFrom(this.attachedMesh.rotationQuaternion);
283
- this._tmpVector.copyFrom(this.attachedMesh.position);
284
- this.attachedMesh.rotationQuaternion.set(0, 0, 0, 1);
285
- this.attachedMesh.position.set(0, 0, 0);
286
- // Update bounding dimensions/positions
287
- var boundingMinMax = this.attachedMesh.getHierarchyBoundingVectors();
288
- boundingMinMax.max.subtractToRef(boundingMinMax.min, this._boundingDimensions);
289
- this._boundingBoxGizmo.min = boundingMinMax.min;
290
- this._boundingBoxGizmo.max = boundingMinMax.max;
291
- // Update handles of the gizmo
292
- this._updateHandlesPosition();
293
- this._updateHandlesScaling();
294
- // Restore position/rotation values
295
- this.attachedMesh.rotationQuaternion.copyFrom(this._tmpQuaternion);
296
- this.attachedMesh.position.copyFrom(this._tmpVector);
297
- PivotTools._RestorePivotPoint(this.attachedMesh);
298
- // Restore original parent
299
- this.attachedMesh.setParent(originalParent);
300
- this.attachedMesh.computeWorldMatrix(true);
301
- this._existingSlateScale.copyFrom(this.attachedMesh.scaling);
302
- }
303
- };
304
- SlateGizmo.prototype._updateHandlesPosition = function () {
305
- var min = this._boundingBoxGizmo.min.clone();
306
- var max = this._boundingBoxGizmo.max.clone();
307
- var handleScaling = this._corners[0].node.scaling.length();
308
- min.x -= this._margin * handleScaling;
309
- min.y -= this._margin * handleScaling;
310
- max.x += this._margin * handleScaling;
311
- max.y += this._margin * handleScaling;
312
- var center = min.add(max).scaleInPlace(0.5);
313
- this._corners[0].node.position.copyFromFloats(min.x, min.y, 0);
314
- this._corners[1].node.position.copyFromFloats(max.x, min.y, 0);
315
- this._corners[2].node.position.copyFromFloats(max.x, max.y, 0);
316
- this._corners[3].node.position.copyFromFloats(min.x, max.y, 0);
317
- this._sides[0].node.position.copyFromFloats(min.x, center.y, 0);
318
- this._sides[1].node.position.copyFromFloats(center.x, min.y, 0);
319
- this._sides[2].node.position.copyFromFloats(max.x, center.y, 0);
320
- this._sides[3].node.position.copyFromFloats(center.x, max.y, 0);
321
- };
322
- SlateGizmo.prototype._updateHandlesScaling = function () {
323
- if (this._attachedSlate && this._attachedSlate.mesh) {
324
- var scaledWidth = this._attachedSlate.mesh.scaling.x * this._attachedSlate.dimensions.x;
325
- var scaledHeight = this._attachedSlate.mesh.scaling.y * this._attachedSlate.dimensions.y;
326
- var scale = Math.min(scaledWidth, scaledHeight) * this._handleSize;
327
- for (var index = 0; index < this._corners.length; index++) {
328
- this._corners[index].node.scaling.setAll(scale);
329
- }
330
- for (var index = 0; index < this._sides.length; index++) {
331
- this._sides[index].node.scaling.setAll(scale);
332
- }
333
- }
334
- };
335
- SlateGizmo.prototype._update = function () {
336
- _super.prototype._update.call(this);
337
- if (!this.gizmoLayer.utilityLayerScene.activeCamera) {
338
- return;
339
- }
340
- if (this._attachedSlate && this._attachedSlate.mesh) {
341
- if (this.fixedScreenSize) {
342
- this._attachedSlate.mesh.absolutePosition.subtractToRef(this.gizmoLayer.utilityLayerScene.activeCamera.position, this._tmpVector);
343
- var distanceFromCamera = (this._handleSize * this._tmpVector.length()) / this.fixedScreenSizeDistanceFactor;
344
- for (var i = 0; i < this._corners.length; i++) {
345
- this._corners[i].node.scaling.set(distanceFromCamera, distanceFromCamera, distanceFromCamera);
346
- }
347
- for (var i = 0; i < this._sides.length; i++) {
348
- this._sides[i].node.scaling.set(distanceFromCamera, distanceFromCamera, distanceFromCamera);
349
- }
350
- }
351
- this._updateHandlesPosition();
352
- }
353
- };
354
- SlateGizmo.prototype.dispose = function () {
355
- this.gizmoLayer.originalScene.onBeforeRenderObservable.remove(this._renderObserver);
356
- // Will dispose rootMesh and all descendants
357
- _super.prototype.dispose.call(this);
358
- for (var _i = 0, _a = this._corners; _i < _a.length; _i++) {
359
- var corner = _a[_i];
360
- corner.dispose();
361
- }
362
- for (var _b = 0, _c = this._sides; _b < _c.length; _b++) {
363
- var side = _c[_b];
364
- side.dispose();
365
- }
366
- };
367
- return SlateGizmo;
368
- }(Gizmo));
369
- export { SlateGizmo };
1
+ import { __extends } from "tslib";
2
+ import { Gizmo } from "@babylonjs/core/Gizmos/gizmo.js";
3
+ import { Epsilon } from "@babylonjs/core/Maths/math.constants.js";
4
+ import { Matrix, Quaternion, TmpVectors, Vector3 } from "@babylonjs/core/Maths/math.vector.js";
5
+ import { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
6
+ import { PivotTools } from "@babylonjs/core/Misc/pivotTools.js";
7
+ import { CornerHandle, SideHandle } from "./gizmoHandle";
8
+ /**
9
+ * Gizmo to resize 2D slates
10
+ */
11
+ var SlateGizmo = /** @class */ (function (_super) {
12
+ __extends(SlateGizmo, _super);
13
+ function SlateGizmo(utilityLayer) {
14
+ var _this = _super.call(this, utilityLayer) || this;
15
+ _this._boundingDimensions = new Vector3(0, 0, 0);
16
+ _this._renderObserver = null;
17
+ _this._tmpQuaternion = new Quaternion();
18
+ _this._tmpVector = new Vector3(0, 0, 0);
19
+ // Ordered bl, br, tr, tl
20
+ _this._corners = [];
21
+ // Ordered left, bottom, right, top
22
+ _this._sides = [];
23
+ _this._boundingBoxGizmo = {
24
+ min: new Vector3(),
25
+ max: new Vector3(),
26
+ };
27
+ /**
28
+ * Value we use to offset handles from mesh
29
+ */
30
+ _this._margin = 0.35;
31
+ _this._handleSize = 0.075;
32
+ _this._attachedSlate = null;
33
+ _this._existingSlateScale = new Vector3();
34
+ /**
35
+ * If set, the handles will increase in size based on the distance away from the camera to have a consistent screen size (Default: true)
36
+ */
37
+ _this.fixedScreenSize = false;
38
+ /**
39
+ * The distance away from the object which the draggable meshes should appear world sized when fixedScreenSize is set to true (default: 10)
40
+ */
41
+ _this.fixedScreenSizeDistanceFactor = 10;
42
+ _this._createNode();
43
+ _this.updateScale = false;
44
+ _this._renderObserver = _this.gizmoLayer.originalScene.onBeforeRenderObservable.add(function () {
45
+ // Only update the bounding box if scaling has changed
46
+ if (_this.attachedMesh && !_this._existingSlateScale.equals(_this.attachedMesh.scaling)) {
47
+ _this.updateBoundingBox();
48
+ }
49
+ });
50
+ return _this;
51
+ }
52
+ Object.defineProperty(SlateGizmo.prototype, "attachedSlate", {
53
+ get: function () {
54
+ return this._attachedSlate;
55
+ },
56
+ /**
57
+ * The slate attached to this gizmo
58
+ */
59
+ set: function (control) {
60
+ var _this = this;
61
+ if (control) {
62
+ this.attachedMesh = control.mesh;
63
+ this.updateBoundingBox();
64
+ this._pickedPointObserver = control._host.onPickingObservable.add(function (pickedMesh) {
65
+ if (_this._handleHovered && (!pickedMesh || pickedMesh.parent !== _this._handleHovered.node)) {
66
+ _this._handleHovered.hover = false;
67
+ _this._handleHovered = null;
68
+ }
69
+ if (pickedMesh && pickedMesh.parent && pickedMesh.parent.reservedDataStore && pickedMesh.parent.reservedDataStore.handle) {
70
+ var handle = pickedMesh.parent.reservedDataStore.handle;
71
+ if (handle.gizmo === _this) {
72
+ _this._handleHovered = handle;
73
+ _this._handleHovered.hover = true;
74
+ }
75
+ }
76
+ });
77
+ }
78
+ else if (this._attachedSlate) {
79
+ this._attachedSlate._host.onPickingObservable.remove(this._pickedPointObserver);
80
+ }
81
+ this._attachedSlate = control;
82
+ },
83
+ enumerable: false,
84
+ configurable: true
85
+ });
86
+ SlateGizmo.prototype._createNode = function () {
87
+ var _this = this;
88
+ this._handlesParent = new TransformNode("handlesParent", this.gizmoLayer.utilityLayerScene);
89
+ this._handlesParent.rotationQuaternion = Quaternion.Identity();
90
+ var masksCorners = [
91
+ {
92
+ dimensions: new Vector3(-1, -1, 0),
93
+ origin: new Vector3(1, 0, 0),
94
+ },
95
+ {
96
+ dimensions: new Vector3(1, -1, 0),
97
+ origin: new Vector3(0, 0, 0),
98
+ },
99
+ {
100
+ dimensions: new Vector3(1, 1, 0),
101
+ origin: new Vector3(0, 1, 0),
102
+ },
103
+ {
104
+ dimensions: new Vector3(-1, 1, 0),
105
+ origin: new Vector3(1, 1, 0),
106
+ },
107
+ ];
108
+ for (var i = 0; i < 4; i++) {
109
+ var corner = new CornerHandle(this, this.gizmoLayer.utilityLayerScene);
110
+ this._corners.push(corner);
111
+ corner.node.rotation.z = (Math.PI / 2) * i;
112
+ corner.node.parent = this._handlesParent;
113
+ this._assignDragBehaviorCorners(corner, function (originStart, dimensionsStart, offset, masks) { return _this._moveHandle(originStart, dimensionsStart, offset, masks, true); }, masksCorners[i]);
114
+ }
115
+ for (var i = 0; i < 4; i++) {
116
+ var side = new SideHandle(this, this.gizmoLayer.utilityLayerScene);
117
+ this._sides.push(side);
118
+ side.node.rotation.z = (Math.PI / 2) * i;
119
+ side.node.parent = this._handlesParent;
120
+ this._assignDragBehaviorSides(side, i % 2 === 0 ? new Vector3(0, 1, 0) : new Vector3(1, 0, 0));
121
+ }
122
+ this._handlesParent.parent = this._rootMesh;
123
+ };
124
+ SlateGizmo.prototype._keepAspectRatio = function (vector, aspectRatio, invertDiagonal) {
125
+ if (invertDiagonal === void 0) { invertDiagonal = false; }
126
+ var axis = TmpVectors.Vector3[0];
127
+ axis.copyFromFloats(aspectRatio, 1, 0).normalize();
128
+ if (invertDiagonal) {
129
+ axis.y *= -1;
130
+ }
131
+ var dot = Vector3.Dot(vector, axis);
132
+ vector.copyFrom(axis).scaleInPlace(dot);
133
+ };
134
+ SlateGizmo.prototype._clampDimensions = function (vector, dimensions, mask, keepAspectRatio) {
135
+ if (keepAspectRatio === void 0) { keepAspectRatio = false; }
136
+ var impact = TmpVectors.Vector3[0];
137
+ impact.copyFrom(vector).multiplyInPlace(mask);
138
+ var clampedDimensions = TmpVectors.Vector3[1];
139
+ clampedDimensions.copyFromFloats(Math.max(this._attachedSlate.minDimensions.x, impact.x + dimensions.x), Math.max(this._attachedSlate.minDimensions.y, impact.y + dimensions.y), 0);
140
+ if (keepAspectRatio) {
141
+ // Extra logic to ensure the ratio is maintained when the vector has been clamped
142
+ var ratio = dimensions.x / dimensions.y;
143
+ clampedDimensions.x = Math.max(clampedDimensions.x, clampedDimensions.y * ratio);
144
+ clampedDimensions.y = Math.max(clampedDimensions.y, clampedDimensions.x / ratio);
145
+ }
146
+ // Calculating the real impact of vector on clamped dimensions
147
+ impact.copyFrom(clampedDimensions).subtractInPlace(dimensions);
148
+ vector.x = Math.sign(vector.x) * Math.abs(impact.x);
149
+ vector.y = Math.sign(vector.y) * Math.abs(impact.y);
150
+ };
151
+ SlateGizmo.prototype._moveHandle = function (originStart, dimensionsStart, offset, masks, isCorner) {
152
+ if (!this._attachedSlate) {
153
+ return;
154
+ }
155
+ if (isCorner) {
156
+ var aspectRatio = dimensionsStart.x / dimensionsStart.y;
157
+ this._keepAspectRatio(offset, aspectRatio, masks.dimensions.x * masks.dimensions.y < 0);
158
+ }
159
+ this._clampDimensions(offset, dimensionsStart, masks.dimensions, isCorner);
160
+ var offsetOriginMasked = TmpVectors.Vector3[0];
161
+ var offsetDimensionsMasked = TmpVectors.Vector3[1];
162
+ offsetOriginMasked.copyFrom(offset).multiplyInPlace(masks.origin);
163
+ offsetDimensionsMasked.copyFrom(offset).multiplyInPlace(masks.dimensions);
164
+ this._attachedSlate.origin.copyFrom(originStart).addInPlace(offsetOriginMasked);
165
+ this._attachedSlate.dimensions.set(dimensionsStart.x + offsetDimensionsMasked.x, dimensionsStart.y + offsetDimensionsMasked.y);
166
+ };
167
+ SlateGizmo.prototype._assignDragBehaviorCorners = function (handle, moveFn, masks) {
168
+ var _this = this;
169
+ var dimensionsStart = new Vector3();
170
+ var originStart = new Vector3();
171
+ var dragOrigin = new Vector3();
172
+ var toObjectFrame = new Matrix();
173
+ var dragPlaneNormal = new Vector3();
174
+ var projectToRef = function (position, normal, origin, ref) {
175
+ // Projects on the plane with its normal and origin
176
+ position.subtractToRef(origin, TmpVectors.Vector3[0]);
177
+ var dot = Vector3.Dot(TmpVectors.Vector3[0], normal);
178
+ TmpVectors.Vector3[1].copyFrom(normal).scaleInPlace(dot);
179
+ TmpVectors.Vector3[0].subtractInPlace(TmpVectors.Vector3[1]);
180
+ TmpVectors.Vector3[0].addToRef(origin, ref);
181
+ };
182
+ var dragStart = function (event) {
183
+ if (_this.attachedSlate && _this.attachedMesh) {
184
+ dimensionsStart.set(_this.attachedSlate.dimensions.x, _this.attachedSlate.dimensions.y, Epsilon);
185
+ originStart.copyFrom(_this.attachedSlate.origin);
186
+ dragOrigin.copyFrom(event.position);
187
+ toObjectFrame.copyFrom(_this.attachedMesh.computeWorldMatrix(true));
188
+ toObjectFrame.invert();
189
+ _this.attachedSlate._followButton.isToggled = false;
190
+ Vector3.TransformNormalToRef(Vector3.Forward(), _this.attachedMesh.getWorldMatrix(), dragPlaneNormal);
191
+ dragPlaneNormal.normalize();
192
+ if (_this._handleHovered) {
193
+ _this._handleDragged = _this._handleHovered;
194
+ _this._handleDragged.drag = true;
195
+ }
196
+ }
197
+ };
198
+ var dragging = function (event) {
199
+ if (_this.attachedSlate && _this.attachedMesh) {
200
+ projectToRef(event.position, dragPlaneNormal, dragOrigin, _this._tmpVector);
201
+ _this._tmpVector.subtractInPlace(dragOrigin);
202
+ Vector3.TransformNormalToRef(_this._tmpVector, toObjectFrame, _this._tmpVector);
203
+ moveFn(originStart, dimensionsStart, _this._tmpVector, masks);
204
+ _this.attachedSlate._positionElements();
205
+ _this.updateBoundingBox();
206
+ }
207
+ };
208
+ var dragEnd = function () {
209
+ if (_this.attachedSlate && _this.attachedNode) {
210
+ _this.attachedSlate._updatePivot();
211
+ if (_this._handleDragged) {
212
+ _this._handleDragged.drag = false;
213
+ _this._handleDragged = null;
214
+ }
215
+ }
216
+ };
217
+ handle.setDragBehavior(dragStart, dragging, dragEnd);
218
+ };
219
+ SlateGizmo.prototype._assignDragBehaviorSides = function (handle, dragPlaneNormal) {
220
+ var _this = this;
221
+ var quaternionOrigin = new Quaternion();
222
+ var dragOrigin = new Vector3();
223
+ var directionOrigin = new Vector3();
224
+ var worldPivot = new Vector3();
225
+ var worldPlaneNormal = new Vector3();
226
+ var dragStart = function (event) {
227
+ if (_this.attachedSlate && _this.attachedMesh) {
228
+ quaternionOrigin.copyFrom(_this.attachedMesh.rotationQuaternion);
229
+ dragOrigin.copyFrom(event.position);
230
+ worldPivot.copyFrom(_this.attachedMesh.getAbsolutePivotPoint());
231
+ directionOrigin.copyFrom(dragOrigin).subtractInPlace(worldPivot).normalize();
232
+ _this.attachedSlate._followButton.isToggled = false;
233
+ Vector3.TransformNormalToRef(dragPlaneNormal, _this.attachedMesh.getWorldMatrix(), worldPlaneNormal);
234
+ worldPlaneNormal.normalize();
235
+ if (_this._handleHovered) {
236
+ _this._handleDragged = _this._handleHovered;
237
+ _this._handleDragged.drag = true;
238
+ }
239
+ }
240
+ };
241
+ var dragging = function (event) {
242
+ if (_this.attachedSlate && _this.attachedMesh) {
243
+ _this._tmpVector.copyFrom(event.position);
244
+ _this._tmpVector.subtractInPlace(worldPivot);
245
+ _this._tmpVector.normalize();
246
+ var angle = -Vector3.GetAngleBetweenVectorsOnPlane(_this._tmpVector, directionOrigin, worldPlaneNormal);
247
+ Quaternion.RotationAxisToRef(dragPlaneNormal, angle, _this._tmpQuaternion);
248
+ quaternionOrigin.multiplyToRef(_this._tmpQuaternion, _this.attachedMesh.rotationQuaternion);
249
+ }
250
+ };
251
+ var dragEnd = function () {
252
+ if (_this.attachedSlate && _this.attachedNode) {
253
+ _this.attachedSlate._updatePivot();
254
+ if (_this._handleDragged) {
255
+ _this._handleDragged.drag = false;
256
+ _this._handleDragged = null;
257
+ }
258
+ }
259
+ };
260
+ handle.setDragBehavior(dragStart, dragging, dragEnd);
261
+ };
262
+ SlateGizmo.prototype._attachedNodeChanged = function (value) {
263
+ if (value) {
264
+ this.updateBoundingBox();
265
+ }
266
+ };
267
+ /**
268
+ * Updates the bounding box information for the gizmo
269
+ */
270
+ SlateGizmo.prototype.updateBoundingBox = function () {
271
+ if (this.attachedMesh) {
272
+ PivotTools._RemoveAndStorePivotPoint(this.attachedMesh);
273
+ // Store original parent
274
+ var originalParent = this.attachedMesh.parent;
275
+ this.attachedMesh.setParent(null);
276
+ this._update();
277
+ // Rotate based on axis
278
+ if (!this.attachedMesh.rotationQuaternion) {
279
+ this.attachedMesh.rotationQuaternion = Quaternion.RotationYawPitchRoll(this.attachedMesh.rotation.y, this.attachedMesh.rotation.x, this.attachedMesh.rotation.z);
280
+ }
281
+ // Store original position and reset mesh to origin before computing the bounding box
282
+ this._tmpQuaternion.copyFrom(this.attachedMesh.rotationQuaternion);
283
+ this._tmpVector.copyFrom(this.attachedMesh.position);
284
+ this.attachedMesh.rotationQuaternion.set(0, 0, 0, 1);
285
+ this.attachedMesh.position.set(0, 0, 0);
286
+ // Update bounding dimensions/positions
287
+ var boundingMinMax = this.attachedMesh.getHierarchyBoundingVectors();
288
+ boundingMinMax.max.subtractToRef(boundingMinMax.min, this._boundingDimensions);
289
+ this._boundingBoxGizmo.min = boundingMinMax.min;
290
+ this._boundingBoxGizmo.max = boundingMinMax.max;
291
+ // Update handles of the gizmo
292
+ this._updateHandlesPosition();
293
+ this._updateHandlesScaling();
294
+ // Restore position/rotation values
295
+ this.attachedMesh.rotationQuaternion.copyFrom(this._tmpQuaternion);
296
+ this.attachedMesh.position.copyFrom(this._tmpVector);
297
+ PivotTools._RestorePivotPoint(this.attachedMesh);
298
+ // Restore original parent
299
+ this.attachedMesh.setParent(originalParent);
300
+ this.attachedMesh.computeWorldMatrix(true);
301
+ this._existingSlateScale.copyFrom(this.attachedMesh.scaling);
302
+ }
303
+ };
304
+ SlateGizmo.prototype._updateHandlesPosition = function () {
305
+ var min = this._boundingBoxGizmo.min.clone();
306
+ var max = this._boundingBoxGizmo.max.clone();
307
+ var handleScaling = this._corners[0].node.scaling.length();
308
+ min.x -= this._margin * handleScaling;
309
+ min.y -= this._margin * handleScaling;
310
+ max.x += this._margin * handleScaling;
311
+ max.y += this._margin * handleScaling;
312
+ var center = min.add(max).scaleInPlace(0.5);
313
+ this._corners[0].node.position.copyFromFloats(min.x, min.y, 0);
314
+ this._corners[1].node.position.copyFromFloats(max.x, min.y, 0);
315
+ this._corners[2].node.position.copyFromFloats(max.x, max.y, 0);
316
+ this._corners[3].node.position.copyFromFloats(min.x, max.y, 0);
317
+ this._sides[0].node.position.copyFromFloats(min.x, center.y, 0);
318
+ this._sides[1].node.position.copyFromFloats(center.x, min.y, 0);
319
+ this._sides[2].node.position.copyFromFloats(max.x, center.y, 0);
320
+ this._sides[3].node.position.copyFromFloats(center.x, max.y, 0);
321
+ };
322
+ SlateGizmo.prototype._updateHandlesScaling = function () {
323
+ if (this._attachedSlate && this._attachedSlate.mesh) {
324
+ var scaledWidth = this._attachedSlate.mesh.scaling.x * this._attachedSlate.dimensions.x;
325
+ var scaledHeight = this._attachedSlate.mesh.scaling.y * this._attachedSlate.dimensions.y;
326
+ var scale = Math.min(scaledWidth, scaledHeight) * this._handleSize;
327
+ for (var index = 0; index < this._corners.length; index++) {
328
+ this._corners[index].node.scaling.setAll(scale);
329
+ }
330
+ for (var index = 0; index < this._sides.length; index++) {
331
+ this._sides[index].node.scaling.setAll(scale);
332
+ }
333
+ }
334
+ };
335
+ SlateGizmo.prototype._update = function () {
336
+ _super.prototype._update.call(this);
337
+ if (!this.gizmoLayer.utilityLayerScene.activeCamera) {
338
+ return;
339
+ }
340
+ if (this._attachedSlate && this._attachedSlate.mesh) {
341
+ if (this.fixedScreenSize) {
342
+ this._attachedSlate.mesh.absolutePosition.subtractToRef(this.gizmoLayer.utilityLayerScene.activeCamera.position, this._tmpVector);
343
+ var distanceFromCamera = (this._handleSize * this._tmpVector.length()) / this.fixedScreenSizeDistanceFactor;
344
+ for (var i = 0; i < this._corners.length; i++) {
345
+ this._corners[i].node.scaling.set(distanceFromCamera, distanceFromCamera, distanceFromCamera);
346
+ }
347
+ for (var i = 0; i < this._sides.length; i++) {
348
+ this._sides[i].node.scaling.set(distanceFromCamera, distanceFromCamera, distanceFromCamera);
349
+ }
350
+ }
351
+ this._updateHandlesPosition();
352
+ }
353
+ };
354
+ SlateGizmo.prototype.dispose = function () {
355
+ this.gizmoLayer.originalScene.onBeforeRenderObservable.remove(this._renderObserver);
356
+ // Will dispose rootMesh and all descendants
357
+ _super.prototype.dispose.call(this);
358
+ for (var _i = 0, _a = this._corners; _i < _a.length; _i++) {
359
+ var corner = _a[_i];
360
+ corner.dispose();
361
+ }
362
+ for (var _b = 0, _c = this._sides; _b < _c.length; _b++) {
363
+ var side = _c[_b];
364
+ side.dispose();
365
+ }
366
+ };
367
+ return SlateGizmo;
368
+ }(Gizmo));
369
+ export { SlateGizmo };
370
370
  //# sourceMappingURL=slateGizmo.js.map