UNPKG

cube-parameters

Version:

A sophisticated 3D model viewer built with React, TypeScript, and Three.js, featuring advanced visualization tools, measurement capabilities, and lighting controls.

74 lines (62 loc) 2.13 kB
import { useRef, useCallback } from 'react'; import { ResourceManager } from './utils/ResourceManager'; import { useThreePerformance } from './useThreePerformance'; import { useSceneSetup } from './scene/useSceneSetup'; import { useCameraSetup } from './scene/useCameraSetup'; import { useRendererSetup } from './scene/useRendererSetup'; import { useControlsSetup } from './scene/useControlsSetup'; import { useSceneResize } from './scene/useSceneResize'; import { useAnimationLoop } from './scene/useAnimationLoop'; export const useThreeScene = (mountRef: React.RefObject<HTMLDivElement>) => { const resourceManagerRef = useRef<ResourceManager>(ResourceManager.getInstance()); // Set up scene components const { sceneRef, ucsHelperRef, gridHelperRef, workplaneRef, updateAdaptiveGrid } = useSceneSetup(); const { perspectiveCameraRef, orthographicCameraRef, activeCameraRef, isOrthographic, switchCamera: baseSwitchCamera } = useCameraSetup(mountRef); const { rendererRef, labelRendererRef } = useRendererSetup(mountRef); const { controlsRef } = useControlsSetup( perspectiveCameraRef.current, rendererRef.current ); // Enhanced switch camera with controls reference const switchCamera = useCallback((orthographic: boolean) => { baseSwitchCamera(orthographic, controlsRef); }, [baseSwitchCamera, controlsRef]); // Set up resize handling useSceneResize( mountRef, perspectiveCameraRef.current, orthographicCameraRef.current, rendererRef.current, labelRendererRef.current ); // Set up animation loop useAnimationLoop( sceneRef.current, activeCameraRef.current, rendererRef.current, labelRendererRef.current, controlsRef.current ); // Performance monitoring const { metrics } = useThreePerformance(rendererRef.current); return { sceneRef, cameraRef: activeCameraRef, perspectiveCameraRef, rendererRef, labelRendererRef, controlsRef, gridHelperRef, workplaneRef, performanceMetrics: metrics, isOrthographic, switchCamera, updateAdaptiveGrid }; };