@aura3d/controls 1.4.4 → 1.5.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/dist/ControlState.d.ts +1 -1
- package/dist/ControlState.d.ts.map +1 -1
- package/dist/DragControls.d.ts +21 -1
- package/dist/DragControls.d.ts.map +1 -1
- package/dist/DragControls.js +24 -2
- package/dist/DragControls.js.map +1 -1
- package/dist/FirstPersonControls.d.ts +10 -1
- package/dist/FirstPersonControls.d.ts.map +1 -1
- package/dist/FirstPersonControls.js +18 -2
- package/dist/FirstPersonControls.js.map +1 -1
- package/dist/FlyControls.d.ts +42 -0
- package/dist/FlyControls.d.ts.map +1 -1
- package/dist/FlyControls.js +106 -3
- package/dist/FlyControls.js.map +1 -1
- package/dist/MapControls.d.ts +13 -0
- package/dist/MapControls.d.ts.map +1 -1
- package/dist/MapControls.js +40 -2
- package/dist/MapControls.js.map +1 -1
- package/dist/OrbitControls.d.ts +54 -0
- package/dist/OrbitControls.d.ts.map +1 -1
- package/dist/OrbitControls.js +133 -0
- package/dist/OrbitControls.js.map +1 -1
- package/dist/PointerLockControls.d.ts +12 -5
- package/dist/PointerLockControls.d.ts.map +1 -1
- package/dist/PointerLockControls.js +30 -11
- package/dist/PointerLockControls.js.map +1 -1
- package/dist/SelectionManager.d.ts +22 -1
- package/dist/SelectionManager.d.ts.map +1 -1
- package/dist/SelectionManager.js +64 -6
- package/dist/SelectionManager.js.map +1 -1
- package/dist/TransformControls.d.ts +135 -1
- package/dist/TransformControls.d.ts.map +1 -1
- package/dist/TransformControls.js +534 -10
- package/dist/TransformControls.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/OrbitControls.js
CHANGED
|
@@ -1,25 +1,158 @@
|
|
|
1
|
+
import { InputSnapshot, OrbitControls as OrbitControlsEngine } from "@aura3d/input";
|
|
1
2
|
import { createDefaultControlState } from "./ControlState.js";
|
|
3
|
+
function pointerDrag(button, deltaX, deltaY) {
|
|
4
|
+
return new InputSnapshot({
|
|
5
|
+
pointer: {
|
|
6
|
+
deltaX,
|
|
7
|
+
deltaY,
|
|
8
|
+
buttons: new Map([[button, { down: true, pressed: true, released: false }]])
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Three.js-compatible orbit controls.
|
|
14
|
+
*
|
|
15
|
+
* Two modes:
|
|
16
|
+
*
|
|
17
|
+
* - Camera-attached (`new OrbitControls(camera, options)`): all motion is
|
|
18
|
+
* delegated to the `@aura3d/input` orbit implementation, which owns the real
|
|
19
|
+
* spherical camera math, distance/polar clamping, and `saveState`/`reset`.
|
|
20
|
+
* `state` mirrors the camera the engine produced. This is the supported path.
|
|
21
|
+
* - Detached (`new OrbitControls()`): there is no camera to drive, so
|
|
22
|
+
* `rotate`/`pan`/`dolly` only accumulate bookkeeping numbers on `state`.
|
|
23
|
+
* Those numbers are not a camera pose and carry no parity claim. This mode
|
|
24
|
+
* exists so `TrackballControls` and existing detached callers keep working;
|
|
25
|
+
* new code should attach a camera.
|
|
26
|
+
*/
|
|
2
27
|
export class OrbitControls {
|
|
3
28
|
state = createDefaultControlState();
|
|
4
29
|
enablePan = true;
|
|
5
30
|
enableZoom = true;
|
|
6
31
|
enableRotate = true;
|
|
32
|
+
engine;
|
|
33
|
+
attachedCamera;
|
|
34
|
+
constructor(camera, options = {}) {
|
|
35
|
+
if (!camera)
|
|
36
|
+
return;
|
|
37
|
+
this.engine = new OrbitControlsEngine(camera, options);
|
|
38
|
+
this.enablePan = this.engine.enablePan;
|
|
39
|
+
this.enableZoom = this.engine.enableZoom;
|
|
40
|
+
this.enableRotate = this.engine.enableRotate;
|
|
41
|
+
this.syncState(camera);
|
|
42
|
+
}
|
|
43
|
+
/** True when a camera is attached and motion is delegated to the real engine. */
|
|
44
|
+
get isCameraAttached() {
|
|
45
|
+
return this.engine !== undefined;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Drive the controls from an input snapshot. Camera-attached only; a detached
|
|
49
|
+
* instance has no camera to move and ignores the snapshot.
|
|
50
|
+
*
|
|
51
|
+
* Named `applyInput` rather than `update` because `TrackballControls`
|
|
52
|
+
* overrides `update(deltaSeconds)` with damping-tick semantics.
|
|
53
|
+
*/
|
|
54
|
+
applyInput(snapshot) {
|
|
55
|
+
const engine = this.engine;
|
|
56
|
+
if (!engine)
|
|
57
|
+
return;
|
|
58
|
+
this.pushFlags(engine);
|
|
59
|
+
engine.update(snapshot);
|
|
60
|
+
this.syncState();
|
|
61
|
+
}
|
|
7
62
|
rotate(deltaX, deltaY) {
|
|
8
63
|
if (!this.enableRotate)
|
|
9
64
|
return;
|
|
65
|
+
if (this.engine) {
|
|
66
|
+
this.pushFlags(this.engine);
|
|
67
|
+
this.engine.update(pointerDrag(0, deltaX, deltaY));
|
|
68
|
+
this.syncState();
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
10
71
|
this.state.rotation.x += deltaY;
|
|
11
72
|
this.state.rotation.y += deltaX;
|
|
12
73
|
}
|
|
13
74
|
pan(deltaX, deltaY) {
|
|
14
75
|
if (!this.enablePan)
|
|
15
76
|
return;
|
|
77
|
+
if (this.engine) {
|
|
78
|
+
this.pushFlags(this.engine);
|
|
79
|
+
this.engine.update(pointerDrag(2, deltaX, deltaY));
|
|
80
|
+
this.syncState();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
16
83
|
this.state.target.x += deltaX;
|
|
17
84
|
this.state.target.y += deltaY;
|
|
18
85
|
}
|
|
19
86
|
dolly(scale) {
|
|
20
87
|
if (!this.enableZoom)
|
|
21
88
|
return;
|
|
89
|
+
if (this.engine) {
|
|
90
|
+
this.pushFlags(this.engine);
|
|
91
|
+
this.engine.update(new InputSnapshot({ pointer: { wheelY: scale < 1 ? -100 : 100 } }));
|
|
92
|
+
this.syncState();
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
22
95
|
this.state.position.z *= scale;
|
|
23
96
|
}
|
|
97
|
+
/** Camera-attached only; returns 0 when detached. */
|
|
98
|
+
getAzimuthalAngle() {
|
|
99
|
+
return this.engine?.getAzimuthalAngle() ?? 0;
|
|
100
|
+
}
|
|
101
|
+
/** Camera-attached only; returns 0 when detached. */
|
|
102
|
+
getPolarAngle() {
|
|
103
|
+
return this.engine?.getPolarAngle() ?? 0;
|
|
104
|
+
}
|
|
105
|
+
/** Camera-attached only; returns 0 when detached. */
|
|
106
|
+
getDistance() {
|
|
107
|
+
return this.engine?.getDistance() ?? 0;
|
|
108
|
+
}
|
|
109
|
+
/** Camera-attached only; no-op when detached. */
|
|
110
|
+
saveState() {
|
|
111
|
+
this.engine?.saveState();
|
|
112
|
+
}
|
|
113
|
+
/** Camera-attached only; no-op when detached. */
|
|
114
|
+
reset() {
|
|
115
|
+
if (!this.engine)
|
|
116
|
+
return;
|
|
117
|
+
this.engine.reset();
|
|
118
|
+
this.syncState();
|
|
119
|
+
}
|
|
120
|
+
dispose() {
|
|
121
|
+
this.engine?.dispose();
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Move the orbit target on the XZ ground plane. Camera-attached instances
|
|
125
|
+
* move the engine target (and therefore the camera); detached instances only
|
|
126
|
+
* update `state.target` bookkeeping.
|
|
127
|
+
*/
|
|
128
|
+
truckTarget(deltaX, deltaZ) {
|
|
129
|
+
const engine = this.engine;
|
|
130
|
+
if (!engine) {
|
|
131
|
+
this.state.target.x += deltaX;
|
|
132
|
+
this.state.target.z += deltaZ;
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
engine.target.x += deltaX;
|
|
136
|
+
engine.target.z += deltaZ;
|
|
137
|
+
engine.update(new InputSnapshot());
|
|
138
|
+
this.syncState();
|
|
139
|
+
}
|
|
140
|
+
pushFlags(engine) {
|
|
141
|
+
engine.enablePan = this.enablePan;
|
|
142
|
+
engine.enableZoom = this.enableZoom;
|
|
143
|
+
engine.enableRotate = this.enableRotate;
|
|
144
|
+
}
|
|
145
|
+
syncState(camera) {
|
|
146
|
+
const engine = this.engine;
|
|
147
|
+
if (!engine)
|
|
148
|
+
return;
|
|
149
|
+
const source = camera ?? this.attachedCamera;
|
|
150
|
+
if (source) {
|
|
151
|
+
this.state.position.set(source.position.x, source.position.y, source.position.z);
|
|
152
|
+
}
|
|
153
|
+
this.state.target.set(engine.target.x, engine.target.y, engine.target.z);
|
|
154
|
+
this.state.rotation.set(engine.getPolarAngle(), engine.getAzimuthalAngle(), this.state.rotation.z);
|
|
155
|
+
this.attachedCamera = source;
|
|
156
|
+
}
|
|
24
157
|
}
|
|
25
158
|
//# sourceMappingURL=OrbitControls.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrbitControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/OrbitControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAgC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"OrbitControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/OrbitControls.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { type FirstPersonControlsOptions } from "@aura3d/input";
|
|
2
|
+
import { FirstPersonControls } from "./FirstPersonControls";
|
|
3
|
+
import type { FlyCameraLike } from "./FlyControls";
|
|
4
|
+
/**
|
|
5
|
+
* Pointer-lock navigation delegated to `@aura3d/input`. `lock()` and
|
|
6
|
+
* `unlock()` gate both snapshot updates and compatibility `look()` deltas.
|
|
7
|
+
*/
|
|
8
|
+
export declare class PointerLockControls extends FirstPersonControls {
|
|
9
|
+
private readonly pointerLockDelegate;
|
|
10
|
+
constructor(camera?: FlyCameraLike, options?: FirstPersonControlsOptions);
|
|
11
|
+
get locked(): boolean;
|
|
12
|
+
set locked(value: boolean);
|
|
5
13
|
lock(): void;
|
|
6
14
|
unlock(): void;
|
|
7
|
-
look(deltaX: number, deltaY: number): void;
|
|
8
15
|
}
|
|
9
16
|
//# sourceMappingURL=PointerLockControls.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PointerLockControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/PointerLockControls.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"PointerLockControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/PointerLockControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,mBAAmB;IAC1D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA2B;gBAEnD,MAAM,CAAC,EAAE,aAAa,EAAE,OAAO,GAAE,0BAA+B;IAS5E,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,EAGxB;IAED,IAAI,IAAI,IAAI;IAIZ,MAAM,IAAI,IAAI;CAGf"}
|
|
@@ -1,14 +1,33 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
this.
|
|
1
|
+
import { PointerLockControls as InputPointerLockControls } from "@aura3d/input";
|
|
2
|
+
import { FirstPersonControls } from "./FirstPersonControls.js";
|
|
3
|
+
/**
|
|
4
|
+
* Pointer-lock navigation delegated to `@aura3d/input`. `lock()` and
|
|
5
|
+
* `unlock()` gate both snapshot updates and compatibility `look()` deltas.
|
|
6
|
+
*/
|
|
7
|
+
export class PointerLockControls extends FirstPersonControls {
|
|
8
|
+
pointerLockDelegate;
|
|
9
|
+
constructor(camera, options = {}) {
|
|
10
|
+
super(camera, options);
|
|
11
|
+
this.pointerLockDelegate = new InputPointerLockControls(this.controlledCamera, {
|
|
12
|
+
...options,
|
|
13
|
+
moveSpeed: 1
|
|
14
|
+
});
|
|
15
|
+
this.replaceDelegate(this.pointerLockDelegate, options.lookSpeed ?? 0.002);
|
|
16
|
+
}
|
|
17
|
+
get locked() {
|
|
18
|
+
return this.pointerLockDelegate.locked;
|
|
19
|
+
}
|
|
20
|
+
set locked(value) {
|
|
21
|
+
if (value)
|
|
22
|
+
this.lock();
|
|
23
|
+
else
|
|
24
|
+
this.unlock();
|
|
25
|
+
}
|
|
26
|
+
lock() {
|
|
27
|
+
this.pointerLockDelegate.lock();
|
|
28
|
+
}
|
|
29
|
+
unlock() {
|
|
30
|
+
this.pointerLockDelegate.unlock();
|
|
12
31
|
}
|
|
13
32
|
}
|
|
14
33
|
//# sourceMappingURL=PointerLockControls.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PointerLockControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/PointerLockControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"PointerLockControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/PointerLockControls.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,IAAI,wBAAwB,EAEhD,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,mBAAmB;IACzC,mBAAmB,CAA2B;IAE/D,YAAY,MAAsB,EAAE,UAAsC,EAAE;QAC1E,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,mBAAmB,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC7E,GAAG,OAAO;YACV,SAAS,EAAE,CAAC;SACb,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;IACzC,CAAC;IAED,IAAI,MAAM,CAAC,KAAc;QACvB,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC;;YAClB,IAAI,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -1,8 +1,29 @@
|
|
|
1
1
|
import type { ControlObject3DLike } from "./NativeControlTypes";
|
|
2
|
+
export interface SelectionManagerChange {
|
|
3
|
+
readonly previous: readonly ControlObject3DLike[];
|
|
4
|
+
readonly current: readonly ControlObject3DLike[];
|
|
5
|
+
readonly added: readonly ControlObject3DLike[];
|
|
6
|
+
readonly removed: readonly ControlObject3DLike[];
|
|
7
|
+
}
|
|
8
|
+
export type SelectionManagerListener = (change: SelectionManagerChange) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Observable object-identity selection owner. This is intentionally separate
|
|
11
|
+
* from editor-runtime's id selection: controls callers select object
|
|
12
|
+
* references, while editor documents select stable string/number ids.
|
|
13
|
+
*/
|
|
2
14
|
export declare class SelectionManager {
|
|
3
|
-
readonly
|
|
15
|
+
private readonly selectedObjects;
|
|
16
|
+
private readonly listeners;
|
|
17
|
+
get selected(): ReadonlySet<ControlObject3DLike>;
|
|
18
|
+
current(): readonly ControlObject3DLike[];
|
|
4
19
|
select(object: ControlObject3DLike, additive?: boolean): void;
|
|
5
20
|
deselect(object: ControlObject3DLike): void;
|
|
6
21
|
clear(): void;
|
|
22
|
+
has(object: ControlObject3DLike): boolean;
|
|
23
|
+
toggle(object: ControlObject3DLike, additive?: boolean): void;
|
|
24
|
+
prune(alive: (object: ControlObject3DLike) => boolean): void;
|
|
25
|
+
subscribe(listener: SelectionManagerListener): () => void;
|
|
26
|
+
dispose(): void;
|
|
27
|
+
private replace;
|
|
7
28
|
}
|
|
8
29
|
//# sourceMappingURL=SelectionManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionManager.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/SelectionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"SelectionManager.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/SelectionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAClD;AAED,MAAM,MAAM,wBAAwB,GAAG,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC;AAEhF;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAClE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IAEjE,IAAI,QAAQ,IAAI,WAAW,CAAC,mBAAmB,CAAC,CAE/C;IAED,OAAO,IAAI,SAAS,mBAAmB,EAAE;IAIzC,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,QAAQ,UAAQ,GAAG,IAAI;IAO3D,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAM3C,KAAK,IAAI,IAAI;IAIb,GAAG,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO;IAIzC,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,QAAQ,UAAO,GAAG,IAAI;IAQ1D,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,OAAO,GAAG,IAAI;IAI5D,SAAS,CAAC,QAAQ,EAAE,wBAAwB,GAAG,MAAM,IAAI;IAKzD,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,OAAO;CAgBhB"}
|
package/dist/SelectionManager.js
CHANGED
|
@@ -1,15 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observable object-identity selection owner. This is intentionally separate
|
|
3
|
+
* from editor-runtime's id selection: controls callers select object
|
|
4
|
+
* references, while editor documents select stable string/number ids.
|
|
5
|
+
*/
|
|
1
6
|
export class SelectionManager {
|
|
2
|
-
|
|
7
|
+
selectedObjects = new Set();
|
|
8
|
+
listeners = new Set();
|
|
9
|
+
get selected() {
|
|
10
|
+
return this.selectedObjects;
|
|
11
|
+
}
|
|
12
|
+
current() {
|
|
13
|
+
return Object.freeze([...this.selectedObjects]);
|
|
14
|
+
}
|
|
3
15
|
select(object, additive = false) {
|
|
4
|
-
|
|
5
|
-
this.
|
|
6
|
-
|
|
16
|
+
const next = additive
|
|
17
|
+
? new Set([...this.selectedObjects, object])
|
|
18
|
+
: new Set([object]);
|
|
19
|
+
this.replace(next);
|
|
7
20
|
}
|
|
8
21
|
deselect(object) {
|
|
9
|
-
this.
|
|
22
|
+
const next = new Set(this.selectedObjects);
|
|
23
|
+
next.delete(object);
|
|
24
|
+
this.replace(next);
|
|
10
25
|
}
|
|
11
26
|
clear() {
|
|
12
|
-
this.
|
|
27
|
+
this.replace(new Set());
|
|
28
|
+
}
|
|
29
|
+
has(object) {
|
|
30
|
+
return this.selectedObjects.has(object);
|
|
31
|
+
}
|
|
32
|
+
toggle(object, additive = true) {
|
|
33
|
+
if (this.selectedObjects.has(object)) {
|
|
34
|
+
this.deselect(object);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
this.select(object, additive);
|
|
38
|
+
}
|
|
39
|
+
prune(alive) {
|
|
40
|
+
this.replace(new Set([...this.selectedObjects].filter(alive)));
|
|
13
41
|
}
|
|
42
|
+
subscribe(listener) {
|
|
43
|
+
this.listeners.add(listener);
|
|
44
|
+
return () => this.listeners.delete(listener);
|
|
45
|
+
}
|
|
46
|
+
dispose() {
|
|
47
|
+
this.listeners.clear();
|
|
48
|
+
this.selectedObjects.clear();
|
|
49
|
+
}
|
|
50
|
+
replace(next) {
|
|
51
|
+
const previous = [...this.selectedObjects];
|
|
52
|
+
const current = [...next];
|
|
53
|
+
if (sameIdentityOrder(previous, current))
|
|
54
|
+
return;
|
|
55
|
+
const added = current.filter((object) => !this.selectedObjects.has(object));
|
|
56
|
+
const removed = previous.filter((object) => !next.has(object));
|
|
57
|
+
this.selectedObjects.clear();
|
|
58
|
+
for (const object of current)
|
|
59
|
+
this.selectedObjects.add(object);
|
|
60
|
+
const event = Object.freeze({
|
|
61
|
+
previous: Object.freeze(previous),
|
|
62
|
+
current: Object.freeze(current),
|
|
63
|
+
added: Object.freeze(added),
|
|
64
|
+
removed: Object.freeze(removed)
|
|
65
|
+
});
|
|
66
|
+
for (const listener of [...this.listeners])
|
|
67
|
+
listener(event);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function sameIdentityOrder(left, right) {
|
|
71
|
+
return left.length === right.length && left.every((object, index) => object === right[index]);
|
|
14
72
|
}
|
|
15
73
|
//# sourceMappingURL=SelectionManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionManager.js","sourceRoot":"","sources":["../../../../packages/controls/src/SelectionManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SelectionManager.js","sourceRoot":"","sources":["../../../../packages/controls/src/SelectionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,145 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { ControlObject3DLike, Vector3Like } from "./NativeControlTypes";
|
|
2
2
|
export type TransformControlMode = "translate" | "rotate" | "scale";
|
|
3
|
+
export type TransformControlSpace = "world" | "local";
|
|
4
|
+
export type TransformControlHandle = "x" | "y" | "z" | "xy" | "xz" | "yz" | "uniform";
|
|
5
|
+
/** A pointer ray in world space, as a viewport would unproject it. */
|
|
6
|
+
export interface TransformControlRay {
|
|
7
|
+
readonly origin: Vector3Like;
|
|
8
|
+
readonly direction: Vector3Like;
|
|
9
|
+
}
|
|
10
|
+
/** One renderable gizmo handle. */
|
|
11
|
+
export interface TransformControlHandleGeometry {
|
|
12
|
+
readonly handle: TransformControlHandle;
|
|
13
|
+
readonly kind: "axis-arrow" | "plane-quad" | "rotation-ring" | "uniform-box";
|
|
14
|
+
readonly segments: readonly {
|
|
15
|
+
readonly start: readonly [number, number, number];
|
|
16
|
+
readonly end: readonly [number, number, number];
|
|
17
|
+
}[];
|
|
18
|
+
readonly color: readonly [number, number, number, number];
|
|
19
|
+
readonly direction?: readonly [number, number, number];
|
|
20
|
+
}
|
|
21
|
+
export interface TransformControlPick {
|
|
22
|
+
readonly handle: TransformControlHandle;
|
|
23
|
+
readonly distance: number;
|
|
24
|
+
readonly point: readonly [number, number, number];
|
|
25
|
+
}
|
|
26
|
+
export interface TransformControlDragUpdate {
|
|
27
|
+
readonly handle: TransformControlHandle;
|
|
28
|
+
readonly mode: TransformControlMode;
|
|
29
|
+
/** Snapped total since drag start: world units for translate/scale, radians for rotate. */
|
|
30
|
+
readonly totalDelta: number;
|
|
31
|
+
/** Snapped change since the previous move. */
|
|
32
|
+
readonly stepDelta: number;
|
|
33
|
+
readonly snapped: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface TransformControlSnapSettings {
|
|
36
|
+
readonly enabled?: boolean;
|
|
37
|
+
readonly position?: number;
|
|
38
|
+
readonly rotationDegrees?: number;
|
|
39
|
+
readonly scale?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface TransformControlsOptions {
|
|
42
|
+
readonly mode?: TransformControlMode;
|
|
43
|
+
readonly space?: TransformControlSpace;
|
|
44
|
+
/** Gizmo arm length in world units. */
|
|
45
|
+
readonly size?: number;
|
|
46
|
+
/** Pick radius around each handle, in world units. */
|
|
47
|
+
readonly pickTolerance?: number;
|
|
48
|
+
readonly snap?: TransformControlSnapSettings;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Interactive transform controls: rendered gizmo handles, ray picking, a pointer drag
|
|
52
|
+
* lifecycle, axis and plane constraints, snapping, and local/world spaces.
|
|
53
|
+
*
|
|
54
|
+
* This class previously applied explicit deltas only, with no geometry, picking, or
|
|
55
|
+
* drag state, which is why it could not support an interactive-parity claim. The delta
|
|
56
|
+
* API (`apply`) is retained unchanged for source compatibility; everything below it is
|
|
57
|
+
* new.
|
|
58
|
+
*
|
|
59
|
+
* Drag math is projection-free: a pointer ray is intersected with a plane through the
|
|
60
|
+
* gizmo origin and the resulting world point is projected onto the constrained axis.
|
|
61
|
+
* The drag plane is derived from the ray direction rather than fixed, because a fixed
|
|
62
|
+
* plane can be parallel to the pointer ray, in which case there is no intersection and
|
|
63
|
+
* the drag silently stops responding.
|
|
64
|
+
*/
|
|
3
65
|
export declare class TransformControls {
|
|
4
66
|
object: ControlObject3DLike | null;
|
|
5
67
|
mode: TransformControlMode;
|
|
68
|
+
enabled: boolean;
|
|
69
|
+
private space;
|
|
70
|
+
private readonly size;
|
|
71
|
+
private readonly pickTolerance;
|
|
72
|
+
private snapSettings;
|
|
73
|
+
private origin;
|
|
74
|
+
private orientation;
|
|
75
|
+
private hovered;
|
|
76
|
+
private active;
|
|
77
|
+
private dragStartValue;
|
|
78
|
+
private accumulated;
|
|
79
|
+
private dragging;
|
|
80
|
+
constructor(options?: TransformControlsOptions);
|
|
6
81
|
attach(object: ControlObject3DLike): void;
|
|
7
82
|
detach(): void;
|
|
8
83
|
setMode(mode: TransformControlMode): void;
|
|
84
|
+
setSpace(space: TransformControlSpace): void;
|
|
85
|
+
setSnap(settings: TransformControlSnapSettings): void;
|
|
86
|
+
/** Places the gizmo. Orientation drives local-space handle directions. */
|
|
87
|
+
place(origin: readonly [number, number, number], orientation?: readonly [number, number, number, number]): void;
|
|
88
|
+
state(): {
|
|
89
|
+
readonly mode: TransformControlMode;
|
|
90
|
+
readonly space: TransformControlSpace;
|
|
91
|
+
readonly origin: readonly [number, number, number];
|
|
92
|
+
readonly hoveredHandle: TransformControlHandle | undefined;
|
|
93
|
+
readonly activeHandle: TransformControlHandle | undefined;
|
|
94
|
+
readonly dragging: boolean;
|
|
95
|
+
readonly snapEnabled: boolean;
|
|
96
|
+
};
|
|
97
|
+
/** Renderable handle geometry for the current mode and space. */
|
|
98
|
+
handles(): readonly TransformControlHandleGeometry[];
|
|
99
|
+
/**
|
|
100
|
+
* Picks the nearest handle along a pointer ray.
|
|
101
|
+
*
|
|
102
|
+
* Axis and uniform handles outrank plane handles: plane quads share their corner
|
|
103
|
+
* edges with the axis arms, so a ray aimed at an arm is inside tolerance of both, and
|
|
104
|
+
* sorting purely by distance would make the arms effectively unclickable.
|
|
105
|
+
*/
|
|
106
|
+
pick(ray: TransformControlRay): TransformControlPick | undefined;
|
|
107
|
+
/** Updates hover state. Returns the hovered handle, if any. */
|
|
108
|
+
hover(ray: TransformControlRay): TransformControlHandle | undefined;
|
|
109
|
+
/**
|
|
110
|
+
* Begins a drag on whichever handle the ray picks.
|
|
111
|
+
*
|
|
112
|
+
* Returns false when nothing was picked so a viewport can fall through to scene
|
|
113
|
+
* selection instead of swallowing the pointer.
|
|
114
|
+
*/
|
|
115
|
+
pointerDown(ray: TransformControlRay): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Continues an active drag and applies the resulting delta to the attached object.
|
|
118
|
+
*
|
|
119
|
+
* Only the constrained component is applied, so dragging the X arm cannot move the
|
|
120
|
+
* object on Y or Z.
|
|
121
|
+
*/
|
|
122
|
+
pointerMove(ray: TransformControlRay): TransformControlDragUpdate | undefined;
|
|
123
|
+
/** Ends an active drag and reports the committed total. */
|
|
124
|
+
pointerUp(): {
|
|
125
|
+
readonly handle: TransformControlHandle;
|
|
126
|
+
readonly totalDelta: number;
|
|
127
|
+
} | undefined;
|
|
128
|
+
/** Aborts a drag without further mutation, for example on Escape or focus loss. */
|
|
129
|
+
cancelDrag(): void;
|
|
130
|
+
/** Explicit-delta mutation, retained unchanged for source compatibility. */
|
|
9
131
|
apply(delta: Vector3Like): void;
|
|
132
|
+
dispose(): void;
|
|
133
|
+
private applyConstrainedDelta;
|
|
134
|
+
/** Which object-space axes a handle affects. */
|
|
135
|
+
private axisMaskFor;
|
|
136
|
+
/** World-space direction a translate drag moves along. */
|
|
137
|
+
private translationDirectionFor;
|
|
138
|
+
private measure;
|
|
139
|
+
private axisUnitFor;
|
|
140
|
+
private applySnap;
|
|
141
|
+
private toActiveSpace;
|
|
142
|
+
private pickSegments;
|
|
143
|
+
private pickRing;
|
|
10
144
|
}
|
|
11
145
|
//# sourceMappingURL=TransformControls.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransformControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/TransformControls.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"TransformControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/TransformControls.ts"],"names":[],"mappings":"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"}
|