From 1a6433d5f8624d499249999dd7cb4abb3a84fbfe Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Mon, 13 Apr 2026 08:08:14 +0200 Subject: [PATCH 1/6] =?UTF-8?q?Prima=20versione=20che=20sistema=20il=20pez?= =?UTF-8?q?zo=20in=20interfaccia=20come=20=C3=A8=20stato=20preruotato?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BatchProcessNew.lua | 8 +------- FlipRot.lua | 2 +- LuaLibs/BeamExec.lua | 23 ++++++++++++++++++++++- Process.lua | 2 +- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/BatchProcessNew.lua b/BatchProcessNew.lua index d64f244..085edff 100644 --- a/BatchProcessNew.lua +++ b/BatchProcessNew.lua @@ -694,13 +694,7 @@ if bToProcess then BeamExec.GetProcessings( PARTS, BEAM.FLAG == 10) BeamExec.GetCombinationMatrix( PARTS, BEAM.FLAG == 10) - BeamExec.ProcessMachinings( PARTS) - - -- scrittura variabili globali per interfaccia - if BEAM.FLAG == 10 then - BEAM.PREROTATE90 = PARTS[1].nInitialPosition - 1 - BEAM.PREINVERT = EgtIf( PARTS[1].bPartInCombiIsInverted, 1, 0) - end + BeamExec.ProcessMachinings( PARTS, BEAM.FLAG == 10) local sOutput = '' diff --git a/FlipRot.lua b/FlipRot.lua index 988f70c..b1164d7 100644 --- a/FlipRot.lua +++ b/FlipRot.lua @@ -145,7 +145,7 @@ local function MyProcessFeatures() BeamExec.GetProcessings( PARTS, true) BeamExec.GetCombinationMatrix( PARTS, true) - BeamExec.ProcessMachinings( PARTS) + BeamExec.ProcessMachinings( PARTS, true) -- scrittura variabili globali per interfaccia BEAM.PREROTATE90 = PARTS[1].nInitialPosition - 1 diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 6c27d39..86337f9 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -1614,7 +1614,7 @@ function BeamExec.GetCombinationMatrix( PARTS, bIsFlipRot) end ------------------------------------------------------------------------------------------------------------- -function BeamExec.ProcessMachinings( PARTS) +function BeamExec.ProcessMachinings( PARTS, bIsFlipRot) -- ciclo sui pezzi local nTotErr = 0 local Stats = {} @@ -1772,6 +1772,27 @@ function BeamExec.ProcessMachinings( PARTS) nRawId = EgtGetNextRawPart( nRawId) end + + -- TODO VERIFICARE ROTAZIONI!!! + if MatrixResult.nInitialPosition ~= 1 then + -- salvo situazione precedente su lista BEAM ( scrittura variabili globali per interfaccia) + if bIsFlipRot then + BEAM.PREROTATE90 = PARTS[1].nInitialPosition - 1 + BEAM.PREINVERT = EgtIf( PARTS[1].bPartInCombiIsInverted, 1, 0) + -- se c'è stata inversione, si inverte il pezzo anche in disegna + end + -- se c'è stata una prerotazione, si ruota il pezzo anche in disegna + local b3Solid = EgtGetRawPartBBox( PARTS[1].idRaw) -- PARTS[1].b3PartOriginal -- EgtGetBBoxGlob( Ls or GDB_ID.NULL, GDB_BB.STANDARD) + -- eseguo rotazione di 90 gradi attorno asse X + EgtRemovePartFromRawPart( PARTS[1].id) + local ptRot = PARTS[1].b3PartOriginal:getMin() + Vector3d( 0, PARTS[1].b3PartOriginal:getDimY() / 2, PARTS[1].b3PartOriginal:getDimZ() / 2) + local nRotationDeg = 90 * (MatrixResult.nInitialPosition - 1) + EgtRotate( PARTS[1].id, ptRot, X_AX(), nRotationDeg, GDB_RT.GLOB) + EgtAddPartToRawPart( PARTS[1].id, {0,0,0}, PARTS[1].idRaw) + MatrixResult.nInitialPosition = 1 + PARTS[nPart].nInitialPosition = 1 + end + local bAreAllMachiningApplyOk local sErr local bSplitAlreadyExecuted = false diff --git a/Process.lua b/Process.lua index 344415e..e5f75a9 100644 --- a/Process.lua +++ b/Process.lua @@ -304,7 +304,7 @@ local function MyProcessFeatures() BeamExec.GetProcessings( PARTS, false) BeamExec.GetCombinationMatrix( PARTS, false) - BeamExec.ProcessMachinings( PARTS) + BeamExec.ProcessMachinings( PARTS, false) local nErrCnt = 0 local nWarnCnt = 0 local sOutput = '' From 78189631c1adbdaa61c1ae72a1c1697b7a5bd65d Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Mon, 13 Apr 2026 09:43:47 +0200 Subject: [PATCH 2/6] Aggiunto inversione --- BatchProcessNew.lua | 2 +- LuaLibs/BeamExec.lua | 49 ++++++++++++++++++++++++---------------- LuaLibs/MachiningLib.lua | 2 +- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/BatchProcessNew.lua b/BatchProcessNew.lua index 085edff..313df18 100644 --- a/BatchProcessNew.lua +++ b/BatchProcessNew.lua @@ -721,7 +721,7 @@ if bToProcess then BEAM.ERR = 0 BEAM.MSG = '---' end - BEAM.ROT = -( RESULT[i].nRotation or 1) + 1 + BEAM.ROT = -( ( RESULT[i].nRotation - ( BEAM.PREROTATE90 or 0)) or 1) + 1 BEAM.CUTID = RESULT[i].idCut BEAM.TASKID = RESULT[i].idTask WriteErrToLogFile( BEAM.ERR, BEAM.MSG, BEAM.ROT, BEAM.CUTID, BEAM.TASKID) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 86337f9..f5f3de7 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -1711,8 +1711,6 @@ function BeamExec.ProcessMachinings( PARTS, bIsFlipRot) MACHININGS.Info.nSplitCutRotation = 1 end end - -- salvo sul PART la posizione di partenza che è stata scelta - PARTS[nPart].nInitialPosition = MatrixResult.nInitialPosition local nOffsetIndex = EgtIf( PARTS[nPart].bPartInCombiIsInverted, 4, 0) -- aggiunge tagli testa e coda in fasi opportune @@ -1773,25 +1771,36 @@ function BeamExec.ProcessMachinings( PARTS, bIsFlipRot) end - -- TODO VERIFICARE ROTAZIONI!!! - if MatrixResult.nInitialPosition ~= 1 then - -- salvo situazione precedente su lista BEAM ( scrittura variabili globali per interfaccia) - if bIsFlipRot then - BEAM.PREROTATE90 = PARTS[1].nInitialPosition - 1 - BEAM.PREINVERT = EgtIf( PARTS[1].bPartInCombiIsInverted, 1, 0) - -- se c'è stata inversione, si inverte il pezzo anche in disegna + -- TODO VERIFICARE ROTAZIONI!!! + if MatrixResult.nInitialPosition ~= 1 or PARTS[nPart].bPartInCombiIsInverted then + -- si toglie il pezzo dal grezzo per poter fare operazioni + EgtRemovePartFromRawPart( PARTS[nPart].id) + + -- salvo situazione precedente su lista BEAM ( scrittura variabili globali per interfaccia) + 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 + 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) + 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) + + EgtAddPartToRawPart( PARTS[nPart].id, {0,0,0}, PARTS[nPart].idRaw) + + MatrixResult.nInitialPosition = 1 end - -- se c'è stata una prerotazione, si ruota il pezzo anche in disegna - local b3Solid = EgtGetRawPartBBox( PARTS[1].idRaw) -- PARTS[1].b3PartOriginal -- EgtGetBBoxGlob( Ls or GDB_ID.NULL, GDB_BB.STANDARD) - -- eseguo rotazione di 90 gradi attorno asse X - EgtRemovePartFromRawPart( PARTS[1].id) - local ptRot = PARTS[1].b3PartOriginal:getMin() + Vector3d( 0, PARTS[1].b3PartOriginal:getDimY() / 2, PARTS[1].b3PartOriginal:getDimZ() / 2) - local nRotationDeg = 90 * (MatrixResult.nInitialPosition - 1) - EgtRotate( PARTS[1].id, ptRot, X_AX(), nRotationDeg, GDB_RT.GLOB) - EgtAddPartToRawPart( PARTS[1].id, {0,0,0}, PARTS[1].idRaw) - MatrixResult.nInitialPosition = 1 - PARTS[nPart].nInitialPosition = 1 - end + + -- salvo sul PART la posizione di partenza che è stata scelta + PARTS[nPart].nInitialPosition = MatrixResult.nInitialPosition + local bAreAllMachiningApplyOk local sErr diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 65a6e7b..5ea7a4e 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -1367,7 +1367,7 @@ function MachiningLib.AddOperations( MACHININGS, Part, sRotation) nErr, sErr = EgtGetLastMachMgrError() EgtSetOperationMode( nOperationId, false) local nOffsetIndex = EgtIf( Part.bPartInCombiIsInverted, 4, 0) - local CurrProc = PROCESSINGS[MACHININGS[i].Proc.nIndexPartInParts].Rotation[MACHININGS[i].Proc.nIndexRotation+nOffsetIndex][MACHININGS[i].Proc.nIndexInVProc] + local CurrProc = PROCESSINGS[MACHININGS[i].Proc.nIndexPartInParts].Rotation[MACHININGS[i].Proc.nIndexRotation][MACHININGS[i].Proc.nIndexInVProc] -- si annulla la feature scelta, in modo che un successivo ricalcolo non la tenga in considerazione CurrProc.AvailableStrategies[CurrProc.nIndexBestStrategy].Result.sStatus = 'Not-Applicable' CurrProc.AvailableStrategies[CurrProc.nIndexBestStrategy].Result.sInfo = 'REJECTED (' .. sErr .. ')' From 6fe6b41e87fb6315efc23688f0d1aaef10468d1d Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Mon, 13 Apr 2026 12:28:09 +0200 Subject: [PATCH 3/6] 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 From b68bbb2c48cf92b4cd10b124ed1057b90aab31bf Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Mon, 13 Apr 2026 13:01:56 +0200 Subject: [PATCH 4/6] - Report TXT ora gestisce bene le prerotazioni - Corretta info indice rotazione su Proc --- BatchProcessNew.lua | 4 +-- LuaLibs/BeamExec.lua | 70 +++++++++++++++++++--------------------- LuaLibs/MachiningLib.lua | 2 +- 3 files changed, 36 insertions(+), 40 deletions(-) diff --git a/BatchProcessNew.lua b/BatchProcessNew.lua index 313df18..e5f72ab 100644 --- a/BatchProcessNew.lua +++ b/BatchProcessNew.lua @@ -737,7 +737,7 @@ if bToProcess then sOutput = sOutput .. string.format( '[%d,%d] %s\n', RESULT[i].idCut, RESULT[i].idTask, sMsg) BEAM.ERR = 19 BEAM.MSG = sMsg - BEAM.ROT = -( RESULT[i].nRotation or 1) + 1 + BEAM.ROT = -( ( RESULT[i].nRotation - ( BEAM.PREROTATE90 or 0)) or 1) + 1 BEAM.CUTID = RESULT[i].idCut BEAM.TASKID = RESULT[i].idTask WriteErrToLogFile( BEAM.ERR, BEAM.MSG, BEAM.ROT, BEAM.CUTID, BEAM.TASKID) @@ -763,7 +763,7 @@ if bToProcess then sOutput = sOutput .. string.format( '[%d,%d] %s\n', RESULT[i].idCut, RESULT[i].idTask, sMsg) BEAM.ERR = -19 BEAM.MSG = 'Incomplete : Completion index ' .. RESULT[i].ChosenStrategy.dCompletionIndex .. '/5\n' .. sMsg - BEAM.ROT = -( RESULT[i].nRotation or 1) + 1 + BEAM.ROT = -( ( RESULT[i].nRotation - ( BEAM.PREROTATE90 or 0)) or 1) + 1 BEAM.CUTID = RESULT[i].idCut BEAM.TASKID = RESULT[i].idTask WriteErrToLogFile( BEAM.ERR, BEAM.MSG, BEAM.ROT, BEAM.CUTID, BEAM.TASKID) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 3f62450..d0d2452 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][Proc.nIndexInVProc].ChosenStrategy = nil + PROCESSINGS[Proc.nIndexPartInParts].Rotation[Proc.nIndexRotation+nOffsetIndex][Proc.nIndexInVProc].ChosenStrategy = nil -- TODO dare messaggio che la feature non è stata eseguita nonostante la presenza di strategie disponibili @@ -1718,36 +1718,34 @@ function BeamExec.ProcessMachinings( PARTS, bIsFlipRot) if nRotHeadCut > 4 then nRotHeadCut = nRotHeadCut - 4 end - nRotHeadCut = nRotHeadCut + nOffsetIndex local nRotSplitCut = MatrixResult.nInitialPosition + MACHININGS.Info.nSplitCutRotation - 1 if nRotSplitCut > 4 then nRotSplitCut = nRotSplitCut - 4 end - nRotSplitCut = nRotSplitCut + nOffsetIndex -- setto nella Proc l'indice rotazione nella quale deve essere lavorata - PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc].nIndexRotation = nRotHeadCut - PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc].nIndexRotation = nRotSplitCut + PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc].nIndexRotation = nRotHeadCut + PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc].nIndexRotation = nRotSplitCut -- si imposta flag rotazione per taglio di testa if MACHININGS.Info.nHeadCutRotation == 2 then - PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc].bSide = true + PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc].bSide = true elseif MACHININGS.Info.nHeadCutRotation == 3 then - PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc].bDown = true + PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc].bDown = true else - PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc].bStd = true + PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc].bStd = true end -- si imposta flag rotazione per taglio di coda if MACHININGS.Info.nSplitCutRotation == 2 then - PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc].bSide = true + PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc].bSide = true elseif MACHININGS.Info.nSplitCutRotation == 3 then - PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc].bDown = true + PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc].bDown = true else - PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc].bStd = true + PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc].bStd = true end local vProcHeadTail = {} - table.insert( vProcHeadTail, PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc]) - table.insert( vProcHeadTail, PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc]) + table.insert( vProcHeadTail, PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc]) + table.insert( vProcHeadTail, PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc]) MACHININGS = CalculateMachinings( vProcHeadTail, PARTS[nPart], MatrixResult.nInitialPosition) @@ -2127,48 +2125,46 @@ function BeamExec.ProcessAlternatives( PARTS) if nRotHeadCut > 4 then nRotHeadCut = nRotHeadCut - 4 end - nRotHeadCut = nRotHeadCut + nOffsetIndex local nRotSplitCut = MatrixResult.nInitialPosition + MACHININGS.Info.nSplitCutRotation - 1 if nRotSplitCut > 4 then nRotSplitCut = nRotSplitCut - 4 end - nRotSplitCut = nRotSplitCut + nOffsetIndex -- setto nella Proc l'indice rotazione nella quale deve essere lavorata - PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc].nIndexRotation = nRotHeadCut - PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc].nIndexRotation = nRotSplitCut + PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc].nIndexRotation = nRotHeadCut + PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc].nIndexRotation = nRotSplitCut -- si imposta flag rotazione per taglio di testa if MACHININGS.Info.nHeadCutRotation == 2 then - PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc].bDown = nil - PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc].bSide = true - PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc].bStd = nil + PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc].bDown = nil + PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc].bSide = true + PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc].bStd = nil elseif MACHININGS.Info.nHeadCutRotation == 3 then - PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc].bDown = true - PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc].bSide = nil - PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc].bStd = nil + PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc].bDown = true + PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc].bSide = nil + PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc].bStd = nil else - PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc].bDown = nil - PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc].bSide = nil - PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc].bStd = true + PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc].bDown = nil + PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc].bSide = nil + PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc].bStd = true end -- si imposta flag rotazione per taglio di coda if MACHININGS.Info.nSplitCutRotation == 2 then - PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc].bDown = nil - PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc].bSide = true - PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc].bStd = nil + PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc].bDown = nil + PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc].bSide = true + PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc].bStd = nil elseif MACHININGS.Info.nSplitCutRotation == 3 then - PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc].bDown = true - PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc].bSide = nil - PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc].bStd = nil + PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc].bDown = true + PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc].bSide = nil + PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc].bStd = nil else - PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc].bDown = nil - PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc].bSide = nil - PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc].bStd = true + PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc].bDown = nil + PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc].bSide = nil + PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc].bStd = true end local vProcHeadTail = {} - table.insert( vProcHeadTail, PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc]) - table.insert( vProcHeadTail, PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc]) + table.insert( vProcHeadTail, PROCESSINGS[nPart].Rotation[nRotHeadCut+nOffsetIndex][MatrixResult.nIndexHeadCutInVProc]) + table.insert( vProcHeadTail, PROCESSINGS[nPart].Rotation[nRotSplitCut+nOffsetIndex][MatrixResult.nIndexTailCutInVProc]) MACHININGS = CalculateMachinings( vProcHeadTail, PARTS[nPart], MatrixResult.nInitialPosition) diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 3d4f3e6..8217ef6 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -1367,7 +1367,7 @@ function MachiningLib.AddOperations( MACHININGS, Part, sRotation) nErr, sErr = EgtGetLastMachMgrError() EgtSetOperationMode( nOperationId, false) local nOffsetIndex = EgtIf( Part.bPartInCombiIsInverted, 4, 0) - local CurrProc = PROCESSINGS[MACHININGS[i].Proc.nIndexPartInParts].Rotation[MACHININGS[i].Proc.nIndexRotation][MACHININGS[i].Proc.nIndexInVProc] + local CurrProc = PROCESSINGS[MACHININGS[i].Proc.nIndexPartInParts].Rotation[MACHININGS[i].Proc.nIndexRotation+nOffsetIndex][MACHININGS[i].Proc.nIndexInVProc] -- si annulla la feature scelta, in modo che un successivo ricalcolo non la tenga in considerazione CurrProc.AvailableStrategies[CurrProc.nIndexBestStrategy].Result.sStatus = 'Not-Applicable' CurrProc.AvailableStrategies[CurrProc.nIndexBestStrategy].Result.sInfo = 'REJECTED (' .. sErr .. ')' From 922a7ac846050c796486e8d3473b5ff95e0dd5b2 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Tue, 14 Apr 2026 07:57:59 +0200 Subject: [PATCH 5/6] Correzioni varie in strategie per gestire casi strani dove non vengono calcolate le MainFaces --- BatchProcessNew.lua | 1 + LuaLibs/MachiningLib.lua | 5 +++++ Strategies/Standard/STR0002/STR0002.lua | 4 ++++ Strategies/Standard/STR0003/STR0003.lua | 20 ++++++++++---------- Strategies/Standard/STR0004/STR0004.lua | 20 ++++++++++---------- 5 files changed, 30 insertions(+), 20 deletions(-) diff --git a/BatchProcessNew.lua b/BatchProcessNew.lua index e5f72ab..1fff59b 100644 --- a/BatchProcessNew.lua +++ b/BatchProcessNew.lua @@ -492,6 +492,7 @@ if bToProcess then return end + -- TODO in caso di "GEN_sPiecesLoadingPosition = FULL_PRE_ROTATION" bisogna controllare anche sezione ribaltata di 90° -- Verifico sezione barra non troppo grande if not BeamData.MAX_WIDTH2 or not BeamData.MAX_HEIGHT2 then if ( dRawW > BeamData.MAX_WIDTH + 10 * GEO.EPS_SMALL or dRawH > BeamData.MAX_HEIGHT + 10 * GEO.EPS_SMALL) then diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 8217ef6..59a174e 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -468,6 +468,11 @@ end function MachiningLib.FindMill( Proc, ToolSearchParameters) local ToolInfo = {} + -- direzione utensile e fipo fresa obbligatori, altrimenti si esce + if not ToolSearchParameters.vtToolDirection or not ToolSearchParameters.sMillShape then + return ToolInfo + end + local nBestToolIndex local dBestToolResidualDepth = 0 for i = 1, #TOOLS do diff --git a/Strategies/Standard/STR0002/STR0002.lua b/Strategies/Standard/STR0002/STR0002.lua index 297db4c..a0adee5 100644 --- a/Strategies/Standard/STR0002/STR0002.lua +++ b/Strategies/Standard/STR0002/STR0002.lua @@ -269,6 +269,8 @@ local function GetBestPocketingStrategy( Proc, Part) Milling.idProc = Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.id Milling.dElevation = ( Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation * 2) + BeamData.MILL_OVERLAP Milling.bMachAppliedToTunnelFace = true + else + ToolSearchParameters.vtToolDirection = nil end ToolSearchParameters.AvailableToolList = MachiningLib.GetAvailableToolList( Proc, Strategy.Parameters.sPocketingList, 'Pocketing') Milling.ToolInfo = {} @@ -309,6 +311,8 @@ local function GetBestPocketingStrategy( Proc, Part) Milling.idFaceToMachine = Proc.MainFaces.SideFaces[1].id Milling.idProc = Proc.id Milling.dElevation = Proc.MainFaces.SideFaces[1].dElevation + else + ToolSearchParameters.vtToolDirection = nil end ToolSearchParameters.AvailableToolList = MachiningLib.GetAvailableToolList( Proc, Strategy.Parameters.sPocketingList, 'Pocketing') Milling.ToolInfo = {} diff --git a/Strategies/Standard/STR0003/STR0003.lua b/Strategies/Standard/STR0003/STR0003.lua index 979e752..3b9265d 100644 --- a/Strategies/Standard/STR0003/STR0003.lua +++ b/Strategies/Standard/STR0003/STR0003.lua @@ -228,6 +228,16 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) bIsSplitFeature = true end + -- se arriva una feature senza MainFaces o MainEdges necessari la strategia non è applicabile + -- TODO riuniure a IsTopologyOk? + if not Proc.MainFaces + or not Proc.MainFaces.LongFaces[1] + or not Proc.MainFaces.LongFaces[1].MainEdges then + + Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( 'Topology') + return false, Strategy.Result + end + -- altezza tasca local dPocketHeight = 0 if Proc.Topology.sFamily == 'Tunnel' then @@ -241,16 +251,6 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) dPocketHeight = Proc.MainFaces.BottomFaces[1].MainEdges.SideEdges[1].dLength end - -- se arriva una feature senza MainFaces o MainEdges necessari la strategia non è applicabile - -- TODO riuniure a IsTopologyOk? - if not Proc.MainFaces - or not Proc.MainFaces.LongFaces[1] - or not Proc.MainFaces.LongFaces[1].MainEdges then - - Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( 'Topology') - return false, Strategy.Result - end - -- riferimenti locali per leggibilità e performance local LongFace = Proc.MainFaces.LongFaces[1] local OppositeEdge1 = LongFace.MainEdges.OppositeEdges[1] diff --git a/Strategies/Standard/STR0004/STR0004.lua b/Strategies/Standard/STR0004/STR0004.lua index fd705a5..b67f076 100644 --- a/Strategies/Standard/STR0004/STR0004.lua +++ b/Strategies/Standard/STR0004/STR0004.lua @@ -132,6 +132,16 @@ function STR0004.Make( bAddMachining, Proc, Part, CustomParameters) bIsSplitFeature = true end + -- se arriva una feature senza MainFaces o MainEdges necessari la strategia non è applicabile + -- TODO riuniure a IsTopologyOk? + if not Proc.MainFaces + or not Proc.MainFaces.LongFaces[1] + or not Proc.MainFaces.LongFaces[1].MainEdges then + + Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( 'Topology') + return false, Strategy.Result + end + -- altezza tasca local dPocketHeight = 0 if Proc.Topology.sFamily == 'Tunnel' then @@ -145,16 +155,6 @@ function STR0004.Make( bAddMachining, Proc, Part, CustomParameters) dPocketHeight = Proc.MainFaces.BottomFaces[1].MainEdges.SideEdges[1].dLength end - -- se arriva una feature senza MainFaces o MainEdges necessari la strategia non è applicabile - -- TODO riuniure a IsTopologyOk? - if not Proc.MainFaces - or not Proc.MainFaces.LongFaces[1] - or not Proc.MainFaces.LongFaces[1].MainEdges then - - Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( 'Topology') - return false, Strategy.Result - end - -- riferimenti locali per leggibilità e performance local LongFace = Proc.MainFaces.LongFaces[1] local OppositeEdge1 = LongFace.MainEdges.OppositeEdges[1] From 06d9529b7b26aa25d291a94d27886e251bdf695e Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Tue, 14 Apr 2026 09:05:46 +0200 Subject: [PATCH 6/6] =?UTF-8?q?Per=20ruotare=20il=20pezzo=20non=20lo=20si?= =?UTF-8?q?=20toglie=20pi=C3=B9=20dalla=20barra,=20ma=20lo=20si=20gira=20i?= =?UTF-8?q?n=20"Draw"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LuaLibs/BeamExec.lua | 14 +++++--------- LuaLibs/MachiningLib.lua | 2 +- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index d0d2452..c5602fe 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -1772,8 +1772,9 @@ function BeamExec.ProcessMachinings( PARTS, bIsFlipRot) 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) + -- si esce dalle lavorazioni e si torna in disegna + local nCurrMachGroup = EgtGetCurrMachGroup() + EgtResetCurrMachGroup() -- salvo situazione precedente su lista BEAM ( scrittura variabili globali per interfaccia) if bIsFlipRot then @@ -1795,11 +1796,8 @@ function BeamExec.ProcessMachinings( PARTS, bIsFlipRot) 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) - - -- dico che il pezzo originale è nella posizione iniziale come arriva da BTL ( è stato appena ruotato qui sopra) - nInitialPosition = 1 + -- si riattiva il MachGroup, i pezzi son rimasti dove erano + EgtSetCurrMachGroup( nCurrMachGroup) end -- salvo sul PART la posizione di partenza che è stata scelta @@ -1895,8 +1893,6 @@ 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 59a174e..0192515 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -1448,7 +1448,7 @@ function MachiningLib.AddOperations( MACHININGS, Part, sRotation) local idDisp = EgtGetPhaseDisposition( nPhase) -- posizione iniziale considerando eventuiali prerotazioni - local nRealInitialPosition = Part.nInitialPosition - ( BEAM.PREROTATE90 or 0) + local nRealInitialPosition = Part.nInitialPosition if sRotation == 'DOWN' then local nRotation = EgtIf( nRealInitialPosition + 2 > 4, nRealInitialPosition + 2 - 4, nRealInitialPosition + 2) - 1 BeamLib.RotateRawPart( Part, nRotation)