From 29316cdf21b8fa24bee58efd828d2715a039d7f5 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sat, 28 Feb 2026 18:49:33 +0000 Subject: [PATCH] Changes --- src/components/XRHud.tsx | 135 ++++++++++++++++++++++++--- src/components/three/ModelViewer.tsx | 4 +- src/pages/XRSession.tsx | 4 +- src/stores/useModelStore.ts | 4 +- 4 files changed, 131 insertions(+), 16 deletions(-) diff --git a/src/components/XRHud.tsx b/src/components/XRHud.tsx index ab9c945..dde68b1 100644 --- a/src/components/XRHud.tsx +++ b/src/components/XRHud.tsx @@ -2,7 +2,7 @@ import { useState } from 'react'; import { Eye, LayoutGrid, Grid3X3, Box, Ruler, Trash2, Camera, Move, RotateCw, RefreshCw, ChevronUp, ChevronDown, Grip, - ClipboardCheck, X, Crosshair, Magnet, + ClipboardCheck, X, Crosshair, Magnet, HelpCircle, } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Slider } from '@/components/ui/slider'; @@ -23,9 +23,73 @@ interface XRHudProps { onToggleSnap?: () => void; } +const helpItems = [ + { + title: 'Posicionar (Hit-Test)', + icon: '🎯', + desc: 'Aponte para uma superfície real e toque para posicionar o modelo. O retículo verde indica onde o modelo será colocado.', + }, + { + title: 'Snap (Planos)', + icon: '🧲', + desc: 'Quando ativado, o modelo se alinha automaticamente a planos detectados (chão, parede, mesa). O retículo fica azul quando snap está ativo.', + }, + { + title: 'Mover (Free Move)', + icon: '🕹️', + desc: 'Joystick esquerdo: move o modelo nos eixos X/Y. Joystick direito (vertical): move no eixo Z (profundidade). Quando desativado, é necessário segurar o grip para mover.', + }, + { + title: 'Grid', + icon: '📐', + desc: 'Exibe/oculta a grade de referência para auxiliar no alinhamento visual do modelo com o ambiente.', + }, + { + title: 'Sólido / Wire / Bordas', + icon: '🔲', + desc: 'Alterna entre modos de renderização: Sólido (preenchido), Wireframe (malha de arame), Bordas (apenas contornos).', + }, + { + title: 'Medir', + icon: '📏', + desc: 'Ative e toque em dois pontos no modelo para medir a distância entre eles em milímetros. O snap de vértice auxilia na precisão.', + }, + { + title: 'Screenshot', + icon: '📸', + desc: 'Captura uma imagem da visão AR atual. As capturas ficam salvas na galeria do viewer.', + }, + { + title: 'Inspeção', + icon: '📋', + desc: 'Abre o checklist de inspeção para aprovar ou rejeitar itens como dimensões, furos, soldas e posição das placas.', + }, + { + title: 'Opacidade', + icon: '👁️', + desc: 'Ajusta a transparência do modelo de 0% (invisível) a 100% (opaco) para visualizar através da peça.', + }, + { + title: 'Posição (mm)', + icon: '↔️', + desc: 'Ajuste fino da posição do modelo nos eixos X, Y e Z com incrementos de 1mm usando os botões +/−.', + }, + { + title: 'Rotação X° / Y° / Z°', + icon: '🔄', + desc: 'Rotaciona o modelo ao redor de cada eixo com incrementos de 0.1°. X = inclinação frontal, Y = giro lateral, Z = tombamento.', + }, + { + title: 'Controladores Quest 3', + icon: '🎮', + desc: 'Joystick Esq: mover X/Y • Joystick Dir: mover Z + rotação Y • Grip (segurar): habilita movimento quando Free Move está desativado.', + }, +]; + export function XRHud({ freeMove, onToggleFreeMove, placementMode = false, onTogglePlacement, snapToPlanes = true, onToggleSnap }: XRHudProps) { const [expanded, setExpanded] = useState(false); const [checklistOpen, setChecklistOpen] = useState(false); + const [helpOpen, setHelpOpen] = useState(false); const { opacity, setOpacity, @@ -65,7 +129,6 @@ export function XRHud({ freeMove, onToggleFreeMove, placementMode = false, onTog Inspeção
{item.desc}
+