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.

38 lines (30 loc) 1.18 kB
import { useCallback } from 'react'; import * as THREE from 'three'; import { getIntersectionPoint } from '../utils/raycastUtils'; import { createPointMarker } from '../utils/objectCreators'; export const usePointTool = ( renderer: THREE.WebGLRenderer | null, camera: THREE.PerspectiveCamera | null, scene: THREE.Scene | null, onPointCreate?: (point: { x: number; y: number; z: number }) => void, onObjectSelect?: (object: THREE.Object3D | null) => void ) => { const handleClick = useCallback((event: MouseEvent) => { if (!renderer || !camera || !scene || event.button !== 0) return; const intersectionPoint = getIntersectionPoint(event.clientX, event.clientY, renderer, camera, scene); if (intersectionPoint) { const pointMarker = createPointMarker(intersectionPoint, scene); if (onPointCreate) { onPointCreate({ x: intersectionPoint.x, y: intersectionPoint.y, z: intersectionPoint.z }); } if (onObjectSelect) { onObjectSelect(pointMarker); } } }, [renderer, camera, scene, onPointCreate, onObjectSelect]); return { handleClick }; };