From 6fe6b41e87fb6315efc23688f0d1aaef10468d1d Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Mon, 13 Apr 2026 12:28:09 +0200 Subject: [PATCH] Migliorie calcolo prerotazioni --- LuaLibs/BeamExec.lua | 25 ++++++++++++++++--------- LuaLibs/MachiningLib.lua | 8 +++++--- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index f5f3de7..3f62450 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -1197,7 +1197,7 @@ local function CalculateMachinings( vProc, Part, nInitialRotation) else local nOffsetIndex = EgtIf( Part.bPartInCombiIsInverted, 4, 0) -- se non esiste una strategia scelta (non dovrebbe mai succedere) cancello da lista generale - PROCESSINGS[Proc.nIndexPartInParts].Rotation[Proc.nIndexRotation+nOffsetIndex][Proc.nIndexInVProc].ChosenStrategy = nil + PROCESSINGS[Proc.nIndexPartInParts].Rotation[Proc.nIndexRotation][Proc.nIndexInVProc].ChosenStrategy = nil -- TODO dare messaggio che la feature non è stata eseguita nonostante la presenza di strategie disponibili @@ -1771,7 +1771,8 @@ function BeamExec.ProcessMachinings( PARTS, bIsFlipRot) end - -- TODO VERIFICARE ROTAZIONI!!! + local nInitialPosition = MatrixResult.nInitialPosition + -- PREROTAZIONE PEZZO if MatrixResult.nInitialPosition ~= 1 or PARTS[nPart].bPartInCombiIsInverted then -- si toglie il pezzo dal grezzo per poter fare operazioni EgtRemovePartFromRawPart( PARTS[nPart].id) @@ -1780,22 +1781,27 @@ function BeamExec.ProcessMachinings( PARTS, bIsFlipRot) if bIsFlipRot then BEAM.PREROTATE90 = MatrixResult.nInitialPosition - 1 BEAM.PREINVERT = EgtIf( PARTS[nPart].bPartInCombiIsInverted, 1, 0) - -- se c'è stata inversione, si inverte il pezzo anche in disegna end - -- se la soluzione trovata era invertita, dopo aver rimesso pezzo inverto di nuovo + -- se c'è stata inversione, si inverte il pezzo anche in disegna if PARTS[nPart].bPartInCombiIsInverted then local ptInv = PARTS[nPart].b3PartOriginal:getMin() + Vector3d( PARTS[nPart].b3PartOriginal:getDimX() / 2, PARTS[nPart].b3PartOriginal:getDimY() / 2, 0) EgtRotate( PARTS[nPart].id, ptInv, Z_AX(), 180, GDB_RT.GLOB) + PARTS[nPart].bIsInverted = true end - local ptRot = PARTS[nPart].b3PartOriginal:getMin() + Vector3d( 0, PARTS[nPart].b3PartOriginal:getDimY() / 2, PARTS[nPart].b3PartOriginal:getDimZ() / 2) - local nRotationDeg = 90 * ( MatrixResult.nInitialPosition - 1) - EgtRotate( PARTS[nPart].id, ptRot, X_AX(), nRotationDeg, GDB_RT.GLOB) + -- se c'è una prerotazione, si inverte il pezzo + if MatrixResult.nInitialPosition ~= 1 then + local ptRot = PARTS[nPart].b3PartOriginal:getMin() + Vector3d( 0, PARTS[nPart].b3PartOriginal:getDimY() / 2, PARTS[nPart].b3PartOriginal:getDimZ() / 2) + local nRotationDeg = 90 * ( MatrixResult.nInitialPosition - 1) + EgtRotate( PARTS[nPart].id, ptRot, X_AX(), nRotationDeg, GDB_RT.GLOB) + end + -- si rimette il pezzo nel grezzo EgtAddPartToRawPart( PARTS[nPart].id, {0,0,0}, PARTS[nPart].idRaw) - MatrixResult.nInitialPosition = 1 + -- dico che il pezzo originale è nella posizione iniziale come arriva da BTL ( è stato appena ruotato qui sopra) + nInitialPosition = 1 end -- salvo sul PART la posizione di partenza che è stata scelta @@ -1815,7 +1821,6 @@ function BeamExec.ProcessMachinings( PARTS, bIsFlipRot) -- creazione effettiva delle lavorazioni MACHININGS.Info = {} local nCurrPosition = 1 - local nInitialPosition = MatrixResult.nInitialPosition -- se c'è almeno una lavorazione in posizionamento con trave ribaltata if MatrixResult.bSomeFeatureDown then local nRotation = EgtIf( nInitialPosition + 2 > 4, nInitialPosition + 2 - 4, nInitialPosition + 2) @@ -1892,6 +1897,8 @@ function BeamExec.ProcessMachinings( PARTS, bIsFlipRot) if PARTS[nPart].bPartInCombiIsInverted then BeamLib.InvertRawPart( PARTS[nPart], -2) end + -- ripristino anche eventuali pre-rotazioni + nInitialPosition = nInitialPosition + ( BEAM.PREROTATE90 or 0) -- si ribalta il pezzo in posizione iniziale BeamLib.RotateRawPart( PARTS[nPart], 1 - nInitialPosition) else diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 5ea7a4e..3d4f3e6 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -1442,18 +1442,20 @@ function MachiningLib.AddOperations( MACHININGS, Part, sRotation) local nPhase = EgtGetCurrPhase() local idDisp = EgtGetPhaseDisposition( nPhase) + -- posizione iniziale considerando eventuiali prerotazioni + local nRealInitialPosition = Part.nInitialPosition - ( BEAM.PREROTATE90 or 0) if sRotation == 'DOWN' then - local nRotation = EgtIf( Part.nInitialPosition + 2 > 4, Part.nInitialPosition + 2 - 4, Part.nInitialPosition + 2) - 1 + local nRotation = EgtIf( nRealInitialPosition + 2 > 4, nRealInitialPosition + 2 - 4, nRealInitialPosition + 2) - 1 BeamLib.RotateRawPart( Part, nRotation) EgtSetInfo( idDisp, 'ROT', -2) EgtSetInfo( idDisp, 'TYPE', 'MID2') elseif sRotation == 'SIDE' then - local nRotation = EgtIf( Part.nInitialPosition + 1 > 4, Part.nInitialPosition + 1 - 4, Part.nInitialPosition + 1) - 1 + local nRotation = EgtIf( nRealInitialPosition + 1 > 4, nRealInitialPosition + 1 - 4, nRealInitialPosition + 1) - 1 BeamLib.RotateRawPart( Part, nRotation) EgtSetInfo( idDisp, 'ROT', -1) EgtSetInfo( idDisp, 'TYPE', 'MID2') else - local nRotation = Part.nInitialPosition - 1 + local nRotation = nRealInitialPosition - 1 BeamLib.RotateRawPart( Part, nRotation) EgtSetInfo( idDisp, 'TYPE', 'END') end