Adicionar demo IFC como opção

Adicionado suporte para carregar o modelo demo IFC (demo250hp.ifc) como opção de teste, incluindo fluxo de conversão para GLB, geração de URL e exibição na tela inicial. Também integrei um novo botão de demo IFC na página Index, paralelo ao demo GLB, com estado de carregamento e mensagens de sucesso/erro.

X-Lovable-Edit-ID: edt-1299c6d1-18e7-42f9-8b88-a7569f8bfd3f
This commit is contained in:
gpt-engineer-app[bot]
2026-02-28 18:51:23 +00:00
2 changed files with 349 additions and 13 deletions
+312
View File
@@ -0,0 +1,312 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition[CoordinationView_V2.0]'),'2;1');
FILE_NAME('demo250hp.ifc','2026-02-27T02:39:44',(''),(''),'IFC Toolkit 2.0.5.0','Advance Steel 2026','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
#10=IFCPROJECT('2DT5wg6WX7rezBAeonIUfk',#150,'','','','','',(#20),#70);
#20=IFCGEOMETRICREPRESENTATIONCONTEXT('','Model',3,1.E-9,#30,$);
#30=IFCAXIS2PLACEMENT3D(#60,#40,#50);
#40=IFCDIRECTION((0.,0.,1.));
#50=IFCDIRECTION((1.,0.,0.));
#60=IFCCARTESIANPOINT((0.,0.,0.));
#70=IFCUNITASSIGNMENT((#80,#90,#100,#110));
#80=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
#90=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#100=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
#110=IFCCONVERSIONBASEDUNIT(#140,.PLANEANGLEUNIT.,'DEGREE',#120);
#120=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.01745329),#130);
#130=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#140=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
#150=IFCOWNERHISTORY(#160,#190,.READWRITE.,.ADDED.,$,$,$,1772159984);
#160=IFCPERSONANDORGANIZATION(#170,#180,$);
#170=IFCPERSON($,'','',$,$,$,$,$);
#180=IFCORGANIZATION($,'',$,$,$);
#190=IFCAPPLICATION(#200,'2026','Advance Steel','Autodesk.Advance Steel');
#200=IFCORGANIZATION($,'Autodesk',$,$,$);
#210=IFCSITE('04ML2i$7D9q86fWFPRroHZ',#150,'Site',$,$,#220,$,$,.ELEMENT.,$,$,$,$,$);
#220=IFCLOCALPLACEMENT($,#30);
#230=IFCRELAGGREGATES('3tjE7iFjn3ufwIxhVOXIUw',#150,'','',#10,(#210));
#240=IFCBUILDING('3JXghxssb7OQ4KP3Ii9vYF',#150,'Estrutura 1',$,$,#250,$,$,.ELEMENT.,$,$,$);
#250=IFCLOCALPLACEMENT(#220,#30);
#260=IFCBUILDINGSTOREY('3_$nBfxC18bvJzfGsMeQH3',#150,'Default Storey',$,$,#270,$,$,.ELEMENT.,0.);
#270=IFCLOCALPLACEMENT(#250,#280);
#280=IFCAXIS2PLACEMENT3D(#310,#290,#300);
#290=IFCDIRECTION((0.,0.,1.));
#300=IFCDIRECTION((1.,0.,0.));
#310=IFCCARTESIANPOINT((0.,0.,0.));
#320=IFCRELAGGREGATES('1jLUF13CP81Bs8ZsCWtzPW',#150,'All storey from Estrutura 1','',#240,(#260));
#330=IFCRELAGGREGATES('3h2yAAIv1Aax5kPvdFdcAU',#150,'','',#210,(#240));
#340=IFCOPENINGELEMENT('2KRtNp9hD60vEN5PSzSRO3',#150,$,$,'Opening',#350,#400,$);
#350=IFCLOCALPLACEMENT(#1680,#360);
#360=IFCAXIS2PLACEMENT3D(#390,#370,#380);
#370=IFCDIRECTION((1.,0.,0.));
#380=IFCDIRECTION((0.,0.,-1.));
#390=IFCCARTESIANPOINT((-5.75,0.,-750.));
#400=IFCPRODUCTDEFINITIONSHAPE($,$,(#410));
#410=IFCSHAPEREPRESENTATION(#20,'Body','SweptSolid',(#420));
#420=IFCEXTRUDEDAREASOLID(#440,#480,#430,11.5);
#430=IFCDIRECTION((0.,0.,1.));
#440=IFCCIRCLEPROFILEDEF(.AREA.,$,#450,12.001);
#450=IFCAXIS2PLACEMENT2D(#470,#460);
#460=IFCDIRECTION((1.,0.));
#470=IFCCARTESIANPOINT((700.,0.));
#480=IFCAXIS2PLACEMENT3D(#490,$,$);
#490=IFCCARTESIANPOINT((0.,0.,0.));
#500=IFCOPENINGELEMENT('0L6jtphXrDCuRMjYMRW44K',#150,$,$,'Opening',#510,#560,$);
#510=IFCLOCALPLACEMENT(#1680,#520);
#520=IFCAXIS2PLACEMENT3D(#550,#530,#540);
#530=IFCDIRECTION((1.,0.,0.));
#540=IFCDIRECTION((0.,0.,-1.));
#550=IFCCARTESIANPOINT((-5.75,0.,-750.));
#560=IFCPRODUCTDEFINITIONSHAPE($,$,(#570));
#570=IFCSHAPEREPRESENTATION(#20,'Body','SweptSolid',(#580));
#580=IFCEXTRUDEDAREASOLID(#600,#640,#590,11.5);
#590=IFCDIRECTION((0.,0.,1.));
#600=IFCCIRCLEPROFILEDEF(.AREA.,$,#610,12.001);
#610=IFCAXIS2PLACEMENT2D(#630,#620);
#620=IFCDIRECTION((1.,0.));
#630=IFCCARTESIANPOINT((-700.,0.));
#640=IFCAXIS2PLACEMENT3D(#650,$,$);
#650=IFCCARTESIANPOINT((0.,0.,0.));
#660=IFCOPENINGELEMENT('2mnNrw6Q137eOYNadfiUOd',#150,$,$,'Opening',#670,#720,$);
#670=IFCLOCALPLACEMENT(#1680,#680);
#680=IFCAXIS2PLACEMENT3D(#710,#690,#700);
#690=IFCDIRECTION((1.,0.,0.));
#700=IFCDIRECTION((0.,0.,-1.));
#710=IFCCARTESIANPOINT((-5.75,0.,-750.));
#720=IFCPRODUCTDEFINITIONSHAPE($,$,(#730));
#730=IFCSHAPEREPRESENTATION(#20,'Body','SweptSolid',(#740));
#740=IFCEXTRUDEDAREASOLID(#760,#800,#750,11.5);
#750=IFCDIRECTION((0.,0.,1.));
#760=IFCCIRCLEPROFILEDEF(.AREA.,$,#770,12.001);
#770=IFCAXIS2PLACEMENT2D(#790,#780);
#780=IFCDIRECTION((1.,0.));
#790=IFCCARTESIANPOINT((700.,70.));
#800=IFCAXIS2PLACEMENT3D(#810,$,$);
#810=IFCCARTESIANPOINT((0.,0.,0.));
#820=IFCOPENINGELEMENT('1IALD08qr1F9QPKHVU$yup',#150,$,$,'Opening',#830,#880,$);
#830=IFCLOCALPLACEMENT(#1680,#840);
#840=IFCAXIS2PLACEMENT3D(#870,#850,#860);
#850=IFCDIRECTION((1.,0.,0.));
#860=IFCDIRECTION((0.,0.,-1.));
#870=IFCCARTESIANPOINT((-5.75,0.,-750.));
#880=IFCPRODUCTDEFINITIONSHAPE($,$,(#890));
#890=IFCSHAPEREPRESENTATION(#20,'Body','SweptSolid',(#900));
#900=IFCEXTRUDEDAREASOLID(#920,#960,#910,11.5);
#910=IFCDIRECTION((0.,0.,1.));
#920=IFCCIRCLEPROFILEDEF(.AREA.,$,#930,12.001);
#930=IFCAXIS2PLACEMENT2D(#950,#940);
#940=IFCDIRECTION((1.,0.));
#950=IFCCARTESIANPOINT((-700.,70.));
#960=IFCAXIS2PLACEMENT3D(#970,$,$);
#970=IFCCARTESIANPOINT((0.,0.,0.));
#980=IFCOPENINGELEMENT('1oC4cTdm9Cx9q6eFWND0rJ',#150,$,$,'Opening',#990,#1040,$);
#990=IFCLOCALPLACEMENT(#1680,#1000);
#1000=IFCAXIS2PLACEMENT3D(#1030,#1010,#1020);
#1010=IFCDIRECTION((1.,0.,0.));
#1020=IFCDIRECTION((0.,0.,-1.));
#1030=IFCCARTESIANPOINT((-5.75,0.,-750.));
#1040=IFCPRODUCTDEFINITIONSHAPE($,$,(#1050));
#1050=IFCSHAPEREPRESENTATION(#20,'Body','SweptSolid',(#1060));
#1060=IFCEXTRUDEDAREASOLID(#1080,#1120,#1070,11.5);
#1070=IFCDIRECTION((0.,0.,1.));
#1080=IFCCIRCLEPROFILEDEF(.AREA.,$,#1090,12.001);
#1090=IFCAXIS2PLACEMENT2D(#1110,#1100);
#1100=IFCDIRECTION((1.,0.));
#1110=IFCCARTESIANPOINT((700.,-70.));
#1120=IFCAXIS2PLACEMENT3D(#1130,$,$);
#1130=IFCCARTESIANPOINT((0.,0.,0.));
#1140=IFCOPENINGELEMENT('0uUSXjP1vF6PSyOIqMg32b',#150,$,$,'Opening',#1150,#1200,$);
#1150=IFCLOCALPLACEMENT(#1680,#1160);
#1160=IFCAXIS2PLACEMENT3D(#1190,#1170,#1180);
#1170=IFCDIRECTION((1.,0.,0.));
#1180=IFCDIRECTION((0.,0.,-1.));
#1190=IFCCARTESIANPOINT((-5.75,0.,-750.));
#1200=IFCPRODUCTDEFINITIONSHAPE($,$,(#1210));
#1210=IFCSHAPEREPRESENTATION(#20,'Body','SweptSolid',(#1220));
#1220=IFCEXTRUDEDAREASOLID(#1240,#1280,#1230,11.5);
#1230=IFCDIRECTION((0.,0.,1.));
#1240=IFCCIRCLEPROFILEDEF(.AREA.,$,#1250,12.001);
#1250=IFCAXIS2PLACEMENT2D(#1270,#1260);
#1260=IFCDIRECTION((1.,0.));
#1270=IFCCARTESIANPOINT((-700.,-70.));
#1280=IFCAXIS2PLACEMENT3D(#1290,$,$);
#1290=IFCCARTESIANPOINT((0.,0.,0.));
#1300=IFCOPENINGELEMENT('0zzsnsdkLDoAv_hGo04MeQ',#150,$,$,'Opening',#1310,#1360,$);
#1310=IFCLOCALPLACEMENT(#1680,#1320);
#1320=IFCAXIS2PLACEMENT3D(#1350,#1330,#1340);
#1330=IFCDIRECTION((0.,1.,0.));
#1340=IFCDIRECTION((0.,0.,1.));
#1350=IFCCARTESIANPOINT((-128.,123.,-1500.));
#1360=IFCPRODUCTDEFINITIONSHAPE($,$,(#1370));
#1370=IFCSHAPEREPRESENTATION(#20,'Body','SweptSolid',(#1380));
#1380=IFCEXTRUDEDAREASOLID(#1400,#1460,#1390,22.5);
#1390=IFCDIRECTION((0.,0.,-1.));
#1400=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#1410);
#1410=IFCPOLYLINE((#1420,#1430,#1440,#1450));
#1420=IFCCARTESIANPOINT((0.,0.));
#1430=IFCCARTESIANPOINT((90.,0.));
#1440=IFCCARTESIANPOINT((0.,90.));
#1450=IFCCARTESIANPOINT((0.,0.));
#1460=IFCAXIS2PLACEMENT3D(#1470,$,$);
#1470=IFCCARTESIANPOINT((0.,0.,0.));
#1480=IFCOPENINGELEMENT('1BwjEQ0BzCDBp9QGTk$uJW',#150,$,$,'Opening',#1490,#1540,$);
#1490=IFCLOCALPLACEMENT(#1680,#1500);
#1500=IFCAXIS2PLACEMENT3D(#1530,#1510,#1520);
#1510=IFCDIRECTION((-1.,0.,0.));
#1520=IFCDIRECTION((0.,0.,1.));
#1530=IFCCARTESIANPOINT((-128.,-123.,-1500.));
#1540=IFCPRODUCTDEFINITIONSHAPE($,$,(#1550));
#1550=IFCSHAPEREPRESENTATION(#20,'Body','SweptSolid',(#1560));
#1560=IFCEXTRUDEDAREASOLID(#1580,#1640,#1570,267.8);
#1570=IFCDIRECTION((0.,0.,-1.));
#1580=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#1590);
#1590=IFCPOLYLINE((#1600,#1610,#1620,#1630));
#1600=IFCCARTESIANPOINT((0.,0.));
#1610=IFCCARTESIANPOINT((8.,0.));
#1620=IFCCARTESIANPOINT((0.,8.));
#1630=IFCCARTESIANPOINT((0.,0.));
#1640=IFCAXIS2PLACEMENT3D(#1650,$,$);
#1650=IFCCARTESIANPOINT((0.,0.,0.));
#1660=IFCRELVOIDSELEMENT('3lGQD_QBT6mv6d8$JDQY2z',#150,'Hole',$,#1670,#340);
#1670=IFCBEAM('3PJxToq4r1SekdaolgZGGX',#150,'-','HP 250x62.0(H)','-',#1680,#1730,$);
#1680=IFCLOCALPLACEMENT($,#1690);
#1690=IFCAXIS2PLACEMENT3D(#1720,#1700,#1710);
#1700=IFCDIRECTION((-1.,0.,0.));
#1710=IFCDIRECTION((0.,-1.,0.));
#1720=IFCCARTESIANPOINT((0.,128.,123.));
#1730=IFCPRODUCTDEFINITIONSHAPE($,$,(#1740));
#1740=IFCSHAPEREPRESENTATION(#20,'Body','SweptSolid',(#1750));
#1750=IFCEXTRUDEDAREASOLID(#1770,#1800,#1760,1500.);
#1760=IFCDIRECTION((0.,0.,-1.));
#1770=IFCISHAPEPROFILEDEF(.AREA.,'HP 250x62.0(H)',#1780,256.,246.,10.5,10.7,11.8);
#1780=IFCAXIS2PLACEMENT2D(#1790,$);
#1790=IFCCARTESIANPOINT((0.,0.));
#1800=IFCAXIS2PLACEMENT3D(#1810,$,$);
#1810=IFCCARTESIANPOINT((0.,0.,0.));
#1820=IFCRELVOIDSELEMENT('0J_rr$kg90uuk5r5jCws2m',#150,'Hole',$,#1670,#500);
#1830=IFCRELVOIDSELEMENT('27aa_V8A5CcPbP_sDPz3Q0',#150,'Hole',$,#1670,#660);
#1840=IFCRELVOIDSELEMENT('2BKaur_bP9_xu7cQ7rMN7W',#150,'Hole',$,#1670,#820);
#1850=IFCRELVOIDSELEMENT('2nTQlS$Q114vq_OGAt5rRR',#150,'Hole',$,#1670,#980);
#1860=IFCRELVOIDSELEMENT('3aEb5jn5r3lv5EBriiO4n2',#150,'Hole',$,#1670,#1140);
#1870=IFCRELVOIDSELEMENT('3uFoVx6jH5QPad4w2_BE5a',#150,'Contour Cut',$,#1670,#1300);
#1880=IFCRELVOIDSELEMENT('1F4ppyugX3wAoUTdmp$vV7',#150,'Contour Cut',$,#1670,#1480);
#1890=IFCMATERIAL('S235JRG2');
#1900=IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('indefinido'),$);
#1910=IFCPROPERTYSINGLEVALUE('Span',$,IFCPOSITIVELENGTHMEASURE(1500.),$);
#1920=IFCPROPERTYSINGLEVALUE('Slope',$,IFCPLANEANGLEMEASURE(0.),$);
#1930=IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$);
#1940=IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.F.),$);
#1950=IFCPROPERTYSINGLEVALUE('FireRating',$,IFCLABEL(''),$);
#1960=IFCPROPERTYSET('2Y6JKJdQrDUhuD3TV2QRtU',#150,'Pset_BeamCommon','',(#1900,#1910,#1920,#1930,#1940,#1950));
#1970=IFCRELDEFINESBYPROPERTIES('0GOIcPlxj3KweDOkLNcrsQ',#150,'','',(#1670),#1960);
#1980=IFCPROPERTYSINGLEVALUE('SectionFamily',$,IFCIDENTIFIER('Gerdau W'),$);
#1990=IFCPROPERTYSINGLEVALUE('Section',$,IFCIDENTIFIER('HP 250x62.0(H)'),$);
#2000=IFCPROPERTYSET('0k_DyX67v8ExLS8ctRbryr',#150,'ProfileProperties',$,(#1980,#1990));
#2010=IFCRELDEFINESBYPROPERTIES('3Vwypx57fEQBEFg$$cwrkD',#150,'profile','',(#1670),#2000);
#2020=IFCMATERIAL('A36');
#2030=IFCMATERIALLAYER(#2020,10.,$);
#2040=IFCMATERIALLAYERSET((#2030),'A36');
#2050=IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('indefinido'),$);
#2060=IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$);
#2070=IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.F.),$);
#2080=IFCPROPERTYSINGLEVALUE('AcousticRating',$,IFCLABEL(''),$);
#2090=IFCPROPERTYSINGLEVALUE('FireRating',$,IFCLABEL(''),$);
#2100=IFCPROPERTYSINGLEVALUE('ThermalTransmittance',$,$,$);
#2110=IFCPROPERTYSET('3kACE_$Z9E68hw9_TVI6fo',#150,'Pset_PlateCommon','',(#2050,#2060,#2070,#2080,#2090,#2100));
#2120=IFCRELDEFINESBYPROPERTIES('2D9gDPlYb7XALxmQkLKXI7',#150,'','',(#2130),#2110);
#2130=IFCPLATE('3mVQ_ghi9FMBcRbN5mBddz',#150,'-','-','-',#2140,#2190,$);
#2140=IFCLOCALPLACEMENT($,#2150);
#2150=IFCAXIS2PLACEMENT3D(#2180,#2160,#2170);
#2160=IFCDIRECTION((1.,0.,0.));
#2170=IFCDIRECTION((0.,0.,1.));
#2180=IFCCARTESIANPOINT((450.,23.306371206,10.7));
#2190=IFCPRODUCTDEFINITIONSHAPE($,$,(#2200));
#2200=IFCSHAPEREPRESENTATION(#20,'Body','SweptSolid',(#2210));
#2210=IFCEXTRUDEDAREASOLID(#2230,#2320,#2220,10.);
#2220=IFCDIRECTION((0.,0.,1.));
#2230=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'-',#2240);
#2240=IFCPOLYLINE((#2250,#2260,#2270,#2280,#2290,#2300,#2310));
#2250=IFCCARTESIANPOINT((-0.,-78.670122858));
#2260=IFCCARTESIANPOINT((22.076282872,-99.443628794));
#2270=IFCCARTESIANPOINT((201.420006326,-99.443628794));
#2280=IFCCARTESIANPOINT((224.6,-79.954531181));
#2290=IFCCARTESIANPOINT((224.6,-41.101125565));
#2300=IFCCARTESIANPOINT((0.,0.));
#2310=IFCCARTESIANPOINT((-0.,-78.670122858));
#2320=IFCAXIS2PLACEMENT3D(#2350,#2330,#2340);
#2330=IFCDIRECTION((0.,0.,1.));
#2340=IFCDIRECTION((1.,0.,0.));
#2350=IFCCARTESIANPOINT((0.,0.,0.));
#2360=IFCOPENINGELEMENT('2qD784PGbCnhw2ws2G1gJ$',#150,$,$,'Opening',#2370,#2420,$);
#2370=IFCLOCALPLACEMENT(#2700,#2380);
#2380=IFCAXIS2PLACEMENT3D(#2410,#2390,#2400);
#2390=IFCDIRECTION((0.,0.,1.));
#2400=IFCDIRECTION((1.,0.,0.));
#2410=IFCCARTESIANPOINT((0.,0.,-0.5));
#2420=IFCPRODUCTDEFINITIONSHAPE($,$,(#2430));
#2430=IFCSHAPEREPRESENTATION(#20,'Body','SweptSolid',(#2440));
#2440=IFCEXTRUDEDAREASOLID(#2460,#2500,#2450,11.);
#2450=IFCDIRECTION((0.,0.,1.));
#2460=IFCCIRCLEPROFILEDEF(.AREA.,$,#2470,10.501);
#2470=IFCAXIS2PLACEMENT2D(#2490,#2480);
#2480=IFCDIRECTION((1.,0.));
#2490=IFCCARTESIANPOINT((80.,0.));
#2500=IFCAXIS2PLACEMENT3D(#2510,$,$);
#2510=IFCCARTESIANPOINT((0.,0.,0.));
#2520=IFCOPENINGELEMENT('1jQrugihbF5gMeybq_lbVZ',#150,$,$,'Opening',#2530,#2580,$);
#2530=IFCLOCALPLACEMENT(#2700,#2540);
#2540=IFCAXIS2PLACEMENT3D(#2570,#2550,#2560);
#2550=IFCDIRECTION((0.,0.,1.));
#2560=IFCDIRECTION((1.,0.,0.));
#2570=IFCCARTESIANPOINT((0.,0.,-0.5));
#2580=IFCPRODUCTDEFINITIONSHAPE($,$,(#2590));
#2590=IFCSHAPEREPRESENTATION(#20,'Body','SweptSolid',(#2600));
#2600=IFCEXTRUDEDAREASOLID(#2620,#2660,#2610,11.);
#2610=IFCDIRECTION((0.,0.,1.));
#2620=IFCCIRCLEPROFILEDEF(.AREA.,$,#2630,10.501);
#2630=IFCAXIS2PLACEMENT2D(#2650,#2640);
#2640=IFCDIRECTION((1.,0.));
#2650=IFCCARTESIANPOINT((-80.,0.));
#2660=IFCAXIS2PLACEMENT3D(#2670,$,$);
#2670=IFCCARTESIANPOINT((0.,0.,0.));
#2680=IFCRELVOIDSELEMENT('3OPreECob0cQEbtC$C9q30',#150,'Hole',$,#2690,#2360);
#2690=IFCPLATE('0T8TYiRAbEMAkIkZg7JMKV',#150,'-','-','-',#2700,#2750,$);
#2700=IFCLOCALPLACEMENT($,#2710);
#2710=IFCAXIS2PLACEMENT3D(#2740,#2720,#2730);
#2720=IFCDIRECTION((0.,-1.,0.));
#2730=IFCDIRECTION((1.,0.,0.));
#2740=IFCCARTESIANPOINT((1025.,133.,296.));
#2750=IFCPRODUCTDEFINITIONSHAPE($,$,(#2760));
#2760=IFCSHAPEREPRESENTATION(#20,'Body','SweptSolid',(#2770));
#2770=IFCEXTRUDEDAREASOLID(#2790,#2860,#2780,10.);
#2780=IFCDIRECTION((0.,0.,1.));
#2790=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'-',#2800);
#2800=IFCPOLYLINE((#2810,#2820,#2830,#2840,#2850));
#2810=IFCCARTESIANPOINT((-125.,-50.));
#2820=IFCCARTESIANPOINT((125.,-50.));
#2830=IFCCARTESIANPOINT((125.,50.));
#2840=IFCCARTESIANPOINT((-125.,50.));
#2850=IFCCARTESIANPOINT((-125.,-50.));
#2860=IFCAXIS2PLACEMENT3D(#2890,#2870,#2880);
#2870=IFCDIRECTION((0.,0.,1.));
#2880=IFCDIRECTION((1.,0.,0.));
#2890=IFCCARTESIANPOINT((0.,0.,0.));
#2900=IFCRELVOIDSELEMENT('0I78lw9VHB8Qrjc7kP36PU',#150,'Hole',$,#2690,#2520);
#2910=IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('indefinido'),$);
#2920=IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$);
#2930=IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.F.),$);
#2940=IFCPROPERTYSINGLEVALUE('AcousticRating',$,IFCLABEL(''),$);
#2950=IFCPROPERTYSINGLEVALUE('FireRating',$,IFCLABEL(''),$);
#2960=IFCPROPERTYSINGLEVALUE('ThermalTransmittance',$,$,$);
#2970=IFCPROPERTYSET('1lR3xiy8zCaea48iKJp0u6',#150,'Pset_PlateCommon','',(#2910,#2920,#2930,#2940,#2950,#2960));
#2980=IFCRELDEFINESBYPROPERTIES('2ZXBXq7hr4SQ4Ndu34pcFH',#150,'','',(#2690),#2970);
#2990=IFCRELCONTAINEDINSPATIALSTRUCTURE('2GGJR_03T5FhYQWkBu4oKJ',#150,'Default Storey','',(#1670,#2130,#2690),#260);
#3000=IFCRELASSOCIATESMATERIAL('28bKFNuA13JRzPLBEsqlvD',#150,$,$,(#1670),#1890);
#3010=IFCRELASSOCIATESMATERIAL('0bDmZ13x58EPtwZJJEiSDd',#150,$,$,(#2130,#2690),#2040);
#3020=IFCPRESENTATIONLAYERASSIGNMENT('0',$,(#1740,#2200,#2760),$);
ENDSEC;
END-ISO-10303-21;
+33 -9
View File
@@ -12,6 +12,7 @@ const Index = () => {
const navigate = useNavigate(); const navigate = useNavigate();
const fileInputRef = useRef<HTMLInputElement>(null); const fileInputRef = useRef<HTMLInputElement>(null);
const [loadingDemo, setLoadingDemo] = useState(false); const [loadingDemo, setLoadingDemo] = useState(false);
const [loadingDemoIFC, setLoadingDemoIFC] = useState(false);
const [converting, setConverting] = useState(false); const [converting, setConverting] = useState(false);
const { model, setModel, xrSupported, setXrSupported } = useModelStore(); const { model, setModel, xrSupported, setXrSupported } = useModelStore();
@@ -76,6 +77,23 @@ const Index = () => {
} }
}, [setModel]); }, [setModel]);
const handleLoadDemoIFC = useCallback(async () => {
setLoadingDemoIFC(true);
try {
const response = await fetch('/models/demo250hp.ifc');
const buffer = await response.arrayBuffer();
const result = await convertIFCtoGLB(buffer, 'demo250hp.ifc');
const url = URL.createObjectURL(result.blob);
setModel({ fileName: result.fileName, fileSize: result.fileSize, url });
toast.success('Modelo demo "250 HP" (IFC) carregado!');
} catch (err) {
console.error(err);
toast.error('Falha ao converter modelo demo IFC');
} finally {
setLoadingDemoIFC(false);
}
}, [setModel]);
const handleEnterViewer = () => { const handleEnterViewer = () => {
if (!model) { if (!model) {
toast.error('Importe um modelo GLB primeiro'); toast.error('Importe um modelo GLB primeiro');
@@ -123,21 +141,27 @@ const Index = () => {
</div> </div>
</Button> </Button>
{/* Demo button */} {/* Demo buttons */}
<div className="grid grid-cols-2 gap-2">
<Button <Button
variant="outline" variant="outline"
className="h-12 w-full gap-3 border-muted-foreground/30 text-muted-foreground hover:border-primary hover:text-primary transition-all" className="h-12 w-full gap-2 border-muted-foreground/30 text-muted-foreground hover:border-primary hover:text-primary transition-all text-xs"
onClick={handleLoadDemo} onClick={handleLoadDemo}
disabled={loadingDemo}> disabled={loadingDemo}>
{loadingDemo ? <Loader2 className="h-4 w-4 animate-spin" /> : <Package className="h-4 w-4" />}
{loadingDemo ? {loadingDemo ? 'Gerando…' : 'Demo — Viga IPE 200'}
<Loader2 className="h-4 w-4 animate-spin" /> :
<Package className="h-4 w-4" />
}
{loadingDemo ? 'Gerando modelo…' : 'Carregar Demo — Viga IPE 200'}
</Button> </Button>
<Button
variant="outline"
className="h-12 w-full gap-2 border-muted-foreground/30 text-muted-foreground hover:border-primary hover:text-primary transition-all text-xs"
onClick={handleLoadDemoIFC}
disabled={loadingDemoIFC}>
{loadingDemoIFC ? <Loader2 className="h-4 w-4 animate-spin" /> : <Package className="h-4 w-4" />}
{loadingDemoIFC ? 'Convertendo…' : 'Demo — 250 HP (IFC)'}
</Button>
</div>
{model && {model &&
<div className="rounded-lg border border-primary/30 bg-primary/5 p-4 glow-primary"> <div className="rounded-lg border border-primary/30 bg-primary/5 p-4 glow-primary">