diff --git a/src/components/ViewCube.tsx b/src/components/ViewCube.tsx index 0e79926..ab44476 100644 --- a/src/components/ViewCube.tsx +++ b/src/components/ViewCube.tsx @@ -162,14 +162,18 @@ export function ViewCube() { const progress = isDone ? 1 : calibration.progress; const onClickCalibrar = () => { + const store = useModelStore.getState(); if (isCalibrating) { - // Cancel mid-flow + // Cancel mid-flow — restore previous camera mode if we forced ortho. + const prev = (window as any).__tsxr_prevCamMode as 'ortho' | 'persp' | undefined; + if (prev) { store.setCameraMode(prev); (window as any).__tsxr_prevCamMode = undefined; } cancelCalibration(); toast.info('Calibração cancelada'); return; } if (isDone) { - // Reset/finish state + const prev = (window as any).__tsxr_prevCamMode as 'ortho' | 'persp' | undefined; + if (prev) { store.setCameraMode(prev); (window as any).__tsxr_prevCamMode = undefined; } cancelCalibration(); return; } @@ -181,8 +185,11 @@ export function ViewCube() { toast.error('Peça travada — destranque o cadeado para calibrar'); return; } + // Force orthographic view for accurate face picking. + (window as any).__tsxr_prevCamMode = store.cameraMode; + if (store.cameraMode !== 'ortho') store.setCameraMode('ortho'); startCalibration(active.id); - toast('Calibração iniciada — clique numa face do cubo, depois na face correspondente da peça', { duration: 4000 }); + toast('Calibração em vista ortogonal — clique numa face do cubo, depois na face correspondente da peça', { duration: 4000 }); }; const onResetCalibration = () => {