diff --git a/src/components/three/XRControllerMeasure.tsx b/src/components/three/XRControllerMeasure.tsx index 56969fd..0adad8d 100644 --- a/src/components/three/XRControllerMeasure.tsx +++ b/src/components/three/XRControllerMeasure.tsx @@ -174,14 +174,24 @@ export function XRControllerMeasure() { if (session && right && !hitTestRequestedRef.current && isAligning) { hitTestRequestedRef.current = true; - session.requestHitTestSource({ space: right.targetRaySpace }) - .then((source) => { - hitTestSourceRef.current = source; - }) - .catch((err) => { - console.error('[XR] Failed to request controller hit test source:', err); + const spaceToUse = right.targetRaySpace ?? right.gripSpace; + if (spaceToUse) { + try { + session.requestHitTestSource({ space: spaceToUse }) + .then((source) => { + hitTestSourceRef.current = source; + }) + .catch((err) => { + console.error('[XR] Failed to request controller hit test source:', err); + hitTestRequestedRef.current = false; + }); + } catch (err) { + console.error('[XR] Synchronous error requesting controller hit test source:', err); hitTestRequestedRef.current = false; - }); + } + } else { + hitTestRequestedRef.current = false; + } } let realHitPoint: THREE.Vector3 | null = null;