3.5 KiB
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 | nullesetSnapPoint
2. Auto-detect diametro de furos (hover)
- Ao fazer hover sobre uma face, analisar a geometria local:
- Coletar as edges do
EdgesGeometryque 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
- Coletar as edges do
- 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, atualizasnapPoint - Novo componente
HoverDetector: onPointerMove com debounce de 1s, analisa geometria para detectar furos (faces cilindricas) e arestas, atualizahoverInfo - Atualizar
MeasurementOverlaypara renderizar o snap marker (anel amarelo) e o tooltip de hover - Atualizar
MeasureClickHandlerpara usarsnapPointquando 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