Prima bozza (non funzionante) applicazione lavorazioni nella relativa rotazione
This commit is contained in:
+71
-23
@@ -864,7 +864,7 @@ local function CalculateMachinings( vProc, Part)
|
||||
bAreAllApplyOk, _ = StrategyScript.Make( true, Proc, Part, Proc.ChosenStrategy.Parameters)
|
||||
end
|
||||
end
|
||||
return vProc
|
||||
return MACHININGS
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
@@ -929,7 +929,7 @@ local function IsCombinationAvailable( sCombination, nUnloadPos)
|
||||
-- TODO scelta combinazione forzato DA RIMUOVERE!! Serve modifica al BEAM.
|
||||
BEAM.BeamWall = true
|
||||
BEAM.Rotation = {}
|
||||
BEAM.Rotation.bStandard = true
|
||||
BEAM.Rotation.bBasic = true
|
||||
|
||||
-- BASIC : posizione di scarico come posizionamento iniziale
|
||||
if not BEAM.BeamWall or BEAM.Rotation.bBasic then
|
||||
@@ -1044,9 +1044,13 @@ end
|
||||
-- funzione che decide le combinazioni di rotazione per lavorare la trave
|
||||
local function GetProcessingListFromCombination( BestCombination)
|
||||
local vProc = {}
|
||||
local bSomeFeatureDown = false
|
||||
local bSomeFeatureSide = false
|
||||
local nStartPosition = BestCombination.nIndexRotation
|
||||
|
||||
-- aggiungo processing da fare in fase ribaltata
|
||||
if #BestCombination.Rot180 > 0 then
|
||||
bSomeFeatureDown = true
|
||||
for i = 1, #BestCombination.Rot180 do
|
||||
BestCombination.Rot180[i].bDown = true
|
||||
table.insert( vProc, BestCombination.Rot180[i])
|
||||
@@ -1055,6 +1059,7 @@ local function GetProcessingListFromCombination( BestCombination)
|
||||
|
||||
-- aggiungo processing da fare in fase ruotata
|
||||
if #BestCombination.Rot90 > 0 then
|
||||
bSomeFeatureSide = true
|
||||
for i = 1, #BestCombination.Rot90 do
|
||||
BestCombination.Rot90[i].bSide = true
|
||||
table.insert( vProc, BestCombination.Rot90[i])
|
||||
@@ -1068,7 +1073,7 @@ local function GetProcessingListFromCombination( BestCombination)
|
||||
end
|
||||
end
|
||||
|
||||
return vProc
|
||||
return vProc, nStartPosition, bSomeFeatureDown, bSomeFeatureSide
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
@@ -1247,8 +1252,9 @@ local function GetBestResultFromCombinationsMatrix( ProcessingsOnPart)
|
||||
SingleCombination.nComplete = SingleCombination.nComplete + EgtIf( Data.bComplete, 1, 0)
|
||||
SingleCombination.nNotComplete = SingleCombination.nNotComplete + EgtIf( Data.bNotComplete, 1, 0)
|
||||
SingleCombination.nNotExecute = SingleCombination.nNotExecute + EgtIf( Data.bNotExecute, 1, 0)
|
||||
SingleCombination.nIndexRotation = Data.nIndexRotation
|
||||
else
|
||||
SingleCombination.nNotExecute = SingleCombination.nNotExecute + 1
|
||||
SingleCombination.nIndexRotation = SingleCombination.nNotExecute + 1
|
||||
end
|
||||
end
|
||||
-- aggiungo rotazioni
|
||||
@@ -1270,9 +1276,9 @@ local function GetBestResultFromCombinationsMatrix( ProcessingsOnPart)
|
||||
WriteCombinationLog( CombinationsList, BestCombination)
|
||||
end
|
||||
|
||||
local vFinalProc = GetProcessingListFromCombination( BestCombination)
|
||||
local vFinalProc, nStartPosition, bSomeFeatureDown, bSomeFeatureSide = GetProcessingListFromCombination( BestCombination)
|
||||
|
||||
return vFinalProc
|
||||
return vFinalProc, nStartPosition, bSomeFeatureDown, bSomeFeatureSide
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
@@ -1314,7 +1320,26 @@ function BeamExec.ProcessMachinings( PROCESSINGS, PARTS)
|
||||
PROCESSINGS[nPart].Rotation[dRotIndex] = GetBestStrategy( PROCESSINGS[nPart].Rotation[dRotIndex])
|
||||
end
|
||||
-- si calcola la combinazione di lavorazione migliore
|
||||
local vProc = GetBestResultFromCombinationsMatrix( PROCESSINGS[nPart])
|
||||
local vProc, nStartPosition, bSomeFeatureDown, bSomeFeatureSide = GetBestResultFromCombinationsMatrix( PROCESSINGS[nPart])
|
||||
|
||||
-- debug
|
||||
if EgtGetDebugLevel() >= 1 then
|
||||
PrintFeatures( vProc, PARTS[nPart])
|
||||
end
|
||||
EgtOutLog( ' *** AddMachinings ***', 1)
|
||||
|
||||
-- ordino le features
|
||||
vProc = OrderFeatures( vProc)
|
||||
|
||||
-- esegue le strategie migliori che ha precedentemente scelto e salva le lavorazioni nella lista globale
|
||||
MACHININGS = CalculateMachinings( vProc, PARTS[nPart])
|
||||
|
||||
-- TODO riordinare lavorazioni ottimizzando cambio utensile/spezzone ecc..., mantenendo dipendenze definite prima
|
||||
-- ordino le lavorazioni
|
||||
|
||||
-- MACHININGS = OrderMachining( MACHININGS, PARTS[nPart])
|
||||
-- ruoto il pezzo in caso di cambio di fase finale
|
||||
-- TODO se la posizioen di partenza cambia, devo ruotare il pezzo
|
||||
|
||||
-- aggiungo la fase, se non è la prima
|
||||
if nOrd == 1 then
|
||||
@@ -1328,24 +1353,47 @@ function BeamExec.ProcessMachinings( PROCESSINGS, PARTS)
|
||||
EgtSetInfo( nDispId, 'ORD', nOrd)
|
||||
EgtOutLog( ' *** Phase=' .. tostring( nPhase) .. ' Raw=' .. tostring( PARTS[nPart].idRaw) .. ' Part=' .. tostring( PARTS[nPart].id) .. ' ***', 1)
|
||||
|
||||
-- debug
|
||||
if EgtGetDebugLevel() >= 1 then
|
||||
PrintFeatures( vProc, PARTS[nPart])
|
||||
-- creazione effettiva delle lavorazioni
|
||||
-- se c'è almeno una lavorazione in posizionamento con trave ribaltata
|
||||
if bSomeFeatureDown then
|
||||
-- ribalto le travi della fase corrente
|
||||
local nRId = PARTS[nPart].idRaw
|
||||
while nRId do
|
||||
EgtRotateRawPart( nRId, X_AX(), 180)
|
||||
nRId = EgtGetNextRawPart( nRId)
|
||||
end
|
||||
EgtSetInfo( nDispId, 'ROT', -2)
|
||||
MachiningLib.AddOperations( MACHININGS, PARTS[nPart], 'DOWN')
|
||||
end
|
||||
EgtOutLog( ' *** AddMachinings ***', 1)
|
||||
-- se c'è almeno una lavorazione in posizionamento con trave ribaltata
|
||||
if bSomeFeatureSide then
|
||||
|
||||
-- TODO se bSomeFeatureDown = true, allora devo creare altra fase. Altrimenti già creata da prima
|
||||
-- devo sapere se c'è stata separazione, perchè devo scrivere MID o MID2, ritorno info da MachiningLib.AddOperations?
|
||||
|
||||
-- vettore movimento grezzi per rotazione di 90deg
|
||||
-- TODO rivedere i calcoli. Non son sicuro che serve il bPreMove
|
||||
local dDeltaYZ = EgtGetRawPartBBox( PARTS[nPart].idRaw):getDimY() - EgtGetRawPartBBox( PARTS[nPart].idRaw):getDimZ()
|
||||
local vtMove = Vector3d( 0, dDeltaYZ / 2 * EgtIf( BeamData.RIGHT_LOAD, -1, 1), dDeltaYZ / 2)
|
||||
local bPreMove = dDeltaYZ < 0
|
||||
-- ruoto le travi della fase corrente
|
||||
local nRId = PARTS[nPart].idRaw
|
||||
while nRId do
|
||||
if bPreMove then EgtMoveRawPart( nRId, vtMove) end
|
||||
EgtRotateRawPart( nRId, X_AX(), EgtIf( BeamData.RIGHT_LOAD, -90, 90))
|
||||
if not bPreMove then EgtMoveRawPart( nRId, vtMove) end
|
||||
nRId = EgtGetNextRawPart( nRId)
|
||||
end
|
||||
EgtSetInfo( nDispId, 'ROT', -1)
|
||||
MachiningLib.AddOperations( MACHININGS, PARTS[nPart], 'SIDE')
|
||||
end
|
||||
|
||||
-- TODO se bSomeFeatureDown or bSomeFeatureSide = true, allora devo creare altra fase. Altrimenti già creata da prima
|
||||
-- devo sapere se c'è stata separazione, perchè devo scrivere END o END2, ritorno info da MachiningLib.AddOperations?
|
||||
BeamLib.AddPhaseWithRawParts( PARTS[nPart].idRaw, BeamData.ptOriXR, BeamData.dPosXR, 0)
|
||||
|
||||
-- ordino le features
|
||||
vProc = OrderFeatures( vProc)
|
||||
|
||||
-- esegue le strategie migliori che ha precedentemente scelto e salva le lavorazioni nella lista globale
|
||||
CalculateMachinings( vProc, PARTS[nPart])
|
||||
|
||||
-- TODO riordinare lavorazioni ottimizzando cambio utensile/spezzone ecc..., mantenendo dipendenze definite prima
|
||||
-- ordino le lavorazioni
|
||||
-- OrderMachining( vProc, PARTS[nPart])
|
||||
|
||||
-- aggiunge effettivamente le lavorazioni
|
||||
MachiningLib.AddOperations( vProc, PARTS[nPart])
|
||||
-- aggiunta lavorazioni in ultima fase
|
||||
MachiningLib.AddOperations( MACHININGS, PARTS[nPart], 'STD')
|
||||
|
||||
EgtOutLog( ' *** End AddMachinings ***', 1)
|
||||
-- azzero lavorazioni per pezzo successivo
|
||||
|
||||
Reference in New Issue
Block a user