From 5926db501c43e9fff6f793e6c8e138063e097528 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期三, 24 四月 2024 16:34:40 +0800 Subject: [PATCH] # --- src/components/area.jsx | 45 ++++----------------------------------------- 1 files changed, 4 insertions(+), 41 deletions(-) diff --git a/src/components/area.jsx b/src/components/area.jsx index 5294bbc..59b08ec 100644 --- a/src/components/area.jsx +++ b/src/components/area.jsx @@ -1,69 +1,32 @@ import React, { useRef, useState } from 'react'; import { useFrame, useThree } from '@react-three/fiber'; import * as THREE from 'three'; -import { CameraControls } from '@react-three/drei'; import Text from './text'; const Y = 1; const Area = (props) => { const { x, y, width, height, textContent, textHeight, strokeColor } = props; const [hovered, setHover] = useState(false); - const [clicked, setClicked] = useState(false); const meshRef = useRef(null); - const { controls } = useThree((state) => ({ - controls: state.controls, - })); - // 杞崲涓簒杞村拰z杞寸粍鎴愮殑鍧愭爣绯讳腑鐨勪綅缃� const position = new THREE.Vector3(x + width / 2, Y, y + height / 2); const size = [width, 1, height]; textHeight ||= Y + 50; - // 鐩告満绉诲姩鍒板尯鍩熺殑浣嶇疆 - const handleClick = () => { - if (clicked) return; - setClicked(true); - // controls.fitToBox(meshRef.current!, true); - const mesh = meshRef.current; - const { x, y, z } = mesh.position; - - const box = new THREE.Box3().setFromCenterAndSize( - new THREE.Vector3(x, (y + textHeight) / 2, z), - new THREE.Vector3(width, textHeight, height) - ); - controls.fitToBox(box, true); - - // annotationRef.current?.show(); - }; - - // 鐩告満绉诲姩鍥炲師鏉ョ殑浣嶇疆 - const handleDoubleClick = () => { - setClicked(false); - }; - - // 鐩戝惉榧犳爣绉诲叆鍜岀Щ鍑轰簨浠讹紝鏀瑰彉hover鐘舵�� - const handlePointerOver = () => setHover(true); - const handlePointerOut = () => setHover(false); - - // 姣忓抚鏇存柊杈规鐨勯鑹插拰绮楃粏 useFrame(() => { const box = meshRef.current; if (box) { - const color = hovered || clicked ? strokeColor : 'white'; - const thickness = clicked ? 0.5 : 0.2; + const color = !hovered ? strokeColor : 'white'; const material = box.material; material.color.set(color); - material.linewidth = thickness; + material.linewidth = 0.2; } }); return ( <group - onClick={handleClick} - onPointerOver={handlePointerOver} - onPointerOut={handlePointerOut} - onDoubleClick={handleDoubleClick} - onPointerMissed={() => setClicked(false)} + onPointerOver={() => setHover(true)} + onPointerOut={() => setHover(false)} > <mesh ref={meshRef} position={position}> <boxGeometry attach="geometry" args={size} /> -- Gitblit v1.9.1