@shopware-ag/dive 1.16.0 → 1.16.2
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/README.md +271 -40
- package/build/dive.cjs +575 -159
- package/build/dive.cjs.map +1 -1
- package/build/dive.d.cts +83 -57
- package/build/dive.d.ts +83 -57
- package/build/dive.js +614 -164
- package/build/dive.js.map +1 -1
- package/package.json +72 -60
- package/src/__test__/DIVE.test.ts +35 -31
- package/src/animation/AnimationSystem.ts +4 -4
- package/src/animation/__test__/AnimationSystem.test.ts +3 -3
- package/src/axiscamera/AxisCamera.ts +31 -11
- package/src/axiscamera/__test__/AxisCamera.test.ts +18 -10
- package/src/camera/PerspectiveCamera.ts +28 -13
- package/src/camera/__test__/PerspectiveCamera.test.ts +2 -2
- package/src/com/Communication.ts +282 -100
- package/src/com/__test__/Communication.test.ts +207 -141
- package/src/com/actions/camera/computeencompassingview.ts +8 -7
- package/src/com/actions/camera/getcameratransform.ts +8 -7
- package/src/com/actions/camera/movecamera.ts +16 -13
- package/src/com/actions/camera/resetcamera.ts +4 -3
- package/src/com/actions/camera/setcameralayer.ts +4 -3
- package/src/com/actions/camera/setcameratransform.ts +8 -7
- package/src/com/actions/camera/zoomcamera.ts +4 -3
- package/src/com/actions/index.ts +54 -54
- package/src/com/actions/media/generatemedia.ts +17 -13
- package/src/com/actions/object/addobject.ts +5 -4
- package/src/com/actions/object/deleteobject.ts +5 -4
- package/src/com/actions/object/deselectobject.ts +5 -4
- package/src/com/actions/object/getallobjects.ts +5 -4
- package/src/com/actions/object/getobjects.ts +5 -4
- package/src/com/actions/object/model/dropit.ts +4 -3
- package/src/com/actions/object/model/modelloaded.ts +4 -3
- package/src/com/actions/object/model/placeonfloor.ts +4 -3
- package/src/com/actions/object/selectobject.ts +5 -4
- package/src/com/actions/object/setparent.ts +8 -7
- package/src/com/actions/object/updateobject.ts +5 -4
- package/src/com/actions/scene/exportscene.ts +5 -4
- package/src/com/actions/scene/getallscenedata.ts +24 -18
- package/src/com/actions/scene/setbackground.ts +4 -3
- package/src/com/actions/scene/updatescene.ts +10 -9
- package/src/com/actions/toolbox/select/setgizmomode.ts +4 -3
- package/src/com/actions/toolbox/transform/setgizmovisible.ts +4 -3
- package/src/com/actions/toolbox/usetool.ts +5 -4
- package/src/com/types/COMBaseEntity.ts +2 -2
- package/src/com/types/COMEntity.ts +6 -6
- package/src/com/types/COMEntityType.ts +1 -1
- package/src/com/types/COMGeometry.ts +2 -2
- package/src/com/types/COMGroup.ts +3 -3
- package/src/com/types/COMLight.ts +3 -3
- package/src/com/types/COMMaterial.ts +2 -2
- package/src/com/types/COMModel.ts +4 -4
- package/src/com/types/COMPov.ts +3 -3
- package/src/com/types/COMPrimitive.ts +5 -5
- package/src/com/types/index.ts +10 -10
- package/src/constant/AxisHelperColors.ts +1 -1
- package/src/constant/GridColors.ts +1 -1
- package/src/controls/OrbitControls.ts +62 -29
- package/src/controls/__test__/OrbitControls.test.ts +133 -39
- package/src/dive.ts +82 -36
- package/src/gizmo/Gizmo.ts +21 -13
- package/src/gizmo/handles/AxisHandle.ts +40 -17
- package/src/gizmo/handles/RadialHandle.ts +39 -15
- package/src/gizmo/handles/ScaleHandle.ts +62 -25
- package/src/gizmo/plane/GizmoPlane.ts +5 -6
- package/src/gizmo/rotate/RotateGizmo.ts +58 -16
- package/src/gizmo/scale/ScaleGizmo.ts +37 -15
- package/src/gizmo/translate/TranslateGizmo.ts +34 -14
- package/src/grid/Grid.ts +13 -5
- package/src/grid/__test__/Grid.test.ts +5 -3
- package/src/group/Group.ts +9 -7
- package/src/group/__test__/Group.test.ts +8 -6
- package/src/helper/applyMixins/__test__/applyMixins.test.ts +9 -6
- package/src/helper/applyMixins/applyMixins.ts +6 -3
- package/src/helper/findInterface/__test__/findInterface.test.ts +28 -18
- package/src/helper/findInterface/findInterface.ts +7 -4
- package/src/helper/findSceneRecursive/__test__/findSceneRecursive.test.ts +1 -1
- package/src/helper/findSceneRecursive/findSceneRecursive.ts +1 -1
- package/src/helper/getObjectDelta/__test__/getObjectDelta.test.ts +43 -7
- package/src/helper/getObjectDelta/getObjectDelta.ts +13 -9
- package/src/helper/isInterface/__test__/implementsInterface.test.ts +1 -1
- package/src/helper/isInterface/implementsInterface.ts +6 -3
- package/src/info/Info.ts +20 -16
- package/src/info/__test__/Info.test.ts +67 -36
- package/src/interface/Draggable.ts +2 -2
- package/src/interface/Hoverable.ts +2 -2
- package/src/interface/Movable.ts +1 -1
- package/src/interface/Rotatable.ts +1 -1
- package/src/interface/Scalable.ts +1 -1
- package/src/io/IO.ts +21 -43
- package/src/io/__test__/IO.test.ts +16 -62
- package/src/io/gltf/GLTFIO.ts +34 -31
- package/src/io/gltf/__test__/GLTFIO.test.ts +88 -78
- package/src/light/PointLight.ts +42 -9
- package/src/light/SceneLight.ts +5 -5
- package/src/light/__test__/AmbientLight.test.ts +5 -4
- package/src/light/__test__/PointLight.test.ts +14 -10
- package/src/light/__test__/SceneLight.test.ts +19 -13
- package/src/loadingmanager/LoadingManager.ts +11 -6
- package/src/loadingmanager/__test__/LoadingManager.test.ts +14 -9
- package/src/math/__test__/DIVEMath.test.ts +1 -1
- package/src/math/ceil/__test__/ceilExp.test.ts +1 -1
- package/src/math/ceil/ceilExp.ts +2 -2
- package/src/math/floor/__test__/floorExp.test.ts +1 -1
- package/src/math/floor/floorExp.ts +2 -2
- package/src/math/helper/__test__/shift.test.ts +1 -1
- package/src/math/helper/shift.ts +1 -1
- package/src/math/index.ts +7 -7
- package/src/math/round/__test__/roundExp.test.ts +1 -1
- package/src/math/round/roundExp.ts +6 -3
- package/src/math/signedAngleTo/__test__/signedAngleTo.test.ts +10 -4
- package/src/math/signedAngleTo/signedAngleTo.ts +11 -4
- package/src/math/toFixed/__test__/toFixedExp.test.ts +9 -9
- package/src/math/toFixed/toFixedExp.ts +6 -3
- package/src/math/truncate/__test__/truncateExp.test.ts +1 -1
- package/src/math/truncate/truncateExp.ts +6 -3
- package/src/mediacreator/MediaCreator.ts +20 -10
- package/src/mediacreator/__test__/MediaCreator.test.ts +27 -12
- package/src/model/Model.ts +35 -7
- package/src/model/__test__/Model.test.ts +71 -44
- package/src/node/Node.ts +34 -12
- package/src/node/__test__/Node.test.ts +17 -13
- package/src/primitive/Primitive.ts +78 -13
- package/src/primitive/__test__/Primitive.test.ts +49 -38
- package/src/primitive/floor/Floor.ts +14 -3
- package/src/primitive/floor/__test__/Floor.test.ts +10 -4
- package/src/renderer/Renderer.ts +46 -15
- package/src/renderer/__test__/Renderer.test.ts +74 -24
- package/src/scene/Scene.ts +9 -3
- package/src/scene/__test__/Scene.test.ts +2 -2
- package/src/scene/root/Root.ts +142 -75
- package/src/scene/root/__test__/Root.test.ts +439 -111
- package/src/toolbox/BaseTool.ts +69 -33
- package/src/toolbox/Toolbox.ts +37 -17
- package/src/toolbox/__test__/BaseTool.test.ts +324 -160
- package/src/toolbox/__test__/Toolbox.test.ts +31 -14
- package/src/toolbox/select/SelectTool.ts +24 -19
- package/src/toolbox/select/__test__/SelectTool.test.ts +95 -59
- package/src/toolbox/transform/TransformTool.ts +40 -17
- package/src/toolbox/transform/__test__/TransformTool.test.ts +22 -15
- package/src/types/SceneObjects.ts +8 -8
- package/src/types/SceneType.ts +3 -3
- package/src/types/index.ts +3 -6
package/src/toolbox/BaseTool.ts
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
import { Intersection, Object3D, Raycaster, Vector2, Vector3 } from
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
1
|
+
import { Intersection, Object3D, Raycaster, Vector2, Vector3 } from 'three';
|
|
2
|
+
import {
|
|
3
|
+
PRODUCT_LAYER_MASK,
|
|
4
|
+
UI_LAYER_MASK,
|
|
5
|
+
} from '../constant/VisibilityLayerMask';
|
|
6
|
+
import { DIVEScene } from '../scene/Scene';
|
|
7
|
+
import DIVEOrbitControls from '../controls/OrbitControls';
|
|
8
|
+
import { type DIVEDraggable } from '../interface/Draggable';
|
|
9
|
+
import { type DIVEHoverable } from '../interface/Hoverable';
|
|
10
|
+
import { findInterface } from '../helper/findInterface/findInterface';
|
|
8
11
|
|
|
9
12
|
export type DraggableEvent = {
|
|
10
13
|
dragStart: Vector3;
|
|
11
14
|
dragCurrent: Vector3;
|
|
12
15
|
dragEnd: Vector3;
|
|
13
16
|
dragDelta: Vector3;
|
|
14
|
-
}
|
|
17
|
+
};
|
|
15
18
|
|
|
16
19
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
17
20
|
export abstract class DIVEBaseTool {
|
|
@@ -27,10 +30,12 @@ export abstract class DIVEBaseTool {
|
|
|
27
30
|
protected _pointer: Vector2;
|
|
28
31
|
|
|
29
32
|
protected get _pointerAnyDown(): boolean {
|
|
30
|
-
return
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
return (
|
|
34
|
+
this._pointerPrimaryDown ||
|
|
35
|
+
this._pointerMiddleDown ||
|
|
36
|
+
this._pointerSecondaryDown
|
|
37
|
+
);
|
|
38
|
+
}
|
|
34
39
|
protected _pointerPrimaryDown: boolean;
|
|
35
40
|
protected _pointerMiddleDown: boolean;
|
|
36
41
|
protected _pointerSecondaryDown: boolean;
|
|
@@ -54,7 +59,7 @@ export abstract class DIVEBaseTool {
|
|
|
54
59
|
protected _dragRaycastOnObjects: Object3D[] | null;
|
|
55
60
|
|
|
56
61
|
protected constructor(scene: DIVEScene, controller: DIVEOrbitControls) {
|
|
57
|
-
this.name =
|
|
62
|
+
this.name = 'BaseTool';
|
|
58
63
|
|
|
59
64
|
this._canvas = controller.domElement;
|
|
60
65
|
this._scene = scene;
|
|
@@ -84,9 +89,9 @@ export abstract class DIVEBaseTool {
|
|
|
84
89
|
this._dragRaycastOnObjects = null;
|
|
85
90
|
}
|
|
86
91
|
|
|
87
|
-
public Activate(): void {
|
|
92
|
+
public Activate(): void {}
|
|
88
93
|
|
|
89
|
-
public Deactivate(): void {
|
|
94
|
+
public Deactivate(): void {}
|
|
90
95
|
|
|
91
96
|
public onPointerDown(e: PointerEvent): void {
|
|
92
97
|
switch (e.button) {
|
|
@@ -103,14 +108,21 @@ export abstract class DIVEBaseTool {
|
|
|
103
108
|
|
|
104
109
|
this._lastPointerDown.copy(this._pointer);
|
|
105
110
|
|
|
106
|
-
this._draggable =
|
|
111
|
+
this._draggable =
|
|
112
|
+
findInterface<DIVEDraggable>(
|
|
113
|
+
this._intersects[0]?.object,
|
|
114
|
+
'isDraggable',
|
|
115
|
+
) || null;
|
|
107
116
|
}
|
|
108
117
|
|
|
109
118
|
public onDragStart(e: PointerEvent): void {
|
|
110
119
|
if (!this._draggable) return;
|
|
111
120
|
|
|
112
121
|
if (this._dragRaycastOnObjects !== null) {
|
|
113
|
-
this._intersects = this._raycaster.intersectObjects(
|
|
122
|
+
this._intersects = this._raycaster.intersectObjects(
|
|
123
|
+
this._dragRaycastOnObjects,
|
|
124
|
+
true,
|
|
125
|
+
);
|
|
114
126
|
}
|
|
115
127
|
|
|
116
128
|
if (this._intersects.length === 0) return;
|
|
@@ -145,27 +157,34 @@ export abstract class DIVEBaseTool {
|
|
|
145
157
|
this._intersects = this.raycast(this._scene.children);
|
|
146
158
|
|
|
147
159
|
// handle hover
|
|
148
|
-
const hoverable = findInterface<DIVEHoverable>(
|
|
160
|
+
const hoverable = findInterface<DIVEHoverable>(
|
|
161
|
+
this._intersects[0]?.object,
|
|
162
|
+
'isHoverable',
|
|
163
|
+
);
|
|
149
164
|
if (this._intersects[0] && hoverable) {
|
|
150
165
|
if (!this._hovered) {
|
|
151
|
-
if (hoverable.onPointerEnter)
|
|
166
|
+
if (hoverable.onPointerEnter)
|
|
167
|
+
hoverable.onPointerEnter(this._intersects[0]);
|
|
152
168
|
this._hovered = hoverable;
|
|
153
169
|
return;
|
|
154
170
|
}
|
|
155
171
|
|
|
156
172
|
if (this._hovered.uuid !== hoverable.uuid) {
|
|
157
|
-
if (this._hovered.onPointerLeave)
|
|
158
|
-
|
|
173
|
+
if (this._hovered.onPointerLeave)
|
|
174
|
+
this._hovered.onPointerLeave();
|
|
175
|
+
if (hoverable.onPointerEnter)
|
|
176
|
+
hoverable.onPointerEnter(this._intersects[0]);
|
|
159
177
|
this._hovered = hoverable;
|
|
160
178
|
return;
|
|
161
179
|
}
|
|
162
180
|
|
|
163
|
-
if (hoverable.onPointerOver)
|
|
181
|
+
if (hoverable.onPointerOver)
|
|
182
|
+
hoverable.onPointerOver(this._intersects[0]);
|
|
164
183
|
this._hovered = hoverable;
|
|
165
|
-
|
|
166
184
|
} else {
|
|
167
185
|
if (this._hovered) {
|
|
168
|
-
if (this._hovered.onPointerLeave)
|
|
186
|
+
if (this._hovered.onPointerLeave)
|
|
187
|
+
this._hovered.onPointerLeave();
|
|
169
188
|
}
|
|
170
189
|
|
|
171
190
|
this._hovered = null;
|
|
@@ -183,14 +202,20 @@ export abstract class DIVEBaseTool {
|
|
|
183
202
|
|
|
184
203
|
public onDrag(e: PointerEvent): void {
|
|
185
204
|
if (this._dragRaycastOnObjects !== null) {
|
|
186
|
-
this._intersects = this._raycaster.intersectObjects(
|
|
205
|
+
this._intersects = this._raycaster.intersectObjects(
|
|
206
|
+
this._dragRaycastOnObjects,
|
|
207
|
+
true,
|
|
208
|
+
);
|
|
187
209
|
}
|
|
188
210
|
const intersect = this._intersects[0];
|
|
189
211
|
if (!intersect) return;
|
|
190
212
|
|
|
191
213
|
this._dragCurrent.copy(intersect.point.clone());
|
|
192
214
|
this._dragEnd.copy(intersect.point.clone());
|
|
193
|
-
this._dragDelta.subVectors(
|
|
215
|
+
this._dragDelta.subVectors(
|
|
216
|
+
this._dragCurrent.clone(),
|
|
217
|
+
this._dragStart.clone(),
|
|
218
|
+
);
|
|
194
219
|
|
|
195
220
|
if (this._draggable && this._draggable.onDrag) {
|
|
196
221
|
this._draggable.onDrag({
|
|
@@ -226,14 +251,17 @@ export abstract class DIVEBaseTool {
|
|
|
226
251
|
this._lastPointerUp.copy(this._pointer);
|
|
227
252
|
}
|
|
228
253
|
|
|
229
|
-
public onClick(e: PointerEvent): void {
|
|
254
|
+
public onClick(e: PointerEvent): void {}
|
|
230
255
|
|
|
231
256
|
public onDragEnd(e: PointerEvent): void {
|
|
232
257
|
const intersect = this._intersects[0];
|
|
233
258
|
if (intersect) {
|
|
234
259
|
this._dragEnd.copy(intersect.point.clone());
|
|
235
260
|
this._dragCurrent.copy(intersect.point.clone());
|
|
236
|
-
this._dragDelta.subVectors(
|
|
261
|
+
this._dragDelta.subVectors(
|
|
262
|
+
this._dragCurrent.clone(),
|
|
263
|
+
this._dragStart.clone(),
|
|
264
|
+
);
|
|
237
265
|
}
|
|
238
266
|
|
|
239
267
|
if (this._draggable && this._draggable.onDragEnd) {
|
|
@@ -256,14 +284,22 @@ export abstract class DIVEBaseTool {
|
|
|
256
284
|
this._controller.enabled = true;
|
|
257
285
|
}
|
|
258
286
|
|
|
259
|
-
public onWheel(e: WheelEvent): void {
|
|
287
|
+
public onWheel(e: WheelEvent): void {}
|
|
260
288
|
|
|
261
289
|
protected raycast(objects?: Object3D[]): Intersection[] {
|
|
262
|
-
if (objects !== undefined)
|
|
263
|
-
|
|
290
|
+
if (objects !== undefined)
|
|
291
|
+
return this._raycaster
|
|
292
|
+
.intersectObjects(objects, true)
|
|
293
|
+
.filter((i) => i.object.visible);
|
|
294
|
+
return this._raycaster
|
|
295
|
+
.intersectObjects(this._scene.children, true)
|
|
296
|
+
.filter((i) => i.object.visible);
|
|
264
297
|
}
|
|
265
298
|
|
|
266
299
|
private pointerWasDragged(): boolean {
|
|
267
|
-
return
|
|
300
|
+
return (
|
|
301
|
+
this._lastPointerDown.distanceTo(this._pointer) >
|
|
302
|
+
this.POINTER_DRAG_THRESHOLD
|
|
303
|
+
);
|
|
268
304
|
}
|
|
269
|
-
}
|
|
305
|
+
}
|
package/src/toolbox/Toolbox.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type DIVEOrbitControls from
|
|
2
|
-
import type { DIVEScene } from
|
|
3
|
-
import { type DIVEBaseTool } from
|
|
4
|
-
import { type DIVESelectTool } from
|
|
1
|
+
import type DIVEOrbitControls from '../controls/OrbitControls.ts';
|
|
2
|
+
import type { DIVEScene } from '../scene/Scene.ts';
|
|
3
|
+
import { type DIVEBaseTool } from './BaseTool.ts';
|
|
4
|
+
import { type DIVESelectTool } from './select/SelectTool.ts';
|
|
5
5
|
|
|
6
6
|
export type ToolType = 'select' | 'none';
|
|
7
7
|
|
|
@@ -22,8 +22,12 @@ export default class DIVEToolbox {
|
|
|
22
22
|
private _selectTool: DIVESelectTool | null;
|
|
23
23
|
public get selectTool(): DIVESelectTool {
|
|
24
24
|
if (!this._selectTool) {
|
|
25
|
-
const DIVESelectTool = require('./select/SelectTool.ts')
|
|
26
|
-
|
|
25
|
+
const DIVESelectTool = require('./select/SelectTool.ts')
|
|
26
|
+
.DIVESelectTool as typeof import('./select/SelectTool.ts').DIVESelectTool;
|
|
27
|
+
this._selectTool = new DIVESelectTool(
|
|
28
|
+
this._scene,
|
|
29
|
+
this._controller,
|
|
30
|
+
);
|
|
27
31
|
}
|
|
28
32
|
return this._selectTool;
|
|
29
33
|
}
|
|
@@ -50,13 +54,13 @@ export default class DIVEToolbox {
|
|
|
50
54
|
public UseTool(tool: ToolType): void {
|
|
51
55
|
this._activeTool?.Deactivate();
|
|
52
56
|
switch (tool) {
|
|
53
|
-
case
|
|
57
|
+
case 'select': {
|
|
54
58
|
this.addEventListeners();
|
|
55
59
|
this.selectTool.Activate();
|
|
56
60
|
this._activeTool = this.selectTool;
|
|
57
61
|
break;
|
|
58
62
|
}
|
|
59
|
-
case
|
|
63
|
+
case 'none': {
|
|
60
64
|
this.removeEventListeners();
|
|
61
65
|
this._activeTool = null;
|
|
62
66
|
break;
|
|
@@ -92,16 +96,32 @@ export default class DIVEToolbox {
|
|
|
92
96
|
}
|
|
93
97
|
|
|
94
98
|
private addEventListeners(): void {
|
|
95
|
-
this._controller.domElement.addEventListener('pointermove', (e) =>
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
this._controller.domElement.addEventListener('
|
|
99
|
+
this._controller.domElement.addEventListener('pointermove', (e) =>
|
|
100
|
+
this.onPointerMove(e),
|
|
101
|
+
);
|
|
102
|
+
this._controller.domElement.addEventListener('pointerdown', (e) =>
|
|
103
|
+
this.onPointerDown(e),
|
|
104
|
+
);
|
|
105
|
+
this._controller.domElement.addEventListener('pointerup', (e) =>
|
|
106
|
+
this.onPointerUp(e),
|
|
107
|
+
);
|
|
108
|
+
this._controller.domElement.addEventListener('wheel', (e) =>
|
|
109
|
+
this.onWheel(e),
|
|
110
|
+
);
|
|
99
111
|
}
|
|
100
112
|
|
|
101
113
|
private removeEventListeners(): void {
|
|
102
|
-
this._controller.domElement.removeEventListener('pointermove', (e) =>
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
this._controller.domElement.removeEventListener('
|
|
114
|
+
this._controller.domElement.removeEventListener('pointermove', (e) =>
|
|
115
|
+
this.onPointerMove(e),
|
|
116
|
+
);
|
|
117
|
+
this._controller.domElement.removeEventListener('pointerdown', (e) =>
|
|
118
|
+
this.onPointerDown(e),
|
|
119
|
+
);
|
|
120
|
+
this._controller.domElement.removeEventListener('pointerup', (e) =>
|
|
121
|
+
this.onPointerUp(e),
|
|
122
|
+
);
|
|
123
|
+
this._controller.domElement.removeEventListener('wheel', (e) =>
|
|
124
|
+
this.onWheel(e),
|
|
125
|
+
);
|
|
106
126
|
}
|
|
107
|
-
}
|
|
127
|
+
}
|