From 3f78b9951a8c00c70584578a80ca762d1be961d3 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Thu, 14 May 2026 10:25:15 +0000 Subject: [PATCH 1/3] Changes Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com> --- src/pages/Index.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index 3869889..479530a 100644 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -1,19 +1,18 @@ import { useEffect, useRef, useCallback, useState } from 'react'; import { useNavigate } from 'react-router-dom'; -import { Upload, Glasses, CheckCircle, XCircle, Loader2, Box, Package } from 'lucide-react'; +import { Upload, Glasses, CheckCircle, XCircle, Loader2, Box, Package, Cloud } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { useModelStore } from '@/stores/useModelStore'; import { toast } from 'sonner'; -import { generateDemoBeamGLB } from '@/lib/generateDemoBeam'; import { getSupportedExtension, convertToGLB, ACCEPTED_EXTENSIONS } from '@/lib/convertToGLB'; import { convertIFCtoGLB } from '@/lib/convertIFC'; const Index = () => { const navigate = useNavigate(); const fileInputRef = useRef(null); - const [loadingDemo, setLoadingDemo] = useState(false); const [loadingDemoIFC, setLoadingDemoIFC] = useState(false); const [loadingDemoCotovelo, setLoadingDemoCotovelo] = useState(false); + const [loadingCloud, setLoadingCloud] = useState(false); const [converting, setConverting] = useState(false); const { model, setModel, xrSupported, setXrSupported } = useModelStore(); From eb8b4f70e74992579893492fe455ba5d652fd055 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Thu, 14 May 2026 10:25:31 +0000 Subject: [PATCH 2/3] Changes Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com> --- src/pages/Index.tsx | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index 479530a..1cba512 100644 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -62,18 +62,41 @@ const Index = () => { } }, [setModel]); - const handleLoadDemo = useCallback(async () => { - setLoadingDemo(true); + const handleLoadCloud = useCallback(async () => { + const url = window.prompt('URL do modelo (GLB · OBJ · STL · IFC):', 'https://'); + if (!url) return; + setLoadingCloud(true); try { - const { blob, fileName, fileSize } = await generateDemoBeamGLB(); - const url = URL.createObjectURL(blob); - setModel({ fileName, fileSize, url }); - toast.success('Modelo demo "IPE 200 — 1000mm" carregado!'); + const fileName = url.split('/').pop()?.split('?')[0] || 'modelo-cloud'; + const ext = getSupportedExtension(fileName); + if (!ext) { + toast.error('URL deve apontar para .GLB, .OBJ, .STL ou .IFC'); + return; + } + const response = await fetch(url, { mode: 'cors' }); + if (!response.ok) throw new Error(`HTTP ${response.status}`); + const buffer = await response.arrayBuffer(); + + let blob: Blob; + let outName = fileName; + let outSize = buffer.byteLength; + if (ext === 'glb') { + blob = new Blob([buffer], { type: 'model/gltf-binary' }); + } else if (ext === 'ifc') { + const r = await convertIFCtoGLB(buffer, fileName); + blob = r.blob; outName = r.fileName; outSize = r.fileSize; + } else { + const r = await convertToGLB(buffer, ext, fileName); + blob = r.blob; outName = r.fileName; outSize = r.fileSize; + } + const blobUrl = URL.createObjectURL(blob); + setModel({ fileName: outName, fileSize: outSize, url: blobUrl }); + toast.success(`"${outName}" carregado da nuvem (RAM)`); } catch (err) { console.error(err); - toast.error('Falha ao gerar modelo demo'); + toast.error('Falha ao carregar da nuvem (verifique URL/CORS)'); } finally { - setLoadingDemo(false); + setLoadingCloud(false); } }, [setModel]); From e3ca0b1dea058f7d63582d5e9039ceb7275b3717 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Thu, 14 May 2026 10:25:42 +0000 Subject: [PATCH 3/3] Changes Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com> --- src/pages/Index.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index 1cba512..2f516db 100644 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -185,11 +185,11 @@ const Index = () => {