cube-parameters
Version:
A sophisticated 3D model viewer built with React, TypeScript, and Three.js, featuring advanced visualization tools, measurement capabilities, and lighting controls.
49 lines (43 loc) • 1.28 kB
text/typescript
import { useEffect } from 'react';
import type { SceneObject } from '../types/model';
interface ViewerKeyboardShortcutsProps {
onClearSelection: () => void;
onZoomAll: () => void;
onZoomToSelected: () => void;
selectedObject: SceneObject | null;
}
export const useViewerKeyboardShortcuts = ({
onClearSelection,
onZoomAll,
onZoomToSelected,
selectedObject
}: ViewerKeyboardShortcutsProps) => {
useEffect(() => {
const handleKeyDown = (event: KeyboardEvent) => {
// Prevent shortcuts when typing in inputs
if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) {
return;
}
switch (event.key.toLowerCase()) {
case 'escape':
onClearSelection();
event.preventDefault();
break;
case 'a':
onZoomAll();
event.preventDefault();
break;
case 'f':
if (selectedObject) {
onZoomToSelected();
event.preventDefault();
}
break;
}
};
window.addEventListener('keydown', handleKeyDown);
return () => {
window.removeEventListener('keydown', handleKeyDown);
};
}, [onClearSelection, onZoomAll, onZoomToSelected, selectedObject]);
};