Gestione feature non lavorata perché slave di un'altra. Per ora gestito il caso speciale dei tagli in testa e coda
This commit is contained in:
+1
-2
@@ -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)
|
||||
|
||||
+30
-21
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user