@shopware-ag/dive 1.19.0 → 1.19.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/build/dive.cjs +388 -220
  2. package/build/dive.cjs.map +1 -1
  3. package/build/dive.js +395 -21946
  4. package/build/dive.js.map +1 -1
  5. package/build/dive.mjs +28206 -0
  6. package/build/dive.mjs.map +1 -0
  7. package/build/src/ar/AR.d.ts +37 -14
  8. package/build/src/ar/arquicklook/ARQuickLook.d.ts +5 -6
  9. package/build/src/ar/sceneviewer/SceneViewer.d.ts +42 -6
  10. package/build/src/com/actions/scene/launchar.d.ts +5 -2
  11. package/build/src/converter/Converter.d.ts +21 -0
  12. package/build/src/dive.d.ts +3 -2
  13. package/build/src/exporter/Exporter.d.ts +11 -0
  14. package/build/src/helper/applyMixins/applyMixins.d.ts +22 -6
  15. package/build/src/info/Info.d.ts +37 -13
  16. package/build/src/interface/Movable.d.ts +5 -5
  17. package/build/src/interface/Selectable.d.ts +4 -4
  18. package/build/src/loader/Loader.d.ts +11 -0
  19. package/build/src/model/Model.d.ts +2 -2
  20. package/build/src/node/Node.d.ts +3 -3
  21. package/build/src/scene/root/Root.d.ts +1 -1
  22. package/build/src/types/ExporterOptions.d.ts +15 -0
  23. package/build/src/types/FileTypes.d.ts +27 -0
  24. package/build/src/types/index.d.ts +4 -0
  25. package/build/src/types/info/index.d.ts +66 -0
  26. package/package.json +17 -3
  27. package/build/src/exporters/usdz/USDZExporter.d.ts +0 -15
  28. package/build/src/loadingmanager/LoadingManager.d.ts +0 -14
  29. package/src/__test__/DIVE.test.ts +0 -274
  30. package/src/animation/AnimationSystem.ts +0 -34
  31. package/src/animation/__test__/AnimationSystem.test.ts +0 -40
  32. package/src/ar/AR.ts +0 -98
  33. package/src/ar/__test__/AR.test.ts +0 -187
  34. package/src/ar/arquicklook/ARQuickLook.ts +0 -93
  35. package/src/ar/arquicklook/__test__/ARQuickLook.test.ts +0 -93
  36. package/src/ar/sceneviewer/SceneViewer.ts +0 -74
  37. package/src/ar/sceneviewer/__test__/SceneViewer.test.ts +0 -93
  38. package/src/ar/webxr/WebXR.ts +0 -176
  39. package/src/ar/webxr/controller/WebXRController.ts +0 -340
  40. package/src/ar/webxr/crosshair/WebXRCrosshair.ts +0 -35
  41. package/src/ar/webxr/origin/WebXROrigin.ts +0 -192
  42. package/src/ar/webxr/overlay/Overlay.ts +0 -50
  43. package/src/ar/webxr/raycaster/WebXRRaycaster.ts +0 -131
  44. package/src/ar/webxr/raycaster/ar/WebXRRaycasterAR.ts +0 -102
  45. package/src/ar/webxr/raycaster/three/WebXRRaycasterTHREE.ts +0 -49
  46. package/src/ar/webxr/touchscreencontrols/WebXRTouchscreenControls.ts +0 -356
  47. package/src/axiscamera/AxisCamera.ts +0 -108
  48. package/src/axiscamera/__test__/AxisCamera.test.ts +0 -150
  49. package/src/camera/PerspectiveCamera.ts +0 -63
  50. package/src/camera/__test__/PerspectiveCamera.test.ts +0 -36
  51. package/src/com/Communication.ts +0 -808
  52. package/src/com/__test__/Communication.test.ts +0 -1024
  53. package/src/com/actions/camera/computeencompassingview.ts +0 -10
  54. package/src/com/actions/camera/getcameratransform.ts +0 -10
  55. package/src/com/actions/camera/movecamera.ts +0 -18
  56. package/src/com/actions/camera/resetcamera.ts +0 -5
  57. package/src/com/actions/camera/setcameralayer.ts +0 -5
  58. package/src/com/actions/camera/setcameratransform.ts +0 -10
  59. package/src/com/actions/camera/zoomcamera.ts +0 -5
  60. package/src/com/actions/index.ts +0 -61
  61. package/src/com/actions/media/generatemedia.ts +0 -18
  62. package/src/com/actions/object/addobject.ts +0 -7
  63. package/src/com/actions/object/deleteobject.ts +0 -7
  64. package/src/com/actions/object/deselectobject.ts +0 -7
  65. package/src/com/actions/object/getallobjects.ts +0 -7
  66. package/src/com/actions/object/getobjects.ts +0 -7
  67. package/src/com/actions/object/model/dropit.ts +0 -5
  68. package/src/com/actions/object/model/modelloaded.ts +0 -5
  69. package/src/com/actions/object/model/placeonfloor.ts +0 -5
  70. package/src/com/actions/object/selectobject.ts +0 -7
  71. package/src/com/actions/object/setparent.ts +0 -10
  72. package/src/com/actions/object/updateobject.ts +0 -7
  73. package/src/com/actions/renderer/startrender.ts +0 -5
  74. package/src/com/actions/scene/exportscene.ts +0 -7
  75. package/src/com/actions/scene/getallscenedata.ts +0 -7
  76. package/src/com/actions/scene/launchar.ts +0 -7
  77. package/src/com/actions/scene/setbackground.ts +0 -5
  78. package/src/com/actions/scene/updatescene.ts +0 -11
  79. package/src/com/actions/toolbox/select/setgizmomode.ts +0 -5
  80. package/src/com/actions/toolbox/transform/setgizmoscalelinked.ts +0 -5
  81. package/src/com/actions/toolbox/transform/setgizmovisible.ts +0 -5
  82. package/src/com/actions/toolbox/usetool.ts +0 -7
  83. package/src/com/types/COMBaseEntity.ts +0 -9
  84. package/src/com/types/COMEntity.ts +0 -7
  85. package/src/com/types/COMEntityType.ts +0 -1
  86. package/src/com/types/COMGeometry.ts +0 -8
  87. package/src/com/types/COMGeometryType.ts +0 -9
  88. package/src/com/types/COMGroup.ts +0 -9
  89. package/src/com/types/COMLight.ts +0 -11
  90. package/src/com/types/COMMaterial.ts +0 -12
  91. package/src/com/types/COMModel.ts +0 -12
  92. package/src/com/types/COMPov.ts +0 -8
  93. package/src/com/types/COMPrimitive.ts +0 -12
  94. package/src/com/types/index.ts +0 -23
  95. package/src/constant/AxisHelperColors.ts +0 -7
  96. package/src/constant/GridColors.ts +0 -2
  97. package/src/constant/VisibilityLayerMask.ts +0 -5
  98. package/src/controls/OrbitControls.ts +0 -211
  99. package/src/controls/__test__/OrbitControls.test.ts +0 -256
  100. package/src/dive.ts +0 -363
  101. package/src/events/EventExecutor.ts +0 -35
  102. package/src/exporters/usdz/USDZExporter.ts +0 -21
  103. package/src/exporters/usdz/__test__/USDZExporter.test.ts +0 -57
  104. package/src/gizmo/Gizmo.ts +0 -144
  105. package/src/gizmo/handles/AxisHandle.ts +0 -153
  106. package/src/gizmo/handles/RadialHandle.ts +0 -149
  107. package/src/gizmo/handles/ScaleHandle.ts +0 -195
  108. package/src/gizmo/plane/GizmoPlane.ts +0 -84
  109. package/src/gizmo/rotate/RotateGizmo.ts +0 -143
  110. package/src/gizmo/scale/ScaleGizmo.ts +0 -125
  111. package/src/gizmo/translate/TranslateGizmo.ts +0 -114
  112. package/src/grid/Grid.ts +0 -34
  113. package/src/grid/__test__/Grid.test.ts +0 -28
  114. package/src/group/Group.ts +0 -184
  115. package/src/group/__test__/Group.test.ts +0 -212
  116. package/src/helper/applyMixins/__test__/applyMixins.test.ts +0 -30
  117. package/src/helper/applyMixins/applyMixins.ts +0 -18
  118. package/src/helper/findInterface/__test__/findInterface.test.ts +0 -63
  119. package/src/helper/findInterface/findInterface.ts +0 -13
  120. package/src/helper/findSceneRecursive/__test__/findSceneRecursive.test.ts +0 -40
  121. package/src/helper/findSceneRecursive/findSceneRecursive.ts +0 -16
  122. package/src/helper/getObjectDelta/__test__/getObjectDelta.test.ts +0 -186
  123. package/src/helper/getObjectDelta/getObjectDelta.ts +0 -105
  124. package/src/helper/isInterface/__test__/implementsInterface.test.ts +0 -19
  125. package/src/helper/isInterface/implementsInterface.ts +0 -9
  126. package/src/info/Info.ts +0 -154
  127. package/src/info/__test__/Info.test.ts +0 -338
  128. package/src/interface/Draggable.ts +0 -14
  129. package/src/interface/Hoverable.ts +0 -14
  130. package/src/interface/Movable.ts +0 -12
  131. package/src/interface/Rotatable.ts +0 -10
  132. package/src/interface/Scalable.ts +0 -10
  133. package/src/interface/Selectable.ts +0 -11
  134. package/src/io/IO.ts +0 -62
  135. package/src/io/__test__/IO.test.ts +0 -116
  136. package/src/io/gltf/GLTFIO.ts +0 -56
  137. package/src/io/gltf/__test__/GLTFIO.test.ts +0 -108
  138. package/src/light/AmbientLight.ts +0 -39
  139. package/src/light/PointLight.ts +0 -115
  140. package/src/light/SceneLight.ts +0 -63
  141. package/src/light/__test__/AmbientLight.test.ts +0 -29
  142. package/src/light/__test__/PointLight.test.ts +0 -74
  143. package/src/light/__test__/SceneLight.test.ts +0 -47
  144. package/src/loadingmanager/LoadingManager.ts +0 -50
  145. package/src/loadingmanager/__test__/LoadingManager.test.ts +0 -27
  146. package/src/math/__test__/DIVEMath.test.ts +0 -12
  147. package/src/math/ceil/__test__/ceilExp.test.ts +0 -12
  148. package/src/math/ceil/ceilExp.ts +0 -6
  149. package/src/math/degToRad/__test__/degToRad.test.ts +0 -172
  150. package/src/math/degToRad/degToRad.ts +0 -5
  151. package/src/math/floor/__test__/floorExp.test.ts +0 -14
  152. package/src/math/floor/floorExp.ts +0 -6
  153. package/src/math/helper/__test__/shift.test.ts +0 -12
  154. package/src/math/helper/shift.ts +0 -4
  155. package/src/math/index.ts +0 -28
  156. package/src/math/radToDeg/__test__/radToDeg.test.ts +0 -155
  157. package/src/math/radToDeg/radToDeg.ts +0 -5
  158. package/src/math/round/__test__/roundExp.test.ts +0 -14
  159. package/src/math/round/roundExp.ts +0 -10
  160. package/src/math/signedAngleTo/__test__/signedAngleTo.test.ts +0 -20
  161. package/src/math/signedAngleTo/signedAngleTo.ts +0 -20
  162. package/src/math/toFixed/__test__/toFixedExp.test.ts +0 -14
  163. package/src/math/toFixed/toFixedExp.ts +0 -9
  164. package/src/math/truncate/__test__/truncateExp.test.ts +0 -14
  165. package/src/math/truncate/truncateExp.ts +0 -9
  166. package/src/mediacreator/MediaCreator.ts +0 -75
  167. package/src/mediacreator/__test__/MediaCreator.test.ts +0 -155
  168. package/src/model/Model.ts +0 -185
  169. package/src/model/__test__/Model.test.ts +0 -222
  170. package/src/module/Module.ts +0 -45
  171. package/src/module/__test__/Module.test.ts +0 -54
  172. package/src/node/Node.ts +0 -98
  173. package/src/node/__test__/Node.test.ts +0 -120
  174. package/src/primitive/Primitive.ts +0 -299
  175. package/src/primitive/__test__/Primitive.test.ts +0 -281
  176. package/src/primitive/floor/Floor.ts +0 -45
  177. package/src/primitive/floor/__test__/Floor.test.ts +0 -24
  178. package/src/renderer/Renderer.ts +0 -215
  179. package/src/renderer/__test__/Renderer.test.ts +0 -228
  180. package/src/scene/Scene.ts +0 -106
  181. package/src/scene/__test__/Scene.test.ts +0 -124
  182. package/src/scene/root/Root.ts +0 -426
  183. package/src/scene/root/__test__/Root.test.ts +0 -903
  184. package/src/scene/xrroot/XRRoot.ts +0 -56
  185. package/src/scene/xrroot/xrlightroot/XRLightRoot.ts +0 -80
  186. package/src/toolbox/BaseTool.ts +0 -319
  187. package/src/toolbox/Toolbox.ts +0 -129
  188. package/src/toolbox/__test__/BaseTool.test.ts +0 -627
  189. package/src/toolbox/__test__/Toolbox.test.ts +0 -143
  190. package/src/toolbox/select/SelectTool.ts +0 -92
  191. package/src/toolbox/select/__test__/SelectTool.test.ts +0 -237
  192. package/src/toolbox/transform/TransformTool.ts +0 -166
  193. package/src/toolbox/transform/__test__/TransformTool.test.ts +0 -147
  194. package/src/types/SceneData.ts +0 -26
  195. package/src/types/SceneObjects.ts +0 -14
  196. package/src/types/SceneType.ts +0 -14
  197. package/src/types/index.ts +0 -5
@@ -1,56 +0,0 @@
1
- import { Mesh, Object3D, PlaneGeometry, ShadowMaterial } from 'three';
2
- import { DIVERoot } from '../root/Root';
3
- import { type DIVERenderer } from '../../renderer/Renderer';
4
- import { DIVEXRLightRoot } from './xrlightroot/XRLightRoot';
5
- import { type DIVEScene } from '../Scene';
6
-
7
- export class DIVEXRRoot extends Object3D {
8
- private _xrLightRoot: DIVEXRLightRoot;
9
- private _xrModelRoot: DIVERoot;
10
- private _xrHandNode: Object3D;
11
-
12
- public get XRModelRoot(): DIVERoot {
13
- return this._xrModelRoot;
14
- }
15
-
16
- public get XRLightRoot(): DIVEXRLightRoot {
17
- return this._xrLightRoot;
18
- }
19
-
20
- public get XRHandNode(): Object3D {
21
- return this._xrHandNode;
22
- }
23
-
24
- private _xrShadowPlane: Mesh;
25
-
26
- constructor(scene: DIVEScene) {
27
- super();
28
- this.name = 'XRRoot';
29
-
30
- this._xrModelRoot = new DIVERoot();
31
- this._xrModelRoot.name = 'XRModelRoot';
32
- this.add(this._xrModelRoot);
33
-
34
- this._xrShadowPlane = new Mesh(
35
- new PlaneGeometry(100, 100),
36
- new ShadowMaterial({ opacity: 1, transparent: true }),
37
- );
38
- this._xrModelRoot.add(this._xrShadowPlane);
39
-
40
- this._xrLightRoot = new DIVEXRLightRoot(scene);
41
- this._xrLightRoot.name = 'XRLightRoot';
42
- this.add(this._xrLightRoot);
43
-
44
- this._xrHandNode = new Object3D();
45
- this._xrHandNode.name = 'XRHandNode';
46
- this.add(this._xrHandNode);
47
- }
48
-
49
- public InitLightEstimation(renderer: DIVERenderer): void {
50
- this._xrLightRoot.InitLightEstimation(renderer);
51
- }
52
-
53
- public DisposeLightEstimation(): void {
54
- this._xrLightRoot.DisposeLightEstimation();
55
- }
56
- }
@@ -1,80 +0,0 @@
1
- import { XREstimatedLight } from 'three/examples/jsm/webxr/XREstimatedLight';
2
- import { type DIVERenderer } from '../../../renderer/Renderer';
3
- import { Object3D } from 'three';
4
- import { type DIVEScene } from '../../Scene';
5
- import { PRODUCT_LAYER_MASK } from '../../../constant/VisibilityLayerMask';
6
- import { DIVERoot } from '../../root/Root';
7
-
8
- export class DIVEXRLightRoot extends Object3D {
9
- private _scene: DIVEScene;
10
-
11
- private _xrLight: XREstimatedLight | null;
12
- private _lightRoot: DIVERoot;
13
-
14
- constructor(scene: DIVEScene) {
15
- super();
16
- this.name = 'XRLightRoot';
17
-
18
- this._scene = scene;
19
-
20
- // placeholder for XR light
21
- this._xrLight = null;
22
-
23
- // add scene
24
- this._lightRoot = new DIVERoot();
25
- this._lightRoot.UpdateSceneObject({
26
- id: 'XRSceneLight',
27
- entityType: 'light',
28
- name: 'XRSceneLight',
29
- type: 'scene',
30
- color: 0xffffff,
31
- intensity: 1,
32
- enabled: true,
33
- visible: true,
34
- });
35
- this.add(this._lightRoot);
36
- }
37
-
38
- public InitLightEstimation(renderer: DIVERenderer): void {
39
- if (!this._xrLight) {
40
- this._xrLight = new XREstimatedLight(renderer, true);
41
- this._xrLight.layers.mask = PRODUCT_LAYER_MASK;
42
- this.add(this._xrLight);
43
- }
44
-
45
- this._xrLight.addEventListener('estimationstart', () => {
46
- this.onEstimationStart();
47
- });
48
- this._xrLight.addEventListener('estimationend', () => {
49
- this.onEstimationEnd();
50
- });
51
- }
52
-
53
- public DisposeLightEstimation(): void {
54
- if (!this._xrLight) return;
55
-
56
- this._xrLight.removeEventListener('estimationstart', () => {
57
- this.onEstimationStart();
58
- });
59
- this._xrLight.removeEventListener('estimationend', () => {
60
- this.onEstimationEnd();
61
- });
62
- }
63
-
64
- private onEstimationStart(): void {
65
- this._lightRoot.visible = false;
66
-
67
- if (!this._xrLight) return;
68
-
69
- if (this._xrLight.environment) {
70
- this._scene.environment = this._xrLight.environment;
71
- }
72
- }
73
-
74
- private onEstimationEnd(): void {
75
- this._lightRoot.visible = true;
76
- this._scene.environment = null;
77
-
78
- if (!this._xrLight) return;
79
- }
80
- }
@@ -1,319 +0,0 @@
1
- import {
2
- type Intersection,
3
- type Object3D,
4
- Raycaster,
5
- Vector2,
6
- Vector3,
7
- } from 'three';
8
- import {
9
- PRODUCT_LAYER_MASK,
10
- UI_LAYER_MASK,
11
- } from '../constant/VisibilityLayerMask';
12
- import { type DIVEScene } from '../scene/Scene';
13
- import type DIVEOrbitControls from '../controls/OrbitControls';
14
- import { type DIVEDraggable } from '../interface/Draggable';
15
- import { type DIVEHoverable } from '../interface/Hoverable';
16
- import { findInterface } from '../helper/findInterface/findInterface';
17
-
18
- export type DraggableEvent = {
19
- dragStart: Vector3;
20
- dragCurrent: Vector3;
21
- dragEnd: Vector3;
22
- dragDelta: Vector3;
23
- };
24
-
25
- /* eslint-disable @typescript-eslint/no-unused-vars */
26
- export abstract class DIVEBaseTool {
27
- readonly POINTER_DRAG_THRESHOLD: number = 0.001;
28
-
29
- public name: string;
30
-
31
- protected _canvas: HTMLElement;
32
- protected _scene: DIVEScene;
33
- protected _controller: DIVEOrbitControls;
34
-
35
- // general pointer members
36
- protected _pointer: Vector2;
37
-
38
- protected get _pointerAnyDown(): boolean {
39
- return (
40
- this._pointerPrimaryDown ||
41
- this._pointerMiddleDown ||
42
- this._pointerSecondaryDown
43
- );
44
- }
45
- protected _pointerPrimaryDown: boolean;
46
- protected _pointerMiddleDown: boolean;
47
- protected _pointerSecondaryDown: boolean;
48
- protected _lastPointerDown: Vector2;
49
- protected _lastPointerUp: Vector2;
50
-
51
- // raycast members
52
- protected _raycaster: Raycaster;
53
- protected _intersects: Intersection[];
54
-
55
- // hovering members
56
- protected _hovered: (Object3D & DIVEHoverable) | null;
57
-
58
- // dragging members
59
- protected _dragging: boolean;
60
- protected _dragStart: Vector3;
61
- protected _dragCurrent: Vector3;
62
- protected _dragEnd: Vector3;
63
- protected _dragDelta: Vector3;
64
- protected _draggable: DIVEDraggable | null;
65
- protected _dragRaycastOnObjects: Object3D[] | null;
66
-
67
- protected constructor(scene: DIVEScene, controller: DIVEOrbitControls) {
68
- this.name = 'BaseTool';
69
-
70
- this._canvas = controller.domElement;
71
- this._scene = scene;
72
- this._controller = controller;
73
-
74
- this._pointer = new Vector2();
75
-
76
- this._pointerPrimaryDown = false;
77
- this._pointerMiddleDown = false;
78
- this._pointerSecondaryDown = false;
79
-
80
- this._lastPointerDown = new Vector2();
81
- this._lastPointerUp = new Vector2();
82
-
83
- this._raycaster = new Raycaster();
84
- this._raycaster.layers.mask = PRODUCT_LAYER_MASK | UI_LAYER_MASK;
85
- this._intersects = [];
86
-
87
- this._hovered = null;
88
-
89
- this._dragging = false;
90
- this._dragStart = new Vector3();
91
- this._dragCurrent = new Vector3();
92
- this._dragEnd = new Vector3();
93
- this._dragDelta = new Vector3();
94
- this._draggable = null;
95
- this._dragRaycastOnObjects = null;
96
- }
97
-
98
- public Activate(): void {}
99
-
100
- public Deactivate(): void {}
101
-
102
- public onPointerDown(e: PointerEvent): void {
103
- switch (e.button) {
104
- case 0: {
105
- this._pointerPrimaryDown = true;
106
- break;
107
- }
108
- case 1: {
109
- this._pointerMiddleDown = true;
110
- break;
111
- }
112
- case 2: {
113
- this._pointerSecondaryDown = true;
114
- break;
115
- }
116
- default: {
117
- console.warn(
118
- 'DIVEBaseTool.onPointerDown: Unknown button: ' + e.button,
119
- );
120
- }
121
- }
122
-
123
- this._lastPointerDown.copy(this._pointer);
124
-
125
- this._draggable =
126
- findInterface<DIVEDraggable>(
127
- this._intersects[0]?.object,
128
- 'isDraggable',
129
- ) || null;
130
- }
131
-
132
- public onDragStart(e: PointerEvent): void {
133
- if (!this._draggable) return;
134
-
135
- if (this._dragRaycastOnObjects !== null) {
136
- this._intersects = this._raycaster.intersectObjects(
137
- this._dragRaycastOnObjects,
138
- true,
139
- );
140
- }
141
-
142
- if (this._intersects.length === 0) return;
143
-
144
- this._dragStart.copy(this._intersects[0].point.clone());
145
- this._dragCurrent.copy(this._intersects[0].point.clone());
146
- this._dragEnd.copy(this._dragStart.clone());
147
- this._dragDelta.set(0, 0, 0);
148
-
149
- if (this._draggable && this._draggable.onDragStart) {
150
- this._draggable.onDragStart({
151
- dragStart: this._dragStart,
152
- dragCurrent: this._dragCurrent,
153
- dragEnd: this._dragEnd,
154
- dragDelta: this._dragDelta,
155
- });
156
-
157
- this._dragging = true;
158
- this._controller.enabled = false;
159
- }
160
- }
161
-
162
- public onPointerMove(e: PointerEvent): void {
163
- // update pointer
164
- this._pointer.x = (e.offsetX / this._canvas.clientWidth) * 2 - 1;
165
- this._pointer.y = -(e.offsetY / this._canvas.clientHeight) * 2 + 1;
166
-
167
- // set raycaster
168
- this._raycaster.setFromCamera(this._pointer, this._controller.object);
169
-
170
- // refresh intersects
171
- this._intersects = this.raycast(this._scene.children);
172
-
173
- // handle hover
174
- const hoverable = findInterface<DIVEHoverable>(
175
- this._intersects[0]?.object,
176
- 'isHoverable',
177
- );
178
- if (this._intersects[0] && hoverable) {
179
- if (!this._hovered) {
180
- if (hoverable.onPointerEnter)
181
- hoverable.onPointerEnter(this._intersects[0]);
182
- this._hovered = hoverable;
183
- return;
184
- }
185
-
186
- if (this._hovered.uuid !== hoverable.uuid) {
187
- if (this._hovered.onPointerLeave)
188
- this._hovered.onPointerLeave();
189
- if (hoverable.onPointerEnter)
190
- hoverable.onPointerEnter(this._intersects[0]);
191
- this._hovered = hoverable;
192
- return;
193
- }
194
-
195
- if (hoverable.onPointerOver)
196
- hoverable.onPointerOver(this._intersects[0]);
197
- this._hovered = hoverable;
198
- } else {
199
- if (this._hovered) {
200
- if (this._hovered.onPointerLeave)
201
- this._hovered.onPointerLeave();
202
- }
203
-
204
- this._hovered = null;
205
- }
206
-
207
- // handle drag
208
- if (this._pointerAnyDown) {
209
- if (!this._dragging) {
210
- this.onDragStart(e);
211
- }
212
-
213
- this.onDrag(e);
214
- }
215
- }
216
-
217
- public onDrag(e: PointerEvent): void {
218
- if (this._dragRaycastOnObjects !== null) {
219
- this._intersects = this._raycaster.intersectObjects(
220
- this._dragRaycastOnObjects,
221
- true,
222
- );
223
- }
224
- const intersect = this._intersects[0];
225
- if (!intersect) return;
226
-
227
- this._dragCurrent.copy(intersect.point.clone());
228
- this._dragEnd.copy(intersect.point.clone());
229
- this._dragDelta.subVectors(
230
- this._dragCurrent.clone(),
231
- this._dragStart.clone(),
232
- );
233
-
234
- if (this._draggable && this._draggable.onDrag) {
235
- this._draggable.onDrag({
236
- dragStart: this._dragStart,
237
- dragCurrent: this._dragCurrent,
238
- dragEnd: this._dragEnd,
239
- dragDelta: this._dragDelta,
240
- });
241
- }
242
- }
243
-
244
- public onPointerUp(e: PointerEvent): void {
245
- if (this.pointerWasDragged() || this._dragging) {
246
- if (this._draggable) {
247
- this.onDragEnd(e);
248
- }
249
- } else {
250
- this.onClick(e);
251
- }
252
-
253
- switch (e.button) {
254
- case 0:
255
- this._pointerPrimaryDown = false;
256
- break;
257
- case 1:
258
- this._pointerMiddleDown = false;
259
- break;
260
- case 2:
261
- this._pointerSecondaryDown = false;
262
- break;
263
- }
264
-
265
- this._lastPointerUp.copy(this._pointer);
266
- }
267
-
268
- public onClick(e: PointerEvent): void {}
269
-
270
- public onDragEnd(e: PointerEvent): void {
271
- const intersect = this._intersects[0];
272
- if (intersect) {
273
- this._dragEnd.copy(intersect.point.clone());
274
- this._dragCurrent.copy(intersect.point.clone());
275
- this._dragDelta.subVectors(
276
- this._dragCurrent.clone(),
277
- this._dragStart.clone(),
278
- );
279
- }
280
-
281
- if (this._draggable && this._draggable.onDragEnd) {
282
- this._draggable.onDragEnd({
283
- dragStart: this._dragStart,
284
- dragCurrent: this._dragCurrent,
285
- dragEnd: this._dragEnd,
286
- dragDelta: this._dragDelta,
287
- });
288
- }
289
-
290
- this._draggable = null;
291
- this._dragging = false;
292
-
293
- this._dragStart.set(0, 0, 0);
294
- this._dragCurrent.set(0, 0, 0);
295
- this._dragEnd.set(0, 0, 0);
296
- this._dragDelta.set(0, 0, 0);
297
-
298
- this._controller.enabled = true;
299
- }
300
-
301
- public onWheel(e: WheelEvent): void {}
302
-
303
- protected raycast(objects?: Object3D[]): Intersection[] {
304
- if (objects !== undefined)
305
- return this._raycaster
306
- .intersectObjects(objects, true)
307
- .filter((i) => i.object.visible);
308
- return this._raycaster
309
- .intersectObjects(this._scene.children, true)
310
- .filter((i) => i.object.visible);
311
- }
312
-
313
- private pointerWasDragged(): boolean {
314
- return (
315
- this._lastPointerDown.distanceTo(this._pointer) >
316
- this.POINTER_DRAG_THRESHOLD
317
- );
318
- }
319
- }
@@ -1,129 +0,0 @@
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 { DIVESelectTool } from './select/SelectTool.ts';
5
-
6
- export type ToolType = 'select' | 'none';
7
-
8
- /**
9
- * A Toolbox to activate and deactivate tools to use with the pointer.
10
- *
11
- * @module
12
- */
13
-
14
- export default class DIVEToolbox {
15
- public static readonly DefaultTool = 'select';
16
-
17
- private _scene: DIVEScene;
18
- private _controller: DIVEOrbitControls;
19
-
20
- private _activeTool: DIVEBaseTool | null;
21
-
22
- private _selectTool: DIVESelectTool | null;
23
- public get selectTool(): DIVESelectTool {
24
- if (!this._selectTool) {
25
- this._selectTool = new DIVESelectTool(
26
- this._scene,
27
- this._controller,
28
- );
29
- }
30
- return this._selectTool;
31
- }
32
-
33
- constructor(scene: DIVEScene, controller: DIVEOrbitControls) {
34
- this._scene = scene;
35
- this._controller = controller;
36
-
37
- // toolset
38
- this._selectTool = null;
39
-
40
- // default tool
41
- this._activeTool = null;
42
- }
43
-
44
- public Dispose(): void {
45
- this.removeEventListeners();
46
- }
47
-
48
- public GetActiveTool(): DIVEBaseTool | null {
49
- return this._activeTool;
50
- }
51
-
52
- public UseTool(tool: ToolType): void {
53
- this._activeTool?.Deactivate();
54
- switch (tool) {
55
- case 'select': {
56
- this.addEventListeners();
57
- this.selectTool.Activate();
58
- this._activeTool = this.selectTool;
59
- break;
60
- }
61
- case 'none': {
62
- this.removeEventListeners();
63
- this._activeTool = null;
64
- break;
65
- }
66
- default: {
67
- console.warn(`DIVEToolBox.UseTool: Unknown tool: ${tool}`);
68
- }
69
- }
70
- }
71
-
72
- public SetGizmoMode(mode: 'translate' | 'rotate' | 'scale'): void {
73
- this.selectTool.SetGizmoMode(mode);
74
- }
75
-
76
- public SetGizmoVisibility(active: boolean): void {
77
- this.selectTool.SetGizmoVisibility(active);
78
- }
79
-
80
- public SetGizmoScaleLinked(linked: boolean): void {
81
- this.selectTool.SetGizmoScaleLinked(linked);
82
- }
83
-
84
- public onPointerMove(e: PointerEvent): void {
85
- this._activeTool?.onPointerMove(e);
86
- }
87
-
88
- public onPointerDown(e: PointerEvent): void {
89
- this._activeTool?.onPointerDown(e);
90
- }
91
-
92
- public onPointerUp(e: PointerEvent): void {
93
- this._activeTool?.onPointerUp(e);
94
- }
95
-
96
- public onWheel(e: WheelEvent): void {
97
- this._activeTool?.onWheel(e);
98
- }
99
-
100
- private addEventListeners(): void {
101
- this._controller.domElement.addEventListener('pointermove', (e) =>
102
- this.onPointerMove(e),
103
- );
104
- this._controller.domElement.addEventListener('pointerdown', (e) =>
105
- this.onPointerDown(e),
106
- );
107
- this._controller.domElement.addEventListener('pointerup', (e) =>
108
- this.onPointerUp(e),
109
- );
110
- this._controller.domElement.addEventListener('wheel', (e) =>
111
- this.onWheel(e),
112
- );
113
- }
114
-
115
- private removeEventListeners(): void {
116
- this._controller.domElement.removeEventListener('pointermove', (e) =>
117
- this.onPointerMove(e),
118
- );
119
- this._controller.domElement.removeEventListener('pointerdown', (e) =>
120
- this.onPointerDown(e),
121
- );
122
- this._controller.domElement.removeEventListener('pointerup', (e) =>
123
- this.onPointerUp(e),
124
- );
125
- this._controller.domElement.removeEventListener('wheel', (e) =>
126
- this.onWheel(e),
127
- );
128
- }
129
- }