diff --git a/BatchProcessNew.lua b/BatchProcessNew.lua index d2de1a1..55fe4ed 100644 --- a/BatchProcessNew.lua +++ b/BatchProcessNew.lua @@ -775,8 +775,7 @@ if bToProcess then end end - -- se scarico a caduta (-101, -102) le lavorazioni dopo separazione vanno disattivate - + -- TODO: se scarico a caduta (-101, -102) le lavorazioni dopo separazione vanno disattivate. Scrivere info feature incompleta su quelle feature -- Salvo il progetto EgtSaveFile( sNgeFile) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 8fe4516..7a7340a 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -617,6 +617,7 @@ local function CollectFeatures( Part, dRotIndex) local nDo = EgtGetInfo( ProcId, 'DO', 'i') or 1 if nGrp and nPrc and nDo == 1 then local Proc = {} + Proc.isVirtualProc = nInd == 1 -- feature non presente in lista originale BTL ma aggiunta da automatismo Proc.idPart = Part.id Proc.idRaw = Part.idRaw Proc.nIndexPartInParts = Part.nIndexInParts @@ -783,8 +784,8 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part) local ProcB = vProcSingleRot[j] -- non si controlla la feature con se stessa o se feature disabilitata if i ~= j and ProcB.nFlg ~= 0 then - -- verifico se il taglio aggiunto manualmente può essere saltato perchè nella stessa posizione c'è un altro taglio di testa - if ID.IsHeadCut( Proc) and ( ID.IsHeadCut( ProcB) and EgtGetInfo( ProcB.id, 'HEAD_ADD_CUT', 'i') == 1) then + -- se entrambi tagli di testa, si tiene sempre il primo ( ma non quello aggiunto dall'automatismo) + if ( ID.IsHeadCut( Proc) and not EgtGetInfo( Proc.id, 'HEAD_ADD_CUT', 'i')) and ID.IsHeadCut( ProcB) then if not Proc.SlaveProcIndexes then Proc.SlaveProcIndexes = {} end @@ -792,8 +793,8 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part) ProcB.nIndexMasterProc = i ProcB.nFlg = 0 end - -- verifico se il taglio aggiunto manualmente può essere saltato perchè nella stessa posizione c'è un altro taglio di coda - if ID.IsTailCut( Proc) and ( ID.IsTailCut( ProcB) and EgtGetInfo( ProcB.id, 'HEAD_ADD_CUT', 'i') == 1) then + -- se entrambi tagli di coda, si tiene sempre il primo ( ma non quello aggiunto dall'automatismo) + if ( ID.IsTailCut( Proc) and not EgtGetInfo( Proc.id, 'HEAD_ADD_CUT', 'i')) and ID.IsTailCut( ProcB) then if not Proc.SlaveProcIndexes then Proc.SlaveProcIndexes = {} end @@ -1071,6 +1072,7 @@ local function AddFeatureResultToGlobalList( Proc, OptionalParameters) local dCompletionIndex local dCompositeRating local sInfo + local sApplyInfo if not OptionalParameters then OptionalParameters = {} @@ -1078,13 +1080,20 @@ local function AddFeatureResultToGlobalList( Proc, OptionalParameters) local nRotation = OptionalParameters.nRotation or 1 if Proc.nIndexMasterProc then + -- se è una feature non presente in elenco ed è saltata perchè lavorata da un'altra feature, non si fa passare dai RESULT. + -- se non avesse una master associata, allora risulterà come messaggio su pezzo + if Proc.isVirtualProc then + return + end local ChosenStrategyTable = PROCESSINGS[Proc.nIndexPartInParts].Rotation[Proc.nIndexRotation][Proc.nIndexMasterProc].ChosenStrategy if ChosenStrategyTable then sStrategyId = ChosenStrategyTable.sStrategyId sStatus = ChosenStrategyTable.Result.sStatus dCompletionIndex = ChosenStrategyTable.Result.dCompletionIndex dCompositeRating = ChosenStrategyTable.Result.dCompositeRating - sInfo = ChosenStrategyTable.Result.sInfo + -- all'indice nIndexMasterProc si toglie -2 perchè son presenti tagli testa e coda, e -1 perché elenco zero-based + -- TODO sarebbe più bello assegnare un nome o un identificativo. L'indice così ricavato non è molto sicuro. + sApplyInfo = 'Skipped. Feature machined: ' .. EgtNumToString( Proc.nIndexMasterProc - 2 - 1) end elseif Proc.ChosenStrategy then sStrategyId = Proc.ChosenStrategy.sStrategyId @@ -1108,7 +1117,8 @@ local function AddFeatureResultToGlobalList( Proc, OptionalParameters) sStatus = sStatus, dCompletionIndex = dCompletionIndex, dCompositeRating = dCompositeRating, - sInfo = sInfo + sInfo = sInfo, + sApplyInfo = sApplyInfo } } -- scrivo le strategie disponibili solo se ne esistono @@ -1330,7 +1340,6 @@ local function GetBestCombination( ListToCompare, Part) end end end - end end end @@ -1448,14 +1457,14 @@ local function GetCombinationListFromMatrix( ProcessingsOnPart, PartInfo) -- ciclo su tutte le feature, ad eccezione dei tagli testa/coda che dipendono dal risultato delle altre -- tagli testa e coda vengono aggiunti sempre alla fine for nProc = 1, #ProcessingsOnPart.Rotation[1] do - if not ID.IsHeadCut( ProcessingsOnPart.Rotation[1][nProc]) and not ID.IsTailCut( ProcessingsOnPart.Rotation[1][nProc]) then - -- Si controlla sempre la rotazione 1 perchè la dipendenza di una feature da un'altra non dipende dalla rotazione - -- se feature disattivata perchè eseguita da master a lei associata dichiaro comunque eseguita - if ProcessingsOnPart.Rotation[1][nProc].nFlg == 0 and ProcessingsOnPart.Rotation[1][nProc].nIndexMasterProc then - ProcessingsOnPart.Rotation[1][nProc].nIndexRotation = nUnloadPos - table.insert( SingleCombination.Rot0, ProcessingsOnPart.Rotation[1][nProc]) - SingleCombination.nComplete = SingleCombination.nComplete + 1 - else + -- Si controlla sempre la rotazione 1 perchè la dipendenza di una feature da un'altra non dipende dalla rotazione + -- se feature disattivata perchè eseguita da master a lei associata dichiaro comunque eseguita + if ProcessingsOnPart.Rotation[1][nProc].nFlg == 0 and ProcessingsOnPart.Rotation[1][nProc].nIndexMasterProc then + ProcessingsOnPart.Rotation[1][nProc].nIndexRotation = nUnloadPos + table.insert( SingleCombination.Rot0, ProcessingsOnPart.Rotation[1][nProc]) + SingleCombination.nComplete = SingleCombination.nComplete + 1 + else + if not ID.IsHeadCut( ProcessingsOnPart.Rotation[1][nProc]) and not ID.IsTailCut( ProcessingsOnPart.Rotation[1][nProc]) then -- ciclo sulle rotazioni local nNextRot = nUnloadPos local nOffsetIndex = EgtIf( SingleCombination.bPartInCombiIsInverted, 4, 0) @@ -1506,12 +1515,12 @@ local function GetCombinationListFromMatrix( ProcessingsOnPart, PartInfo) table.insert( SingleCombination.Rot0, ProcessingsOnPart.Rotation[nUnloadPos+nOffsetIndex][nProc]) SingleCombination.nNotExecute = SingleCombination.nNotExecute + 1 end - end - else - if ID.IsHeadCut( ProcessingsOnPart.Rotation[1][nProc]) then - SingleCombination.nIndexHeadCutInVProc = nProc - elseif ID.IsTailCut( ProcessingsOnPart.Rotation[1][nProc]) then - SingleCombination.nIndexTailCutInVProc = nProc + else + if ID.IsHeadCut( ProcessingsOnPart.Rotation[1][nProc]) then + SingleCombination.nIndexHeadCutInVProc = nProc + elseif ID.IsTailCut( ProcessingsOnPart.Rotation[1][nProc]) then + SingleCombination.nIndexTailCutInVProc = nProc + end end end end