From 355b375f47788185c4ca94d20f8bdacf21a017c3 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 30 Dec 2024 13:12:02 +0100 Subject: [PATCH] BeamWall : - reinserito script per convertire superfici TriMesh in Pezzi come da BTL. --- BeamWall.ini | 13 +++-- Compile.bat | 3 +- Images/SolidProcess.png | Bin 0 -> 1441 bytes SolidProcess.lua | 118 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 127 insertions(+), 7 deletions(-) create mode 100644 Images/SolidProcess.png create mode 100644 SolidProcess.lua diff --git a/BeamWall.ini b/BeamWall.ini index f7c4f91..814d06a 100644 --- a/BeamWall.ini +++ b/BeamWall.ini @@ -2,9 +2,10 @@ BtlEnable=1 BaseDir=C:\EgtData\BeamWall Button1=ClearProcess.lua,Images\ClearProcess.png,Cancella Lavorazioni Pezzo -Button2=DisableFeatures.lua,Images\DisableFeatures.png,Disabilita Lavorazioni -Button3=EnableFeatures.lua,Images\EnableFeatures.png,Abilita Lavorazioni -Button4=HideAll.lua,Images\HideAll.png,Nascondi i Pezzi non selezionati -Button5=ShowAll.lua,Images\ShowAll.png,Visualizza tutti i Pezzi -Button6=ShowSolid.lua,Images\ShowSolid.png,Visualizza/Nascondi Solido -Button7=ShowBuilding.lua,Images\ShowBuilding.png,Visualizza Struttura/Visualizza Pezzi +Button2=SolidProcess.lua,Images\SolidProcess.png,Trasforma Solidi in Pezzi +Button3=DisableFeatures.lua,Images\DisableFeatures.png,Disabilita Lavorazioni +Button4=EnableFeatures.lua,Images\EnableFeatures.png,Abilita Lavorazioni +Button5=HideAll.lua,Images\HideAll.png,Nascondi i Pezzi non selezionati +Button6=ShowAll.lua,Images\ShowAll.png,Visualizza tutti i Pezzi +Button7=ShowSolid.lua,Images\ShowSolid.png,Visualizza/Nascondi Solido +Button8=ShowBuilding.lua,Images\ShowBuilding.png,Visualizza Struttura/Visualizza Pezzi diff --git a/Compile.bat b/Compile.bat index d748953..f743e1a 100644 --- a/Compile.bat +++ b/Compile.bat @@ -1,5 +1,5 @@ -REM Compilazione degli script BeamWall Egaltech 2024.05.01 +REM Compilazione degli script BeamWall Egaltech 2024.12.30 REM Per togliere info di debug aggiungere flag -s prima del nome del file di input REM Compilazione 32 e 64 bit @@ -13,3 +13,4 @@ erase bin\*.lua \EgtProg\Dll32\luac54 -o bin\ShowAll.lua ShowAll.lua \EgtProg\Dll32\luac54 -o bin\ShowBuilding.lua ShowBuilding.lua \EgtProg\Dll32\luac54 -o bin\ShowSolid.lua ShowSolid.lua +\EgtProg\Dll32\luac54 -o bin\SolidProcess.lua SolidProcess.lua \ No newline at end of file diff --git a/Images/SolidProcess.png b/Images/SolidProcess.png new file mode 100644 index 0000000000000000000000000000000000000000..ac11e6e8473cf5afb3f70a731183566ed58f7965 GIT binary patch literal 1441 zcmZ8hdpy%?82@doF^ggDl!TC64J&-eX)pUe9^&*%N)&2%H;wj&e~003;qJ7YaS*4To` zHt>8zR}}&YLiWJf1GR(7e}j&2q#eNy0P3%bZG^x;U-Y!I9~l6|q_+S83UA7TLHSrm z-&jvlL~MLWOgP{c5_Kw8kLc*7YNBVTXY{RIs0FNP3HQZE;PEz|=K3APiO-7#SNt zN`7?Rng}cT(TN7?ErWu6q2DV#%*{ac^Om83!B$qENBW|$E_e*Sgc}}f=jDrA@(Ca* zIm%lleMrO*XUs6pY3sHDC6oTmP`mSK93eSKo~`{QIDJiY1F|Y1qAq~IxbPBH)J&zC zW0Qt0o}Y_~X)NaCcMQBkMw-@gJWr5XtyX;*+*+HV_>FXw@j+fTdBCk@*bf4(k{42~+ z5tO^Dhc-6T{&1nwt5x!HPVriN`n$Y6!R99{)IvwGY9S3m1Gg!qNkb(cSC6wSEHIV4 z5nZQ>NCU%}P)=iGJYQBfUj7m5LE}PupR3DaaJ%I}749vML}^%FnKthdbb5^;ohOl! zZ&qMaG51EMtXbwntsp0_S#eq?0VX!vBi@TUz|@q8!r?y5U1qf~>vo!0CkAL>=BZ6e zbJPg`Hoq0)04?6O2%R0}Pv|fHsF9rPk?3h(z|$#v*87La%e|5BwKr!d&KG3wXWlj~ zxWOPE82>VRaBi5Pr)j3V3zA*e5~UK43ZyT-#WWz&Ef=8F z-0>X>#UmOl5AHmHjqQJbMp*^w-fuVk5pxI?`0$zEJ&U$ne*5S2s(t$GYf#f_2R-#i zWe0U9V&?M9Ss64b$>NUJ@MA4P^z>hytarKBpOI$A@0>`o`F+U67?4)g}IX-f!$P z>~Krx+hbNyB%b1KyLb6J_!FL~r9-`oOilKUu<-8c0lq7$GkLh#{|G+&sS0~p1y_m) zbPCQNqp9R9X7Q-|l=R8uDbqx~hLsFo!c=Kt>yG_>mjVhp&o~_NFqW{6R<`=4dFt$< z?&QR7ODC6_i)@|KMKd%Rt^?^+AjBvptfIOyb7C^4W2umaHslqr=$^8P6&xpx`?ubW zlk3F&!`CQNy3A}M(#po0UwTJKiW9uz@08yyvL%lcS5g*aUnwUc?&QDVV@N?|f~@Jm z&g$+w*xfi49!XU+rQuqEjYir!6@5R#F<~T#<;6K2E;Z;-*Of9idNyNZ-=f|>CAm|C zvH>0Mp>mWYmR!UT=Z21DoHQ%9XBp+xKOnM`X0nAAHUgftrv6qJCWJKT+EnbiMJX`B TAbosow*DEsBN1C`ADs3th%8!n literal 0 HcmV?d00001 diff --git a/SolidProcess.lua b/SolidProcess.lua new file mode 100644 index 0000000..04b21ae --- /dev/null +++ b/SolidProcess.lua @@ -0,0 +1,118 @@ +-- 2024/12/30 +-- Parti solide gestite come travi BTL + + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + + +-- calcolo del riferimento del minimo box +local function SolidMinBox( nId, dMinFaceArea) + -- ciclo sulle facce della superficie + local nFacCnt = EgtSurfTmFacetCount( nId) + local dVolMin + local refMin + local b3Min + for i = 1, nFacCnt do + local refFace, dL, dW = EgtSurfTmFacetMinAreaRectangle( nId, i - 1, GDB_ID.ROOT) + if refFace and ( not dMinFaceArea or dL * dW > dMinFaceArea) then + local b3Box = EgtGetBBoxRef( nId, GDB_BB.STANDARD, refFace) + if b3Box then + local dVol = b3Box:getDimX() * b3Box:getDimY() * b3Box:getDimZ() + if not dVolMin or dVol < dVolMin then + dVolMin = dVol + refMin = refFace + b3Min = b3Box + end + end + end + end + return refMin, b3Min +end + +-- Trasformazione di un oggetto solido +local function ProcessOneSolid( nId1, ptPos) + + -- Calcolo il riferimento del suo box minimo + local refMin, b3Min = SolidMinBox( nId1, 100) + if not refMin then + refMin, b3Min = SolidMinBox( nId1) + end + if not refMin then + EgtOutText( 'Errore nel calcolo del box minimo della superficie (' .. tostring( nId1) .. ')') + EgtPause( 1000) + return false, 0 + end + + -- Modifico il riferimento in modo che X sia sul più lungo, quindi Z e poi Y + local dDimX = b3Min:getDimX() + local dDimY = b3Min:getDimY() + local dDimZ = b3Min:getDimZ() + if dDimX < dDimY then + refMin:rotate( refMin:getOrigin(), refMin:getVersZ(), 90) + dDimX, dDimY = dDimY, dDimX + end + if dDimX < dDimZ then + refMin:rotate( refMin:getOrigin(), refMin:getVersY(), 90) + dDimX, dDimZ = dDimZ, dDimX + end + if dDimZ < dDimY then + refMin:rotate( refMin:getOrigin(), refMin:getVersX(), 90) + dDimZ, dDimY = dDimY, dDimZ + end + + -- Porto il solido nell'origine + refMin:invert() + EgtTransform( nId1, refMin, GDB_RT.GLOB) + local b3Box = EgtGetBBoxGlob( nId1, GDB_BB.STANDARD) + local vtMove = ORIG() - b3Box:getMin() + EgtMove( nId1, vtMove, GDB_RT.GLOB) + b3Box:move( vtMove) + + -- Creo un nuovo pezzo + local PzId = EgtGroup( GDB_ID.ROOT) + local PartId = EgtGroup( PzId) + EgtSetName( PartId or GDB_ID.NULL, 'Part') + local BoxId = EgtGroup( PzId) + EgtSetName( BoxId or GDB_ID.NULL, 'Box') + local ProcId = EgtGroup( PzId) + EgtSetName( ProcId or GDB_ID.NULL, 'Proc') + + -- Sposto il solido nel pezzo + EgtRelocate( nId1, ProcId) + + -- Calcolo il box + local SboxId = EgtSurfTmBBox( BoxId, b3Box) + EgtSetColor( SboxId or GDB_ID.NULL, {206,199,113,30}) + + -- Assegno il nome + local sText = string.format( '%.0f x %.0f x %.0f', dDimX, dDimY, dDimZ) + local ptText = b3Box:getCenter() + Vector3d( 0, 0, dDimZ / 2) + local TxtId = EgtTextAdv( PartId, ptText, 0, sText, '', 100, 'S', dDimY / 4, 1, 0, GDB_TI.MC) + EgtSetColor( TxtId or GDB_ID.NULL, {0,0,0,100}) + + -- Sposto il pezzo + if ptPos then + EgtMove( PzId, ptPos - ORIG()) + end + + return true, dDimY +end + +------------------------------------------------------------------- +local ptIns = ORIG() +local bOk = true +local nId = EgtGetFirstSelectedObj() +while nId do + EgtDeselectObj( nId) + local bOneOk, dDimY = ProcessOneSolid( nId, ptIns) + EgtDraw() + bOk = bOk and bOneOk + ptIns = ptIns + Vector3d( 0, dDimY + 200, 0) + nId = EgtGetFirstSelectedObj() +end +if not bOk then + EgtOutBox( 'Una o più entità selezionate non sono superfici', 'SolidProcess', 'WARNING', 'OK') +end