cube-parameters
Version:
A sophisticated 3D model viewer built with React, TypeScript, and Three.js, featuring advanced visualization tools, measurement capabilities, and lighting controls.
57 lines (47 loc) • 1.88 kB
text/typescript
import { useRef, useCallback } from 'react';
import { EnhancedMaterialManager, MaterialType, MaterialParameters, MaterialState } from './utils/enhancedMaterialManager';
import * as THREE from 'three';
export const useMaterialManager = () => {
const materialManagerRef = useRef<EnhancedMaterialManager | null>(null);
const getMaterialManager = useCallback(() => {
if (!materialManagerRef.current) {
materialManagerRef.current = new EnhancedMaterialManager();
}
return materialManagerRef.current;
}, []);
const updateObjectMaterial = useCallback((
object: THREE.Object3D,
type: MaterialType,
parameters?: Partial<MaterialParameters>
) => {
const manager = getMaterialManager();
manager.setMaterialType(object, type, parameters);
}, [getMaterialManager]);
const updateMaterialParameters = useCallback((
object: THREE.Object3D,
parameters: Partial<MaterialParameters>
) => {
const manager = getMaterialManager();
manager.updateMaterialParameters(object, parameters);
}, [getMaterialManager]);
const getObjectMaterialState = useCallback((object: THREE.Object3D): MaterialState | null => {
const manager = getMaterialManager();
return manager.getObjectState(object);
}, [getMaterialManager]);
const setHoverEffect = useCallback((object: THREE.Object3D, hover: boolean) => {
const manager = getMaterialManager();
manager.setHoverEffect(object, hover);
}, [getMaterialManager]);
const setSelectionEffect = useCallback((object: THREE.Object3D, selected: boolean) => {
const manager = getMaterialManager();
manager.setSelectionEffect(object, selected);
}, [getMaterialManager]);
return {
materialManager: getMaterialManager(),
updateObjectMaterial,
updateMaterialParameters,
getObjectMaterialState,
setHoverEffect,
setSelectionEffect
};
};