diff --git a/packages/handle/src/computations/utils.ts b/packages/handle/src/computations/utils.ts index 2855812..a926293 100644 --- a/packages/handle/src/computations/utils.ts +++ b/packages/handle/src/computations/utils.ts @@ -396,8 +396,9 @@ function projectOntoPlane( ): void { normalHelper.crossVectors(_axis1, _axis2).normalize() planeHelper.setFromNormalAndCoplanarPoint(normalHelper, initialWorldPoint) + const angleDifference = worldDirection == null ? 0 : Math.abs(normalHelper.dot(worldDirection)) - if (worldDirection == null) { + if (worldDirection == null || angleDifference < 0.01) { //project point onto plane planeHelper.projectPoint(worldPoint, worldPoint) return @@ -426,7 +427,8 @@ export function projectOntoAxis( worldPoint: Vector3, worldDirection: Vector3 | undefined, ): void { - if (worldDirection == null) { + const angleDifference = worldDirection == null ? 0 : 1 - Math.abs(axis.dot(worldDirection)) + if (worldDirection == null || angleDifference < 0.001) { projectPointOntoAxis(worldPoint, initialWorldPoint, axis) return } diff --git a/packages/react/handle/src/handles/pivot.tsx b/packages/react/handle/src/handles/pivot.tsx index 5a6348c..2326c31 100644 --- a/packages/react/handle/src/handles/pivot.tsx +++ b/packages/react/handle/src/handles/pivot.tsx @@ -45,7 +45,7 @@ export const PivotHandlesContext = forwardRef new HandlesContextImpl(internalRef, () => optionsRef.current), []) - useFrame((state) => context.update(state.clock.getElapsedTime())) + useFrame((state) => context.update(state.clock.getElapsedTime()), -1) return ( {children} diff --git a/packages/react/handle/src/handles/transform.tsx b/packages/react/handle/src/handles/transform.tsx index 1ff2041..2021ca6 100644 --- a/packages/react/handle/src/handles/transform.tsx +++ b/packages/react/handle/src/handles/transform.tsx @@ -75,7 +75,7 @@ export const TransformHandlesContext = forwardRef context.update(state.clock.getElapsedTime())) + useFrame((state) => context.update(state.clock.getElapsedTime()), -1) return ( {children} diff --git a/packages/react/handle/src/hook.ts b/packages/react/handle/src/hook.ts index 340a0fe..411c3a4 100644 --- a/packages/react/handle/src/hook.ts +++ b/packages/react/handle/src/hook.ts @@ -28,7 +28,7 @@ export function useHandle( () => new HandleStore(target, () => ({ ...getHandleOptionsRef.current?.(), ...optionsRef.current })), [target], ) - useFrame((state) => store.update(state.clock.getElapsedTime())) + useFrame((state) => store.update(state.clock.getElapsedTime()), -1) const handleRef = options.handle ?? target useEffect(() => { if (options.bind === false) {