cube-parameters
Version:
A sophisticated 3D model viewer built with React, TypeScript, and Three.js, featuring advanced visualization tools, measurement capabilities, and lighting controls.
33 lines (27 loc) • 955 B
text/typescript
import { useRef } from 'react';
import * as THREE from 'three';
import { createPointSelectionEffect } from '../utils/outlineEffects';
export const usePointSelection = () => {
const pointOutlineMapRef = useRef<Map<THREE.Object3D, THREE.Mesh>>(new Map());
const applyPointSelection = (object: THREE.Object3D, selected: boolean) => {
const outlineMap = pointOutlineMapRef.current;
if (selected) {
if (!outlineMap.has(object)) {
const pointOutline = createPointSelectionEffect(object);
if (pointOutline) {
outlineMap.set(object, pointOutline);
object.parent?.add(pointOutline);
}
}
} else {
const outline = outlineMap.get(object);
if (outline) {
outline.parent?.remove(outline);
outline.geometry.dispose();
(outline.material as THREE.Material).dispose();
outlineMap.delete(object);
}
}
};
return { applyPointSelection };
};