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