@onerjs/gui 8.23.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/2D/FrameGraph/guiTask.d.ts +34 -0
  2. package/2D/FrameGraph/guiTask.js +62 -0
  3. package/2D/FrameGraph/guiTask.js.map +1 -0
  4. package/2D/FrameGraph/renderGraphGUIBlock.d.ts +43 -0
  5. package/2D/FrameGraph/renderGraphGUIBlock.js +66 -0
  6. package/2D/FrameGraph/renderGraphGUIBlock.js.map +1 -0
  7. package/2D/adtInstrumentation.d.ts +52 -0
  8. package/2D/adtInstrumentation.js +107 -0
  9. package/2D/adtInstrumentation.js.map +1 -0
  10. package/2D/advancedDynamicTexture.d.ts +548 -0
  11. package/2D/advancedDynamicTexture.js +1522 -0
  12. package/2D/advancedDynamicTexture.js.map +1 -0
  13. package/2D/controls/button.d.ts +109 -0
  14. package/2D/controls/button.js +246 -0
  15. package/2D/controls/button.js.map +1 -0
  16. package/2D/controls/checkbox.d.ts +53 -0
  17. package/2D/controls/checkbox.js +164 -0
  18. package/2D/controls/checkbox.js.map +1 -0
  19. package/2D/controls/colorpicker.d.ts +101 -0
  20. package/2D/controls/colorpicker.js +1396 -0
  21. package/2D/controls/colorpicker.js.map +1 -0
  22. package/2D/controls/container.d.ts +179 -0
  23. package/2D/controls/container.js +616 -0
  24. package/2D/controls/container.js.map +1 -0
  25. package/2D/controls/control.d.ts +943 -0
  26. package/2D/controls/control.js +2460 -0
  27. package/2D/controls/control.js.map +1 -0
  28. package/2D/controls/displayGrid.d.ts +53 -0
  29. package/2D/controls/displayGrid.js +202 -0
  30. package/2D/controls/displayGrid.js.map +1 -0
  31. package/2D/controls/ellipse.d.ts +25 -0
  32. package/2D/controls/ellipse.js +93 -0
  33. package/2D/controls/ellipse.js.map +1 -0
  34. package/2D/controls/focusableButton.d.ts +17 -0
  35. package/2D/controls/focusableButton.js +25 -0
  36. package/2D/controls/focusableButton.js.map +1 -0
  37. package/2D/controls/focusableControl.d.ts +43 -0
  38. package/2D/controls/focusableControl.js +2 -0
  39. package/2D/controls/focusableControl.js.map +1 -0
  40. package/2D/controls/gradient/BaseGradient.d.ts +69 -0
  41. package/2D/controls/gradient/BaseGradient.js +84 -0
  42. package/2D/controls/gradient/BaseGradient.js.map +1 -0
  43. package/2D/controls/gradient/LinearGradient.d.ts +45 -0
  44. package/2D/controls/gradient/LinearGradient.js +73 -0
  45. package/2D/controls/gradient/LinearGradient.js.map +1 -0
  46. package/2D/controls/gradient/RadialGradient.d.ts +53 -0
  47. package/2D/controls/gradient/RadialGradient.js +89 -0
  48. package/2D/controls/gradient/RadialGradient.js.map +1 -0
  49. package/2D/controls/grid.d.ts +151 -0
  50. package/2D/controls/grid.js +528 -0
  51. package/2D/controls/grid.js.map +1 -0
  52. package/2D/controls/image.d.ts +228 -0
  53. package/2D/controls/image.js +915 -0
  54. package/2D/controls/image.js.map +1 -0
  55. package/2D/controls/index.d.ts +34 -0
  56. package/2D/controls/index.js +35 -0
  57. package/2D/controls/index.js.map +1 -0
  58. package/2D/controls/inputPassword.d.ts +9 -0
  59. package/2D/controls/inputPassword.js +22 -0
  60. package/2D/controls/inputPassword.js.map +1 -0
  61. package/2D/controls/inputText.d.ts +197 -0
  62. package/2D/controls/inputText.js +1035 -0
  63. package/2D/controls/inputText.js.map +1 -0
  64. package/2D/controls/inputTextArea.d.ts +142 -0
  65. package/2D/controls/inputTextArea.js +1025 -0
  66. package/2D/controls/inputTextArea.js.map +1 -0
  67. package/2D/controls/line.d.ts +73 -0
  68. package/2D/controls/line.js +227 -0
  69. package/2D/controls/line.js.map +1 -0
  70. package/2D/controls/multiLine.d.ts +75 -0
  71. package/2D/controls/multiLine.js +237 -0
  72. package/2D/controls/multiLine.js.map +1 -0
  73. package/2D/controls/radioButton.d.ts +49 -0
  74. package/2D/controls/radioButton.js +185 -0
  75. package/2D/controls/radioButton.js.map +1 -0
  76. package/2D/controls/rectangle.d.ts +43 -0
  77. package/2D/controls/rectangle.js +204 -0
  78. package/2D/controls/rectangle.js.map +1 -0
  79. package/2D/controls/scrollViewers/scrollViewer.d.ts +178 -0
  80. package/2D/controls/scrollViewers/scrollViewer.js +587 -0
  81. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -0
  82. package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +51 -0
  83. package/2D/controls/scrollViewers/scrollViewerWindow.js +254 -0
  84. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -0
  85. package/2D/controls/selector.d.ts +237 -0
  86. package/2D/controls/selector.js +579 -0
  87. package/2D/controls/selector.js.map +1 -0
  88. package/2D/controls/sliders/baseSlider.d.ts +80 -0
  89. package/2D/controls/sliders/baseSlider.js +299 -0
  90. package/2D/controls/sliders/baseSlider.js.map +1 -0
  91. package/2D/controls/sliders/imageBasedSlider.d.ts +47 -0
  92. package/2D/controls/sliders/imageBasedSlider.js +168 -0
  93. package/2D/controls/sliders/imageBasedSlider.js.map +1 -0
  94. package/2D/controls/sliders/imageScrollBar.d.ts +67 -0
  95. package/2D/controls/sliders/imageScrollBar.js +248 -0
  96. package/2D/controls/sliders/imageScrollBar.js.map +1 -0
  97. package/2D/controls/sliders/scrollBar.d.ts +50 -0
  98. package/2D/controls/sliders/scrollBar.js +175 -0
  99. package/2D/controls/sliders/scrollBar.js.map +1 -0
  100. package/2D/controls/sliders/slider.d.ts +46 -0
  101. package/2D/controls/sliders/slider.js +281 -0
  102. package/2D/controls/sliders/slider.js.map +1 -0
  103. package/2D/controls/stackPanel.d.ts +64 -0
  104. package/2D/controls/stackPanel.js +244 -0
  105. package/2D/controls/stackPanel.js.map +1 -0
  106. package/2D/controls/statics.d.ts +6 -0
  107. package/2D/controls/statics.js +50 -0
  108. package/2D/controls/statics.js.map +1 -0
  109. package/2D/controls/textBlock.d.ts +219 -0
  110. package/2D/controls/textBlock.js +670 -0
  111. package/2D/controls/textBlock.js.map +1 -0
  112. package/2D/controls/textWrapper.d.ts +13 -0
  113. package/2D/controls/textWrapper.js +88 -0
  114. package/2D/controls/textWrapper.js.map +1 -0
  115. package/2D/controls/toggleButton.d.ts +93 -0
  116. package/2D/controls/toggleButton.js +229 -0
  117. package/2D/controls/toggleButton.js.map +1 -0
  118. package/2D/controls/virtualKeyboard.d.ts +102 -0
  119. package/2D/controls/virtualKeyboard.js +275 -0
  120. package/2D/controls/virtualKeyboard.js.map +1 -0
  121. package/2D/index.d.ts +11 -0
  122. package/2D/index.js +13 -0
  123. package/2D/index.js.map +1 -0
  124. package/2D/math2D.d.ts +136 -0
  125. package/2D/math2D.js +235 -0
  126. package/2D/math2D.js.map +1 -0
  127. package/2D/measure.d.ts +77 -0
  128. package/2D/measure.js +138 -0
  129. package/2D/measure.js.map +1 -0
  130. package/2D/multiLinePoint.d.ts +47 -0
  131. package/2D/multiLinePoint.js +110 -0
  132. package/2D/multiLinePoint.js.map +1 -0
  133. package/2D/style.d.ts +46 -0
  134. package/2D/style.js +80 -0
  135. package/2D/style.js.map +1 -0
  136. package/2D/valueAndUnit.d.ts +89 -0
  137. package/2D/valueAndUnit.js +194 -0
  138. package/2D/valueAndUnit.js.map +1 -0
  139. package/2D/xmlLoader.d.ts +60 -0
  140. package/2D/xmlLoader.js +348 -0
  141. package/2D/xmlLoader.js.map +1 -0
  142. package/3D/behaviors/defaultBehavior.d.ts +73 -0
  143. package/3D/behaviors/defaultBehavior.js +103 -0
  144. package/3D/behaviors/defaultBehavior.js.map +1 -0
  145. package/3D/controls/MRTK3/touchHolographicButton.d.ts +220 -0
  146. package/3D/controls/MRTK3/touchHolographicButton.js +868 -0
  147. package/3D/controls/MRTK3/touchHolographicButton.js.map +1 -0
  148. package/3D/controls/abstractButton3D.d.ts +15 -0
  149. package/3D/controls/abstractButton3D.js +22 -0
  150. package/3D/controls/abstractButton3D.js.map +1 -0
  151. package/3D/controls/button3D.d.ts +51 -0
  152. package/3D/controls/button3D.js +98 -0
  153. package/3D/controls/button3D.js.map +1 -0
  154. package/3D/controls/container3D.d.ts +72 -0
  155. package/3D/controls/container3D.js +126 -0
  156. package/3D/controls/container3D.js.map +1 -0
  157. package/3D/controls/contentDisplay3D.d.ts +42 -0
  158. package/3D/controls/contentDisplay3D.js +81 -0
  159. package/3D/controls/contentDisplay3D.js.map +1 -0
  160. package/3D/controls/control3D.d.ts +183 -0
  161. package/3D/controls/control3D.js +401 -0
  162. package/3D/controls/control3D.js.map +1 -0
  163. package/3D/controls/cylinderPanel.d.ts +17 -0
  164. package/3D/controls/cylinderPanel.js +57 -0
  165. package/3D/controls/cylinderPanel.js.map +1 -0
  166. package/3D/controls/handMenu.d.ts +28 -0
  167. package/3D/controls/handMenu.js +39 -0
  168. package/3D/controls/handMenu.js.map +1 -0
  169. package/3D/controls/holographicBackplate.d.ts +49 -0
  170. package/3D/controls/holographicBackplate.js +104 -0
  171. package/3D/controls/holographicBackplate.js.map +1 -0
  172. package/3D/controls/holographicButton.d.ts +84 -0
  173. package/3D/controls/holographicButton.js +300 -0
  174. package/3D/controls/holographicButton.js.map +1 -0
  175. package/3D/controls/holographicSlate.d.ts +134 -0
  176. package/3D/controls/holographicSlate.js +413 -0
  177. package/3D/controls/holographicSlate.js.map +1 -0
  178. package/3D/controls/index.d.ts +22 -0
  179. package/3D/controls/index.js +24 -0
  180. package/3D/controls/index.js.map +1 -0
  181. package/3D/controls/meshButton3D.d.ts +21 -0
  182. package/3D/controls/meshButton3D.js +58 -0
  183. package/3D/controls/meshButton3D.js.map +1 -0
  184. package/3D/controls/nearMenu.d.ts +44 -0
  185. package/3D/controls/nearMenu.js +103 -0
  186. package/3D/controls/nearMenu.js.map +1 -0
  187. package/3D/controls/planePanel.d.ts +9 -0
  188. package/3D/controls/planePanel.js +30 -0
  189. package/3D/controls/planePanel.js.map +1 -0
  190. package/3D/controls/scatterPanel.d.ts +18 -0
  191. package/3D/controls/scatterPanel.js +98 -0
  192. package/3D/controls/scatterPanel.js.map +1 -0
  193. package/3D/controls/slider3D.d.ts +95 -0
  194. package/3D/controls/slider3D.js +256 -0
  195. package/3D/controls/slider3D.js.map +1 -0
  196. package/3D/controls/spherePanel.d.ts +17 -0
  197. package/3D/controls/spherePanel.js +58 -0
  198. package/3D/controls/spherePanel.js.map +1 -0
  199. package/3D/controls/stackPanel3D.d.ts +22 -0
  200. package/3D/controls/stackPanel3D.js +95 -0
  201. package/3D/controls/stackPanel3D.js.map +1 -0
  202. package/3D/controls/touchButton3D.d.ts +77 -0
  203. package/3D/controls/touchButton3D.js +205 -0
  204. package/3D/controls/touchButton3D.js.map +1 -0
  205. package/3D/controls/touchHolographicButton.d.ts +110 -0
  206. package/3D/controls/touchHolographicButton.js +400 -0
  207. package/3D/controls/touchHolographicButton.js.map +1 -0
  208. package/3D/controls/touchHolographicMenu.d.ts +61 -0
  209. package/3D/controls/touchHolographicMenu.js +139 -0
  210. package/3D/controls/touchHolographicMenu.js.map +1 -0
  211. package/3D/controls/touchMeshButton3D.d.ts +21 -0
  212. package/3D/controls/touchMeshButton3D.js +58 -0
  213. package/3D/controls/touchMeshButton3D.js.map +1 -0
  214. package/3D/controls/volumeBasedPanel.d.ts +53 -0
  215. package/3D/controls/volumeBasedPanel.js +158 -0
  216. package/3D/controls/volumeBasedPanel.js.map +1 -0
  217. package/3D/gizmos/gizmoHandle.d.ts +108 -0
  218. package/3D/gizmos/gizmoHandle.js +175 -0
  219. package/3D/gizmos/gizmoHandle.js.map +1 -0
  220. package/3D/gizmos/index.d.ts +2 -0
  221. package/3D/gizmos/index.js +3 -0
  222. package/3D/gizmos/index.js.map +1 -0
  223. package/3D/gizmos/slateGizmo.d.ts +57 -0
  224. package/3D/gizmos/slateGizmo.js +353 -0
  225. package/3D/gizmos/slateGizmo.js.map +1 -0
  226. package/3D/gui3DManager.d.ts +94 -0
  227. package/3D/gui3DManager.js +233 -0
  228. package/3D/gui3DManager.js.map +1 -0
  229. package/3D/index.d.ts +5 -0
  230. package/3D/index.js +7 -0
  231. package/3D/index.js.map +1 -0
  232. package/3D/materials/fluent/fluentMaterial.d.ts +91 -0
  233. package/3D/materials/fluent/fluentMaterial.js +286 -0
  234. package/3D/materials/fluent/fluentMaterial.js.map +1 -0
  235. package/3D/materials/fluent/index.d.ts +1 -0
  236. package/3D/materials/fluent/index.js +2 -0
  237. package/3D/materials/fluent/index.js.map +1 -0
  238. package/3D/materials/fluent/shaders/fluent.fragment.d.ts +5 -0
  239. package/3D/materials/fluent/shaders/fluent.fragment.js +41 -0
  240. package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -0
  241. package/3D/materials/fluent/shaders/fluent.vertex.d.ts +5 -0
  242. package/3D/materials/fluent/shaders/fluent.vertex.js +40 -0
  243. package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -0
  244. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +155 -0
  245. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +466 -0
  246. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -0
  247. package/3D/materials/fluentBackplate/index.d.ts +1 -0
  248. package/3D/materials/fluentBackplate/index.js +2 -0
  249. package/3D/materials/fluentBackplate/index.js.map +1 -0
  250. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -0
  251. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +60 -0
  252. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -0
  253. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -0
  254. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +127 -0
  255. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -0
  256. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +190 -0
  257. package/3D/materials/fluentButton/fluentButtonMaterial.js +536 -0
  258. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -0
  259. package/3D/materials/fluentButton/index.d.ts +1 -0
  260. package/3D/materials/fluentButton/index.js +2 -0
  261. package/3D/materials/fluentButton/index.js.map +1 -0
  262. package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -0
  263. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +57 -0
  264. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -0
  265. package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -0
  266. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +162 -0
  267. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -0
  268. package/3D/materials/fluentMaterial.d.ts +4 -0
  269. package/3D/materials/fluentMaterial.js +5 -0
  270. package/3D/materials/fluentMaterial.js.map +1 -0
  271. package/3D/materials/handle/handleMaterial.d.ts +68 -0
  272. package/3D/materials/handle/handleMaterial.js +114 -0
  273. package/3D/materials/handle/handleMaterial.js.map +1 -0
  274. package/3D/materials/handle/index.d.ts +1 -0
  275. package/3D/materials/handle/index.js +2 -0
  276. package/3D/materials/handle/index.js.map +1 -0
  277. package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -0
  278. package/3D/materials/handle/shaders/handle.fragment.js +11 -0
  279. package/3D/materials/handle/shaders/handle.fragment.js.map +1 -0
  280. package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -0
  281. package/3D/materials/handle/shaders/handle.vertex.js +11 -0
  282. package/3D/materials/handle/shaders/handle.vertex.js.map +1 -0
  283. package/3D/materials/index.d.ts +5 -0
  284. package/3D/materials/index.js +7 -0
  285. package/3D/materials/index.js.map +1 -0
  286. package/3D/materials/mrdl/index.d.ts +3 -0
  287. package/3D/materials/mrdl/index.js +4 -0
  288. package/3D/materials/mrdl/index.js.map +1 -0
  289. package/3D/materials/mrdl/mrdlBackglowMaterial.d.ts +87 -0
  290. package/3D/materials/mrdl/mrdlBackglowMaterial.js +302 -0
  291. package/3D/materials/mrdl/mrdlBackglowMaterial.js.map +1 -0
  292. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +148 -0
  293. package/3D/materials/mrdl/mrdlBackplateMaterial.js +433 -0
  294. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -0
  295. package/3D/materials/mrdl/mrdlFrontplateMaterial.d.ts +186 -0
  296. package/3D/materials/mrdl/mrdlFrontplateMaterial.js +532 -0
  297. package/3D/materials/mrdl/mrdlFrontplateMaterial.js.map +1 -0
  298. package/3D/materials/mrdl/mrdlInnerquadMaterial.d.ts +56 -0
  299. package/3D/materials/mrdl/mrdlInnerquadMaterial.js +230 -0
  300. package/3D/materials/mrdl/mrdlInnerquadMaterial.js.map +1 -0
  301. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +337 -0
  302. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +855 -0
  303. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -0
  304. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +337 -0
  305. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +855 -0
  306. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -0
  307. package/3D/materials/mrdl/shaders/mrdlBackglow.fragment.d.ts +5 -0
  308. package/3D/materials/mrdl/shaders/mrdlBackglow.fragment.js +25 -0
  309. package/3D/materials/mrdl/shaders/mrdlBackglow.fragment.js.map +1 -0
  310. package/3D/materials/mrdl/shaders/mrdlBackglow.vertex.d.ts +5 -0
  311. package/3D/materials/mrdl/shaders/mrdlBackglow.vertex.js +12 -0
  312. package/3D/materials/mrdl/shaders/mrdlBackglow.vertex.js.map +1 -0
  313. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -0
  314. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +88 -0
  315. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -0
  316. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -0
  317. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +96 -0
  318. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -0
  319. package/3D/materials/mrdl/shaders/mrdlFrontplate.fragment.d.ts +5 -0
  320. package/3D/materials/mrdl/shaders/mrdlFrontplate.fragment.js +48 -0
  321. package/3D/materials/mrdl/shaders/mrdlFrontplate.fragment.js.map +1 -0
  322. package/3D/materials/mrdl/shaders/mrdlFrontplate.vertex.d.ts +5 -0
  323. package/3D/materials/mrdl/shaders/mrdlFrontplate.vertex.js +158 -0
  324. package/3D/materials/mrdl/shaders/mrdlFrontplate.vertex.js.map +1 -0
  325. package/3D/materials/mrdl/shaders/mrdlInnerquad.fragment.d.ts +5 -0
  326. package/3D/materials/mrdl/shaders/mrdlInnerquad.fragment.js +27 -0
  327. package/3D/materials/mrdl/shaders/mrdlInnerquad.fragment.js.map +1 -0
  328. package/3D/materials/mrdl/shaders/mrdlInnerquad.vertex.d.ts +5 -0
  329. package/3D/materials/mrdl/shaders/mrdlInnerquad.vertex.js +13 -0
  330. package/3D/materials/mrdl/shaders/mrdlInnerquad.vertex.js.map +1 -0
  331. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -0
  332. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +236 -0
  333. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -0
  334. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -0
  335. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +137 -0
  336. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -0
  337. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -0
  338. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +236 -0
  339. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -0
  340. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -0
  341. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +137 -0
  342. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -0
  343. package/3D/vector3WithInfo.d.ts +16 -0
  344. package/3D/vector3WithInfo.js +18 -0
  345. package/3D/vector3WithInfo.js.map +1 -0
  346. package/index.d.ts +2 -0
  347. package/index.js +4 -0
  348. package/index.js.map +1 -0
  349. package/legacy/legacy.d.ts +1 -0
  350. package/legacy/legacy.js +17 -0
  351. package/legacy/legacy.js.map +1 -0
  352. package/license.md +71 -0
  353. package/package.json +47 -0
  354. package/readme.md +31 -0
@@ -0,0 +1,139 @@
1
+ import { VolumeBasedPanel } from "./volumeBasedPanel.js";
2
+ import { Mesh } from "@babylonjs/core/Meshes/mesh.js";
3
+ import { CreateBox } from "@babylonjs/core/Meshes/Builders/boxBuilder.js";
4
+ import { FluentMaterial } from "../materials/fluent/fluentMaterial.js";
5
+ import { Color3 } from "@babylonjs/core/Maths/math.color.js";
6
+ import { Logger } from "@babylonjs/core/Misc/logger.js";
7
+ /**
8
+ * Simple menu that can contain holographic buttons
9
+ */
10
+ export class TouchHolographicMenu extends VolumeBasedPanel {
11
+ /**
12
+ * Gets or sets the margin size of the backplate in button size units.
13
+ * Setting this to 1, will make the backPlate margin the size of 1 button
14
+ */
15
+ get backPlateMargin() {
16
+ return this._backPlateMargin;
17
+ }
18
+ set backPlateMargin(value) {
19
+ this._backPlateMargin = value;
20
+ if (this._children.length >= 1) {
21
+ for (const control of this.children) {
22
+ this._updateCurrentMinMax(control.position);
23
+ }
24
+ this._updateMargins();
25
+ }
26
+ }
27
+ _createNode(scene) {
28
+ const node = new Mesh(`menu_${this.name}`, scene);
29
+ this._backPlate = CreateBox("backPlate" + this.name, { size: 1 }, scene);
30
+ this._backPlate.parent = node;
31
+ return node;
32
+ }
33
+ _affectMaterial(mesh) {
34
+ this._backPlateMaterial = new FluentMaterial(this.name + "backPlateMaterial", mesh.getScene());
35
+ this._backPlateMaterial.albedoColor = new Color3(0.08, 0.15, 0.55);
36
+ this._backPlateMaterial.renderBorders = true;
37
+ this._backPlateMaterial.renderHoverLight = true;
38
+ this._pickedPointObserver = this._host.onPickedPointChangedObservable.add((pickedPoint) => {
39
+ if (pickedPoint) {
40
+ this._backPlateMaterial.hoverPosition = pickedPoint;
41
+ this._backPlateMaterial.hoverColor.a = 1.0;
42
+ }
43
+ else {
44
+ this._backPlateMaterial.hoverColor.a = 0;
45
+ }
46
+ });
47
+ this._backPlate.material = this._backPlateMaterial;
48
+ }
49
+ _mapGridNode(control, nodePosition) {
50
+ // Simple plane mapping for the menu
51
+ const mesh = control.mesh;
52
+ if (!mesh) {
53
+ return;
54
+ }
55
+ control.position = nodePosition.clone();
56
+ this._updateCurrentMinMax(nodePosition);
57
+ }
58
+ _finalProcessing() {
59
+ this._updateMargins();
60
+ }
61
+ _updateCurrentMinMax(nodePosition) {
62
+ if (!this._currentMin) {
63
+ this._currentMin = nodePosition.clone();
64
+ this._currentMax = nodePosition.clone();
65
+ }
66
+ this._currentMin.minimizeInPlace(nodePosition);
67
+ this._currentMax.maximizeInPlace(nodePosition);
68
+ }
69
+ _updateMargins() {
70
+ if (this._children.length > 0) {
71
+ this._currentMin.addInPlaceFromFloats(-this._cellWidth / 2, -this._cellHeight / 2, 0);
72
+ this._currentMax.addInPlaceFromFloats(this._cellWidth / 2, this._cellHeight / 2, 0);
73
+ const extendSize = this._currentMax.subtract(this._currentMin);
74
+ // Also add a % margin
75
+ this._backPlate.scaling.x = extendSize.x + this._cellWidth * this.backPlateMargin;
76
+ this._backPlate.scaling.y = extendSize.y + this._cellHeight * this.backPlateMargin;
77
+ this._backPlate.scaling.z = 0.001;
78
+ for (let i = 0; i < this._children.length; i++) {
79
+ this._children[i].position.subtractInPlace(this._currentMin).subtractInPlace(extendSize.scale(0.5));
80
+ this._children[i].position.z -= 0.01;
81
+ }
82
+ }
83
+ this._currentMin = null;
84
+ this._currentMax = null;
85
+ }
86
+ /**
87
+ * Creates a holographic menu GUI 3D control
88
+ * @param name name of the menu
89
+ */
90
+ constructor(name) {
91
+ super(name);
92
+ this._backPlateMargin = 1.25;
93
+ }
94
+ /**
95
+ * Adds a button to the menu.
96
+ * Please note that the back material of the button will be set to transparent as it is attached to the menu.
97
+ *
98
+ * @param button Button to add
99
+ * @returns This menu
100
+ */
101
+ addButton(button) {
102
+ // Block updating the layout until the button is resized (which has to happen after node creation)
103
+ const wasLayoutBlocked = this.blockLayout;
104
+ if (!wasLayoutBlocked) {
105
+ this.blockLayout = true;
106
+ }
107
+ super.addControl(button);
108
+ button.isBackplateVisible = false;
109
+ button.scaling.scaleInPlace(TouchHolographicMenu.MENU_BUTTON_SCALE);
110
+ // Unblocking the layout triggers the pending layout update that uses the size of the buttons to determine the size of the backing mesh
111
+ if (!wasLayoutBlocked) {
112
+ this.blockLayout = false;
113
+ }
114
+ return this;
115
+ }
116
+ /**
117
+ * This method should not be used directly. It is inherited from `Container3D`.
118
+ * Please use `addButton` instead.
119
+ * @param _control the control to add
120
+ * @returns the current container
121
+ */
122
+ addControl(_control) {
123
+ Logger.Warn("TouchHolographicMenu can only contain buttons. Please use the method `addButton` instead.");
124
+ return this;
125
+ }
126
+ /**
127
+ * Disposes the menu
128
+ */
129
+ dispose() {
130
+ super.dispose();
131
+ this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);
132
+ }
133
+ }
134
+ /**
135
+ * Scale for the buttons added to the menu
136
+ */
137
+ // eslint-disable-next-line @typescript-eslint/naming-convention
138
+ TouchHolographicMenu.MENU_BUTTON_SCALE = 1;
139
+ //# sourceMappingURL=touchHolographicMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touchHolographicMenu.js","sourceRoot":"","sources":["../../../../../dev/gui/src/3D/controls/touchHolographicMenu.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"core/scene\";\r\nimport type { Vector3 } from \"core/Maths/math.vector\";\r\nimport type { TransformNode } from \"core/Meshes/transformNode\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { Control3D } from \"./control3D\";\r\nimport { VolumeBasedPanel } from \"./volumeBasedPanel\";\r\nimport { Mesh } from \"core/Meshes/mesh\";\r\nimport { CreateBox } from \"core/Meshes/Builders/boxBuilder\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { FluentMaterial } from \"../materials/fluent/fluentMaterial\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport type { Container3D } from \"./container3D\";\r\nimport type { TouchHolographicButton } from \"./touchHolographicButton\";\r\n\r\n/**\r\n * Simple menu that can contain holographic buttons\r\n */\r\nexport class TouchHolographicMenu extends VolumeBasedPanel {\r\n protected _backPlate: Mesh;\r\n private _backPlateMaterial: FluentMaterial;\r\n private _pickedPointObserver: Nullable<Observer<Nullable<Vector3>>>;\r\n\r\n private _currentMin: Nullable<Vector3>;\r\n private _currentMax: Nullable<Vector3>;\r\n\r\n private _backPlateMargin = 1.25;\r\n\r\n /**\r\n * Scale for the buttons added to the menu\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected static MENU_BUTTON_SCALE: number = 1;\r\n\r\n /**\r\n * Gets or sets the margin size of the backplate in button size units.\r\n * Setting this to 1, will make the backPlate margin the size of 1 button\r\n */\r\n public get backPlateMargin(): number {\r\n return this._backPlateMargin;\r\n }\r\n\r\n public set backPlateMargin(value: number) {\r\n this._backPlateMargin = value;\r\n\r\n if (this._children.length >= 1) {\r\n for (const control of this.children) {\r\n this._updateCurrentMinMax(control.position);\r\n }\r\n\r\n this._updateMargins();\r\n }\r\n }\r\n\r\n protected override _createNode(scene: Scene): Nullable<TransformNode> {\r\n const node = new Mesh(`menu_${this.name}`, scene);\r\n\r\n this._backPlate = CreateBox(\"backPlate\" + this.name, { size: 1 }, scene);\r\n this._backPlate.parent = node;\r\n\r\n return node;\r\n }\r\n\r\n protected override _affectMaterial(mesh: AbstractMesh) {\r\n this._backPlateMaterial = new FluentMaterial(this.name + \"backPlateMaterial\", mesh.getScene());\r\n this._backPlateMaterial.albedoColor = new Color3(0.08, 0.15, 0.55);\r\n this._backPlateMaterial.renderBorders = true;\r\n this._backPlateMaterial.renderHoverLight = true;\r\n\r\n this._pickedPointObserver = this._host.onPickedPointChangedObservable.add((pickedPoint) => {\r\n if (pickedPoint) {\r\n this._backPlateMaterial.hoverPosition = pickedPoint;\r\n this._backPlateMaterial.hoverColor.a = 1.0;\r\n } else {\r\n this._backPlateMaterial.hoverColor.a = 0;\r\n }\r\n });\r\n\r\n this._backPlate.material = this._backPlateMaterial;\r\n }\r\n\r\n protected _mapGridNode(control: Control3D, nodePosition: Vector3) {\r\n // Simple plane mapping for the menu\r\n const mesh = control.mesh;\r\n\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n control.position = nodePosition.clone();\r\n\r\n this._updateCurrentMinMax(nodePosition);\r\n }\r\n\r\n protected override _finalProcessing() {\r\n this._updateMargins();\r\n }\r\n\r\n private _updateCurrentMinMax(nodePosition: Vector3) {\r\n if (!this._currentMin) {\r\n this._currentMin = nodePosition.clone();\r\n this._currentMax = nodePosition.clone();\r\n }\r\n\r\n this._currentMin.minimizeInPlace(nodePosition);\r\n this._currentMax!.maximizeInPlace(nodePosition);\r\n }\r\n\r\n private _updateMargins() {\r\n if (this._children.length > 0) {\r\n this._currentMin!.addInPlaceFromFloats(-this._cellWidth / 2, -this._cellHeight / 2, 0);\r\n this._currentMax!.addInPlaceFromFloats(this._cellWidth / 2, this._cellHeight / 2, 0);\r\n const extendSize = this._currentMax!.subtract(this._currentMin!);\r\n\r\n // Also add a % margin\r\n this._backPlate.scaling.x = extendSize.x + this._cellWidth * this.backPlateMargin;\r\n this._backPlate.scaling.y = extendSize.y + this._cellHeight * this.backPlateMargin;\r\n this._backPlate.scaling.z = 0.001;\r\n\r\n for (let i = 0; i < this._children.length; i++) {\r\n this._children[i].position.subtractInPlace(this._currentMin!).subtractInPlace(extendSize.scale(0.5));\r\n this._children[i].position.z -= 0.01;\r\n }\r\n }\r\n\r\n this._currentMin = null;\r\n this._currentMax = null;\r\n }\r\n\r\n /**\r\n * Creates a holographic menu GUI 3D control\r\n * @param name name of the menu\r\n */\r\n constructor(name?: string) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Adds a button to the menu.\r\n * Please note that the back material of the button will be set to transparent as it is attached to the menu.\r\n *\r\n * @param button Button to add\r\n * @returns This menu\r\n */\r\n public addButton(button: TouchHolographicButton): TouchHolographicMenu {\r\n // Block updating the layout until the button is resized (which has to happen after node creation)\r\n const wasLayoutBlocked = this.blockLayout;\r\n if (!wasLayoutBlocked) {\r\n this.blockLayout = true;\r\n }\r\n\r\n super.addControl(button);\r\n\r\n button.isBackplateVisible = false;\r\n button.scaling.scaleInPlace(TouchHolographicMenu.MENU_BUTTON_SCALE);\r\n\r\n // Unblocking the layout triggers the pending layout update that uses the size of the buttons to determine the size of the backing mesh\r\n if (!wasLayoutBlocked) {\r\n this.blockLayout = false;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * This method should not be used directly. It is inherited from `Container3D`.\r\n * Please use `addButton` instead.\r\n * @param _control the control to add\r\n * @returns the current container\r\n */\r\n public override addControl(_control: Control3D): Container3D {\r\n Logger.Warn(\"TouchHolographicMenu can only contain buttons. Please use the method `addButton` instead.\");\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Disposes the menu\r\n */\r\n public override dispose() {\r\n super.dispose();\r\n\r\n this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);\r\n }\r\n}\r\n"]}
@@ -0,0 +1,21 @@
1
+ import type { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
2
+ import type { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh.js";
3
+ import type { Mesh } from "@babylonjs/core/Meshes/mesh.js";
4
+ import { TouchButton3D } from "./touchButton3D.js";
5
+ /**
6
+ * Class used to create an interactable object. It's a touchable 3D button using a mesh coming from the current scene
7
+ * @since 5.0.0
8
+ */
9
+ export declare class TouchMeshButton3D extends TouchButton3D {
10
+ /** @internal */
11
+ protected _currentMesh: Mesh;
12
+ /**
13
+ * Creates a new 3D button based on a mesh
14
+ * @param mesh mesh to become a 3D button. By default this is also the mesh for near interaction collision checking
15
+ * @param name defines the control name
16
+ */
17
+ constructor(mesh: Mesh, name?: string);
18
+ protected _getTypeName(): string;
19
+ protected _createNode(): TransformNode;
20
+ protected _affectMaterial(mesh: AbstractMesh): void;
21
+ }
@@ -0,0 +1,58 @@
1
+ import { TouchButton3D } from "./touchButton3D.js";
2
+ /**
3
+ * Class used to create an interactable object. It's a touchable 3D button using a mesh coming from the current scene
4
+ * @since 5.0.0
5
+ */
6
+ export class TouchMeshButton3D extends TouchButton3D {
7
+ /**
8
+ * Creates a new 3D button based on a mesh
9
+ * @param mesh mesh to become a 3D button. By default this is also the mesh for near interaction collision checking
10
+ * @param name defines the control name
11
+ */
12
+ constructor(mesh, name) {
13
+ super(name, mesh);
14
+ this._currentMesh = mesh;
15
+ /**
16
+ * Provides a default behavior on hover/out & up/down
17
+ * Override those function to create your own desired behavior specific to your mesh
18
+ */
19
+ this.pointerEnterAnimation = () => {
20
+ if (!this.mesh) {
21
+ return;
22
+ }
23
+ this.mesh.scaling.scaleInPlace(1.1);
24
+ };
25
+ this.pointerOutAnimation = () => {
26
+ if (!this.mesh) {
27
+ return;
28
+ }
29
+ this.mesh.scaling.scaleInPlace(1.0 / 1.1);
30
+ };
31
+ this.pointerDownAnimation = () => {
32
+ if (!this.mesh) {
33
+ return;
34
+ }
35
+ this.mesh.scaling.scaleInPlace(0.95);
36
+ };
37
+ this.pointerUpAnimation = () => {
38
+ if (!this.mesh) {
39
+ return;
40
+ }
41
+ this.mesh.scaling.scaleInPlace(1.0 / 0.95);
42
+ };
43
+ }
44
+ _getTypeName() {
45
+ return "TouchMeshButton3D";
46
+ }
47
+ // Mesh association
48
+ _createNode() {
49
+ const meshes = this._currentMesh.getChildMeshes();
50
+ for (const mesh of meshes) {
51
+ this._injectGUI3DReservedDataStore(mesh).control = this;
52
+ }
53
+ return this._currentMesh;
54
+ }
55
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
56
+ _affectMaterial(mesh) { }
57
+ }
58
+ //# sourceMappingURL=touchMeshButton3D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touchMeshButton3D.js","sourceRoot":"","sources":["../../../../../dev/gui/src/3D/controls/touchMeshButton3D.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAIhD;;;;OAIG;IACH,YAAY,IAAU,EAAE,IAAa;QACjC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAElB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB;;;WAGG;QACH,IAAI,CAAC,qBAAqB,GAAG,GAAG,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACb,OAAO;YACX,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC;QAEF,IAAI,CAAC,mBAAmB,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACb,OAAO;YACX,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEF,IAAI,CAAC,oBAAoB,GAAG,GAAG,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACb,OAAO;YACX,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,IAAI,CAAC,kBAAkB,GAAG,GAAG,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACb,OAAO;YACX,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC;IACN,CAAC;IAEkB,YAAY;QAC3B,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED,mBAAmB;IACA,WAAW;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;QAElD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,6DAA6D;IAC1C,eAAe,CAAC,IAAkB,IAAG,CAAC;CAC5D","sourcesContent":["import type { TransformNode } from \"core/Meshes/transformNode\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\n\r\nimport { TouchButton3D } from \"./touchButton3D\";\r\n\r\n/**\r\n * Class used to create an interactable object. It's a touchable 3D button using a mesh coming from the current scene\r\n * @since 5.0.0\r\n */\r\nexport class TouchMeshButton3D extends TouchButton3D {\r\n /** @internal */\r\n protected _currentMesh: Mesh;\r\n\r\n /**\r\n * Creates a new 3D button based on a mesh\r\n * @param mesh mesh to become a 3D button. By default this is also the mesh for near interaction collision checking\r\n * @param name defines the control name\r\n */\r\n constructor(mesh: Mesh, name?: string) {\r\n super(name, mesh);\r\n\r\n this._currentMesh = mesh;\r\n\r\n /**\r\n * Provides a default behavior on hover/out & up/down\r\n * Override those function to create your own desired behavior specific to your mesh\r\n */\r\n this.pointerEnterAnimation = () => {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n this.mesh.scaling.scaleInPlace(1.1);\r\n };\r\n\r\n this.pointerOutAnimation = () => {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n this.mesh.scaling.scaleInPlace(1.0 / 1.1);\r\n };\r\n\r\n this.pointerDownAnimation = () => {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n this.mesh.scaling.scaleInPlace(0.95);\r\n };\r\n\r\n this.pointerUpAnimation = () => {\r\n if (!this.mesh) {\r\n return;\r\n }\r\n this.mesh.scaling.scaleInPlace(1.0 / 0.95);\r\n };\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"TouchMeshButton3D\";\r\n }\r\n\r\n // Mesh association\r\n protected override _createNode(): TransformNode {\r\n const meshes = this._currentMesh.getChildMeshes();\r\n\r\n for (const mesh of meshes) {\r\n this._injectGUI3DReservedDataStore(mesh).control = this;\r\n }\r\n\r\n return this._currentMesh;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected override _affectMaterial(mesh: AbstractMesh) {}\r\n}\r\n"]}
@@ -0,0 +1,53 @@
1
+ import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
2
+ import type { int } from "@babylonjs/core/types.js";
3
+ import { Container3D } from "./container3D.js";
4
+ import type { Control3D } from "./control3D.js";
5
+ /**
6
+ * Abstract class used to create a container panel deployed on the surface of a volume
7
+ */
8
+ export declare abstract class VolumeBasedPanel extends Container3D {
9
+ private _columns;
10
+ private _rows;
11
+ private _rowThenColum;
12
+ private _orientation;
13
+ protected _cellWidth: number;
14
+ protected _cellHeight: number;
15
+ /**
16
+ * Gets or sets the distance between elements
17
+ */
18
+ margin: number;
19
+ /**
20
+ * Gets or sets the orientation to apply to all controls (BABYLON.Container3D.FaceOriginReversedOrientation by default)
21
+ * | Value | Type | Description |
22
+ * | ----- | ----------------------------------- | ----------- |
23
+ * | 0 | UNSET_ORIENTATION | Control rotation will remain unchanged |
24
+ * | 1 | FACEORIGIN_ORIENTATION | Control will rotate to make it look at sphere central axis |
25
+ * | 2 | FACEORIGINREVERSED_ORIENTATION | Control will rotate to make it look back at sphere central axis |
26
+ * | 3 | FACEFORWARD_ORIENTATION | Control will rotate to look at z axis (0, 0, 1) |
27
+ * | 4 | FACEFORWARDREVERSED_ORIENTATION | Control will rotate to look at negative z axis (0, 0, -1) |
28
+ */
29
+ get orientation(): number;
30
+ set orientation(value: number);
31
+ /**
32
+ * Gets or sets the number of columns requested (10 by default).
33
+ * The panel will automatically compute the number of rows based on number of child controls.
34
+ */
35
+ get columns(): int;
36
+ set columns(value: int);
37
+ /**
38
+ * Gets or sets a the number of rows requested.
39
+ * The panel will automatically compute the number of columns based on number of child controls.
40
+ */
41
+ get rows(): int;
42
+ set rows(value: int);
43
+ /**
44
+ * Creates new VolumeBasedPanel
45
+ * @param name
46
+ */
47
+ constructor(name?: string);
48
+ protected _arrangeChildren(): void;
49
+ /** Child classes must implement this function to provide correct control positioning */
50
+ protected abstract _mapGridNode(control: Control3D, nodePosition: Vector3): void;
51
+ /** Child classes can implement this function to provide additional processing */
52
+ protected _finalProcessing(): void;
53
+ }
@@ -0,0 +1,158 @@
1
+ import { Tools } from "@babylonjs/core/Misc/tools.js";
2
+ import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
3
+ import { Container3D } from "./container3D.js";
4
+ /**
5
+ * Abstract class used to create a container panel deployed on the surface of a volume
6
+ */
7
+ export class VolumeBasedPanel extends Container3D {
8
+ /**
9
+ * Gets or sets the orientation to apply to all controls (BABYLON.Container3D.FaceOriginReversedOrientation by default)
10
+ * | Value | Type | Description |
11
+ * | ----- | ----------------------------------- | ----------- |
12
+ * | 0 | UNSET_ORIENTATION | Control rotation will remain unchanged |
13
+ * | 1 | FACEORIGIN_ORIENTATION | Control will rotate to make it look at sphere central axis |
14
+ * | 2 | FACEORIGINREVERSED_ORIENTATION | Control will rotate to make it look back at sphere central axis |
15
+ * | 3 | FACEFORWARD_ORIENTATION | Control will rotate to look at z axis (0, 0, 1) |
16
+ * | 4 | FACEFORWARDREVERSED_ORIENTATION | Control will rotate to look at negative z axis (0, 0, -1) |
17
+ */
18
+ get orientation() {
19
+ return this._orientation;
20
+ }
21
+ set orientation(value) {
22
+ if (this._orientation === value) {
23
+ return;
24
+ }
25
+ this._orientation = value;
26
+ Tools.SetImmediate(() => {
27
+ this._arrangeChildren();
28
+ });
29
+ }
30
+ /**
31
+ * Gets or sets the number of columns requested (10 by default).
32
+ * The panel will automatically compute the number of rows based on number of child controls.
33
+ */
34
+ get columns() {
35
+ return this._columns;
36
+ }
37
+ set columns(value) {
38
+ if (this._columns === value) {
39
+ return;
40
+ }
41
+ this._columns = value;
42
+ this._rowThenColum = true;
43
+ Tools.SetImmediate(() => {
44
+ this._arrangeChildren();
45
+ });
46
+ }
47
+ /**
48
+ * Gets or sets a the number of rows requested.
49
+ * The panel will automatically compute the number of columns based on number of child controls.
50
+ */
51
+ get rows() {
52
+ return this._rows;
53
+ }
54
+ set rows(value) {
55
+ if (this._rows === value) {
56
+ return;
57
+ }
58
+ this._rows = value;
59
+ this._rowThenColum = false;
60
+ Tools.SetImmediate(() => {
61
+ this._arrangeChildren();
62
+ });
63
+ }
64
+ /**
65
+ * Creates new VolumeBasedPanel
66
+ * @param name
67
+ */
68
+ constructor(name) {
69
+ super(name);
70
+ this._columns = 10;
71
+ this._rows = 0;
72
+ this._rowThenColum = true;
73
+ this._orientation = Container3D.FACEORIGIN_ORIENTATION;
74
+ /**
75
+ * Gets or sets the distance between elements
76
+ */
77
+ this.margin = 0;
78
+ }
79
+ _arrangeChildren() {
80
+ this._cellWidth = 0;
81
+ this._cellHeight = 0;
82
+ let rows = 0;
83
+ let columns = 0;
84
+ let controlCount = 0;
85
+ // Measure
86
+ for (const child of this._children) {
87
+ if (!child.mesh) {
88
+ continue;
89
+ }
90
+ controlCount++;
91
+ child.mesh.computeWorldMatrix(true);
92
+ const extendSize = child.mesh.getBoundingInfo().boundingBox.extendSize;
93
+ // to be safe, check descendants
94
+ const descendants = child.mesh.getDescendants(false);
95
+ for (const descendant of descendants) {
96
+ descendant.computeWorldMatrix(true);
97
+ const casted = descendant;
98
+ if (typeof casted.getBoundingInfo === "function") {
99
+ const extendSizeChild = casted.getBoundingInfo().boundingBox.extendSize;
100
+ extendSize.x = Math.max(extendSize.x, extendSizeChild.x);
101
+ extendSize.y = Math.max(extendSize.y, extendSizeChild.y);
102
+ extendSize.z = Math.max(extendSize.z, extendSizeChild.z);
103
+ }
104
+ }
105
+ this._cellWidth = Math.max(this._cellWidth, extendSize.x * 2);
106
+ this._cellHeight = Math.max(this._cellHeight, extendSize.y * 2);
107
+ }
108
+ this._cellWidth += this.margin * 2;
109
+ this._cellHeight += this.margin * 2;
110
+ // Arrange
111
+ if (this._rowThenColum) {
112
+ columns = this._columns;
113
+ rows = Math.ceil(controlCount / this._columns);
114
+ }
115
+ else {
116
+ rows = this._rows;
117
+ columns = Math.ceil(controlCount / this._rows);
118
+ }
119
+ const startOffsetX = columns * 0.5 * this._cellWidth;
120
+ const startOffsetY = rows * 0.5 * this._cellHeight;
121
+ const nodeGrid = [];
122
+ let cellCounter = 0;
123
+ if (this._rowThenColum) {
124
+ for (let r = 0; r < rows; r++) {
125
+ for (let c = 0; c < columns; c++) {
126
+ nodeGrid.push(new Vector3(c * this._cellWidth - startOffsetX + this._cellWidth / 2, r * this._cellHeight - startOffsetY + this._cellHeight / 2, 0));
127
+ cellCounter++;
128
+ if (cellCounter > controlCount) {
129
+ break;
130
+ }
131
+ }
132
+ }
133
+ }
134
+ else {
135
+ for (let c = 0; c < columns; c++) {
136
+ for (let r = 0; r < rows; r++) {
137
+ nodeGrid.push(new Vector3(c * this._cellWidth - startOffsetX + this._cellWidth / 2, r * this._cellHeight - startOffsetY + this._cellHeight / 2, 0));
138
+ cellCounter++;
139
+ if (cellCounter > controlCount) {
140
+ break;
141
+ }
142
+ }
143
+ }
144
+ }
145
+ cellCounter = 0;
146
+ for (const child of this._children) {
147
+ if (!child.mesh) {
148
+ continue;
149
+ }
150
+ this._mapGridNode(child, nodeGrid[cellCounter]);
151
+ cellCounter++;
152
+ }
153
+ this._finalProcessing();
154
+ }
155
+ /** Child classes can implement this function to provide additional processing */
156
+ _finalProcessing() { }
157
+ }
158
+ //# sourceMappingURL=volumeBasedPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volumeBasedPanel.js","sourceRoot":"","sources":["../../../../../dev/gui/src/3D/controls/volumeBasedPanel.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tools } from \"core/Misc/tools\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport type { int } from \"core/types\";\r\n\r\nimport { Container3D } from \"./container3D\";\r\nimport type { Control3D } from \"./control3D\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\n\r\n/**\r\n * Abstract class used to create a container panel deployed on the surface of a volume\r\n */\r\nexport abstract class VolumeBasedPanel extends Container3D {\r\n private _columns = 10;\r\n private _rows = 0;\r\n private _rowThenColum = true;\r\n\r\n private _orientation = Container3D.FACEORIGIN_ORIENTATION;\r\n\r\n protected _cellWidth: number;\r\n protected _cellHeight: number;\r\n\r\n /**\r\n * Gets or sets the distance between elements\r\n */\r\n public margin = 0;\r\n\r\n /**\r\n * Gets or sets the orientation to apply to all controls (BABYLON.Container3D.FaceOriginReversedOrientation by default)\r\n * | Value | Type | Description |\r\n * | ----- | ----------------------------------- | ----------- |\r\n * | 0 | UNSET_ORIENTATION | Control rotation will remain unchanged |\r\n * | 1 | FACEORIGIN_ORIENTATION | Control will rotate to make it look at sphere central axis |\r\n * | 2 | FACEORIGINREVERSED_ORIENTATION | Control will rotate to make it look back at sphere central axis |\r\n * | 3 | FACEFORWARD_ORIENTATION | Control will rotate to look at z axis (0, 0, 1) |\r\n * | 4 | FACEFORWARDREVERSED_ORIENTATION | Control will rotate to look at negative z axis (0, 0, -1) |\r\n */\r\n public get orientation(): number {\r\n return this._orientation;\r\n }\r\n\r\n public set orientation(value: number) {\r\n if (this._orientation === value) {\r\n return;\r\n }\r\n\r\n this._orientation = value;\r\n\r\n Tools.SetImmediate(() => {\r\n this._arrangeChildren();\r\n });\r\n }\r\n\r\n /**\r\n * Gets or sets the number of columns requested (10 by default).\r\n * The panel will automatically compute the number of rows based on number of child controls.\r\n */\r\n public get columns(): int {\r\n return this._columns;\r\n }\r\n\r\n public set columns(value: int) {\r\n if (this._columns === value) {\r\n return;\r\n }\r\n\r\n this._columns = value;\r\n this._rowThenColum = true;\r\n\r\n Tools.SetImmediate(() => {\r\n this._arrangeChildren();\r\n });\r\n }\r\n\r\n /**\r\n * Gets or sets a the number of rows requested.\r\n * The panel will automatically compute the number of columns based on number of child controls.\r\n */\r\n public get rows(): int {\r\n return this._rows;\r\n }\r\n\r\n public set rows(value: int) {\r\n if (this._rows === value) {\r\n return;\r\n }\r\n\r\n this._rows = value;\r\n this._rowThenColum = false;\r\n\r\n Tools.SetImmediate(() => {\r\n this._arrangeChildren();\r\n });\r\n }\r\n\r\n /**\r\n * Creates new VolumeBasedPanel\r\n * @param name\r\n */\r\n public constructor(name?: string) {\r\n super(name);\r\n }\r\n\r\n protected override _arrangeChildren() {\r\n this._cellWidth = 0;\r\n this._cellHeight = 0;\r\n let rows = 0;\r\n let columns = 0;\r\n let controlCount = 0;\r\n // Measure\r\n for (const child of this._children) {\r\n if (!child.mesh) {\r\n continue;\r\n }\r\n\r\n controlCount++;\r\n child.mesh.computeWorldMatrix(true);\r\n const extendSize = child.mesh.getBoundingInfo().boundingBox.extendSize;\r\n // to be safe, check descendants\r\n const descendants = child.mesh.getDescendants(false);\r\n for (const descendant of descendants) {\r\n descendant.computeWorldMatrix(true);\r\n const casted = descendant as AbstractMesh;\r\n if (typeof casted.getBoundingInfo === \"function\") {\r\n const extendSizeChild = casted.getBoundingInfo().boundingBox.extendSize;\r\n extendSize.x = Math.max(extendSize.x, extendSizeChild.x);\r\n extendSize.y = Math.max(extendSize.y, extendSizeChild.y);\r\n extendSize.z = Math.max(extendSize.z, extendSizeChild.z);\r\n }\r\n }\r\n\r\n this._cellWidth = Math.max(this._cellWidth, extendSize.x * 2);\r\n this._cellHeight = Math.max(this._cellHeight, extendSize.y * 2);\r\n }\r\n\r\n this._cellWidth += this.margin * 2;\r\n this._cellHeight += this.margin * 2;\r\n\r\n // Arrange\r\n if (this._rowThenColum) {\r\n columns = this._columns;\r\n rows = Math.ceil(controlCount / this._columns);\r\n } else {\r\n rows = this._rows;\r\n columns = Math.ceil(controlCount / this._rows);\r\n }\r\n\r\n const startOffsetX = columns * 0.5 * this._cellWidth;\r\n const startOffsetY = rows * 0.5 * this._cellHeight;\r\n const nodeGrid = [];\r\n let cellCounter = 0;\r\n\r\n if (this._rowThenColum) {\r\n for (let r = 0; r < rows; r++) {\r\n for (let c = 0; c < columns; c++) {\r\n nodeGrid.push(new Vector3(c * this._cellWidth - startOffsetX + this._cellWidth / 2, r * this._cellHeight - startOffsetY + this._cellHeight / 2, 0));\r\n cellCounter++;\r\n if (cellCounter > controlCount) {\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n for (let c = 0; c < columns; c++) {\r\n for (let r = 0; r < rows; r++) {\r\n nodeGrid.push(new Vector3(c * this._cellWidth - startOffsetX + this._cellWidth / 2, r * this._cellHeight - startOffsetY + this._cellHeight / 2, 0));\r\n cellCounter++;\r\n if (cellCounter > controlCount) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n cellCounter = 0;\r\n for (const child of this._children) {\r\n if (!child.mesh) {\r\n continue;\r\n }\r\n\r\n this._mapGridNode(child, nodeGrid[cellCounter]);\r\n\r\n cellCounter++;\r\n }\r\n\r\n this._finalProcessing();\r\n }\r\n\r\n /** Child classes must implement this function to provide correct control positioning */\r\n protected abstract _mapGridNode(control: Control3D, nodePosition: Vector3): void;\r\n\r\n /** Child classes can implement this function to provide additional processing */\r\n protected _finalProcessing() {}\r\n}\r\n"]}
@@ -0,0 +1,108 @@
1
+ import type { Scene } from "@babylonjs/core/scene.js";
2
+ import { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
3
+ import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
4
+ import { HandleMaterial } from "../materials/handle/handleMaterial.js";
5
+ import type { SlateGizmo } from "./slateGizmo.js";
6
+ import { BaseSixDofDragBehavior } from "@babylonjs/core/Behaviors/Meshes/baseSixDofDragBehavior.js";
7
+ /**
8
+ * State of the handle regarding user interaction
9
+ */
10
+ export declare const enum HandleState {
11
+ /**
12
+ * Handle is idle
13
+ */
14
+ IDLE = 0,
15
+ /**
16
+ * Handle is hovered
17
+ */
18
+ HOVER = 1,
19
+ /**
20
+ * Handle is dragged
21
+ */
22
+ DRAG = 2
23
+ }
24
+ /**
25
+ * Base class for SlateGizmo handles
26
+ */
27
+ export declare abstract class GizmoHandle {
28
+ protected _scene: Scene;
29
+ protected _state: HandleState;
30
+ protected _materials: HandleMaterial[];
31
+ private _dragStartObserver;
32
+ private _draggingObserver;
33
+ private _dragEndObserver;
34
+ /**
35
+ * @internal
36
+ */
37
+ _dragBehavior: BaseSixDofDragBehavior;
38
+ /**
39
+ * The current state of the handle
40
+ */
41
+ get state(): HandleState;
42
+ private _gizmo;
43
+ /**
44
+ * Returns the gizmo carrying this handle
45
+ */
46
+ get gizmo(): SlateGizmo;
47
+ /**
48
+ * Sets hover state
49
+ */
50
+ set hover(value: boolean);
51
+ /**
52
+ * Sets drag state
53
+ */
54
+ set drag(value: boolean);
55
+ /**
56
+ * Node of this handle
57
+ */
58
+ node: TransformNode;
59
+ /**
60
+ * Creates a handle for a SlateGizmo
61
+ * @param gizmo associated SlateGizmo
62
+ * @param scene scene
63
+ */
64
+ constructor(gizmo: SlateGizmo, scene: Scene);
65
+ protected _createMaterial(positionOffset?: Vector3): HandleMaterial;
66
+ private _updateMaterial;
67
+ /**
68
+ * Binds callbacks from dragging interaction
69
+ * @param dragStartFn Function to call on drag start
70
+ * @param dragFn Function to call on drag
71
+ * @param dragEndFn Function to call on drag end
72
+ */
73
+ setDragBehavior(dragStartFn: (event: {
74
+ position: Vector3;
75
+ }) => void, dragFn: (event: {
76
+ position: Vector3;
77
+ }) => void, dragEndFn: () => void): void;
78
+ /**
79
+ * Creates the meshes and parent node of the handle
80
+ * Should be overridden by child classes
81
+ * @returns created node
82
+ */
83
+ abstract createNode(): TransformNode;
84
+ /**
85
+ * Disposes the handle
86
+ */
87
+ dispose(): void;
88
+ }
89
+ /**
90
+ * Side handle class that rotates the slate
91
+ */
92
+ export declare class SideHandle extends GizmoHandle {
93
+ /**
94
+ * Creates the meshes and parent node of the handle
95
+ * @returns created node
96
+ */
97
+ createNode(): TransformNode;
98
+ }
99
+ /**
100
+ * Corner handle that resizes the slate
101
+ */
102
+ export declare class CornerHandle extends GizmoHandle {
103
+ /**
104
+ * Creates the meshes and parent node of the handle
105
+ * @returns created node
106
+ */
107
+ createNode(): TransformNode;
108
+ }