@babylonjs/gui 5.0.0-alpha.8 → 5.0.0-beta.10
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.
- package/2D/adtInstrumentation.js +1 -1
- package/2D/advancedDynamicTexture.d.ts +178 -127
- package/2D/advancedDynamicTexture.js +368 -183
- package/2D/advancedDynamicTexture.js.map +1 -1
- package/2D/controls/button.d.ts +8 -0
- package/2D/controls/button.js +33 -10
- package/2D/controls/button.js.map +1 -1
- package/2D/controls/checkbox.d.ts +2 -1
- package/2D/controls/checkbox.js +10 -8
- package/2D/controls/checkbox.js.map +1 -1
- package/2D/controls/colorpicker.d.ts +4 -3
- package/2D/controls/colorpicker.js +40 -23
- package/2D/controls/colorpicker.js.map +1 -1
- package/2D/controls/container.d.ts +16 -5
- package/2D/controls/container.js +99 -15
- package/2D/controls/container.js.map +1 -1
- package/2D/controls/control.d.ts +115 -47
- package/2D/controls/control.js +318 -139
- package/2D/controls/control.js.map +1 -1
- package/2D/controls/displayGrid.d.ts +2 -1
- package/2D/controls/displayGrid.js +6 -6
- package/2D/controls/displayGrid.js.map +1 -1
- package/2D/controls/ellipse.d.ts +5 -3
- package/2D/controls/ellipse.js +9 -5
- package/2D/controls/ellipse.js.map +1 -1
- package/2D/controls/focusableButton.d.ts +1 -0
- package/2D/controls/focusableButton.js +9 -6
- package/2D/controls/focusableButton.js.map +1 -1
- package/2D/controls/grid.d.ts +13 -2
- package/2D/controls/grid.js +117 -33
- package/2D/controls/grid.js.map +1 -1
- package/2D/controls/image.d.ts +5 -4
- package/2D/controls/image.js +52 -31
- package/2D/controls/image.js.map +1 -1
- package/2D/controls/index.js +29 -29
- package/2D/controls/inputPassword.js +4 -4
- package/2D/controls/inputPassword.js.map +1 -1
- package/2D/controls/inputText.d.ts +2 -1
- package/2D/controls/inputText.js +40 -14
- package/2D/controls/inputText.js.map +1 -1
- package/2D/controls/line.d.ts +3 -2
- package/2D/controls/line.js +8 -8
- package/2D/controls/line.js.map +1 -1
- package/2D/controls/multiLine.d.ts +4 -3
- package/2D/controls/multiLine.js +6 -6
- package/2D/controls/multiLine.js.map +1 -1
- package/2D/controls/radioButton.d.ts +2 -1
- package/2D/controls/radioButton.js +10 -7
- package/2D/controls/radioButton.js.map +1 -1
- package/2D/controls/rectangle.d.ts +8 -3
- package/2D/controls/rectangle.js +21 -5
- package/2D/controls/rectangle.js.map +1 -1
- package/2D/controls/scrollViewers/scrollViewer.d.ts +3 -2
- package/2D/controls/scrollViewers/scrollViewer.js +9 -9
- package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
- package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +4 -3
- package/2D/controls/scrollViewers/scrollViewerWindow.js +4 -4
- package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
- package/2D/controls/selector.js +8 -8
- package/2D/controls/selector.js.map +1 -1
- package/2D/controls/sliders/baseSlider.d.ts +1 -1
- package/2D/controls/sliders/baseSlider.js +12 -10
- package/2D/controls/sliders/baseSlider.js.map +1 -1
- package/2D/controls/sliders/imageBasedSlider.d.ts +10 -1
- package/2D/controls/sliders/imageBasedSlider.js +29 -5
- package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
- package/2D/controls/sliders/imageScrollBar.d.ts +2 -1
- package/2D/controls/sliders/imageScrollBar.js +3 -3
- package/2D/controls/sliders/imageScrollBar.js.map +1 -1
- package/2D/controls/sliders/scrollBar.d.ts +2 -1
- package/2D/controls/sliders/scrollBar.js +3 -3
- package/2D/controls/sliders/scrollBar.js.map +1 -1
- package/2D/controls/sliders/slider.d.ts +2 -1
- package/2D/controls/sliders/slider.js +4 -4
- package/2D/controls/sliders/slider.js.map +1 -1
- package/2D/controls/stackPanel.d.ts +10 -3
- package/2D/controls/stackPanel.js +37 -15
- package/2D/controls/stackPanel.js.map +1 -1
- package/2D/controls/statics.js +3 -3
- package/2D/controls/statics.js.map +1 -1
- package/2D/controls/textBlock.d.ts +16 -9
- package/2D/controls/textBlock.js +76 -35
- package/2D/controls/textBlock.js.map +1 -1
- package/2D/controls/textWrapper.js +2 -2
- package/2D/controls/textWrapper.js.map +1 -1
- package/2D/controls/toggleButton.d.ts +1 -13
- package/2D/controls/toggleButton.js +29 -38
- package/2D/controls/toggleButton.js.map +1 -1
- package/2D/controls/virtualKeyboard.js +5 -5
- package/2D/controls/virtualKeyboard.js.map +1 -1
- package/2D/index.d.ts +1 -1
- package/2D/index.js +9 -9
- package/2D/index.js.map +1 -1
- package/2D/math2D.d.ts +5 -0
- package/2D/math2D.js +14 -2
- package/2D/math2D.js.map +1 -1
- package/2D/measure.js +1 -1
- package/2D/measure.js.map +1 -1
- package/2D/multiLinePoint.js +3 -3
- package/2D/style.js +2 -2
- package/2D/valueAndUnit.d.ts +21 -6
- package/2D/valueAndUnit.js +57 -13
- package/2D/valueAndUnit.js.map +1 -1
- package/2D/xmlLoader.d.ts +17 -3
- package/2D/xmlLoader.js +54 -15
- package/2D/xmlLoader.js.map +1 -1
- package/3D/behaviors/defaultBehavior.d.ts +73 -0
- package/3D/behaviors/defaultBehavior.js +122 -0
- package/3D/behaviors/defaultBehavior.js.map +1 -0
- package/3D/controls/abstractButton3D.d.ts +2 -2
- package/3D/controls/abstractButton3D.js +3 -3
- package/3D/controls/abstractButton3D.js.map +1 -1
- package/3D/controls/button3D.d.ts +0 -24
- package/3D/controls/button3D.js +15 -84
- package/3D/controls/button3D.js.map +1 -1
- package/3D/controls/container3D.js +2 -2
- package/3D/controls/contentDisplay3D.d.ts +30 -0
- package/3D/controls/contentDisplay3D.js +79 -0
- package/3D/controls/contentDisplay3D.js.map +1 -0
- package/3D/controls/control3D.d.ts +10 -7
- package/3D/controls/control3D.js +27 -19
- package/3D/controls/control3D.js.map +1 -1
- package/3D/controls/cylinderPanel.js +5 -5
- package/3D/controls/handMenu.d.ts +28 -0
- package/3D/controls/handMenu.js +48 -0
- package/3D/controls/handMenu.js.map +1 -0
- package/3D/controls/holographicBackplate.d.ts +48 -0
- package/3D/controls/holographicBackplate.js +121 -0
- package/3D/controls/holographicBackplate.js.map +1 -0
- package/3D/controls/holographicButton.d.ts +1 -1
- package/3D/controls/holographicButton.js +35 -31
- package/3D/controls/holographicButton.js.map +1 -1
- package/3D/controls/holographicSlate.d.ts +120 -0
- package/3D/controls/holographicSlate.js +372 -0
- package/3D/controls/holographicSlate.js.map +1 -0
- package/3D/controls/index.d.ts +6 -0
- package/3D/controls/index.js +21 -15
- package/3D/controls/index.js.map +1 -1
- package/3D/controls/meshButton3D.js +2 -2
- package/3D/controls/meshButton3D.js.map +1 -1
- package/3D/controls/nearMenu.d.ts +44 -0
- package/3D/controls/nearMenu.js +113 -0
- package/3D/controls/nearMenu.js.map +1 -0
- package/3D/controls/planePanel.js +3 -3
- package/3D/controls/scatterPanel.js +4 -4
- package/3D/controls/slider3D.d.ts +80 -0
- package/3D/controls/slider3D.js +268 -0
- package/3D/controls/slider3D.js.map +1 -0
- package/3D/controls/spherePanel.js +5 -5
- package/3D/controls/stackPanel3D.js +3 -3
- package/3D/controls/touchButton3D.d.ts +30 -21
- package/3D/controls/touchButton3D.js +127 -228
- package/3D/controls/touchButton3D.js.map +1 -1
- package/3D/controls/touchHolographicButton.d.ts +23 -2
- package/3D/controls/touchHolographicButton.js +162 -67
- package/3D/controls/touchHolographicButton.js.map +1 -1
- package/3D/controls/touchHolographicMenu.d.ts +61 -0
- package/3D/controls/touchHolographicMenu.js +149 -0
- package/3D/controls/touchHolographicMenu.js.map +1 -0
- package/3D/controls/touchMeshButton3D.d.ts +3 -6
- package/3D/controls/touchMeshButton3D.js +6 -14
- package/3D/controls/touchMeshButton3D.js.map +1 -1
- package/3D/controls/volumeBasedPanel.d.ts +1 -1
- package/3D/controls/volumeBasedPanel.js +5 -5
- package/3D/controls/volumeBasedPanel.js.map +1 -1
- package/3D/gizmos/gizmoHandle.d.ts +108 -0
- package/3D/gizmos/gizmoHandle.js +210 -0
- package/3D/gizmos/gizmoHandle.js.map +1 -0
- package/3D/gizmos/index.d.ts +2 -0
- package/3D/gizmos/index.js +3 -0
- package/3D/gizmos/index.js.map +1 -0
- package/3D/gizmos/slateGizmo.d.ts +59 -0
- package/3D/gizmos/slateGizmo.js +364 -0
- package/3D/gizmos/slateGizmo.js.map +1 -0
- package/3D/gui3DManager.d.ts +15 -2
- package/3D/gui3DManager.js +62 -41
- package/3D/gui3DManager.js.map +1 -1
- package/3D/index.d.ts +3 -2
- package/3D/index.js +5 -4
- package/3D/index.js.map +1 -1
- package/3D/materials/fluent/fluentMaterial.d.ts +90 -0
- package/3D/materials/fluent/fluentMaterial.js +282 -0
- package/3D/materials/fluent/fluentMaterial.js.map +1 -0
- package/3D/materials/fluent/index.d.ts +1 -0
- package/3D/materials/fluent/index.js +2 -0
- package/3D/materials/fluent/index.js.map +1 -0
- package/3D/materials/{shaders → fluent/shaders}/fluent.fragment.d.ts +0 -0
- package/3D/materials/fluent/shaders/fluent.fragment.js +7 -0
- package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -0
- package/3D/materials/{shaders → fluent/shaders}/fluent.vertex.d.ts +0 -0
- package/3D/materials/{shaders → fluent/shaders}/fluent.vertex.js +2 -2
- package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +154 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +435 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -0
- package/3D/materials/fluentBackplate/index.d.ts +1 -0
- package/3D/materials/fluentBackplate/index.js +2 -0
- package/3D/materials/fluentBackplate/index.js.map +1 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +7 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +7 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +189 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.js +538 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -0
- package/3D/materials/fluentButton/index.d.ts +1 -0
- package/3D/materials/fluentButton/index.js +2 -0
- package/3D/materials/fluentButton/index.js.map +1 -0
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -0
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +7 -0
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -0
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -0
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +7 -0
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -0
- package/3D/materials/fluentMaterial.d.ts +2 -88
- package/3D/materials/fluentMaterial.js +2 -277
- package/3D/materials/fluentMaterial.js.map +1 -1
- package/3D/materials/handle/handleMaterial.d.ts +68 -0
- package/3D/materials/handle/handleMaterial.js +127 -0
- package/3D/materials/handle/handleMaterial.js.map +1 -0
- package/3D/materials/handle/index.d.ts +1 -0
- package/3D/materials/handle/index.js +2 -0
- package/3D/materials/handle/index.js.map +1 -0
- package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -0
- package/3D/materials/handle/shaders/handle.fragment.js +7 -0
- package/3D/materials/handle/shaders/handle.fragment.js.map +1 -0
- package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -0
- package/3D/materials/handle/shaders/handle.vertex.js +7 -0
- package/3D/materials/handle/shaders/handle.vertex.js.map +1 -0
- package/3D/materials/index.d.ts +5 -1
- package/3D/materials/index.js +5 -1
- package/3D/materials/index.js.map +1 -1
- package/3D/materials/mrdl/index.d.ts +3 -0
- package/3D/materials/mrdl/index.js +4 -0
- package/3D/materials/mrdl/index.js.map +1 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +147 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.js +410 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +333 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.js +787 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +333 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +787 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +7 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +7 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +7 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +7 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +7 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +7 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -0
- package/3D/vector3WithInfo.js +1 -1
- package/index.d.ts +2 -2
- package/index.js +2 -2
- package/index.js.map +1 -1
- package/legacy/legacy.js +2 -2
- package/package.json +114 -9
- package/3D/materials/shaders/fluent.fragment.js +0 -7
- package/3D/materials/shaders/fluent.fragment.js.map +0 -1
- package/3D/materials/shaders/fluent.vertex.js.map +0 -1
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { __extends } from "tslib";
|
|
2
|
+
import { CreateBox } from "@babylonjs/core/Meshes/Builders/boxBuilder.js";
|
|
3
|
+
import { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
|
|
4
|
+
import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
5
|
+
import { HandleMaterial } from "../materials/handle/handleMaterial.js";
|
|
6
|
+
import { BaseSixDofDragBehavior } from "@babylonjs/core/Behaviors/Meshes/baseSixDofDragBehavior.js";
|
|
7
|
+
/**
|
|
8
|
+
* State of the handle regarding user interaction
|
|
9
|
+
*/
|
|
10
|
+
export var HandleState;
|
|
11
|
+
(function (HandleState) {
|
|
12
|
+
/**
|
|
13
|
+
* Handle is idle
|
|
14
|
+
*/
|
|
15
|
+
HandleState[HandleState["IDLE"] = 0] = "IDLE";
|
|
16
|
+
/**
|
|
17
|
+
* Handle is hovered
|
|
18
|
+
*/
|
|
19
|
+
HandleState[HandleState["HOVER"] = 1] = "HOVER";
|
|
20
|
+
/**
|
|
21
|
+
* Handle is dragged
|
|
22
|
+
*/
|
|
23
|
+
HandleState[HandleState["DRAG"] = 2] = "DRAG";
|
|
24
|
+
})(HandleState || (HandleState = {}));
|
|
25
|
+
/**
|
|
26
|
+
* Base class for SlateGizmo handles
|
|
27
|
+
*/
|
|
28
|
+
var GizmoHandle = /** @class */ (function () {
|
|
29
|
+
/**
|
|
30
|
+
* Creates a handle for a SlateGizmo
|
|
31
|
+
* @param gizmo associated SlateGizmo
|
|
32
|
+
* @param scene scene
|
|
33
|
+
*/
|
|
34
|
+
function GizmoHandle(gizmo, scene) {
|
|
35
|
+
this._state = HandleState.IDLE;
|
|
36
|
+
this._materials = [];
|
|
37
|
+
this._scene = scene;
|
|
38
|
+
this._gizmo = gizmo;
|
|
39
|
+
this.node = this.createNode();
|
|
40
|
+
this.node.reservedDataStore = {
|
|
41
|
+
handle: this,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
Object.defineProperty(GizmoHandle.prototype, "state", {
|
|
45
|
+
/**
|
|
46
|
+
* The current state of the handle
|
|
47
|
+
*/
|
|
48
|
+
get: function () {
|
|
49
|
+
return this._state;
|
|
50
|
+
},
|
|
51
|
+
enumerable: false,
|
|
52
|
+
configurable: true
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(GizmoHandle.prototype, "gizmo", {
|
|
55
|
+
/**
|
|
56
|
+
* Returns the gizmo carrying this handle
|
|
57
|
+
*/
|
|
58
|
+
get: function () {
|
|
59
|
+
return this._gizmo;
|
|
60
|
+
},
|
|
61
|
+
enumerable: false,
|
|
62
|
+
configurable: true
|
|
63
|
+
});
|
|
64
|
+
Object.defineProperty(GizmoHandle.prototype, "hover", {
|
|
65
|
+
/**
|
|
66
|
+
* Sets hover state
|
|
67
|
+
*/
|
|
68
|
+
set: function (value) {
|
|
69
|
+
if (value) {
|
|
70
|
+
this._state |= HandleState.HOVER;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
this._state &= ~HandleState.HOVER;
|
|
74
|
+
}
|
|
75
|
+
this._updateMaterial();
|
|
76
|
+
},
|
|
77
|
+
enumerable: false,
|
|
78
|
+
configurable: true
|
|
79
|
+
});
|
|
80
|
+
Object.defineProperty(GizmoHandle.prototype, "drag", {
|
|
81
|
+
/**
|
|
82
|
+
* Sets drag state
|
|
83
|
+
*/
|
|
84
|
+
set: function (value) {
|
|
85
|
+
if (value) {
|
|
86
|
+
this._state |= HandleState.DRAG;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this._state &= ~HandleState.DRAG;
|
|
90
|
+
}
|
|
91
|
+
this._updateMaterial();
|
|
92
|
+
},
|
|
93
|
+
enumerable: false,
|
|
94
|
+
configurable: true
|
|
95
|
+
});
|
|
96
|
+
GizmoHandle.prototype._createMaterial = function (positionOffset) {
|
|
97
|
+
var mat = new HandleMaterial("handle", this._scene);
|
|
98
|
+
if (positionOffset) {
|
|
99
|
+
mat._positionOffset = positionOffset;
|
|
100
|
+
}
|
|
101
|
+
return mat;
|
|
102
|
+
};
|
|
103
|
+
GizmoHandle.prototype._updateMaterial = function () {
|
|
104
|
+
var state = this._state;
|
|
105
|
+
for (var _i = 0, _a = this._materials; _i < _a.length; _i++) {
|
|
106
|
+
var mat = _a[_i];
|
|
107
|
+
mat.hover = false;
|
|
108
|
+
mat.drag = false;
|
|
109
|
+
}
|
|
110
|
+
if (state & HandleState.DRAG) {
|
|
111
|
+
for (var _b = 0, _c = this._materials; _b < _c.length; _b++) {
|
|
112
|
+
var mat = _c[_b];
|
|
113
|
+
mat.drag = true;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else if (state & HandleState.HOVER) {
|
|
117
|
+
for (var _d = 0, _e = this._materials; _d < _e.length; _d++) {
|
|
118
|
+
var mat = _e[_d];
|
|
119
|
+
mat.hover = true;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Binds callbacks from dragging interaction
|
|
125
|
+
* @param dragStartFn Function to call on drag start
|
|
126
|
+
* @param dragFn Function to call on drag
|
|
127
|
+
* @param dragEndFn Function to call on drag end
|
|
128
|
+
*/
|
|
129
|
+
GizmoHandle.prototype.setDragBehavior = function (dragStartFn, dragFn, dragEndFn) {
|
|
130
|
+
var dragBehavior = new BaseSixDofDragBehavior();
|
|
131
|
+
this._dragBehavior = dragBehavior;
|
|
132
|
+
this._dragStartObserver = dragBehavior.onDragStartObservable.add(dragStartFn);
|
|
133
|
+
this._draggingObserver = dragBehavior.onDragObservable.add(dragFn);
|
|
134
|
+
this._dragEndObserver = dragBehavior.onDragEndObservable.add(dragEndFn);
|
|
135
|
+
this._dragBehavior.attach(this.node);
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Disposes the handle
|
|
139
|
+
*/
|
|
140
|
+
GizmoHandle.prototype.dispose = function () {
|
|
141
|
+
this._dragBehavior.onDragStartObservable.remove(this._dragStartObserver);
|
|
142
|
+
this._dragBehavior.onDragObservable.remove(this._draggingObserver);
|
|
143
|
+
this._dragBehavior.onDragEndObservable.remove(this._dragEndObserver);
|
|
144
|
+
this._dragBehavior.detach();
|
|
145
|
+
for (var _i = 0, _a = this._materials; _i < _a.length; _i++) {
|
|
146
|
+
var material = _a[_i];
|
|
147
|
+
material.dispose();
|
|
148
|
+
}
|
|
149
|
+
this.node.dispose();
|
|
150
|
+
};
|
|
151
|
+
return GizmoHandle;
|
|
152
|
+
}());
|
|
153
|
+
export { GizmoHandle };
|
|
154
|
+
/**
|
|
155
|
+
* Side handle class that rotates the slate
|
|
156
|
+
*/
|
|
157
|
+
var SideHandle = /** @class */ (function (_super) {
|
|
158
|
+
__extends(SideHandle, _super);
|
|
159
|
+
function SideHandle() {
|
|
160
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Creates the meshes and parent node of the handle
|
|
164
|
+
* @returns created node
|
|
165
|
+
*/
|
|
166
|
+
SideHandle.prototype.createNode = function () {
|
|
167
|
+
// Create a simple vertical rectangle
|
|
168
|
+
var verticalBox = CreateBox("sideVert", { width: 1, height: 10, depth: 0.1 }, this._scene);
|
|
169
|
+
var sideNode = new TransformNode("side", this._scene);
|
|
170
|
+
verticalBox.parent = sideNode;
|
|
171
|
+
var mat = this._createMaterial();
|
|
172
|
+
verticalBox.material = mat;
|
|
173
|
+
verticalBox.isNearGrabbable = true;
|
|
174
|
+
this._materials.push(mat);
|
|
175
|
+
return sideNode;
|
|
176
|
+
};
|
|
177
|
+
return SideHandle;
|
|
178
|
+
}(GizmoHandle));
|
|
179
|
+
export { SideHandle };
|
|
180
|
+
/**
|
|
181
|
+
* Corner handle that resizes the slate
|
|
182
|
+
*/
|
|
183
|
+
var CornerHandle = /** @class */ (function (_super) {
|
|
184
|
+
__extends(CornerHandle, _super);
|
|
185
|
+
function CornerHandle() {
|
|
186
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Creates the meshes and parent node of the handle
|
|
190
|
+
* @returns created node
|
|
191
|
+
*/
|
|
192
|
+
CornerHandle.prototype.createNode = function () {
|
|
193
|
+
// Create 2 boxes making a bottom left corner
|
|
194
|
+
var horizontalBox = CreateBox("angleHor", { width: 3, height: 1, depth: 0.1 }, this._scene);
|
|
195
|
+
var verticalBox = CreateBox("angleVert", { width: 1, height: 3, depth: 0.1 }, this._scene);
|
|
196
|
+
var angleNode = new TransformNode("angle", this._scene);
|
|
197
|
+
horizontalBox.parent = angleNode;
|
|
198
|
+
verticalBox.parent = angleNode;
|
|
199
|
+
horizontalBox.material = this._createMaterial(new Vector3(1, 0, 0));
|
|
200
|
+
verticalBox.material = this._createMaterial(new Vector3(0, 1, 0));
|
|
201
|
+
verticalBox.isNearGrabbable = true;
|
|
202
|
+
horizontalBox.isNearGrabbable = true;
|
|
203
|
+
this._materials.push(horizontalBox.material);
|
|
204
|
+
this._materials.push(verticalBox.material);
|
|
205
|
+
return angleNode;
|
|
206
|
+
};
|
|
207
|
+
return CornerHandle;
|
|
208
|
+
}(GizmoHandle));
|
|
209
|
+
export { CornerHandle };
|
|
210
|
+
//# sourceMappingURL=gizmoHandle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gizmoHandle.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/gizmos/gizmoHandle.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scene } from \"@babylonjs/core/scene\";\r\nimport { CreateBox } from \"@babylonjs/core/Meshes/Builders/boxBuilder\";\r\nimport { TransformNode } from \"@babylonjs/core/Meshes/transformNode\";\r\nimport { Vector3 } from \"@babylonjs/core/Maths/math.vector\";\r\nimport { HandleMaterial } from \"../materials/handle/handleMaterial\";\r\nimport { SlateGizmo } from \"./slateGizmo\";\r\nimport { BaseSixDofDragBehavior } from \"@babylonjs/core/Behaviors/Meshes/baseSixDofDragBehavior\";\r\nimport { Nullable } from \"@babylonjs/core/types\";\r\nimport { Observer } from \"@babylonjs/core/Misc/observable\";\r\n\r\n/**\r\n * State of the handle regarding user interaction\r\n */\r\nexport enum HandleState {\r\n /**\r\n * Handle is idle\r\n */\r\n IDLE = 0,\r\n /**\r\n * Handle is hovered\r\n */\r\n HOVER = 1,\r\n /**\r\n * Handle is dragged\r\n */\r\n DRAG = 2,\r\n}\r\n\r\n/**\r\n * Base class for SlateGizmo handles\r\n */\r\nexport abstract class GizmoHandle {\r\n protected _scene: Scene;\r\n protected _state: HandleState = HandleState.IDLE;\r\n protected _materials: HandleMaterial[] = [];\r\n\r\n private _dragStartObserver: Nullable<Observer<any>>;\r\n private _draggingObserver: Nullable<Observer<any>>;\r\n private _dragEndObserver: Nullable<Observer<any>>;\r\n /**\r\n * @hidden\r\n */\r\n public _dragBehavior: BaseSixDofDragBehavior;\r\n\r\n /**\r\n * The current state of the handle\r\n */\r\n public get state(): HandleState {\r\n return this._state;\r\n }\r\n\r\n private _gizmo: SlateGizmo;\r\n\r\n /**\r\n * Returns the gizmo carrying this handle\r\n */\r\n public get gizmo() {\r\n return this._gizmo;\r\n }\r\n\r\n /**\r\n * Sets hover state\r\n */\r\n public set hover(value: boolean) {\r\n if (value) {\r\n this._state |= HandleState.HOVER;\r\n } else {\r\n this._state &= ~HandleState.HOVER;\r\n }\r\n\r\n this._updateMaterial();\r\n }\r\n /**\r\n * Sets drag state\r\n */\r\n public set drag(value: boolean) {\r\n if (value) {\r\n this._state |= HandleState.DRAG;\r\n } else {\r\n this._state &= ~HandleState.DRAG;\r\n }\r\n\r\n this._updateMaterial();\r\n }\r\n\r\n /**\r\n * Node of this handle\r\n */\r\n public node: TransformNode;\r\n\r\n /**\r\n * Creates a handle for a SlateGizmo\r\n * @param gizmo associated SlateGizmo\r\n * @param scene scene\r\n */\r\n constructor(gizmo: SlateGizmo, scene: Scene) {\r\n this._scene = scene;\r\n this._gizmo = gizmo;\r\n\r\n this.node = this.createNode();\r\n this.node.reservedDataStore = {\r\n handle: this,\r\n };\r\n }\r\n\r\n protected _createMaterial(positionOffset?: Vector3) {\r\n const mat = new HandleMaterial(\"handle\", this._scene);\r\n if (positionOffset) {\r\n mat._positionOffset = positionOffset;\r\n }\r\n return mat;\r\n }\r\n\r\n private _updateMaterial() {\r\n const state = this._state;\r\n for (const mat of this._materials) {\r\n mat.hover = false;\r\n mat.drag = false;\r\n }\r\n\r\n if (state & HandleState.DRAG) {\r\n for (const mat of this._materials) {\r\n mat.drag = true;\r\n }\r\n } else if (state & HandleState.HOVER) {\r\n for (const mat of this._materials) {\r\n mat.hover = true;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Binds callbacks from dragging interaction\r\n * @param dragStartFn Function to call on drag start\r\n * @param dragFn Function to call on drag\r\n * @param dragEndFn Function to call on drag end\r\n */\r\n public setDragBehavior(dragStartFn: (event: { position: Vector3 }) => void, dragFn: (event: { position: Vector3 }) => void, dragEndFn: () => void) {\r\n const dragBehavior = new BaseSixDofDragBehavior();\r\n\r\n this._dragBehavior = dragBehavior;\r\n\r\n this._dragStartObserver = dragBehavior.onDragStartObservable.add(dragStartFn);\r\n this._draggingObserver = dragBehavior.onDragObservable.add(dragFn);\r\n this._dragEndObserver = dragBehavior.onDragEndObservable.add(dragEndFn);\r\n\r\n this._dragBehavior.attach(this.node);\r\n }\r\n\r\n /**\r\n * Creates the meshes and parent node of the handle\r\n * Should be overriden by child classes\r\n * @returns created node\r\n */\r\n public abstract createNode(): TransformNode;\r\n\r\n /**\r\n * Disposes the handle\r\n */\r\n public dispose() {\r\n this._dragBehavior.onDragStartObservable.remove(this._dragStartObserver);\r\n this._dragBehavior.onDragObservable.remove(this._draggingObserver);\r\n this._dragBehavior.onDragEndObservable.remove(this._dragEndObserver);\r\n\r\n this._dragBehavior.detach();\r\n\r\n for (const material of this._materials) {\r\n material.dispose();\r\n }\r\n this.node.dispose();\r\n }\r\n}\r\n\r\n/**\r\n * Side handle class that rotates the slate\r\n */\r\nexport class SideHandle extends GizmoHandle {\r\n /**\r\n * Creates the meshes and parent node of the handle\r\n * @returns created node\r\n */\r\n public createNode() {\r\n // Create a simple vertical rectangle\r\n const verticalBox = CreateBox(\"sideVert\", { width: 1, height: 10, depth: 0.1 }, this._scene);\r\n const sideNode = new TransformNode(\"side\", this._scene);\r\n verticalBox.parent = sideNode;\r\n\r\n const mat = this._createMaterial();\r\n verticalBox.material = mat;\r\n verticalBox.isNearGrabbable = true;\r\n this._materials.push(mat);\r\n\r\n return sideNode;\r\n }\r\n}\r\n\r\n/**\r\n * Corner handle that resizes the slate\r\n */\r\nexport class CornerHandle extends GizmoHandle {\r\n /**\r\n * Creates the meshes and parent node of the handle\r\n * @returns created node\r\n */\r\n public createNode() {\r\n // Create 2 boxes making a bottom left corner\r\n const horizontalBox = CreateBox(\"angleHor\", { width: 3, height: 1, depth: 0.1 }, this._scene);\r\n const verticalBox = CreateBox(\"angleVert\", { width: 1, height: 3, depth: 0.1 }, this._scene);\r\n\r\n const angleNode = new TransformNode(\"angle\", this._scene);\r\n horizontalBox.parent = angleNode;\r\n verticalBox.parent = angleNode;\r\n\r\n horizontalBox.material = this._createMaterial(new Vector3(1, 0, 0));\r\n verticalBox.material = this._createMaterial(new Vector3(0, 1, 0));\r\n verticalBox.isNearGrabbable = true;\r\n horizontalBox.isNearGrabbable = true;\r\n\r\n this._materials.push(horizontalBox.material as HandleMaterial);\r\n this._materials.push(verticalBox.material as HandleMaterial);\r\n return angleNode;\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/3D/gizmos/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC","sourcesContent":["export * from \"./slateGizmo\";\r\nexport * from \"./gizmoHandle\";\r\n"]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Gizmo } from "@babylonjs/core/Gizmos/gizmo";
|
|
2
|
+
import { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh";
|
|
3
|
+
import { UtilityLayerRenderer } from "@babylonjs/core/Rendering/utilityLayerRenderer";
|
|
4
|
+
import { Nullable } from "@babylonjs/core/types";
|
|
5
|
+
import { HolographicSlate } from "../controls/holographicSlate";
|
|
6
|
+
/**
|
|
7
|
+
* Gizmo to resize 2D slates
|
|
8
|
+
*/
|
|
9
|
+
export declare class SlateGizmo extends Gizmo {
|
|
10
|
+
private _boundingDimensions;
|
|
11
|
+
private _pickedPointObserver;
|
|
12
|
+
private _renderObserver;
|
|
13
|
+
private _tmpQuaternion;
|
|
14
|
+
private _tmpVector;
|
|
15
|
+
private _corners;
|
|
16
|
+
private _sides;
|
|
17
|
+
private _handlesParent;
|
|
18
|
+
private _handleHovered;
|
|
19
|
+
private _handleDragged;
|
|
20
|
+
private _boundingBoxGizmo;
|
|
21
|
+
/**
|
|
22
|
+
* Value we use to offset handles from mesh
|
|
23
|
+
*/
|
|
24
|
+
private _margin;
|
|
25
|
+
private _attachedSlate;
|
|
26
|
+
private _existingSlateScale;
|
|
27
|
+
/**
|
|
28
|
+
* If set, the handles will increase in size based on the distance away from the camera to have a consistent screen size (Default: true)
|
|
29
|
+
*/
|
|
30
|
+
fixedScreenSize: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* The distance away from the object which the draggable meshes should appear world sized when fixedScreenSize is set to true (default: 10)
|
|
33
|
+
*/
|
|
34
|
+
fixedScreenSizeDistanceFactor: number;
|
|
35
|
+
/**
|
|
36
|
+
* Size of the handles (meters in XR)
|
|
37
|
+
*/
|
|
38
|
+
handleSize: number;
|
|
39
|
+
/**
|
|
40
|
+
* The slate attached to this gizmo
|
|
41
|
+
*/
|
|
42
|
+
set attachedSlate(control: Nullable<HolographicSlate>);
|
|
43
|
+
get attachedSlate(): Nullable<HolographicSlate>;
|
|
44
|
+
constructor(utilityLayer?: UtilityLayerRenderer);
|
|
45
|
+
private _createNode;
|
|
46
|
+
private _keepAspectRatio;
|
|
47
|
+
private _clampDimensions;
|
|
48
|
+
private _moveHandle;
|
|
49
|
+
private _assignDragBehaviorCorners;
|
|
50
|
+
private _assignDragBehaviorSides;
|
|
51
|
+
protected _attachedNodeChanged(value: Nullable<AbstractMesh>): void;
|
|
52
|
+
/**
|
|
53
|
+
* Updates the bounding box information for the gizmo
|
|
54
|
+
*/
|
|
55
|
+
updateBoundingBox(): void;
|
|
56
|
+
private _updateHandlesPosition;
|
|
57
|
+
protected _update(): void;
|
|
58
|
+
dispose(): void;
|
|
59
|
+
}
|
|
@@ -0,0 +1,364 @@
|
|
|
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._attachedSlate = null;
|
|
32
|
+
_this._existingSlateScale = new Vector3();
|
|
33
|
+
/**
|
|
34
|
+
* If set, the handles will increase in size based on the distance away from the camera to have a consistent screen size (Default: true)
|
|
35
|
+
*/
|
|
36
|
+
_this.fixedScreenSize = false;
|
|
37
|
+
/**
|
|
38
|
+
* The distance away from the object which the draggable meshes should appear world sized when fixedScreenSize is set to true (default: 10)
|
|
39
|
+
*/
|
|
40
|
+
_this.fixedScreenSizeDistanceFactor = 10;
|
|
41
|
+
/**
|
|
42
|
+
* Size of the handles (meters in XR)
|
|
43
|
+
*/
|
|
44
|
+
_this.handleSize = 0.01;
|
|
45
|
+
_this._createNode();
|
|
46
|
+
_this.updateScale = false;
|
|
47
|
+
_this._renderObserver = _this.gizmoLayer.originalScene.onBeforeRenderObservable.add(function () {
|
|
48
|
+
// Only update the bounding box if scaling has changed
|
|
49
|
+
if (_this.attachedMesh && !_this._existingSlateScale.equals(_this.attachedMesh.scaling)) {
|
|
50
|
+
_this.updateBoundingBox();
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
return _this;
|
|
54
|
+
}
|
|
55
|
+
Object.defineProperty(SlateGizmo.prototype, "attachedSlate", {
|
|
56
|
+
get: function () {
|
|
57
|
+
return this._attachedSlate;
|
|
58
|
+
},
|
|
59
|
+
/**
|
|
60
|
+
* The slate attached to this gizmo
|
|
61
|
+
*/
|
|
62
|
+
set: function (control) {
|
|
63
|
+
var _this = this;
|
|
64
|
+
if (control) {
|
|
65
|
+
this.attachedMesh = control.mesh;
|
|
66
|
+
this.updateBoundingBox();
|
|
67
|
+
this._pickedPointObserver = control._host.onPickingObservable.add(function (pickedMesh) {
|
|
68
|
+
if (_this._handleHovered && (!pickedMesh || pickedMesh.parent !== _this._handleHovered.node)) {
|
|
69
|
+
_this._handleHovered.hover = false;
|
|
70
|
+
_this._handleHovered = null;
|
|
71
|
+
}
|
|
72
|
+
if (pickedMesh && pickedMesh.parent && pickedMesh.parent.reservedDataStore && pickedMesh.parent.reservedDataStore.handle) {
|
|
73
|
+
var handle = pickedMesh.parent.reservedDataStore.handle;
|
|
74
|
+
if (handle.gizmo === _this) {
|
|
75
|
+
_this._handleHovered = handle;
|
|
76
|
+
_this._handleHovered.hover = true;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
else if (this._attachedSlate) {
|
|
82
|
+
this._attachedSlate._host.onPickingObservable.remove(this._pickedPointObserver);
|
|
83
|
+
}
|
|
84
|
+
this._attachedSlate = control;
|
|
85
|
+
},
|
|
86
|
+
enumerable: false,
|
|
87
|
+
configurable: true
|
|
88
|
+
});
|
|
89
|
+
SlateGizmo.prototype._createNode = function () {
|
|
90
|
+
var _this = this;
|
|
91
|
+
this._handlesParent = new TransformNode("handlesParent", this.gizmoLayer.utilityLayerScene);
|
|
92
|
+
this._handlesParent.rotationQuaternion = Quaternion.Identity();
|
|
93
|
+
var masksCorners = [
|
|
94
|
+
{
|
|
95
|
+
dimensions: new Vector3(-1, -1, 0),
|
|
96
|
+
origin: new Vector3(1, 0, 0),
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
dimensions: new Vector3(1, -1, 0),
|
|
100
|
+
origin: new Vector3(0, 0, 0),
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
dimensions: new Vector3(1, 1, 0),
|
|
104
|
+
origin: new Vector3(0, 1, 0),
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
dimensions: new Vector3(-1, 1, 0),
|
|
108
|
+
origin: new Vector3(1, 1, 0),
|
|
109
|
+
},
|
|
110
|
+
];
|
|
111
|
+
for (var i = 0; i < 4; i++) {
|
|
112
|
+
var corner = new CornerHandle(this, this.gizmoLayer.utilityLayerScene);
|
|
113
|
+
this._corners.push(corner);
|
|
114
|
+
corner.node.rotation.z = (Math.PI / 2) * i;
|
|
115
|
+
corner.node.scaling.setAll(this.handleSize);
|
|
116
|
+
corner.node.parent = this._handlesParent;
|
|
117
|
+
this._assignDragBehaviorCorners(corner, function (originStart, dimensionsStart, offset, masks) { return _this._moveHandle(originStart, dimensionsStart, offset, masks, true); }, masksCorners[i]);
|
|
118
|
+
}
|
|
119
|
+
for (var i = 0; i < 4; i++) {
|
|
120
|
+
var side = new SideHandle(this, this.gizmoLayer.utilityLayerScene);
|
|
121
|
+
this._sides.push(side);
|
|
122
|
+
side.node.rotation.z = (Math.PI / 2) * i;
|
|
123
|
+
side.node.scaling.copyFromFloats(this.handleSize, this.handleSize, this.handleSize);
|
|
124
|
+
side.node.parent = this._handlesParent;
|
|
125
|
+
this._assignDragBehaviorSides(side, i % 2 === 0 ? new Vector3(0, 1, 0) : new Vector3(1, 0, 0));
|
|
126
|
+
}
|
|
127
|
+
this._handlesParent.parent = this._rootMesh;
|
|
128
|
+
};
|
|
129
|
+
SlateGizmo.prototype._keepAspectRatio = function (vector, aspectRatio, invertDiagonal) {
|
|
130
|
+
if (invertDiagonal === void 0) { invertDiagonal = false; }
|
|
131
|
+
var axis = TmpVectors.Vector3[0];
|
|
132
|
+
axis.copyFromFloats(aspectRatio, 1, 0).normalize();
|
|
133
|
+
if (invertDiagonal) {
|
|
134
|
+
axis.y *= -1;
|
|
135
|
+
}
|
|
136
|
+
var dot = Vector3.Dot(vector, axis);
|
|
137
|
+
vector.copyFrom(axis).scaleInPlace(dot);
|
|
138
|
+
};
|
|
139
|
+
SlateGizmo.prototype._clampDimensions = function (vector, dimensions, mask, keepAspectRatio) {
|
|
140
|
+
if (keepAspectRatio === void 0) { keepAspectRatio = false; }
|
|
141
|
+
var impact = TmpVectors.Vector3[0];
|
|
142
|
+
impact.copyFrom(vector).multiplyInPlace(mask);
|
|
143
|
+
var clampedDimensions = TmpVectors.Vector3[1];
|
|
144
|
+
clampedDimensions.copyFromFloats(Math.max(this._attachedSlate.minDimensions.x, impact.x + dimensions.x), Math.max(this._attachedSlate.minDimensions.y, impact.y + dimensions.y), 0);
|
|
145
|
+
if (keepAspectRatio) {
|
|
146
|
+
// Extra logic to ensure the ratio is maintained when the vector has been clamped
|
|
147
|
+
var ratio = dimensions.x / dimensions.y;
|
|
148
|
+
clampedDimensions.x = Math.max(clampedDimensions.x, clampedDimensions.y * ratio);
|
|
149
|
+
clampedDimensions.y = Math.max(clampedDimensions.y, clampedDimensions.x / ratio);
|
|
150
|
+
}
|
|
151
|
+
// Calculating the real impact of vector on clamped dimensions
|
|
152
|
+
impact.copyFrom(clampedDimensions).subtractInPlace(dimensions);
|
|
153
|
+
vector.x = Math.sign(vector.x) * Math.abs(impact.x);
|
|
154
|
+
vector.y = Math.sign(vector.y) * Math.abs(impact.y);
|
|
155
|
+
};
|
|
156
|
+
SlateGizmo.prototype._moveHandle = function (originStart, dimensionsStart, offset, masks, isCorner) {
|
|
157
|
+
if (!this._attachedSlate) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (isCorner) {
|
|
161
|
+
var aspectRatio = dimensionsStart.x / dimensionsStart.y;
|
|
162
|
+
this._keepAspectRatio(offset, aspectRatio, masks.dimensions.x * masks.dimensions.y < 0);
|
|
163
|
+
}
|
|
164
|
+
this._clampDimensions(offset, dimensionsStart, masks.dimensions, isCorner);
|
|
165
|
+
var offsetOriginMasked = TmpVectors.Vector3[0];
|
|
166
|
+
var offsetDimensionsMasked = TmpVectors.Vector3[1];
|
|
167
|
+
offsetOriginMasked.copyFrom(offset).multiplyInPlace(masks.origin);
|
|
168
|
+
offsetDimensionsMasked.copyFrom(offset).multiplyInPlace(masks.dimensions);
|
|
169
|
+
this._attachedSlate.origin.copyFrom(originStart).addInPlace(offsetOriginMasked);
|
|
170
|
+
this._attachedSlate.dimensions.set(dimensionsStart.x + offsetDimensionsMasked.x, dimensionsStart.y + offsetDimensionsMasked.y);
|
|
171
|
+
};
|
|
172
|
+
SlateGizmo.prototype._assignDragBehaviorCorners = function (handle, moveFn, masks) {
|
|
173
|
+
var _this = this;
|
|
174
|
+
var dimensionsStart = new Vector3();
|
|
175
|
+
var originStart = new Vector3();
|
|
176
|
+
var dragOrigin = new Vector3();
|
|
177
|
+
var toObjectFrame = new Matrix();
|
|
178
|
+
var dragPlaneNormal = new Vector3();
|
|
179
|
+
var previousFollowState = false;
|
|
180
|
+
var projectToRef = function (position, normal, origin, ref) {
|
|
181
|
+
// Projects on the plane with its normal and origin
|
|
182
|
+
position.subtractToRef(origin, TmpVectors.Vector3[0]);
|
|
183
|
+
var dot = Vector3.Dot(TmpVectors.Vector3[0], normal);
|
|
184
|
+
TmpVectors.Vector3[1].copyFrom(normal).scaleInPlace(dot);
|
|
185
|
+
TmpVectors.Vector3[0].subtractInPlace(TmpVectors.Vector3[1]);
|
|
186
|
+
TmpVectors.Vector3[0].addToRef(origin, ref);
|
|
187
|
+
};
|
|
188
|
+
var dragStart = function (event) {
|
|
189
|
+
if (_this.attachedSlate && _this.attachedMesh) {
|
|
190
|
+
dimensionsStart.set(_this.attachedSlate.dimensions.x, _this.attachedSlate.dimensions.y, Epsilon);
|
|
191
|
+
originStart.copyFrom(_this.attachedSlate.origin);
|
|
192
|
+
dragOrigin.copyFrom(event.position);
|
|
193
|
+
toObjectFrame.copyFrom(_this.attachedMesh.computeWorldMatrix(true));
|
|
194
|
+
toObjectFrame.invert();
|
|
195
|
+
previousFollowState = _this.attachedSlate.defaultBehavior.followBehaviorEnabled;
|
|
196
|
+
_this.attachedSlate.defaultBehavior.followBehaviorEnabled = false;
|
|
197
|
+
Vector3.TransformNormalToRef(Vector3.Forward(), _this.attachedMesh.getWorldMatrix(), dragPlaneNormal);
|
|
198
|
+
dragPlaneNormal.normalize();
|
|
199
|
+
if (_this._handleHovered) {
|
|
200
|
+
_this._handleDragged = _this._handleHovered;
|
|
201
|
+
_this._handleDragged.drag = true;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
var dragging = function (event) {
|
|
206
|
+
if (_this.attachedSlate && _this.attachedMesh) {
|
|
207
|
+
projectToRef(event.position, dragPlaneNormal, dragOrigin, _this._tmpVector);
|
|
208
|
+
_this._tmpVector.subtractInPlace(dragOrigin);
|
|
209
|
+
Vector3.TransformNormalToRef(_this._tmpVector, toObjectFrame, _this._tmpVector);
|
|
210
|
+
moveFn(originStart, dimensionsStart, _this._tmpVector, masks);
|
|
211
|
+
_this.attachedSlate._positionElements();
|
|
212
|
+
_this.updateBoundingBox();
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
var dragEnd = function () {
|
|
216
|
+
if (_this.attachedSlate && _this.attachedNode) {
|
|
217
|
+
_this.attachedSlate._updatePivot();
|
|
218
|
+
_this.attachedSlate.defaultBehavior.followBehaviorEnabled = previousFollowState;
|
|
219
|
+
if (_this._handleDragged) {
|
|
220
|
+
_this._handleDragged.drag = false;
|
|
221
|
+
_this._handleDragged = null;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
handle.setDragBehavior(dragStart, dragging, dragEnd);
|
|
226
|
+
};
|
|
227
|
+
SlateGizmo.prototype._assignDragBehaviorSides = function (handle, dragPlaneNormal) {
|
|
228
|
+
var _this = this;
|
|
229
|
+
var quaternionOrigin = new Quaternion();
|
|
230
|
+
var dragOrigin = new Vector3();
|
|
231
|
+
var directionOrigin = new Vector3();
|
|
232
|
+
var worldPivot = new Vector3();
|
|
233
|
+
var previousFollowState;
|
|
234
|
+
var worldPlaneNormal = new Vector3();
|
|
235
|
+
var dragStart = function (event) {
|
|
236
|
+
if (_this.attachedSlate && _this.attachedMesh) {
|
|
237
|
+
quaternionOrigin.copyFrom(_this.attachedMesh.rotationQuaternion);
|
|
238
|
+
dragOrigin.copyFrom(event.position);
|
|
239
|
+
previousFollowState = _this.attachedSlate.defaultBehavior.followBehaviorEnabled;
|
|
240
|
+
_this.attachedSlate.defaultBehavior.followBehaviorEnabled = false;
|
|
241
|
+
worldPivot.copyFrom(_this.attachedMesh.getAbsolutePivotPoint());
|
|
242
|
+
directionOrigin.copyFrom(dragOrigin).subtractInPlace(worldPivot).normalize();
|
|
243
|
+
Vector3.TransformNormalToRef(dragPlaneNormal, _this.attachedMesh.getWorldMatrix(), worldPlaneNormal);
|
|
244
|
+
worldPlaneNormal.normalize();
|
|
245
|
+
if (_this._handleHovered) {
|
|
246
|
+
_this._handleDragged = _this._handleHovered;
|
|
247
|
+
_this._handleDragged.drag = true;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
var dragging = function (event) {
|
|
252
|
+
if (_this.attachedSlate && _this.attachedMesh) {
|
|
253
|
+
_this._tmpVector.copyFrom(event.position);
|
|
254
|
+
_this._tmpVector.subtractInPlace(worldPivot);
|
|
255
|
+
_this._tmpVector.normalize();
|
|
256
|
+
var angle = -Vector3.GetAngleBetweenVectorsOnPlane(_this._tmpVector, directionOrigin, worldPlaneNormal);
|
|
257
|
+
Quaternion.RotationAxisToRef(dragPlaneNormal, angle, _this._tmpQuaternion);
|
|
258
|
+
quaternionOrigin.multiplyToRef(_this._tmpQuaternion, _this.attachedMesh.rotationQuaternion);
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
var dragEnd = function () {
|
|
262
|
+
if (_this.attachedSlate && _this.attachedNode) {
|
|
263
|
+
_this.attachedSlate._updatePivot();
|
|
264
|
+
_this.attachedSlate.defaultBehavior.followBehaviorEnabled = previousFollowState;
|
|
265
|
+
if (_this._handleDragged) {
|
|
266
|
+
_this._handleDragged.drag = false;
|
|
267
|
+
_this._handleDragged = null;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
handle.setDragBehavior(dragStart, dragging, dragEnd);
|
|
272
|
+
};
|
|
273
|
+
SlateGizmo.prototype._attachedNodeChanged = function (value) {
|
|
274
|
+
if (value) {
|
|
275
|
+
this.updateBoundingBox();
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
/**
|
|
279
|
+
* Updates the bounding box information for the gizmo
|
|
280
|
+
*/
|
|
281
|
+
SlateGizmo.prototype.updateBoundingBox = function () {
|
|
282
|
+
if (this.attachedMesh) {
|
|
283
|
+
PivotTools._RemoveAndStorePivotPoint(this.attachedMesh);
|
|
284
|
+
// Store original parent
|
|
285
|
+
var originalParent = this.attachedMesh.parent;
|
|
286
|
+
this.attachedMesh.setParent(null);
|
|
287
|
+
this._update();
|
|
288
|
+
// Rotate based on axis
|
|
289
|
+
if (!this.attachedMesh.rotationQuaternion) {
|
|
290
|
+
this.attachedMesh.rotationQuaternion = Quaternion.RotationYawPitchRoll(this.attachedMesh.rotation.y, this.attachedMesh.rotation.x, this.attachedMesh.rotation.z);
|
|
291
|
+
}
|
|
292
|
+
// Store original position and reset mesh to origin before computing the bounding box
|
|
293
|
+
this._tmpQuaternion.copyFrom(this.attachedMesh.rotationQuaternion);
|
|
294
|
+
this._tmpVector.copyFrom(this.attachedMesh.position);
|
|
295
|
+
this.attachedMesh.rotationQuaternion.set(0, 0, 0, 1);
|
|
296
|
+
this.attachedMesh.position.set(0, 0, 0);
|
|
297
|
+
// Update bounding dimensions/positions
|
|
298
|
+
var boundingMinMax = this.attachedMesh.getHierarchyBoundingVectors();
|
|
299
|
+
boundingMinMax.max.subtractToRef(boundingMinMax.min, this._boundingDimensions);
|
|
300
|
+
this._boundingBoxGizmo.min = boundingMinMax.min;
|
|
301
|
+
this._boundingBoxGizmo.max = boundingMinMax.max;
|
|
302
|
+
// Update handles of the gizmo
|
|
303
|
+
this._updateHandlesPosition();
|
|
304
|
+
// Restore position/rotation values
|
|
305
|
+
this.attachedMesh.rotationQuaternion.copyFrom(this._tmpQuaternion);
|
|
306
|
+
this.attachedMesh.position.copyFrom(this._tmpVector);
|
|
307
|
+
PivotTools._RestorePivotPoint(this.attachedMesh);
|
|
308
|
+
// Restore original parent
|
|
309
|
+
this.attachedMesh.setParent(originalParent);
|
|
310
|
+
this.attachedMesh.computeWorldMatrix(true);
|
|
311
|
+
this._existingSlateScale.copyFrom(this.attachedMesh.scaling);
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
SlateGizmo.prototype._updateHandlesPosition = function () {
|
|
315
|
+
var min = this._boundingBoxGizmo.min.clone();
|
|
316
|
+
var max = this._boundingBoxGizmo.max.clone();
|
|
317
|
+
var handleScaling = this._corners[0].node.scaling.length();
|
|
318
|
+
min.x -= this._margin * handleScaling;
|
|
319
|
+
min.y -= this._margin * handleScaling;
|
|
320
|
+
max.x += this._margin * handleScaling;
|
|
321
|
+
max.y += this._margin * handleScaling;
|
|
322
|
+
var center = min.add(max).scaleInPlace(0.5);
|
|
323
|
+
this._corners[0].node.position.copyFromFloats(min.x, min.y, 0);
|
|
324
|
+
this._corners[1].node.position.copyFromFloats(max.x, min.y, 0);
|
|
325
|
+
this._corners[2].node.position.copyFromFloats(max.x, max.y, 0);
|
|
326
|
+
this._corners[3].node.position.copyFromFloats(min.x, max.y, 0);
|
|
327
|
+
this._sides[0].node.position.copyFromFloats(min.x, center.y, 0);
|
|
328
|
+
this._sides[1].node.position.copyFromFloats(center.x, min.y, 0);
|
|
329
|
+
this._sides[2].node.position.copyFromFloats(max.x, center.y, 0);
|
|
330
|
+
this._sides[3].node.position.copyFromFloats(center.x, max.y, 0);
|
|
331
|
+
};
|
|
332
|
+
SlateGizmo.prototype._update = function () {
|
|
333
|
+
_super.prototype._update.call(this);
|
|
334
|
+
if (!this.gizmoLayer.utilityLayerScene.activeCamera) {
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
if (this._attachedSlate && this._attachedSlate.mesh) {
|
|
338
|
+
if (this.fixedScreenSize) {
|
|
339
|
+
this._attachedSlate.mesh.absolutePosition.subtractToRef(this.gizmoLayer.utilityLayerScene.activeCamera.position, this._tmpVector);
|
|
340
|
+
var distanceFromCamera = (this.handleSize * this._tmpVector.length()) / this.fixedScreenSizeDistanceFactor;
|
|
341
|
+
for (var i = 0; i < this._corners.length; i++) {
|
|
342
|
+
this._corners[i].node.scaling.set(distanceFromCamera, distanceFromCamera, distanceFromCamera);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
this._updateHandlesPosition();
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
SlateGizmo.prototype.dispose = function () {
|
|
349
|
+
this.gizmoLayer.originalScene.onBeforeRenderObservable.remove(this._renderObserver);
|
|
350
|
+
// Will dispose rootMesh and all descendants
|
|
351
|
+
_super.prototype.dispose.call(this);
|
|
352
|
+
for (var _i = 0, _a = this._corners; _i < _a.length; _i++) {
|
|
353
|
+
var corner = _a[_i];
|
|
354
|
+
corner.dispose();
|
|
355
|
+
}
|
|
356
|
+
for (var _b = 0, _c = this._sides; _b < _c.length; _b++) {
|
|
357
|
+
var side = _c[_b];
|
|
358
|
+
side.dispose();
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
return SlateGizmo;
|
|
362
|
+
}(Gizmo));
|
|
363
|
+
export { SlateGizmo };
|
|
364
|
+
//# sourceMappingURL=slateGizmo.js.map
|