🚀 Auto-deploy: melhoria no snap e medição AR em 02/06/2026 21:32:29
This commit is contained in:
@@ -3,6 +3,7 @@ import { supabase } from "@/integrations/supabase/client";
|
|||||||
import { ArrowLeft, Glasses, Box, Ruler, FileText, Upload, Loader2, Users, Menu, Target } from "lucide-react";
|
import { ArrowLeft, Glasses, Box, Ruler, FileText, Upload, Loader2, Users, Menu, Target } from "lucide-react";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { useModelStore } from "@/stores/useModelStore";
|
import { useModelStore } from "@/stores/useModelStore";
|
||||||
|
import { xrStore } from "@/stores/useXRStore";
|
||||||
import { ModelViewerCanvas } from "@/components/three/ModelViewer";
|
import { ModelViewerCanvas } from "@/components/three/ModelViewer";
|
||||||
import { ViewerControls } from "@/components/ViewerControls";
|
import { ViewerControls } from "@/components/ViewerControls";
|
||||||
import { InspectionChecklist } from "@/components/InspectionChecklist";
|
import { InspectionChecklist } from "@/components/InspectionChecklist";
|
||||||
@@ -274,12 +275,16 @@ const Viewer = () => {
|
|||||||
}, 15000);
|
}, 15000);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const { xrStore } = await import('@/stores/useXRStore');
|
|
||||||
// Marca que está entrando no AR antes de navegar — bloqueia auto-return prematuro
|
// Marca que está entrando no AR antes de navegar — bloqueia auto-return prematuro
|
||||||
(window as unknown as { __setXrEntering?: (v: boolean) => void }).__setXrEntering?.(true);
|
(window as unknown as { __setXrEntering?: (v: boolean) => void }).__setXrEntering?.(true);
|
||||||
await xrStore.enterAR();
|
|
||||||
|
// Chamada síncrona de enterAR para preservar o User Gesture exigido pelo WebXR
|
||||||
|
const enterPromise = xrStore.enterAR();
|
||||||
|
|
||||||
clearTimeout(timeoutId);
|
clearTimeout(timeoutId);
|
||||||
navigate("/xr");
|
navigate("/xr");
|
||||||
|
|
||||||
|
await enterPromise;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
clearTimeout(timeoutId);
|
clearTimeout(timeoutId);
|
||||||
setEnteringXR(false);
|
setEnteringXR(false);
|
||||||
|
|||||||
@@ -812,3 +812,12 @@ export const useModelStore = create<ModelStore>((set, get) => ({
|
|||||||
set({ ifcMaterialColors: enabled });
|
set({ ifcMaterialColors: enabled });
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
// Autodetecção global de suporte a WebXR
|
||||||
|
if (typeof navigator !== 'undefined' && navigator.xr) {
|
||||||
|
navigator.xr.isSessionSupported('immersive-ar')
|
||||||
|
.then((supported) => useModelStore.getState().setXrSupported(supported))
|
||||||
|
.catch(() => useModelStore.getState().setXrSupported(false));
|
||||||
|
} else {
|
||||||
|
useModelStore.getState().setXrSupported(false);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user