diff --git a/Compile.bat b/Compile.bat index 6ffc955..d748953 100644 --- a/Compile.bat +++ b/Compile.bat @@ -1,9 +1,11 @@ -REM Compilazione degli script BeamWall Egaltech 2023.01.12 +REM Compilazione degli script BeamWall Egaltech 2024.05.01 REM Per togliere info di debug aggiungere flag -s prima del nome del file di input REM Compilazione 32 e 64 bit +erase bin\*.lua + \EgtProg\Dll32\luac54 -o bin\ClearProcess.lua ClearProcess.lua \EgtProg\Dll32\luac54 -o bin\DisableFeatures.lua DisableFeatures.lua \EgtProg\Dll32\luac54 -o bin\EnableFeatures.lua EnableFeatures.lua @@ -11,5 +13,3 @@ REM Compilazione 32 e 64 bit \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 - diff --git a/ShowSolid.lua b/ShowSolid.lua index 944a6c8..4e4ee0b 100644 --- a/ShowSolid.lua +++ b/ShowSolid.lua @@ -1,4 +1,4 @@ --- ShowSolid.lua by Egaltech s.r.l. 2020/12/12 +-- ShowSolid.lua by Egaltech s.r.l. 2024/05/01 -- Gestione calcolo solido di una Trave require( 'EgtBase') @@ -6,26 +6,59 @@ _ENV = EgtProtectGlobal() EgtEnableDebug( false) --- Recupero il pezzo del primo oggetto selezionato -local ObjId = EgtGetFirstSelectedObj() -local PartId = EgtGetParent( EgtGetParent( ObjId or GDB_ID.NULL) or GDB_ID.NULL) -if not PartId or not EgtIsPart( PartId) then - EgtOutBox( 'Nessuna trave selezionata', 'Show Solid', 'ERROR') - return -end -EgtDeselectAll() - --- Se il solido già esiste, ne aggiorno lo stato di visualizzazione -local SolidId = EgtBeamGetSolid( PartId) -if SolidId and EgtGetInfo( SolidId, 'VALID') then - EgtBeamShowSolid( PartId, ( EgtGetCalcStatus( SolidId) == GDB_ST.OFF)) +-- Se premuto Shift devo processare tutti i pezzi del progetto +if EgtGetKeyPressed( GEN_VK.SHIFT) then + local nPartTot = EgtGetPartCount() + local nPartCnt = 0 + local bShow + local PartId = EgtGetFirstPart() + while PartId do + -- recupero l'eventuale solido del pezzo + local SolidId = EgtBeamGetSolid( PartId) + -- se primo pezzo, recupero lo stato + if bShow == nil then + if SolidId and EgtGetInfo( SolidId, 'VALID') and EgtGetCalcStatus( SolidId) ~= GDB_ST.OFF then + bShow = false + else + bShow = true + end + end + -- se da visualizzazione e necessario eseguo eventuale calcolo + if bShow and ( not SolidId or not EgtGetInfo( SolidId, 'VALID')) then + EgtBeamCalcSolid( PartId, true) + end + -- aggiorno visualizzazione + EgtBeamShowSolid( PartId, bShow) + EgtDraw() + nPartCnt = nPartCnt + 1 + if EgtProcessEvents( nPartCnt / nPartTot * 100, 10) == 1 then + break + end + -- passo al pezzo successivo + PartId = EgtGetNextPart( PartId) + end +-- altrimenti solo il pezzo selezionato +else + -- Recupero il pezzo del primo oggetto selezionato + local ObjId = EgtGetFirstSelectedObj() + local PartId = EgtGetParent( EgtGetParent( ObjId or GDB_ID.NULL) or GDB_ID.NULL) + if not PartId or not EgtIsPart( PartId) then + EgtOutBox( 'Nessuna trave selezionata', 'Show Solid', 'ERROR') + return + end + EgtDeselectAll() + -- Se il solido già esiste, ne aggiorno lo stato di visualizzazione + local SolidId = EgtBeamGetSolid( PartId) + if SolidId and EgtGetInfo( SolidId, 'VALID') then + EgtBeamShowSolid( PartId, ( EgtGetCalcStatus( SolidId) == GDB_ST.OFF)) + EgtDraw() + return + end + -- Creazione e visualizzazione del solido + EgtBeamCalcSolid( PartId, true) + EgtBeamShowSolid( PartId, true) + -- Aggiorno visulaizzazione EgtDraw() - return end --- Creazione e visualizzazione del solido -EgtBeamCalcSolid( PartId, true) -EgtBeamShowSolid( PartId, true) -EgtDraw() - -- end \ No newline at end of file diff --git a/SolidProcess.lua b/SolidProcess.lua deleted file mode 100644 index f1c0347..0000000 --- a/SolidProcess.lua +++ /dev/null @@ -1,110 +0,0 @@ --- 2023/08/24 --- Parti solide gestite come travi BTL - - --- Intestazioni -require( 'EgtBase') -_ENV = EgtProtectGlobal() -EgtEnableDebug( false) - - --- calcolo del riferimento del minimo box -local function SolidMinBox( nId) - -- 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 dL * dW > 100 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) - if not refMin then - EgtOutText( 'Errore nel calcolo del box minimo della superficie') - EgtPause( 1000) - return - 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( 'Part%d %.0f x %.0f x %.0f', PzId, 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}) - EgtSetName( PzId or GDB_ID.NULL, sText) - - -- Sposto il pezzo - if ptPos then - EgtMove( PzId, ptPos - ORIG()) - end - - EgtDraw() -end - -------------------------------------------------------------------- -local ptIns = ORIG() -local nId = EgtGetFirstSelectedObj() -while nId do - EgtDeselectObj( nId) - ProcessOneSolid( nId, ptIns) - ptIns = ptIns + Vector3d( 0, 300, 0) - nId = EgtGetFirstSelectedObj() -end