@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,340 +0,0 @@
1
- import {
2
- Matrix4,
3
- Mesh,
4
- Object3D,
5
- Quaternion,
6
- Vector3,
7
- WebXRArrayCamera,
8
- } from 'three';
9
- import { DIVERenderer } from '../../../renderer/Renderer';
10
- import { DIVEScene } from '../../../scene/Scene';
11
- import { DIVEWebXRCrosshair } from '../crosshair/WebXRCrosshair';
12
- import { DIVEWebXRRaycaster } from '../raycaster/WebXRRaycaster';
13
- import { DIVEWebXROrigin } from '../origin/WebXROrigin';
14
- import {
15
- DIVETouchscreenEvents,
16
- DIVEWebXRTouchscreenControls,
17
- } from '../touchscreencontrols/WebXRTouchscreenControls';
18
- import { type DIVEMovable } from '../.././../interface/Movable';
19
- import { findInterface } from '../../../helper/findInterface/findInterface';
20
-
21
- export class DIVEWebXRController extends Object3D {
22
- // general members
23
- private _renderer: DIVERenderer;
24
- private _scene: DIVEScene;
25
- private _session: XRSession;
26
-
27
- private _frameBuffer: XRFrame | null = null;
28
-
29
- // raycaster members
30
- private _xrRaycaster: DIVEWebXRRaycaster;
31
- private _origin: DIVEWebXROrigin;
32
-
33
- // crosshair
34
- private _crosshair: DIVEWebXRCrosshair;
35
-
36
- // controller members
37
- private _touchscreenControls: DIVEWebXRTouchscreenControls;
38
- private _handNodeInitialPosition = new Vector3();
39
- private _xrCamera: WebXRArrayCamera;
40
- private _placed: boolean = false;
41
-
42
- // grabbing
43
- private _grabbedObject: Object3D | null = null;
44
- private _arHitPosition: Vector3 = new Vector3();
45
- private _arHitQuaternion: Quaternion = new Quaternion();
46
- private _arHitScale: Vector3 = new Vector3(1, 1, 1);
47
-
48
- // grabbing position
49
- private _initialObjectPosition: Vector3 | null = null;
50
- private _initialRaycastHit: Vector3 | null = null;
51
- private _deltaRaycastHit: Vector3 = new Vector3();
52
-
53
- // grabbing rotation
54
- private _touchQuaterion: Quaternion = new Quaternion();
55
-
56
- // grabbing scale
57
- private _touchScale: number = 1;
58
- private _scaleThreshold: number = 0.1;
59
-
60
- constructor(session: XRSession, renderer: DIVERenderer, scene: DIVEScene) {
61
- super();
62
-
63
- this._renderer = renderer;
64
- this._scene = scene;
65
- this._session = session;
66
-
67
- this._xrRaycaster = new DIVEWebXRRaycaster(session, renderer, scene);
68
- this._origin = new DIVEWebXROrigin(this._session, this._renderer, [
69
- 'plane',
70
- ]);
71
-
72
- this._crosshair = new DIVEWebXRCrosshair();
73
- this._crosshair.visible = false;
74
-
75
- this._xrCamera = this._renderer.xr.getCamera();
76
-
77
- this._scene.XRRoot.XRHandNode.position.set(0, -0.05, -0.25);
78
- this._handNodeInitialPosition =
79
- this._scene.XRRoot.XRHandNode.position.clone();
80
-
81
- this._touchscreenControls = new DIVEWebXRTouchscreenControls(
82
- this._session,
83
- );
84
-
85
- // translating
86
- this._touchscreenControls.Subscribe('TOUCH_START', () =>
87
- this.onTouchStart(),
88
- );
89
- this._touchscreenControls.Subscribe('TOUCH_MOVE', () =>
90
- this.onTouchMove(),
91
- );
92
- this._touchscreenControls.Subscribe('TOUCH_END', (p) =>
93
- this.onTouchEnd(p),
94
- );
95
-
96
- // rotating
97
- this._touchscreenControls.Subscribe('ROTATE_START', () =>
98
- this.onRotateStart(),
99
- );
100
- this._touchscreenControls.Subscribe('ROTATE_MOVE', (p) =>
101
- this.onRotateMove(p),
102
- );
103
-
104
- // scaling
105
- this._touchscreenControls.Subscribe('PINCH_START', () =>
106
- this.onPinchStart(),
107
- );
108
- this._touchscreenControls.Subscribe('PINCH_MOVE', (p) =>
109
- this.onPinchMove(p),
110
- );
111
- }
112
-
113
- public async Init(): Promise<this> {
114
- this.prepareScene();
115
-
116
- await this.initOrigin();
117
- await this.initRaycaster();
118
-
119
- return Promise.resolve(this);
120
- }
121
-
122
- public Dispose(): void {
123
- this.restoreScene();
124
-
125
- this._origin.Dispose();
126
- this._xrRaycaster.Dispose();
127
-
128
- // reset placement members
129
- this._placed = false;
130
- }
131
-
132
- public Update(frame: XRFrame): void {
133
- this._frameBuffer = frame;
134
-
135
- if (!this._placed) {
136
- this.updateHandNode();
137
-
138
- if (this._origin) {
139
- this._origin.Update(frame);
140
- }
141
- }
142
- }
143
-
144
- private updateHandNode(): void {
145
- this._xrCamera.updateMatrixWorld();
146
- this._scene.XRRoot.XRHandNode.position.copy(
147
- this._handNodeInitialPosition
148
- .clone()
149
- .applyMatrix4(this._xrCamera.matrixWorld),
150
- );
151
- this._scene.XRRoot.XRHandNode.quaternion.setFromRotationMatrix(
152
- this._xrCamera.matrixWorld,
153
- );
154
- }
155
-
156
- // placement
157
- private async initOrigin(): Promise<void> {
158
- // initialize origin
159
- this._origin = await this._origin.Init();
160
-
161
- // set resolve callback: place objects at origin when it is set
162
- this._origin.originSet.then(() => {
163
- this.placeObjects(this._origin.matrix);
164
- });
165
- }
166
-
167
- private placeObjects(matrix: Matrix4): void {
168
- this._scene.XRRoot.XRModelRoot.matrix.copy(matrix);
169
-
170
- // we are copying children to a new array to keep the original array intact
171
- [...this._scene.XRRoot.XRHandNode.children].forEach((child) => {
172
- this._scene.XRRoot.XRModelRoot.add(child);
173
- });
174
- this._placed = true;
175
- }
176
-
177
- // grabbing
178
- private updateObject(): void {
179
- if (!this._grabbedObject) return;
180
-
181
- this._grabbedObject.position.copy(this._arHitPosition);
182
- this._grabbedObject.quaternion.copy(
183
- this._arHitQuaternion.clone().multiply(this._touchQuaterion),
184
- );
185
- this._grabbedObject.scale.copy(
186
- new Vector3(
187
- this._touchScale,
188
- this._touchScale,
189
- this._touchScale,
190
- ).multiply(this._arHitScale),
191
- );
192
- }
193
-
194
- private onTouchStart(): void {
195
- const sceneHits = this._xrRaycaster.GetSceneIntersections();
196
- console.log('sceneHits', sceneHits);
197
- if (sceneHits.length === 0) return;
198
- if (!sceneHits[0].object) return;
199
-
200
- const moveable = findInterface<DIVEMovable>(
201
- sceneHits[0].object,
202
- 'isMovable',
203
- );
204
- if (!moveable) return;
205
-
206
- this._grabbedObject = moveable;
207
- }
208
-
209
- private onTouchMove(): void {
210
- // raycast ar
211
- if (!this._frameBuffer) return;
212
- if (!this._grabbedObject) return;
213
-
214
- const intersections = this._xrRaycaster.GetARIntersections(
215
- this._frameBuffer,
216
- );
217
- if (intersections.length === 0) {
218
- this._crosshair.visible = false;
219
- return;
220
- }
221
-
222
- const hit = intersections[0];
223
-
224
- this._crosshair.visible = true;
225
- this._crosshair.matrix.copy(hit.matrix);
226
-
227
- if (!this._grabbedObject) return;
228
-
229
- // if initial values have been reset by TOUCH_END event then set them again
230
- if (!this._initialObjectPosition || !this._initialRaycastHit) {
231
- this._initialObjectPosition = this._grabbedObject.position.clone();
232
- this._initialRaycastHit = hit.point.clone();
233
- }
234
-
235
- // decompose hit matrix to apply hit matrix to object
236
- hit.matrix.decompose(
237
- this._arHitPosition,
238
- this._arHitQuaternion,
239
- this._arHitScale,
240
- );
241
-
242
- // calculate raycast hit delta
243
- this._deltaRaycastHit.copy(
244
- hit.point.clone().sub(this._initialRaycastHit),
245
- );
246
-
247
- // apply moved raycast delta to actual object position
248
- this._arHitPosition.copy(
249
- this._initialObjectPosition.clone().add(this._deltaRaycastHit),
250
- );
251
-
252
- console.log('arHitPosition', this._arHitPosition);
253
-
254
- this.updateObject();
255
- }
256
-
257
- private onTouchEnd(payload: DIVETouchscreenEvents['TOUCH_END']): void {
258
- if (payload.touchCount === 0) {
259
- this._crosshair.visible = false;
260
-
261
- // reset grab
262
- this._initialObjectPosition = null;
263
- this._initialRaycastHit = null;
264
- this._grabbedObject = null;
265
- }
266
- }
267
-
268
- private _startTouchQuaternion: Quaternion = new Quaternion();
269
- private onRotateStart(): void {
270
- this._startTouchQuaternion = this._touchQuaterion.clone();
271
- }
272
-
273
- private onRotateMove(payload: DIVETouchscreenEvents['ROTATE_MOVE']): void {
274
- this._touchQuaterion.setFromAxisAngle(
275
- new Vector3(0, -1, 0),
276
- payload.delta * 3,
277
- );
278
- this._touchQuaterion.multiply(this._startTouchQuaternion);
279
- this.updateObject();
280
- }
281
-
282
- private _startTouchScale: number = 1;
283
- private onPinchStart(): void {
284
- this._startTouchScale = this._touchScale;
285
- }
286
-
287
- private onPinchMove(payload: DIVETouchscreenEvents['PINCH_MOVE']): void {
288
- this._touchScale = this._startTouchScale * payload.current;
289
- this.updateObject();
290
- }
291
-
292
- // prepare & cleanup scene
293
- private prepareScene(): void {
294
- this._scene.XRRoot.XRModelRoot.matrixAutoUpdate = false;
295
-
296
- // initialize crosshair
297
- this._scene.add(this._crosshair);
298
-
299
- // hang current scene children to hand node
300
- const children: Object3D[] = [];
301
- this._scene.Root.children.forEach((child) => {
302
- const clone = child.clone();
303
- clone.layers.enableAll();
304
- clone.traverse((obj) => {
305
- obj.layers.enableAll();
306
- if (obj instanceof Mesh) {
307
- obj.scale.set(0.1, 0.1, 0.1);
308
- }
309
- });
310
- clone.position.set(0, 0, 0);
311
- children.push(clone);
312
- });
313
- this._scene.XRRoot.XRHandNode.add(...children);
314
- }
315
-
316
- private restoreScene(): void {
317
- this._scene.remove(this._crosshair);
318
-
319
- // clear hand node and remove attached models
320
- this._scene.XRRoot.XRHandNode.clear();
321
- this._scene.XRRoot.XRModelRoot.clear();
322
-
323
- this._scene.XRRoot.XRModelRoot.matrixAutoUpdate = true;
324
- }
325
-
326
- // raycast
327
- private async initRaycaster(): Promise<void> {
328
- // initialize raycaster
329
- await this._xrRaycaster.Init();
330
-
331
- // check if successful
332
- if (!this._xrRaycaster) {
333
- console.error(
334
- 'Raycaster not initialized successfully. Aborting WebXR...',
335
- );
336
- this.Dispose();
337
- return Promise.reject();
338
- }
339
- }
340
- }
@@ -1,35 +0,0 @@
1
- import { Mesh, MeshBasicMaterial, Object3D, RingGeometry } from 'three';
2
-
3
- export class DIVEWebXRCrosshair extends Object3D {
4
- public set mesh(mesh: Mesh | undefined) {
5
- this.clear();
6
-
7
- if (mesh) {
8
- this.add(mesh);
9
- }
10
- }
11
-
12
- constructor(mesh?: Mesh) {
13
- super();
14
-
15
- if (mesh) {
16
- this.mesh = mesh;
17
- } else {
18
- this.UseDefaultMesh();
19
- }
20
-
21
- this.matrixAutoUpdate = false;
22
-
23
- return this;
24
- }
25
-
26
- public UseDefaultMesh(): void {
27
- const geometry = new RingGeometry(0.08, 0.1, 32).rotateX(-Math.PI / 2);
28
- const material = new MeshBasicMaterial();
29
- this.mesh = new Mesh(geometry, material);
30
- }
31
-
32
- public UpdateFromPose(pose: XRPose): void {
33
- this.matrix.fromArray(pose.transform.matrix);
34
- }
35
- }
@@ -1,192 +0,0 @@
1
- import { Matrix4, Quaternion, Vector3 } from 'three';
2
- import { DIVERenderer } from '../../../renderer/Renderer';
3
-
4
- export class DIVEWebXROrigin {
5
- private _renderer: DIVERenderer;
6
- private _session: XRSession;
7
-
8
- private _requesting: boolean;
9
- private _initialized: boolean;
10
-
11
- private _referenceSpaceBuffer: XRReferenceSpace | null;
12
- private _hitTestSource: XRHitTestSource | null;
13
-
14
- private _entityTypes: XRHitTestTrackableType[];
15
-
16
- private _hitTestResultBuffer: XRHitTestResult[];
17
- private _raycastHitCounter: number = 0;
18
-
19
- private _originSet: Promise<void>;
20
- private _originSetResolve: (value: void) => void = () => {};
21
- public get originSet(): Promise<void> {
22
- return this._originSet;
23
- }
24
-
25
- private _matrix: Matrix4;
26
- public get matrix(): Matrix4 {
27
- return this._matrix;
28
- }
29
- private set matrix(value: Matrix4) {
30
- this._matrix = value;
31
- this._matrix.decompose(this._position, this._quaternion, this._scale);
32
- }
33
-
34
- private _position: Vector3;
35
- public get position(): Vector3 {
36
- return this._position;
37
- }
38
-
39
- private _quaternion: Quaternion;
40
- public get quaternion(): Quaternion {
41
- return this._quaternion;
42
- }
43
-
44
- private _scale: Vector3;
45
- public get scale(): Vector3 {
46
- return this._scale;
47
- }
48
-
49
- constructor(
50
- session: XRSession,
51
- renderer: DIVERenderer,
52
- entityTypes?: XRHitTestTrackableType[],
53
- ) {
54
- this._renderer = renderer;
55
- this._session = session;
56
-
57
- this._originSet = new Promise<void>((resolve) => {
58
- this._originSetResolve = resolve;
59
- });
60
-
61
- this._requesting = false;
62
- this._initialized = false;
63
-
64
- this._referenceSpaceBuffer = null;
65
- this._hitTestSource = null;
66
-
67
- this._entityTypes = entityTypes || ['plane'];
68
-
69
- this._hitTestResultBuffer = [];
70
-
71
- // set up promises and executors
72
- this._matrix = new Matrix4();
73
- this._position = new Vector3();
74
- this._quaternion = new Quaternion();
75
- this._scale = new Vector3();
76
-
77
- // when origin is set, decompose matrix into position, quaternion and scale
78
- this._originSet.then(() => {
79
- // decompose matrix into position, quaternion and scale
80
- this._matrix.decompose(
81
- this._position,
82
- this._quaternion,
83
- this._scale,
84
- );
85
- });
86
- }
87
-
88
- public async Init(): Promise<this> {
89
- if (this._initialized) {
90
- return Promise.resolve(this);
91
- }
92
-
93
- if (!this._session) {
94
- console.error(
95
- 'DIVEWebXROrigin: No session set in Init()! Aborting initialization...',
96
- );
97
- return Promise.reject();
98
- }
99
-
100
- if (this._requesting) {
101
- console.error(
102
- 'DIVEWebXROrigin: Currently initializing! Aborting initialization...',
103
- );
104
- return Promise.reject();
105
- }
106
-
107
- this._requesting = true;
108
- const referenceSpace =
109
- await this._session.requestReferenceSpace('viewer');
110
- this._hitTestSource =
111
- (await this._session.requestHitTestSource!({
112
- space: referenceSpace,
113
- entityTypes: this._entityTypes,
114
- })) || null;
115
- this._requesting = false;
116
-
117
- if (!this._hitTestSource) {
118
- return Promise.reject();
119
- }
120
-
121
- this._initialized = true;
122
-
123
- return Promise.resolve(this);
124
- }
125
-
126
- public Dispose(): void {
127
- this._initialized = false;
128
- this._requesting = false;
129
-
130
- this._hitTestSource?.cancel();
131
-
132
- this._hitTestSource = null;
133
- this._hitTestResultBuffer = [];
134
-
135
- this._matrix = new Matrix4();
136
- this._position = new Vector3();
137
- this._quaternion = new Quaternion();
138
- this._scale = new Vector3();
139
- }
140
-
141
- public Update(frame: XRFrame): void {
142
- if (!this._initialized) return;
143
-
144
- if (!this._hitTestSource) {
145
- throw new Error(
146
- 'DIVEWebXRRaycaster: Critical Error: HitTestSource not available but WebXROrigin is initialized!',
147
- );
148
- }
149
-
150
- // get hit test results
151
- this._hitTestResultBuffer = frame.getHitTestResults(
152
- this._hitTestSource,
153
- );
154
- if (this._hitTestResultBuffer.length > 0) {
155
- // hit found
156
- this._referenceSpaceBuffer = this._renderer.xr.getReferenceSpace();
157
-
158
- // if there is no reference space, hit will be counted as lost for this frame
159
- if (!this._referenceSpaceBuffer) {
160
- this.onHitLost();
161
- return;
162
- }
163
-
164
- const pose = this._hitTestResultBuffer[0].getPose(
165
- this._referenceSpaceBuffer,
166
- );
167
- if (!pose) {
168
- this.onHitLost();
169
- return;
170
- }
171
-
172
- this.onHitFound(pose);
173
- } else {
174
- this.onHitLost();
175
- }
176
- }
177
-
178
- private onHitFound(pose: XRPose): void {
179
- this._raycastHitCounter++;
180
-
181
- this.matrix.fromArray(pose.transform.matrix);
182
-
183
- // we have to wait for a certain amount of frames to make sure the origin is set
184
- if (this._raycastHitCounter > 50) {
185
- this._originSetResolve();
186
- }
187
- }
188
-
189
- private onHitLost(): void {
190
- this._raycastHitCounter = 0;
191
- }
192
- }
@@ -1,50 +0,0 @@
1
- export class Overlay {
2
- private _element: HTMLDivElement;
3
- public get Element(): HTMLDivElement {
4
- return this._element;
5
- }
6
-
7
- private _closeButton: SVGSVGElement;
8
- public get CloseButton(): SVGSVGElement {
9
- return this._closeButton;
10
- }
11
-
12
- constructor() {
13
- // create div
14
- this._element = document.createElement('div');
15
-
16
- // create and append close button to overlay
17
- this._closeButton = this.createCloseButton();
18
- this._element.appendChild(this._closeButton);
19
-
20
- // append overlay to body
21
- document.body.appendChild(this._element);
22
- }
23
-
24
- private createCloseButton(): SVGSVGElement {
25
- // create svg path
26
- const path = document.createElementNS(
27
- 'http://www.w3.org/2000/svg',
28
- 'path',
29
- );
30
- path.setAttribute('d', 'M 12,12 L 28,28 M 28,12 12,28');
31
- path.setAttribute('stroke', '#fff');
32
- path.setAttribute('stroke-width', '2');
33
-
34
- // create svg
35
- const svg = document.createElementNS(
36
- 'http://www.w3.org/2000/svg',
37
- 'svg',
38
- );
39
- svg.setAttribute('width', '38');
40
- svg.setAttribute('height', '38');
41
- svg.style.position = 'absolute';
42
- svg.style.right = '20px';
43
- svg.style.top = '20px';
44
-
45
- // append path to svg
46
- svg.appendChild(path);
47
-
48
- return svg;
49
- }
50
- }