Files
SteelXR2/.lovable/plan.md
T
gpt-engineer-app[bot] 7d4fd06bb0 Save plan in Lovable
2026-02-27 02:55:47 +00:00

3.5 KiB

Plano: Ferramentas de Medicao Inteligentes (Smart Snap + Auto-Detect)

3 Funcionalidades

1. Vertex Snap (snap magnetico)

  • No MeasureClickHandler, ao mover o mouse, fazer raycast continuo (onPointerMove)
  • Para cada hit, buscar o vertice mais proximo do ponto de intersecao na geometria do mesh
  • Se a distancia ao vertice mais proximo for menor que um threshold (ex: 5px em screen space), "snapar" para esse vertice
  • Renderizar um marcador visual (anel/circulo amarelo) no vertice snappado via MeasurementOverlay
  • Ao clicar, usar o ponto snappado em vez do ponto bruto do raycast
  • Novo state no store: snapPoint: MeasurePoint | null e setSnapPoint

2. Auto-detect diametro de furos (hover)

  • Ao fazer hover sobre uma face, analisar a geometria local:
    • Coletar as edges do EdgesGeometry que formam um loop fechado (circulo/oblongo) proximo ao ponto de hover
    • Alternativa mais robusta: analisar os vertices ao redor do ponto de intersecao, detectar se formam um arco/circulo usando fitting de circulo (least-squares circle fit nos vertices vizinhos)
    • Abordagem pratica: usar as normais das faces -- furos em chapas tem faces com normais apontando para o centro do furo. Agrupar faces cilindricas coplanares e calcular o raio
  • Apos 1 segundo de hover estavel (debounce), mostrar tooltip HTML com o diametro em mm (1 casa decimal)
  • Novo state: hoverInfo: { type: 'hole' | 'edge', position: [x,y,z], value: number } | null

3. Auto-detect comprimento de aresta (hover)

  • Ao hover proximo de uma edge line, identificar o segmento de aresta mais proximo
  • Calcular o comprimento desse segmento em mm
  • Apos 1 segundo de hover estavel, mostrar tooltip com o comprimento

Arquivos a modificar

src/stores/useModelStore.ts

  • Adicionar snapPoint, setSnapPoint, hoverInfo, setHoverInfo

src/components/three/ModelViewer.tsx

  • Novo componente SmartSnapHandler: useFrame com raycast no mouse, busca vertice mais proximo, atualiza snapPoint
  • Novo componente HoverDetector: onPointerMove com debounce de 1s, analisa geometria para detectar furos (faces cilindricas) e arestas, atualiza hoverInfo
  • Atualizar MeasurementOverlay para renderizar o snap marker (anel amarelo) e o tooltip de hover
  • Atualizar MeasureClickHandler para usar snapPoint quando disponivel

src/components/three/SmartMeasure.tsx (novo)

  • Logica de deteccao de furos: analise de curvatura local dos vertices
  • Logica de deteccao de arestas: segmentos de EdgesGeometry mais proximos ao cursor
  • Funcoes utilitarias: findNearestVertex, detectHoleRadius, findNearestEdge

Detalhes tecnicos

Vertex Snap:
  raycast hit → mesh.geometry.attributes.position
  → iterar vertices, transformar para world space (mesh.matrixWorld)
  → projetar para screen space (camera.project)
  → encontrar o mais proximo em pixels (threshold ~8px)
  → mostrar anel amarelo nesse ponto

Deteccao de Furos:
  raycast hit face → pegar faceIndex
  → coletar faces vizinhas com normal similar (cilindrica)
  → extrair vertices do loop de borda dessas faces
  → circle fit (least squares) → raio → diametro em mm
  → mostrar tooltip apos 1s de hover estavel

Deteccao de Arestas:
  EdgesGeometry ja calculada → array de segmentos [v1, v2]
  → projetar todos para screen space
  → encontrar segmento mais proximo ao cursor
  → comprimento = distancia 3D * 1000 (mm)
  → mostrar tooltip apos 1s de hover estavel

Sem alteracoes em

  • Checklist, compare mode, screenshots, fine tuning, import OBJ/STL/IFC, render modes