cube-parameters
Version:
A sophisticated 3D model viewer built with React, TypeScript, and Three.js, featuring advanced visualization tools, measurement capabilities, and lighting controls.
36 lines (29 loc) • 1.03 kB
text/typescript
import { useState, useRef, useCallback } from 'react';
import * as THREE from 'three';
import { MaterialManager } from '../utils/materialManager';
export const useMouseInteractionState = () => {
const [hoveredObject, setHoveredObject] = useState<THREE.Object3D | null>(null);
const materialManagerRef = useRef<MaterialManager | null>(null);
const initializeMaterialManager = useCallback(() => {
if (!materialManagerRef.current) {
materialManagerRef.current = new MaterialManager();
}
return materialManagerRef.current;
}, []);
const cleanupMaterialManager = useCallback(() => {
if (materialManagerRef.current) {
materialManagerRef.current.dispose();
materialManagerRef.current = null;
}
}, []);
const setHoveredObjectSafe = useCallback((object: THREE.Object3D | null) => {
setHoveredObject(object);
}, []);
return {
hoveredObject,
setHoveredObject: setHoveredObjectSafe,
materialManagerRef,
initializeMaterialManager,
cleanupMaterialManager
};
};