82624995d8
Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com>
2.6 KiB
2.6 KiB
Correções no modo Medir
Problemas
- Ao ativar Medir, o OrbitControls é desabilitado (
enabled={!positionMode && !measureMode}), bloqueando rotação/zoom/pan naturais com o mouse. - O label da medida usa
useLabelDistanceFactorque recalculadistanceFactorpor frame para manter tamanho constante na tela. Resultado: ao aproximar a peça o texto não cresce e fica ilegível.
Mudanças em src/components/three/ModelViewer.tsx
1. Reabilitar controles de câmera no modo Medir
No <OrbitControls> (linha ~792), trocar:
enabled={!positionMode && !measureMode}
por:
enabled={!positionMode}
O MeasureClickHandler já tem drag gate de 4 px (pointerdown + pointerup só conta como clique se o mouse moveu menos que 4 px e foi botão esquerdo). Isso significa:
- Botão esquerdo arrastando → OrbitControls rotaciona, nenhum ponto é adicionado.
- Botão direito → pan do OrbitControls (handler ignora
e.button !== 0). - Roda → zoom do OrbitControls (handler ignora).
- Clique curto esquerdo → adiciona ponto de medida (com snap).
2. Label da medida escala com o zoom e fica ~4x maior
Substituir MeasurementLabel para usar distanceFactor fixo (em vez de calculado por frame). Com <Html distanceFactor={N}>, o tamanho na tela é proporcional a N / distance — ou seja, cresce naturalmente ao aproximar a câmera.
- Remover o uso de
useLabelDistanceFactorno label de medida (manter, se desejado, apenas nohoverInfo). - Definir
distanceFactorfixo calibrado para 1:1 mm (valor inicial ~8, ajustável). - Aumentar o tamanho base do texto de
text-[11px]paratext-[16px]epx-2 py-0.5→px-3 py-1para acompanhar a proporção (~4x área visual final somando o aumento do distanceFactor + texto).
function MeasurementLabel({ position, text, variant }: { ... }) {
const borderClass = variant === 'success' ? 'border-success/60' : 'border-primary/60';
const textClass = variant === 'success' ? 'text-success' : 'text-primary';
return (
<Html position={position} center distanceFactor={8} zIndexRange={[100, 0]} style={{ pointerEvents: 'none' }}>
<div className={`rounded bg-card/95 border ${borderClass} px-3 py-1 shadow-lg backdrop-blur-sm`}>
<span className={`font-mono text-[16px] font-bold ${textClass} whitespace-nowrap`}>
{text}
</span>
</div>
</Html>
);
}
O hoverInfo (auto-detect) pode manter o comportamento atual de tamanho constante para não poluir a cena ao passar o mouse.
Sem mudanças em outros arquivos
Store, AR, snap e PointMarker permanecem intocados.