This commit is contained in:
gpt-engineer-app[bot]
2026-02-28 00:49:38 +00:00
parent fcc6856f4d
commit 89fbd4636f
3 changed files with 167 additions and 16 deletions
+18 -14
View File
@@ -11,6 +11,7 @@ import { Button } from '@/components/ui/button';
import { generateMarkerDownloadURL } from '@/lib/trackingMarker';
import { XRHud } from '@/components/XRHud';
import { findNearestVertex } from '@/components/three/SmartMeasure';
import { XRHitTestPlacement } from '@/components/three/XRHitTestPlacement';
// --- Diagnóstico XR ---
console.log('[XR] Inicializando store...');
@@ -307,23 +308,15 @@ function XRGrid() {
);
}
// ─── ImageTrackingAnchor ───────────────────────────────
function ImageTrackingAnchor({ children }: { children: React.ReactNode }) {
const groupRef = useRef<THREE.Group>(null);
useFrame(() => {
if (!groupRef.current) return;
groupRef.current.position.set(0, 0, -1.5);
groupRef.current.quaternion.identity();
});
return <group ref={groupRef}>{children}</group>;
}
// ImageTrackingAnchor removed — replaced by XRHitTestPlacement
// ─── XRSession Page ────────────────────────────────────
const XRSession = () => {
const navigate = useNavigate();
const { model, anchorMode, setAnchorMode } = useModelStore();
const [inXR, setInXR] = useState(false);
const [freeMove, setFreeMove] = useState(true); // default ON for easier positioning
const [freeMove, setFreeMove] = useState(true);
const [placementMode, setPlacementMode] = useState(true); // start in placement mode
useEffect(() => {
if (!model) navigate('/');
@@ -415,9 +408,15 @@ const XRSession = () => {
<XROrigin />
<ImageTrackingAnchor>
<XRHitTestPlacement
placementMode={placementMode}
onPlace={() => {
setPlacementMode(false);
toast.success('Modelo posicionado na superfície!');
}}
>
<XRModel url={model.url} />
</ImageTrackingAnchor>
</XRHitTestPlacement>
<XRMeasurementOverlay />
<XRSnapHandler />
@@ -427,7 +426,12 @@ const XRSession = () => {
</Canvas>
{/* Floating HUD overlay with all controls */}
<XRHud freeMove={freeMove} onToggleFreeMove={() => setFreeMove(!freeMove)} />
<XRHud
freeMove={freeMove}
onToggleFreeMove={() => setFreeMove(!freeMove)}
placementMode={placementMode}
onTogglePlacement={() => setPlacementMode(!placementMode)}
/>
</div>
</div>
);