🚀 Auto-deploy: melhoria no snap e medição AR em 31/05/2026 01:24:49
This commit is contained in:
+3
-3
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<!-- TODO: Set the document title to the name of your application -->
|
<!-- TODO: Set the document title to the name of your application -->
|
||||||
<title>TrackSteelXR</title>
|
<title>SteelXR</title>
|
||||||
<meta name="description" content="VR tool inspection industrial Q.C.">
|
<meta name="description" content="VR tool inspection industrial Q.C.">
|
||||||
<meta name="author" content="Lovable" />
|
<meta name="author" content="Lovable" />
|
||||||
<link rel="icon" type="image/png" href="/iconeXR_transparente.png" />
|
<link rel="icon" type="image/png" href="/iconeXR_transparente.png" />
|
||||||
@@ -19,8 +19,8 @@
|
|||||||
<meta name="twitter:card" content="summary_large_image" />
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
<meta name="twitter:site" content="@Lovable" />
|
<meta name="twitter:site" content="@Lovable" />
|
||||||
<meta name="twitter:image" content="https://storage.googleapis.com/gpt-engineer-file-uploads/attachments/og-images/a850c4e4-56e7-4358-91d7-b33ddcd600ac?Expires=1772161962&GoogleAccessId=go-api-on-aws%40gpt-engineer-390607.iam.gserviceaccount.com&Signature=Q%2B%2F2EsHIygjuVQKvjQWWytqElhVjmehhRIdWJ1eYRremdUzoUIv36NuXp042g0lBzszDBa14EbkCTYykUEMpqrclTioA2035aKEY%2BR39jqYm7oBKXCm2rs2vopnW2ahZYf8SjX5SPqxwFzaO%2FvJt71rMU0A6PzihBNRa96ezpIhxGqzpbZe9zP4PtyRhg03aCp5sJytJp9bBOphzXb9YGeY58XWWqjAqEO1tctOGh25hZsYLgEU61wy3xnehDc8kZ%2FK0MpRpxuGibae5ypjDtGbXf9G5LjSWYecVY5pWOjnO6ZSo1CL8DaWtD%2FU3V0MszZ8f4SETk7fQAh0GR4b8Sg%3D%3D">
|
<meta name="twitter:image" content="https://storage.googleapis.com/gpt-engineer-file-uploads/attachments/og-images/a850c4e4-56e7-4358-91d7-b33ddcd600ac?Expires=1772161962&GoogleAccessId=go-api-on-aws%40gpt-engineer-390607.iam.gserviceaccount.com&Signature=Q%2B%2F2EsHIygjuVQKvjQWWytqElhVjmehhRIdWJ1eYRremdUzoUIv36NuXp042g0lBzszDBa14EbkCTYykUEMpqrclTioA2035aKEY%2BR39jqYm7oBKXCm2rs2vopnW2ahZYf8SjX5SPqxwFzaO%2FvJt71rMU0A6PzihBNRa96ezpIhxGqzpbZe9zP4PtyRhg03aCp5sJytJp9bBOphzXb9YGeY58XWWqjAqEO1tctOGh25hZsYLgEU61wy3xnehDc8kZ%2FK0MpRpxuGibae5ypjDtGbXf9G5LjSWYecVY5pWOjnO6ZSo1CL8DaWtD%2FU3V0MszZ8f4SETk7fQAh0GR4b8Sg%3D%3D">
|
||||||
<meta property="og:title" content="TrackSteelXR">
|
<meta property="og:title" content="SteelXR">
|
||||||
<meta name="twitter:title" content="TrackSteelXR">
|
<meta name="twitter:title" content="SteelXR">
|
||||||
<meta property="og:description" content="VR tool inspection industrial Q.C.">
|
<meta property="og:description" content="VR tool inspection industrial Q.C.">
|
||||||
<meta name="twitter:description" content="VR tool inspection industrial Q.C.">
|
<meta name="twitter:description" content="VR tool inspection industrial Q.C.">
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import { addRecentFile } from '@/lib/recentFiles';
|
|||||||
const DEFAULT_URL = 'https://store.tracksteel.com.br/demo.ifc';
|
const DEFAULT_URL = 'https://store.tracksteel.com.br/demo.ifc';
|
||||||
|
|
||||||
const PRESETS: { label: string; url: string }[] = [
|
const PRESETS: { label: string; url: string }[] = [
|
||||||
{ label: 'Demo IFC (TrackSteel)', url: DEFAULT_URL },
|
{ label: 'Demo IFC (SteelXR)', url: DEFAULT_URL },
|
||||||
];
|
];
|
||||||
|
|
||||||
/** Normaliza URLs de Dropbox / OneDrive para apontar ao binário direto. */
|
/** Normaliza URLs de Dropbox / OneDrive para apontar ao binário direto. */
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ export function LandingContent() {
|
|||||||
<section className="px-4 text-center space-y-6">
|
<section className="px-4 text-center space-y-6">
|
||||||
<div className="rounded-2xl border border-border bg-gradient-to-b from-card to-muted/20 p-8 md:p-12">
|
<div className="rounded-2xl border border-border bg-gradient-to-b from-card to-muted/20 p-8 md:p-12">
|
||||||
<p className="text-muted-foreground max-w-2xl mx-auto text-base md:text-lg leading-relaxed">
|
<p className="text-muted-foreground max-w-2xl mx-auto text-base md:text-lg leading-relaxed">
|
||||||
Atrasos por erros de medição, retrabalho por falhas de comunicação e perdas por não conformidade são o pesadelo de qualquer gestão de produção metalmecânica ou obra civil. O TrackSteelXR coloca o modelo 3D IFC no canteiro — em AR — para que engenheiros e gestores tomem decisões precisas no momento certo. <span className="font-semibold text-foreground">Menos retrabalho, mais produtividade, entregas dentro do prazo.</span>
|
Atrasos por erros de medição, retrabalho por falhas de comunicação e perdas por não conformidade são o pesadelo de qualquer gestão de produção metalmecânica ou obra civil. O SteelXR coloca o modelo 3D IFC no canteiro — em AR — para que engenheiros e gestores tomem decisões precisas no momento certo. <span className="font-semibold text-foreground">Menos retrabalho, mais produtividade, entregas dentro do prazo.</span>
|
||||||
</p>
|
</p>
|
||||||
<div className="mt-8 flex justify-center gap-4">
|
<div className="mt-8 flex justify-center gap-4">
|
||||||
<Button size="lg" className="gap-2">
|
<Button size="lg" className="gap-2">
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ export function ShareButton({ variant = 'default', autoOpen, onHandleChange, onV
|
|||||||
if (navigator.share) {
|
if (navigator.share) {
|
||||||
try {
|
try {
|
||||||
await navigator.share({
|
await navigator.share({
|
||||||
title: 'TrackSteelXR — Sessão ao vivo',
|
title: 'SteelXR — Sessão ao vivo',
|
||||||
text: 'Acompanhe a inspeção ao vivo:',
|
text: 'Acompanhe a inspeção ao vivo:',
|
||||||
url: link,
|
url: link,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -245,7 +245,7 @@ function FloatingPanel({
|
|||||||
<XR3DPanel size={[W, H]}>
|
<XR3DPanel size={[W, H]}>
|
||||||
<Text position={[-W / 2 + 0.012, H / 2 - 0.018, 0.002]} fontSize={0.011} color="#3b82f6"
|
<Text position={[-W / 2 + 0.012, H / 2 - 0.018, 0.002]} fontSize={0.011} color="#3b82f6"
|
||||||
anchorX="left" anchorY="middle">
|
anchorX="left" anchorY="middle">
|
||||||
TrackSteelXR · HUD AR
|
SteelXR · HUD AR
|
||||||
</Text>
|
</Text>
|
||||||
{/* Pin / Drag / Recenter — anchored to top-right, kept inside the panel.
|
{/* Pin / Drag / Recenter — anchored to top-right, kept inside the panel.
|
||||||
Group origin is at the right edge with margin; buttons extend leftward. */}
|
Group origin is at the right edge with margin; buttons extend leftward. */}
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ export function startRecording() {
|
|||||||
const url = URL.createObjectURL(blob);
|
const url = URL.createObjectURL(blob);
|
||||||
const a = document.createElement('a');
|
const a = document.createElement('a');
|
||||||
a.href = url;
|
a.href = url;
|
||||||
a.download = `tracksteel-AR-${new Date().toISOString().replace(/[:.]/g, '-')}.${ext}`;
|
a.download = `steelxr-AR-${new Date().toISOString().replace(/[:.]/g, '-')}.${ext}`;
|
||||||
document.body.appendChild(a);
|
document.body.appendChild(a);
|
||||||
a.click();
|
a.click();
|
||||||
document.body.removeChild(a);
|
document.body.removeChild(a);
|
||||||
@@ -123,7 +123,7 @@ export function captureScreenshot(): string | null {
|
|||||||
// Trigger download
|
// Trigger download
|
||||||
const a = document.createElement('a');
|
const a = document.createElement('a');
|
||||||
a.href = dataUrl;
|
a.href = dataUrl;
|
||||||
a.download = `tracksteel-AR-${new Date().toISOString().replace(/[:.]/g, '-')}.png`;
|
a.download = `steelxr-AR-${new Date().toISOString().replace(/[:.]/g, '-')}.png`;
|
||||||
document.body.appendChild(a);
|
document.body.appendChild(a);
|
||||||
a.click();
|
a.click();
|
||||||
document.body.removeChild(a);
|
document.body.removeChild(a);
|
||||||
|
|||||||
+1
-1
@@ -348,7 +348,7 @@ const Index = () => {
|
|||||||
|
|
||||||
{/* Footer */}
|
{/* Footer */}
|
||||||
<p className="mt-16 text-center font-mono text-xs text-muted-foreground/50">
|
<p className="mt-16 text-center font-mono text-xs text-muted-foreground/50">
|
||||||
TrackSteelXR v1.10 — Q.C. Inspection
|
SteelXR v1.10 — Q.C. Inspection
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{showLogs && (
|
{showLogs && (
|
||||||
|
|||||||
@@ -1387,7 +1387,7 @@ export default function MeetingRoom() {
|
|||||||
<Button variant="ghost" size="icon" onClick={() => navigate('/')} className="text-muted-foreground hover:text-foreground">
|
<Button variant="ghost" size="icon" onClick={() => navigate('/')} className="text-muted-foreground hover:text-foreground">
|
||||||
<Home className="h-5 w-5" />
|
<Home className="h-5 w-5" />
|
||||||
</Button>
|
</Button>
|
||||||
<span className="font-mono text-xs uppercase tracking-widest text-muted-foreground">TrackSteelXR</span>
|
<span className="font-mono text-xs uppercase tracking-widest text-muted-foreground">SteelXR</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full max-w-4xl rounded-2xl border border-border bg-card/65 p-6 md:p-10 shadow-2xl backdrop-blur-md animate-in fade-in zoom-in-95 duration-200">
|
<div className="w-full max-w-4xl rounded-2xl border border-border bg-card/65 p-6 md:p-10 shadow-2xl backdrop-blur-md animate-in fade-in zoom-in-95 duration-200">
|
||||||
|
|||||||
@@ -282,7 +282,7 @@ const Viewer = () => {
|
|||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<Box className="h-5 w-5 text-primary" />
|
<Box className="h-5 w-5 text-primary" />
|
||||||
<h1 className="font-mono text-sm font-semibold text-foreground">
|
<h1 className="font-mono text-sm font-semibold text-foreground">
|
||||||
TrackSteel<span className="text-primary">XR</span>
|
Steel<span className="text-primary">XR</span>
|
||||||
</h1>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+2
-2
@@ -78,7 +78,7 @@ export default function Watch() {
|
|||||||
<div className="min-h-screen bg-background flex flex-col">
|
<div className="min-h-screen bg-background flex flex-col">
|
||||||
<header className="border-b bg-card/50 backdrop-blur px-4 py-3 flex items-center justify-between">
|
<header className="border-b bg-card/50 backdrop-blur px-4 py-3 flex items-center justify-between">
|
||||||
<Link to="/" className="font-mono text-sm font-bold text-foreground">
|
<Link to="/" className="font-mono text-sm font-bold text-foreground">
|
||||||
TrackSteel<span className="text-primary">XR</span>
|
Steel<span className="text-primary">XR</span>
|
||||||
</Link>
|
</Link>
|
||||||
<div className="flex items-center gap-3">
|
<div className="flex items-center gap-3">
|
||||||
<span className="font-mono text-[10px] text-muted-foreground">SALA</span>
|
<span className="font-mono text-[10px] text-muted-foreground">SALA</span>
|
||||||
@@ -159,7 +159,7 @@ export default function Watch() {
|
|||||||
<footer className="border-t bg-card/50 backdrop-blur px-4 py-2 flex items-center justify-center gap-2">
|
<footer className="border-t bg-card/50 backdrop-blur px-4 py-2 flex items-center justify-center gap-2">
|
||||||
<Eye className="h-3 w-3 text-muted-foreground" />
|
<Eye className="h-3 w-3 text-muted-foreground" />
|
||||||
<span className="font-mono text-[10px] text-muted-foreground">
|
<span className="font-mono text-[10px] text-muted-foreground">
|
||||||
Modo somente visualização · TrackSteelXR
|
Modo somente visualização · SteelXR
|
||||||
</span>
|
</span>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1074,7 +1074,7 @@ const XRSession = () => {
|
|||||||
const url = await generateMarkerDownloadURL();
|
const url = await generateMarkerDownloadURL();
|
||||||
const a = document.createElement('a');
|
const a = document.createElement('a');
|
||||||
a.href = url;
|
a.href = url;
|
||||||
a.download = 'TrackSteelXR_Marker.png';
|
a.download = 'SteelXR_Marker.png';
|
||||||
a.click();
|
a.click();
|
||||||
URL.revokeObjectURL(url);
|
URL.revokeObjectURL(url);
|
||||||
toast.success('Marcador baixado — Imprima em 15×15cm');
|
toast.success('Marcador baixado — Imprima em 15×15cm');
|
||||||
|
|||||||
Reference in New Issue
Block a user