@shopware-ag/dive 1.19.1-beta.0 → 1.19.1-beta.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.
Files changed (188) hide show
  1. package/build/dive.cjs +362 -199
  2. package/build/dive.cjs.map +1 -1
  3. package/build/dive.js +330 -167
  4. package/build/dive.js.map +1 -1
  5. package/build/dive.mjs +10803 -8714
  6. package/build/dive.mjs.map +1 -1
  7. package/build/src/converter/Converter.d.ts +3 -12
  8. package/build/src/dive.d.ts +1 -0
  9. package/build/src/exporter/Exporter.d.ts +20 -2
  10. package/build/src/loader/Loader.d.ts +0 -4
  11. package/build/src/types/error/index.d.ts +12 -0
  12. package/build/src/types/file/FileTypes.d.ts +17 -0
  13. package/build/src/types/file/index.d.ts +1 -0
  14. package/build/src/types/index.d.ts +5 -8
  15. package/package.json +2 -3
  16. package/build/src/types/ExporterOptions.d.ts +0 -15
  17. package/build/src/types/FileTypes.d.ts +0 -27
  18. package/src/__test__/DIVE.test.ts +0 -274
  19. package/src/animation/AnimationSystem.ts +0 -34
  20. package/src/animation/__test__/AnimationSystem.test.ts +0 -40
  21. package/src/ar/AR.ts +0 -101
  22. package/src/ar/__test__/AR.test.ts +0 -276
  23. package/src/ar/arquicklook/ARQuickLook.ts +0 -53
  24. package/src/ar/arquicklook/__test__/ARQuickLook.test.ts +0 -144
  25. package/src/ar/sceneviewer/SceneViewer.ts +0 -119
  26. package/src/ar/sceneviewer/__test__/SceneViewer.test.ts +0 -190
  27. package/src/ar/webxr/WebXR.ts +0 -177
  28. package/src/ar/webxr/controller/WebXRController.ts +0 -340
  29. package/src/ar/webxr/crosshair/WebXRCrosshair.ts +0 -35
  30. package/src/ar/webxr/origin/WebXROrigin.ts +0 -192
  31. package/src/ar/webxr/overlay/Overlay.ts +0 -50
  32. package/src/ar/webxr/raycaster/WebXRRaycaster.ts +0 -131
  33. package/src/ar/webxr/raycaster/ar/WebXRRaycasterAR.ts +0 -102
  34. package/src/ar/webxr/raycaster/three/WebXRRaycasterTHREE.ts +0 -49
  35. package/src/ar/webxr/touchscreencontrols/WebXRTouchscreenControls.ts +0 -356
  36. package/src/axiscamera/AxisCamera.ts +0 -108
  37. package/src/axiscamera/__test__/AxisCamera.test.ts +0 -150
  38. package/src/camera/PerspectiveCamera.ts +0 -63
  39. package/src/camera/__test__/PerspectiveCamera.test.ts +0 -36
  40. package/src/com/Communication.ts +0 -806
  41. package/src/com/__test__/Communication.test.ts +0 -1030
  42. package/src/com/actions/camera/computeencompassingview.ts +0 -10
  43. package/src/com/actions/camera/getcameratransform.ts +0 -10
  44. package/src/com/actions/camera/movecamera.ts +0 -18
  45. package/src/com/actions/camera/resetcamera.ts +0 -5
  46. package/src/com/actions/camera/setcameralayer.ts +0 -5
  47. package/src/com/actions/camera/setcameratransform.ts +0 -10
  48. package/src/com/actions/camera/zoomcamera.ts +0 -5
  49. package/src/com/actions/index.ts +0 -61
  50. package/src/com/actions/media/generatemedia.ts +0 -18
  51. package/src/com/actions/object/addobject.ts +0 -7
  52. package/src/com/actions/object/deleteobject.ts +0 -7
  53. package/src/com/actions/object/deselectobject.ts +0 -7
  54. package/src/com/actions/object/getallobjects.ts +0 -7
  55. package/src/com/actions/object/getobjects.ts +0 -7
  56. package/src/com/actions/object/model/dropit.ts +0 -5
  57. package/src/com/actions/object/model/modelloaded.ts +0 -5
  58. package/src/com/actions/object/model/placeonfloor.ts +0 -5
  59. package/src/com/actions/object/selectobject.ts +0 -7
  60. package/src/com/actions/object/setparent.ts +0 -10
  61. package/src/com/actions/object/updateobject.ts +0 -7
  62. package/src/com/actions/renderer/startrender.ts +0 -5
  63. package/src/com/actions/scene/exportscene.ts +0 -7
  64. package/src/com/actions/scene/getallscenedata.ts +0 -7
  65. package/src/com/actions/scene/launchar.ts +0 -7
  66. package/src/com/actions/scene/setbackground.ts +0 -5
  67. package/src/com/actions/scene/updatescene.ts +0 -11
  68. package/src/com/actions/toolbox/select/setgizmomode.ts +0 -5
  69. package/src/com/actions/toolbox/transform/setgizmoscalelinked.ts +0 -5
  70. package/src/com/actions/toolbox/transform/setgizmovisible.ts +0 -5
  71. package/src/com/actions/toolbox/usetool.ts +0 -7
  72. package/src/com/types/COMBaseEntity.ts +0 -9
  73. package/src/com/types/COMEntity.ts +0 -7
  74. package/src/com/types/COMEntityType.ts +0 -1
  75. package/src/com/types/COMGeometry.ts +0 -8
  76. package/src/com/types/COMGeometryType.ts +0 -9
  77. package/src/com/types/COMGroup.ts +0 -9
  78. package/src/com/types/COMLight.ts +0 -11
  79. package/src/com/types/COMMaterial.ts +0 -12
  80. package/src/com/types/COMModel.ts +0 -12
  81. package/src/com/types/COMPov.ts +0 -8
  82. package/src/com/types/COMPrimitive.ts +0 -12
  83. package/src/com/types/index.ts +0 -23
  84. package/src/constant/AxisHelperColors.ts +0 -7
  85. package/src/constant/GridColors.ts +0 -2
  86. package/src/constant/VisibilityLayerMask.ts +0 -5
  87. package/src/controls/OrbitControls.ts +0 -211
  88. package/src/controls/__test__/OrbitControls.test.ts +0 -256
  89. package/src/converter/Converter.ts +0 -117
  90. package/src/dive.ts +0 -363
  91. package/src/events/EventExecutor.ts +0 -35
  92. package/src/exporter/Exporter.ts +0 -75
  93. package/src/gizmo/Gizmo.ts +0 -144
  94. package/src/gizmo/handles/AxisHandle.ts +0 -153
  95. package/src/gizmo/handles/RadialHandle.ts +0 -149
  96. package/src/gizmo/handles/ScaleHandle.ts +0 -195
  97. package/src/gizmo/plane/GizmoPlane.ts +0 -84
  98. package/src/gizmo/rotate/RotateGizmo.ts +0 -143
  99. package/src/gizmo/scale/ScaleGizmo.ts +0 -125
  100. package/src/gizmo/translate/TranslateGizmo.ts +0 -114
  101. package/src/grid/Grid.ts +0 -34
  102. package/src/grid/__test__/Grid.test.ts +0 -28
  103. package/src/group/Group.ts +0 -184
  104. package/src/group/__test__/Group.test.ts +0 -212
  105. package/src/helper/applyMixins/__test__/applyMixins.test.ts +0 -30
  106. package/src/helper/applyMixins/applyMixins.ts +0 -70
  107. package/src/helper/findInterface/__test__/findInterface.test.ts +0 -63
  108. package/src/helper/findInterface/findInterface.ts +0 -13
  109. package/src/helper/findSceneRecursive/__test__/findSceneRecursive.test.ts +0 -40
  110. package/src/helper/findSceneRecursive/findSceneRecursive.ts +0 -16
  111. package/src/helper/getObjectDelta/__test__/getObjectDelta.test.ts +0 -186
  112. package/src/helper/getObjectDelta/getObjectDelta.ts +0 -105
  113. package/src/helper/isInterface/__test__/implementsInterface.test.ts +0 -19
  114. package/src/helper/isInterface/implementsInterface.ts +0 -9
  115. package/src/info/Info.ts +0 -178
  116. package/src/info/__test__/Info.test.ts +0 -346
  117. package/src/interface/Draggable.ts +0 -14
  118. package/src/interface/Hoverable.ts +0 -14
  119. package/src/interface/Movable.ts +0 -12
  120. package/src/interface/Rotatable.ts +0 -10
  121. package/src/interface/Scalable.ts +0 -10
  122. package/src/interface/Selectable.ts +0 -11
  123. package/src/io/IO.ts +0 -62
  124. package/src/io/__test__/IO.test.ts +0 -116
  125. package/src/io/gltf/GLTFIO.ts +0 -56
  126. package/src/io/gltf/__test__/GLTFIO.test.ts +0 -108
  127. package/src/light/AmbientLight.ts +0 -39
  128. package/src/light/PointLight.ts +0 -115
  129. package/src/light/SceneLight.ts +0 -63
  130. package/src/light/__test__/AmbientLight.test.ts +0 -29
  131. package/src/light/__test__/PointLight.test.ts +0 -74
  132. package/src/light/__test__/SceneLight.test.ts +0 -47
  133. package/src/loader/Loader.ts +0 -48
  134. package/src/math/__test__/DIVEMath.test.ts +0 -12
  135. package/src/math/ceil/__test__/ceilExp.test.ts +0 -12
  136. package/src/math/ceil/ceilExp.ts +0 -6
  137. package/src/math/degToRad/__test__/degToRad.test.ts +0 -172
  138. package/src/math/degToRad/degToRad.ts +0 -5
  139. package/src/math/floor/__test__/floorExp.test.ts +0 -14
  140. package/src/math/floor/floorExp.ts +0 -6
  141. package/src/math/helper/__test__/shift.test.ts +0 -12
  142. package/src/math/helper/shift.ts +0 -4
  143. package/src/math/index.ts +0 -28
  144. package/src/math/radToDeg/__test__/radToDeg.test.ts +0 -155
  145. package/src/math/radToDeg/radToDeg.ts +0 -5
  146. package/src/math/round/__test__/roundExp.test.ts +0 -14
  147. package/src/math/round/roundExp.ts +0 -10
  148. package/src/math/signedAngleTo/__test__/signedAngleTo.test.ts +0 -20
  149. package/src/math/signedAngleTo/signedAngleTo.ts +0 -20
  150. package/src/math/toFixed/__test__/toFixedExp.test.ts +0 -14
  151. package/src/math/toFixed/toFixedExp.ts +0 -9
  152. package/src/math/truncate/__test__/truncateExp.test.ts +0 -14
  153. package/src/math/truncate/truncateExp.ts +0 -9
  154. package/src/mediacreator/MediaCreator.ts +0 -75
  155. package/src/mediacreator/__test__/MediaCreator.test.ts +0 -155
  156. package/src/model/Model.ts +0 -190
  157. package/src/model/__test__/Model.test.ts +0 -215
  158. package/src/module/Module.ts +0 -45
  159. package/src/module/__test__/Module.test.ts +0 -54
  160. package/src/node/Node.ts +0 -100
  161. package/src/node/__test__/Node.test.ts +0 -120
  162. package/src/primitive/Primitive.ts +0 -299
  163. package/src/primitive/__test__/Primitive.test.ts +0 -281
  164. package/src/primitive/floor/Floor.ts +0 -45
  165. package/src/primitive/floor/__test__/Floor.test.ts +0 -24
  166. package/src/renderer/Renderer.ts +0 -215
  167. package/src/renderer/__test__/Renderer.test.ts +0 -228
  168. package/src/scene/Scene.ts +0 -106
  169. package/src/scene/__test__/Scene.test.ts +0 -124
  170. package/src/scene/root/Root.ts +0 -426
  171. package/src/scene/root/__test__/Root.test.ts +0 -903
  172. package/src/scene/xrroot/XRRoot.ts +0 -56
  173. package/src/scene/xrroot/xrlightroot/XRLightRoot.ts +0 -80
  174. package/src/toolbox/BaseTool.ts +0 -319
  175. package/src/toolbox/Toolbox.ts +0 -129
  176. package/src/toolbox/__test__/BaseTool.test.ts +0 -627
  177. package/src/toolbox/__test__/Toolbox.test.ts +0 -143
  178. package/src/toolbox/select/SelectTool.ts +0 -92
  179. package/src/toolbox/select/__test__/SelectTool.test.ts +0 -237
  180. package/src/toolbox/transform/TransformTool.ts +0 -166
  181. package/src/toolbox/transform/__test__/TransformTool.test.ts +0 -147
  182. package/src/types/ExporterOptions.ts +0 -14
  183. package/src/types/FileTypes.ts +0 -37
  184. package/src/types/SceneData.ts +0 -26
  185. package/src/types/SceneObjects.ts +0 -14
  186. package/src/types/SceneType.ts +0 -14
  187. package/src/types/index.ts +0 -31
  188. package/src/types/info/index.ts +0 -76
@@ -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
- }