@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,211 +0,0 @@
1
- import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
2
- import DIVEPerspectiveCamera from '../camera/PerspectiveCamera.ts';
3
- import { DIVERenderer } from '../renderer/Renderer.ts';
4
- import { type Box3, MathUtils, Vector3, Vector3Like } from 'three';
5
- import { Easing } from '@tweenjs/tween.js';
6
- import { type DIVEAnimationSystem } from '../animation/AnimationSystem.ts';
7
-
8
- export type DIVEOrbitControlsSettings = {
9
- enableDamping: boolean;
10
- dampingFactor: number;
11
- };
12
-
13
- export const DIVEOrbitControlsDefaultSettings: DIVEOrbitControlsSettings = {
14
- enableDamping: true,
15
- dampingFactor: 0.04,
16
- };
17
-
18
- /**
19
- * Orbit Controls. Basic functionality to orbit around a given target point in the scene.
20
- *
21
- * @module
22
- */
23
-
24
- export default class DIVEOrbitControls extends OrbitControls {
25
- public static readonly DEFAULT_ZOOM_FACTOR = 1;
26
-
27
- private _animationSystem: DIVEAnimationSystem;
28
-
29
- private last: { pos: Vector3Like; target: Vector3Like } | null = null;
30
-
31
- private animating: boolean = false;
32
- private locked: boolean = false;
33
-
34
- private stopMoveTo: () => void = () => {};
35
- private stopRevertLast: () => void = () => {};
36
-
37
- public object: DIVEPerspectiveCamera;
38
- public domElement: HTMLCanvasElement;
39
-
40
- private _removePreRenderCallback: () => void = () => {};
41
-
42
- constructor(
43
- camera: DIVEPerspectiveCamera,
44
- renderer: DIVERenderer,
45
- animationSystem: DIVEAnimationSystem,
46
- settings: Partial<DIVEOrbitControlsSettings> = DIVEOrbitControlsDefaultSettings,
47
- ) {
48
- super(camera, renderer.domElement);
49
-
50
- this._animationSystem = animationSystem;
51
-
52
- this.domElement = renderer.domElement;
53
-
54
- this.object = camera;
55
-
56
- const id = renderer.AddPreRenderCallback(() => {
57
- this.preRenderCallback();
58
- });
59
-
60
- this._removePreRenderCallback = () => {
61
- renderer.RemovePreRenderCallback(id);
62
- };
63
-
64
- this.enableDamping =
65
- settings.enableDamping ||
66
- DIVEOrbitControlsDefaultSettings.enableDamping;
67
- this.dampingFactor =
68
- settings.dampingFactor ||
69
- DIVEOrbitControlsDefaultSettings.dampingFactor;
70
-
71
- // initialize camera transformation
72
- this.object.position.set(0, 2, 2);
73
- this.target.copy({ x: 0, y: 0.5, z: 0 });
74
- this.update();
75
- }
76
-
77
- public Dispose(): void {
78
- this._removePreRenderCallback();
79
- this.dispose();
80
- }
81
-
82
- public ComputeEncompassingView(bb: Box3): {
83
- position: Vector3Like;
84
- target: Vector3Like;
85
- } {
86
- const center = bb.getCenter(new Vector3());
87
- const size = bb.getSize(new Vector3());
88
- const distance = Math.max(size.x, size.y, size.z) * 1.25;
89
- const direction = this.object.position.clone().normalize();
90
-
91
- return {
92
- position: direction.multiplyScalar(distance),
93
- target: center,
94
- };
95
- }
96
-
97
- public ZoomIn(by?: number): void {
98
- const zoomBy = by || DIVEOrbitControls.DEFAULT_ZOOM_FACTOR;
99
- const { minDistance, maxDistance } = this;
100
- this.minDistance = this.maxDistance = MathUtils.clamp(
101
- this.getDistance() - zoomBy,
102
- minDistance + zoomBy,
103
- maxDistance - zoomBy,
104
- );
105
- this.update();
106
- this.minDistance = minDistance;
107
- this.maxDistance = maxDistance;
108
- }
109
-
110
- public ZoomOut(by?: number): void {
111
- const zoomBy = by || DIVEOrbitControls.DEFAULT_ZOOM_FACTOR;
112
- const { minDistance, maxDistance } = this;
113
- this.minDistance = this.maxDistance = MathUtils.clamp(
114
- this.getDistance() + zoomBy,
115
- minDistance + zoomBy,
116
- maxDistance - zoomBy,
117
- );
118
- this.update();
119
- this.minDistance = minDistance;
120
- this.maxDistance = maxDistance;
121
- }
122
-
123
- public MoveTo(
124
- pos: Vector3Like | undefined,
125
- target: Vector3Like | undefined,
126
- duration: number,
127
- lock: boolean,
128
- ): void {
129
- if (this.animating) return;
130
-
131
- const toPosition = pos || this.object.position.clone();
132
- const toTarget = target || this.target.clone();
133
-
134
- this.stopRevertLast();
135
-
136
- if (!this.locked)
137
- this.last = {
138
- pos: this.object.position.clone(),
139
- target: this.target.clone(),
140
- };
141
-
142
- this.animating = duration > 0;
143
- this.locked = lock;
144
- this.enabled = false;
145
-
146
- const tweenPos = this._animationSystem
147
- .Animate(this.object.position)
148
- .to(toPosition, duration)
149
- .easing(Easing.Quadratic.Out)
150
- .start();
151
-
152
- const tweenQuat = this._animationSystem
153
- .Animate(this.target)
154
- .to(toTarget, duration)
155
- .easing(Easing.Quadratic.Out)
156
- .onUpdate(() => {
157
- this.object.lookAt(this.target);
158
- })
159
- .onComplete(() => {
160
- this.animating = false;
161
- this.enabled = !lock;
162
- })
163
- .start();
164
-
165
- this.stopMoveTo = () => {
166
- tweenPos.stop();
167
- tweenQuat.stop();
168
- };
169
- }
170
-
171
- public RevertLast(duration: number): void {
172
- if (this.animating || !this.locked) return;
173
-
174
- this.stopMoveTo();
175
-
176
- this.animating = duration > 0;
177
- this.enabled = false;
178
-
179
- const { pos, target } = this.last!;
180
-
181
- const tweenPos = this._animationSystem
182
- .Animate(this.object.position)
183
- .to(pos, duration)
184
- .easing(Easing.Quadratic.Out)
185
- .start();
186
-
187
- const tweenQuat = this._animationSystem
188
- .Animate(this.target)
189
- .to(target, duration)
190
- .easing(Easing.Quadratic.Out)
191
- .onUpdate(() => {
192
- this.object.lookAt(this.target);
193
- })
194
- .onComplete(() => {
195
- this.animating = false;
196
- this.locked = false;
197
- this.enabled = true;
198
- })
199
- .start();
200
-
201
- this.stopRevertLast = () => {
202
- tweenPos.stop();
203
- tweenQuat.stop();
204
- };
205
- }
206
-
207
- private preRenderCallback = (): void => {
208
- if (this.locked) return;
209
- this.update();
210
- };
211
- }
@@ -1,256 +0,0 @@
1
- import DIVEOrbitControls from '../OrbitControls';
2
- import type DIVEPerspectiveCamera from '../../camera/PerspectiveCamera';
3
- import { DIVERenderer } from '../../renderer/Renderer';
4
- import { Box3 } from 'three';
5
- import { DIVEAnimationSystem } from '../../animation/AnimationSystem';
6
- import { Tween } from '@tweenjs/tween.js';
7
-
8
- jest.mock('../../renderer/Renderer', () => {
9
- return jest.fn(function () {
10
- this.domElement = {
11
- style: {},
12
- };
13
- this.AddPreRenderCallback = (callback: () => void) => {
14
- callback();
15
- };
16
-
17
- return this;
18
- });
19
- });
20
-
21
- jest.mock('../../animation/AnimationSystem', () => {
22
- return {
23
- DIVEAnimationSystem: jest.fn(function () {
24
- this.domElement = {
25
- style: {},
26
- };
27
- this.Animate = <T extends object>(obj: T) => {
28
- return new Tween<T>(obj);
29
- };
30
-
31
- return this;
32
- }),
33
- };
34
- });
35
-
36
- const moveToPos = { x: 10, y: 0, z: 0 };
37
- const moveToQuat = { x: 0, y: 0, z: 0 };
38
- const moveToDuration = 1000;
39
-
40
- const mockCamera = {
41
- position: {
42
- clone: jest.fn(() => {
43
- return mockCamera.position;
44
- }),
45
- normalize: jest.fn(() => {
46
- return mockCamera.position;
47
- }),
48
- multiplyScalar: jest.fn(() => {
49
- return mockCamera.position;
50
- }),
51
- set: jest.fn(() => {
52
- return mockCamera.position;
53
- }),
54
- },
55
- lookAt: jest.fn(),
56
- } as unknown as DIVEPerspectiveCamera;
57
- const mockRenderer = {
58
- render: jest.fn(),
59
- OnResize: jest.fn(),
60
- getViewport: jest.fn(),
61
- setViewport: jest.fn(),
62
- AddPreRenderCallback: jest.fn((callback) => {
63
- callback();
64
- }),
65
- AddPostRenderCallback: jest.fn((callback) => {
66
- callback();
67
- }),
68
- RemovePreRenderCallback: jest.fn(),
69
- RemovePostRenderCallback: jest.fn(),
70
- } as unknown as DIVERenderer;
71
-
72
- const mockAnimSystem = new DIVEAnimationSystem(mockRenderer);
73
-
74
- describe('dive/controls/DIVEOrbitControls', () => {
75
- afterEach(() => {
76
- jest.clearAllMocks();
77
- });
78
-
79
- it('should instantiate', () => {
80
- const controller = new DIVEOrbitControls(
81
- mockCamera,
82
- mockRenderer,
83
- mockAnimSystem,
84
- {},
85
- );
86
- expect(controller).toBeDefined();
87
- });
88
-
89
- it('should instantiate with settings', () => {
90
- const controller = new DIVEOrbitControls(
91
- mockCamera,
92
- mockRenderer,
93
- mockAnimSystem,
94
- {
95
- enableDamping: false,
96
- dampingFactor: 0.5,
97
- },
98
- );
99
- expect(controller).toBeDefined();
100
- });
101
-
102
- it('should dispose', () => {
103
- const controller = new DIVEOrbitControls(
104
- mockCamera,
105
- mockRenderer,
106
- mockAnimSystem,
107
- );
108
- expect(() => controller.Dispose()).not.toThrow();
109
- });
110
-
111
- it('should compute encompassing view', () => {
112
- const controller = new DIVEOrbitControls(
113
- mockCamera,
114
- mockRenderer,
115
- mockAnimSystem,
116
- );
117
- expect(() =>
118
- controller.ComputeEncompassingView(new Box3()),
119
- ).not.toThrow();
120
- });
121
-
122
- it('should zoom in with default value', () => {
123
- const controller = new DIVEOrbitControls(
124
- mockCamera,
125
- mockRenderer,
126
- mockAnimSystem,
127
- );
128
- expect(() => controller.ZoomIn()).not.toThrow();
129
- });
130
-
131
- it('should zoom in with custom value', () => {
132
- const controller = new DIVEOrbitControls(
133
- mockCamera,
134
- mockRenderer,
135
- mockAnimSystem,
136
- );
137
- expect(() => controller.ZoomIn(10)).not.toThrow();
138
- });
139
-
140
- it('should zoom out with default value', () => {
141
- const controller = new DIVEOrbitControls(
142
- mockCamera,
143
- mockRenderer,
144
- mockAnimSystem,
145
- );
146
- expect(() => controller.ZoomOut()).not.toThrow();
147
- });
148
-
149
- it('should zoom out with custom value', () => {
150
- const controller = new DIVEOrbitControls(
151
- mockCamera,
152
- mockRenderer,
153
- mockAnimSystem,
154
- );
155
- expect(() => controller.ZoomOut(10)).not.toThrow();
156
- });
157
-
158
- it('should move to', () => {
159
- const controller = new DIVEOrbitControls(
160
- mockCamera,
161
- mockRenderer,
162
- mockAnimSystem,
163
- );
164
- expect(() =>
165
- controller.MoveTo(moveToPos, moveToQuat, moveToDuration, false),
166
- ).not.toThrow();
167
- });
168
-
169
- it('should revert move to', () => {
170
- const controller = new DIVEOrbitControls(
171
- mockCamera,
172
- mockRenderer,
173
- mockAnimSystem,
174
- );
175
- controller.MoveTo(moveToPos, moveToQuat, moveToDuration, true);
176
- expect(() => controller.RevertLast(moveToDuration)).not.toThrow();
177
- });
178
-
179
- it('should revert move to without values', () => {
180
- const controller = new DIVEOrbitControls(
181
- mockCamera,
182
- mockRenderer,
183
- mockAnimSystem,
184
- );
185
- expect(() =>
186
- controller.MoveTo(undefined, undefined, moveToDuration, true),
187
- ).not.toThrow();
188
- });
189
-
190
- it('should revert move to with lock', async () => {
191
- const controller = new DIVEOrbitControls(
192
- mockCamera,
193
- mockRenderer,
194
- mockAnimSystem,
195
- );
196
- controller.MoveTo(moveToPos, moveToQuat, moveToDuration, true);
197
- expect(() => controller.RevertLast(moveToDuration)).not.toThrow();
198
- });
199
-
200
- it('should move after revert with lock', async () => {
201
- const controller = new DIVEOrbitControls(
202
- mockCamera,
203
- mockRenderer,
204
- mockAnimSystem,
205
- );
206
- controller.MoveTo(moveToPos, moveToQuat, moveToDuration, true);
207
- controller.RevertLast(moveToDuration);
208
- expect(() =>
209
- controller.MoveTo(moveToPos, moveToQuat, moveToDuration, true),
210
- ).not.toThrow();
211
- });
212
-
213
- it('should catch multiple move tos', () => {
214
- const controller = new DIVEOrbitControls(
215
- mockCamera,
216
- mockRenderer,
217
- mockAnimSystem,
218
- );
219
- controller.MoveTo(moveToPos, moveToQuat, moveToDuration, true);
220
- controller.RevertLast(moveToDuration);
221
- expect(() =>
222
- controller.MoveTo(moveToPos, moveToQuat, moveToDuration, true),
223
- ).not.toThrow();
224
- controller['animating'] = true;
225
- expect(() =>
226
- controller.MoveTo(moveToPos, moveToQuat, moveToDuration, true),
227
- ).not.toThrow();
228
- expect(() =>
229
- controller.MoveTo(moveToPos, moveToQuat, moveToDuration, true),
230
- ).not.toThrow();
231
- });
232
-
233
- it('should catch multiple reverts', () => {
234
- const controller = new DIVEOrbitControls(
235
- mockCamera,
236
- mockRenderer,
237
- mockAnimSystem,
238
- );
239
- controller.MoveTo(moveToPos, moveToQuat, moveToDuration, true);
240
- expect(() => controller.RevertLast(moveToDuration)).not.toThrow();
241
- expect(() => controller.RevertLast(moveToDuration)).not.toThrow();
242
- expect(() => controller.RevertLast(moveToDuration)).not.toThrow();
243
- });
244
-
245
- it('should execute preRenderCallback', () => {
246
- const controller = new DIVEOrbitControls(
247
- mockCamera,
248
- mockRenderer,
249
- mockAnimSystem,
250
- );
251
- controller.MoveTo(moveToPos, moveToQuat, moveToDuration, true);
252
- expect(() => controller['preRenderCallback']()).not.toThrow();
253
- controller['locked'] = true;
254
- expect(() => controller['preRenderCallback']()).not.toThrow();
255
- });
256
- });
@@ -1,117 +0,0 @@
1
- import { Loader } from '../loader/Loader';
2
- import { Exporter } from '../exporter/Exporter';
3
- import {
4
- type FileType,
5
- SUPPORTED_FILE_TYPES,
6
- type ExportOptions,
7
- } from '../types';
8
-
9
- export class ConversionError extends Error {
10
- constructor(
11
- message: string,
12
- public readonly cause?: unknown,
13
- ) {
14
- super(message);
15
- this.name = 'ConversionError';
16
- }
17
- }
18
-
19
- export class FileTypeError extends ConversionError {
20
- constructor(extension: string) {
21
- super(
22
- `Unsupported file type: ${extension}. Supported types are: ${SUPPORTED_FILE_TYPES.join(', ')}`,
23
- );
24
- this.name = 'FileTypeError';
25
- }
26
- }
27
-
28
- export class NetworkError extends ConversionError {
29
- constructor(uri: string, cause?: unknown) {
30
- super(`Failed to fetch file from ${uri}`, cause);
31
- this.name = 'NetworkError';
32
- }
33
- }
34
-
35
- export class Converter {
36
- private _loader: Loader;
37
- private _exporter: Exporter;
38
-
39
- constructor(private readonly _uri: string) {
40
- this._loader = new Loader();
41
- this._exporter = new Exporter();
42
- }
43
-
44
- public static convert(uri: string): Converter {
45
- return new Converter(uri);
46
- }
47
-
48
- public async to<T extends FileType>(
49
- type: T,
50
- options?: ExportOptions<T>,
51
- ): Promise<ArrayBuffer> {
52
- try {
53
- const sourceType = this._getFileTypeFromUri();
54
-
55
- // If source and target types match, just return the file content
56
- if (sourceType === type) {
57
- return await this._loadFile();
58
- }
59
-
60
- // Otherwise, convert through Object3D
61
- const object3D = await this._loader.load(this._uri);
62
- return await this._exporter.export(object3D, type, options);
63
- } catch (error) {
64
- if (error instanceof ConversionError) {
65
- throw error;
66
- }
67
- throw new ConversionError('Failed to convert file', error);
68
- }
69
- }
70
-
71
- private _getFileTypeFromUri(): FileType {
72
- const extension = this._uri.split('.').pop()?.toLowerCase();
73
- if (!extension) {
74
- throw new FileTypeError('no extension');
75
- }
76
- if (!SUPPORTED_FILE_TYPES.includes(extension as FileType)) {
77
- throw new FileTypeError(extension);
78
- }
79
- return extension as FileType;
80
- }
81
-
82
- private async _loadFile(): Promise<ArrayBuffer> {
83
- try {
84
- const response = await fetch(this._uri);
85
- if (!response.ok) {
86
- throw new NetworkError(
87
- this._uri,
88
- `HTTP error! status: ${response.status}`,
89
- );
90
- }
91
- return response.arrayBuffer();
92
- } catch (error) {
93
- if (error instanceof NetworkError) {
94
- throw error;
95
- }
96
- throw new NetworkError(this._uri, error);
97
- }
98
- }
99
- }
100
-
101
- // Example usage:
102
- // Converter.convert('https://example.com/model.glb').to('usdz', {
103
- // usdz: {
104
- // ar: {
105
- // anchoring: { type: 'plane' },
106
- // planeAnchoring: { alignment: 'horizontal' }
107
- // }
108
- // }
109
- // });
110
- //
111
- // Converter.convert('https://example.com/model.usdz').to('gltf', {
112
- // gltf: {
113
- // onlyVisible: true,
114
- // maxTextureSize: 2048,
115
- // includeCustomExtensions: true
116
- // }
117
- // });