@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.
Files changed (143) hide show
  1. package/README.md +271 -40
  2. package/build/dive.cjs +575 -159
  3. package/build/dive.cjs.map +1 -1
  4. package/build/dive.d.cts +83 -57
  5. package/build/dive.d.ts +83 -57
  6. package/build/dive.js +614 -164
  7. package/build/dive.js.map +1 -1
  8. package/package.json +72 -60
  9. package/src/__test__/DIVE.test.ts +35 -31
  10. package/src/animation/AnimationSystem.ts +4 -4
  11. package/src/animation/__test__/AnimationSystem.test.ts +3 -3
  12. package/src/axiscamera/AxisCamera.ts +31 -11
  13. package/src/axiscamera/__test__/AxisCamera.test.ts +18 -10
  14. package/src/camera/PerspectiveCamera.ts +28 -13
  15. package/src/camera/__test__/PerspectiveCamera.test.ts +2 -2
  16. package/src/com/Communication.ts +282 -100
  17. package/src/com/__test__/Communication.test.ts +207 -141
  18. package/src/com/actions/camera/computeencompassingview.ts +8 -7
  19. package/src/com/actions/camera/getcameratransform.ts +8 -7
  20. package/src/com/actions/camera/movecamera.ts +16 -13
  21. package/src/com/actions/camera/resetcamera.ts +4 -3
  22. package/src/com/actions/camera/setcameralayer.ts +4 -3
  23. package/src/com/actions/camera/setcameratransform.ts +8 -7
  24. package/src/com/actions/camera/zoomcamera.ts +4 -3
  25. package/src/com/actions/index.ts +54 -54
  26. package/src/com/actions/media/generatemedia.ts +17 -13
  27. package/src/com/actions/object/addobject.ts +5 -4
  28. package/src/com/actions/object/deleteobject.ts +5 -4
  29. package/src/com/actions/object/deselectobject.ts +5 -4
  30. package/src/com/actions/object/getallobjects.ts +5 -4
  31. package/src/com/actions/object/getobjects.ts +5 -4
  32. package/src/com/actions/object/model/dropit.ts +4 -3
  33. package/src/com/actions/object/model/modelloaded.ts +4 -3
  34. package/src/com/actions/object/model/placeonfloor.ts +4 -3
  35. package/src/com/actions/object/selectobject.ts +5 -4
  36. package/src/com/actions/object/setparent.ts +8 -7
  37. package/src/com/actions/object/updateobject.ts +5 -4
  38. package/src/com/actions/scene/exportscene.ts +5 -4
  39. package/src/com/actions/scene/getallscenedata.ts +24 -18
  40. package/src/com/actions/scene/setbackground.ts +4 -3
  41. package/src/com/actions/scene/updatescene.ts +10 -9
  42. package/src/com/actions/toolbox/select/setgizmomode.ts +4 -3
  43. package/src/com/actions/toolbox/transform/setgizmovisible.ts +4 -3
  44. package/src/com/actions/toolbox/usetool.ts +5 -4
  45. package/src/com/types/COMBaseEntity.ts +2 -2
  46. package/src/com/types/COMEntity.ts +6 -6
  47. package/src/com/types/COMEntityType.ts +1 -1
  48. package/src/com/types/COMGeometry.ts +2 -2
  49. package/src/com/types/COMGroup.ts +3 -3
  50. package/src/com/types/COMLight.ts +3 -3
  51. package/src/com/types/COMMaterial.ts +2 -2
  52. package/src/com/types/COMModel.ts +4 -4
  53. package/src/com/types/COMPov.ts +3 -3
  54. package/src/com/types/COMPrimitive.ts +5 -5
  55. package/src/com/types/index.ts +10 -10
  56. package/src/constant/AxisHelperColors.ts +1 -1
  57. package/src/constant/GridColors.ts +1 -1
  58. package/src/controls/OrbitControls.ts +62 -29
  59. package/src/controls/__test__/OrbitControls.test.ts +133 -39
  60. package/src/dive.ts +82 -36
  61. package/src/gizmo/Gizmo.ts +21 -13
  62. package/src/gizmo/handles/AxisHandle.ts +40 -17
  63. package/src/gizmo/handles/RadialHandle.ts +39 -15
  64. package/src/gizmo/handles/ScaleHandle.ts +62 -25
  65. package/src/gizmo/plane/GizmoPlane.ts +5 -6
  66. package/src/gizmo/rotate/RotateGizmo.ts +58 -16
  67. package/src/gizmo/scale/ScaleGizmo.ts +37 -15
  68. package/src/gizmo/translate/TranslateGizmo.ts +34 -14
  69. package/src/grid/Grid.ts +13 -5
  70. package/src/grid/__test__/Grid.test.ts +5 -3
  71. package/src/group/Group.ts +9 -7
  72. package/src/group/__test__/Group.test.ts +8 -6
  73. package/src/helper/applyMixins/__test__/applyMixins.test.ts +9 -6
  74. package/src/helper/applyMixins/applyMixins.ts +6 -3
  75. package/src/helper/findInterface/__test__/findInterface.test.ts +28 -18
  76. package/src/helper/findInterface/findInterface.ts +7 -4
  77. package/src/helper/findSceneRecursive/__test__/findSceneRecursive.test.ts +1 -1
  78. package/src/helper/findSceneRecursive/findSceneRecursive.ts +1 -1
  79. package/src/helper/getObjectDelta/__test__/getObjectDelta.test.ts +43 -7
  80. package/src/helper/getObjectDelta/getObjectDelta.ts +13 -9
  81. package/src/helper/isInterface/__test__/implementsInterface.test.ts +1 -1
  82. package/src/helper/isInterface/implementsInterface.ts +6 -3
  83. package/src/info/Info.ts +20 -16
  84. package/src/info/__test__/Info.test.ts +67 -36
  85. package/src/interface/Draggable.ts +2 -2
  86. package/src/interface/Hoverable.ts +2 -2
  87. package/src/interface/Movable.ts +1 -1
  88. package/src/interface/Rotatable.ts +1 -1
  89. package/src/interface/Scalable.ts +1 -1
  90. package/src/io/IO.ts +21 -43
  91. package/src/io/__test__/IO.test.ts +16 -62
  92. package/src/io/gltf/GLTFIO.ts +34 -31
  93. package/src/io/gltf/__test__/GLTFIO.test.ts +88 -78
  94. package/src/light/PointLight.ts +42 -9
  95. package/src/light/SceneLight.ts +5 -5
  96. package/src/light/__test__/AmbientLight.test.ts +5 -4
  97. package/src/light/__test__/PointLight.test.ts +14 -10
  98. package/src/light/__test__/SceneLight.test.ts +19 -13
  99. package/src/loadingmanager/LoadingManager.ts +11 -6
  100. package/src/loadingmanager/__test__/LoadingManager.test.ts +14 -9
  101. package/src/math/__test__/DIVEMath.test.ts +1 -1
  102. package/src/math/ceil/__test__/ceilExp.test.ts +1 -1
  103. package/src/math/ceil/ceilExp.ts +2 -2
  104. package/src/math/floor/__test__/floorExp.test.ts +1 -1
  105. package/src/math/floor/floorExp.ts +2 -2
  106. package/src/math/helper/__test__/shift.test.ts +1 -1
  107. package/src/math/helper/shift.ts +1 -1
  108. package/src/math/index.ts +7 -7
  109. package/src/math/round/__test__/roundExp.test.ts +1 -1
  110. package/src/math/round/roundExp.ts +6 -3
  111. package/src/math/signedAngleTo/__test__/signedAngleTo.test.ts +10 -4
  112. package/src/math/signedAngleTo/signedAngleTo.ts +11 -4
  113. package/src/math/toFixed/__test__/toFixedExp.test.ts +9 -9
  114. package/src/math/toFixed/toFixedExp.ts +6 -3
  115. package/src/math/truncate/__test__/truncateExp.test.ts +1 -1
  116. package/src/math/truncate/truncateExp.ts +6 -3
  117. package/src/mediacreator/MediaCreator.ts +20 -10
  118. package/src/mediacreator/__test__/MediaCreator.test.ts +27 -12
  119. package/src/model/Model.ts +35 -7
  120. package/src/model/__test__/Model.test.ts +71 -44
  121. package/src/node/Node.ts +34 -12
  122. package/src/node/__test__/Node.test.ts +17 -13
  123. package/src/primitive/Primitive.ts +78 -13
  124. package/src/primitive/__test__/Primitive.test.ts +49 -38
  125. package/src/primitive/floor/Floor.ts +14 -3
  126. package/src/primitive/floor/__test__/Floor.test.ts +10 -4
  127. package/src/renderer/Renderer.ts +46 -15
  128. package/src/renderer/__test__/Renderer.test.ts +74 -24
  129. package/src/scene/Scene.ts +9 -3
  130. package/src/scene/__test__/Scene.test.ts +2 -2
  131. package/src/scene/root/Root.ts +142 -75
  132. package/src/scene/root/__test__/Root.test.ts +439 -111
  133. package/src/toolbox/BaseTool.ts +69 -33
  134. package/src/toolbox/Toolbox.ts +37 -17
  135. package/src/toolbox/__test__/BaseTool.test.ts +324 -160
  136. package/src/toolbox/__test__/Toolbox.test.ts +31 -14
  137. package/src/toolbox/select/SelectTool.ts +24 -19
  138. package/src/toolbox/select/__test__/SelectTool.test.ts +95 -59
  139. package/src/toolbox/transform/TransformTool.ts +40 -17
  140. package/src/toolbox/transform/__test__/TransformTool.test.ts +22 -15
  141. package/src/types/SceneObjects.ts +8 -8
  142. package/src/types/SceneType.ts +3 -3
  143. package/src/types/index.ts +3 -6
@@ -1,17 +1,20 @@
1
- import { Intersection, Object3D, Raycaster, Vector2, Vector3 } from "three";
2
- import { PRODUCT_LAYER_MASK, UI_LAYER_MASK } from "../constant/VisibilityLayerMask";
3
- import { DIVEScene } from "../scene/Scene";
4
- import DIVEOrbitControls from "../controls/OrbitControls";
5
- import { type DIVEDraggable } from "../interface/Draggable";
6
- import { type DIVEHoverable } from "../interface/Hoverable";
7
- import { findInterface } from "../helper/findInterface/findInterface";
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 this._pointerPrimaryDown
31
- || this._pointerMiddleDown
32
- || this._pointerSecondaryDown;
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 = "BaseTool";
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 = findInterface<DIVEDraggable>(this._intersects[0]?.object, 'isDraggable') || null;
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(this._dragRaycastOnObjects, true);
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>(this._intersects[0]?.object, 'isHoverable');
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) hoverable.onPointerEnter(this._intersects[0]);
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) this._hovered.onPointerLeave();
158
- if (hoverable.onPointerEnter) hoverable.onPointerEnter(this._intersects[0]);
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) hoverable.onPointerOver(this._intersects[0]);
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) 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(this._dragRaycastOnObjects, true);
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(this._dragCurrent.clone(), this._dragStart.clone());
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(this._dragCurrent.clone(), this._dragStart.clone());
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) return this._raycaster.intersectObjects(objects, true).filter(i => i.object.visible);
263
- return this._raycaster.intersectObjects(this._scene.children, true).filter(i => i.object.visible);
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 this._lastPointerDown.distanceTo(this._pointer) > this.POINTER_DRAG_THRESHOLD;
300
+ return (
301
+ this._lastPointerDown.distanceTo(this._pointer) >
302
+ this.POINTER_DRAG_THRESHOLD
303
+ );
268
304
  }
269
- }
305
+ }
@@ -1,7 +1,7 @@
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";
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').DIVESelectTool as typeof import('./select/SelectTool.ts').DIVESelectTool;
26
- this._selectTool = new DIVESelectTool(this._scene, this._controller);
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 "select": {
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 "none": {
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) => this.onPointerMove(e));
96
- this._controller.domElement.addEventListener('pointerdown', (e) => this.onPointerDown(e));
97
- this._controller.domElement.addEventListener('pointerup', (e) => this.onPointerUp(e));
98
- this._controller.domElement.addEventListener('wheel', (e) => this.onWheel(e));
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) => this.onPointerMove(e));
103
- this._controller.domElement.removeEventListener('pointerdown', (e) => this.onPointerDown(e));
104
- this._controller.domElement.removeEventListener('pointerup', (e) => this.onPointerUp(e));
105
- this._controller.domElement.removeEventListener('wheel', (e) => this.onWheel(e));
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
+ }