diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 8758272..c20c039 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -1456,10 +1456,11 @@ function BeamExec.ProcessMachinings( PARTS) end -- ordinamento lavorazioni - MACHININGS = MachiningLib.PrepareMachiningsForSorting( PARTS[nPart]) -- TODO completare ordinamento. Mancano le dipendenze. + -- TODO la FinalizeSorting andrebbe rimossa e usato un sorting che non viola le dipendenze + MACHININGS = MachiningLib.PrepareMachiningsForSorting( PARTS[nPart]) MACHININGS = BeamLib.StableSort( MACHININGS, MachiningLib.CompareMachinings) - -- TODO qui bisogna inserire qualcosa per ripristinare l'ordine interno se rovinato + MACHININGS = MachiningLib.FinalizeSorting() -- finiti i calcoli di applicazione delle lavorazioni, si riporta il pezzo nello zero della fase nRawId = PARTS[nPart].idRaw diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index f32a638..f5cd3c3 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -896,6 +896,32 @@ function MachiningLib.PrepareMachiningsForSorting( Part) return MACHININGS end +-- TODO nShifts è solo per debug, si può togliere?? +-- ripristina l'ordine delle lavorazioni interno alla feature, se non rispettato +------------------------------------------------------------------------------------------------------------- +function MachiningLib.FinalizeSorting() + local nShifts = 0 + local nCurrentMachiningIndex = #MACHININGS + + while nCurrentMachiningIndex > 1 do + local nCurrentMachiningIndex2 = nCurrentMachiningIndex - 1 + while nCurrentMachiningIndex2 > 0 do + if MACHININGS[nCurrentMachiningIndex].Proc.id == MACHININGS[nCurrentMachiningIndex2].Proc.id + and MACHININGS[nCurrentMachiningIndex].Machining.nFeatureInternalIndex < MACHININGS[nCurrentMachiningIndex2].Machining.nFeatureInternalIndex then + + local Machining = table.remove( MACHININGS, nCurrentMachiningIndex) + table.insert( MACHININGS, nCurrentMachiningIndex2, Machining) + nShifts = nShifts + 1 + else + nCurrentMachiningIndex2 = nCurrentMachiningIndex2 - 1 + end + end + nCurrentMachiningIndex = nCurrentMachiningIndex - 1 + end + + return MACHININGS, nShifts +end + -- TODO convertire in tabella in cui si chiamano direttamente i nomi delle funzioni, in modo da poter cambiare l'ordine facilmente -- TODO libreria Sorting?? -------------------------------------------------------------------------------------------------------------