diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 4cceb0d..8e72d5a 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -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 nInitialPosition = 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, nInitialPosition, bSomeFeatureDown, bSomeFeatureSide end ------------------------------------------------------------------------------------------------------------- @@ -1172,9 +1177,9 @@ local function WriteCombinationLog( CombinationsList, BestCombination) EgtOutLog( sLogLine) end - EgtOutLog( '----------------------------------------') - EgtOutLog( ' BEST ROTATION : ' .. BestCombination.sBitIndexCombination .. ' (' .. BestCombination.nUnloadPos .. ')') EgtOutLog( '---------------------------------------------------------------------------') + EgtOutLog( ' BEST ROTATION : ' .. BestCombination.sBitIndexCombination .. ' (' .. BestCombination.nUnloadPos .. ')') + EgtOutLog( '---------------------------') end ------------------------------------------------------------------------------------------------------------- @@ -1247,6 +1252,7 @@ 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 = nUnloadPos else SingleCombination.nNotExecute = SingleCombination.nNotExecute + 1 end @@ -1270,9 +1276,9 @@ local function GetBestResultFromCombinationsMatrix( ProcessingsOnPart) WriteCombinationLog( CombinationsList, BestCombination) end - local vFinalProc = GetProcessingListFromCombination( BestCombination) + local vFinalProc, nInitialPosition, bSomeFeatureDown, bSomeFeatureSide = GetProcessingListFromCombination( BestCombination) - return vFinalProc + return vFinalProc, nInitialPosition, bSomeFeatureDown, bSomeFeatureSide end ------------------------------------------------------------------------------------------------------------- @@ -1314,20 +1320,8 @@ 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]) - - -- aggiungo la fase, se non è la prima - if nOrd == 1 then - EgtSetCurrPhase( 1) - else - BeamLib.AddPhaseWithRawParts( PARTS[nPart].idRaw, BeamData.ptOriXR, BeamData.dPosXR, 0) - end - local nPhase = EgtGetCurrPhase() - local nDispId = EgtGetPhaseDisposition( nPhase) - EgtSetInfo( nDispId, 'TYPE', 'START') - EgtSetInfo( nDispId, 'ORD', nOrd) - EgtOutLog( ' *** Phase=' .. tostring( nPhase) .. ' Raw=' .. tostring( PARTS[nPart].idRaw) .. ' Part=' .. tostring( PARTS[nPart].id) .. ' ***', 1) - + local vProc, nInitialPosition, bSomeFeatureDown, bSomeFeatureSide = GetBestResultFromCombinationsMatrix( PROCESSINGS[nPart]) + -- debug if EgtGetDebugLevel() >= 1 then PrintFeatures( vProc, PARTS[nPart]) @@ -1338,14 +1332,92 @@ function BeamExec.ProcessMachinings( PROCESSINGS, PARTS) vProc = OrderFeatures( vProc) -- esegue le strategie migliori che ha precedentemente scelto e salva le lavorazioni nella lista globale - CalculateMachinings( vProc, PARTS[nPart]) + MACHININGS = CalculateMachinings( vProc, PARTS[nPart]) -- TODO riordinare lavorazioni ottimizzando cambio utensile/spezzone ecc..., mantenendo dipendenze definite prima -- ordino le lavorazioni - -- OrderMachining( vProc, PARTS[nPart]) + -- MACHININGS = OrderMachining( MACHININGS, PARTS[nPart]) - -- aggiunge effettivamente le lavorazioni - MachiningLib.AddOperations( vProc, PARTS[nPart]) + -- TODO se la posizione di partenza cambia, devo ruotare il pezzo! + + -- aggiungo la fase, se non è la prima + if nOrd == 1 then + EgtSetCurrPhase( 1) + else + BeamLib.AddPhaseWithRawParts( PARTS[nPart].idRaw, BeamData.ptOriXR, BeamData.dPosXR, 0) + end + local bAreAllMachiningApplyOk + local sErr + local bSplitAlreadyExecuted = false + local bSplitExecutedOnRot = false + local nPhase = EgtGetCurrPhase() + local nDispId = EgtGetPhaseDisposition( nPhase) + EgtSetInfo( nDispId, 'TYPE', 'START') + EgtSetInfo( nDispId, 'ORD', nOrd) + EgtOutLog( ' *** Phase=' .. tostring( nPhase) .. ' Raw=' .. tostring( PARTS[nPart].idRaw) .. ' Part=' .. tostring( PARTS[nPart].id) .. ' ***', 1) + + -- 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) + bAreAllMachiningApplyOk, sErr, bSplitExecutedOnRot = MachiningLib.AddOperations( MACHININGS, PARTS[nPart], 'DOWN') + bSplitAlreadyExecuted = bSplitAlreadyExecuted or bSplitExecutedOnRot + end + + -- se c'è almeno una lavorazione in posizionamento con trave ribaltata + if bSomeFeatureSide then + -- se ci sono state lavorazioni in rotazione precedente devo creare altra fase. Altrimenti già creata da prima + if bSomeFeatureDown then + BeamLib.AddPhaseWithRawParts( PARTS[nPart].idRaw, BeamData.ptOriXR, BeamData.dPosXR, 0) + nPhase = EgtGetCurrPhase() + nDispId = EgtGetPhaseDisposition( nPhase) + EgtSetInfo( nDispId, 'ORD', nOrd) + -- se c'è già stata seoparazione + if bSplitAlreadyExecuted then + EgtSetInfo( nDispId, 'TYPE', 'MID2') + else + EgtSetInfo( nDispId, 'TYPE', 'MID') + end + end + -- vettore movimento grezzi per rotazione di 90deg + 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) + bAreAllMachiningApplyOk, sErr, bSplitExecutedOnRot = MachiningLib.AddOperations( MACHININGS, PARTS[nPart], 'SIDE') + bSplitAlreadyExecuted = bSplitAlreadyExecuted or bSplitExecutedOnRot + end + + -- se ci sono state lavorazioni in rotazione precedente devo creare altra fase. Altrimenti già creata da prima + if bSomeFeatureDown or bSomeFeatureSide then + BeamLib.AddPhaseWithRawParts( PARTS[nPart].idRaw, BeamData.ptOriXR, BeamData.dPosXR, 0) + nPhase = EgtGetCurrPhase() + nDispId = EgtGetPhaseDisposition( nPhase) + EgtSetInfo( nDispId, 'ORD', nOrd) + -- se c'è già stata seoparazione + if bSplitAlreadyExecuted then + EgtSetInfo( nDispId, 'TYPE', 'END2') + else + EgtSetInfo( nDispId, 'TYPE', 'MID') + end + end + + -- aggiunta lavorazioni in ultima fase + MachiningLib.AddOperations( MACHININGS, PARTS[nPart], 'STD') EgtOutLog( ' *** End AddMachinings ***', 1) -- azzero lavorazioni per pezzo successivo diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index f9f377e..5276615 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -349,10 +349,11 @@ end ------------------------------------------------------------------------------------------------------------- -- funzione per aggiungere una nuova lavorazione -function MachiningLib.AddOperations( vProc, Part) +function MachiningLib.AddOperations( vProc, Part, sRotation) local nErr local sErr = '' local bAreAllMachiningApplyOk = true + local bSplitExecuted = false -- parametri generali lavorazione local MachiningParameters = { @@ -422,132 +423,146 @@ function MachiningLib.AddOperations( vProc, Part) } for i = 1, #MACHININGS do - local nClonesToAdd = 1 - if MACHININGS[i].AuxiliaryData.Clones then - nClonesToAdd = #MACHININGS[i].AuxiliaryData.Clones - end - for j = 1, nClonesToAdd do - -- creazione lavorazione - local nOperationId = EgtCreateMachining( MACHININGS[i].Machining.sOperationName, MACHININGS[i].Machining.nType, MACHININGS[i].Machining.sToolName) + -- si aggiungono solo quelle della fase richiesta + if ( sRotation == 'STD' and not MACHININGS[i].Proc.bDown and not MACHININGS[i].Proc.bSide) or + ( MACHININGS[i].Proc.bDown and sRotation == 'DOWN') or + ( MACHININGS[i].Proc.bSide and sRotation == 'SIDE') then + local nClonesToAdd = 1 + if MACHININGS[i].AuxiliaryData.Clones then + nClonesToAdd = #MACHININGS[i].AuxiliaryData.Clones + end + for j = 1, nClonesToAdd do + -- creazione lavorazione + local nOperationId = EgtCreateMachining( MACHININGS[i].Machining.sOperationName, MACHININGS[i].Machining.nType, MACHININGS[i].Machining.sToolName) - if nOperationId then - -- impostazione geometria - local Geometry - if MACHININGS[i].AuxiliaryData.Clones and MACHININGS[i].AuxiliaryData.Clones[j].Geometry then - Geometry = MACHININGS[i].AuxiliaryData.Clones[j].Geometry - elseif MACHININGS[i].Machining.Geometry then - Geometry = MACHININGS[i].Machining.Geometry - end - EgtSetMachiningGeometry( Geometry) + if nOperationId then + -- impostazione geometria + local Geometry + if MACHININGS[i].AuxiliaryData.Clones and MACHININGS[i].AuxiliaryData.Clones[j].Geometry then + Geometry = MACHININGS[i].AuxiliaryData.Clones[j].Geometry + elseif MACHININGS[i].Machining.Geometry then + Geometry = MACHININGS[i].Machining.Geometry + end + EgtSetMachiningGeometry( Geometry) - -- impostazione parametri lavorazione - -- TODO scrivere sempre Steps, LeadIn, LeadOut nelle tabelle in modo da non dover controllare ogni volta che ci siano - for k = 1, #MachiningParameters do - local sValue - if MACHININGS[i].AuxiliaryData.Clones and MACHININGS[i].AuxiliaryData.Clones[j][MachiningParameters[k].sName] then - sValue = MACHININGS[i].AuxiliaryData.Clones[j][MachiningParameters[k].sName] - elseif MACHININGS[i].Machining[MachiningParameters[k].sName] then - sValue = MACHININGS[i].Machining[MachiningParameters[k].sName] + -- impostazione parametri lavorazione + -- TODO scrivere sempre Steps, LeadIn, LeadOut nelle tabelle in modo da non dover controllare ogni volta che ci siano + for k = 1, #MachiningParameters do + local sValue + if MACHININGS[i].AuxiliaryData.Clones and MACHININGS[i].AuxiliaryData.Clones[j][MachiningParameters[k].sName] then + sValue = MACHININGS[i].AuxiliaryData.Clones[j][MachiningParameters[k].sName] + elseif MACHININGS[i].Machining[MachiningParameters[k].sName] then + sValue = MACHININGS[i].Machining[MachiningParameters[k].sName] + end + if sValue then + EgtSetMachiningParam( MachiningParameters[k].nMchParam, sValue) + end end - if sValue then - EgtSetMachiningParam( MachiningParameters[k].nMchParam, sValue) + for k = 1, #MachiningParameters.Steps do + local sValue + if MACHININGS[i].AuxiliaryData.Clones and MACHININGS[i].AuxiliaryData.Clones[j].Steps and MACHININGS[i].AuxiliaryData.Clones[j].Steps[MachiningParameters.Steps[k].sName] then + sValue = MACHININGS[i].AuxiliaryData.Clones[j].Steps[MachiningParameters.Steps[k].sName] + elseif MACHININGS[i].Machining.Steps and MACHININGS[i].Machining.Steps[MachiningParameters.Steps[k].sName] then + sValue = MACHININGS[i].Machining.Steps[MachiningParameters.Steps[k].sName] + end + if sValue then + EgtSetMachiningParam( MachiningParameters.Steps[k].nMchParam, sValue) + end end - end - for k = 1, #MachiningParameters.Steps do - local sValue - if MACHININGS[i].AuxiliaryData.Clones and MACHININGS[i].AuxiliaryData.Clones[j].Steps and MACHININGS[i].AuxiliaryData.Clones[j].Steps[MachiningParameters.Steps[k].sName] then - sValue = MACHININGS[i].AuxiliaryData.Clones[j].Steps[MachiningParameters.Steps[k].sName] - elseif MACHININGS[i].Machining.Steps and MACHININGS[i].Machining.Steps[MachiningParameters.Steps[k].sName] then - sValue = MACHININGS[i].Machining.Steps[MachiningParameters.Steps[k].sName] + for k = 1, #MachiningParameters.LeadIn do + local sValue + if MACHININGS[i].AuxiliaryData.Clones and MACHININGS[i].AuxiliaryData.Clones[j].LeadIn and MACHININGS[i].AuxiliaryData.Clones[j].LeadIn[MachiningParameters.LeadIn[k].sName] then + sValue = MACHININGS[i].AuxiliaryData.Clones[j].LeadIn[MachiningParameters.LeadIn[k].sName] + elseif MACHININGS[i].Machining.LeadIn and MACHININGS[i].Machining.LeadIn[MachiningParameters.LeadIn[k].sName] then + sValue = MACHININGS[i].Machining.LeadIn[MachiningParameters.LeadIn[k].sName] + end + if sValue then + EgtSetMachiningParam( MachiningParameters.LeadIn[k].nMchParam, sValue) + end end - if sValue then - EgtSetMachiningParam( MachiningParameters.Steps[k].nMchParam, sValue) + for k = 1, #MachiningParameters.LeadOut do + local sValue + if MACHININGS[i].AuxiliaryData.Clones and MACHININGS[i].AuxiliaryData.Clones[j].LeadOut and MACHININGS[i].AuxiliaryData.Clones[j].LeadOut[MachiningParameters.LeadOut[k].sName] then + sValue = MACHININGS[i].AuxiliaryData.Clones[j].LeadOut[MachiningParameters.LeadOut[k].sName] + elseif MACHININGS[i].Machining.LeadOut and MACHININGS[i].Machining.LeadOut[MachiningParameters.LeadOut[k].sName] then + sValue = MACHININGS[i].Machining.LeadOut[MachiningParameters.LeadOut[k].sName] + end + if sValue then + EgtSetMachiningParam( MachiningParameters.LeadOut[k].nMchParam, sValue) + end end - end - for k = 1, #MachiningParameters.LeadIn do - local sValue - if MACHININGS[i].AuxiliaryData.Clones and MACHININGS[i].AuxiliaryData.Clones[j].LeadIn and MACHININGS[i].AuxiliaryData.Clones[j].LeadIn[MachiningParameters.LeadIn[k].sName] then - sValue = MACHININGS[i].AuxiliaryData.Clones[j].LeadIn[MachiningParameters.LeadIn[k].sName] - elseif MACHININGS[i].Machining.LeadIn and MACHININGS[i].Machining.LeadIn[MachiningParameters.LeadIn[k].sName] then - sValue = MACHININGS[i].Machining.LeadIn[MachiningParameters.LeadIn[k].sName] + for k = 1, #UserNotes do + local sValue + if MACHININGS[i].AuxiliaryData.Clones and MACHININGS[i].AuxiliaryData.Clones[j][UserNotes[k].sName] then + sValue = MACHININGS[i].AuxiliaryData.Clones[j][UserNotes[k].sName] + elseif MACHININGS[i].Machining[UserNotes[k].sName] then + sValue = MACHININGS[i].Machining[UserNotes[k].sName] + end + if sValue then + local sUserNotes = '' + sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) + sUserNotes = EgtSetValInNotes( sUserNotes, UserNotes[k].sMchParam, sValue) + EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) + end end - if sValue then - EgtSetMachiningParam( MachiningParameters.LeadIn[k].nMchParam, sValue) + -- parametri da settare nelle note di sistema + -- TODO da decidere quali sono le note da salvare qui. Probabilmente tutte quelle relative all'ordine delle lavorazioni + --if MACHININGS[i].Machining.nMachiningOrder then + -- sSystemNotes = EgtSetValInNotes( sSystemNotes, 'MachiningOrder', MACHININGS[i].Machining.nMachiningOrder) + --end + for k = 1, #SystemNotes do + local sValue + if MACHININGS[i].AuxiliaryData.Clones and MACHININGS[i].AuxiliaryData.Clones[j][SystemNotes[k].sName] then + sValue = MACHININGS[i].AuxiliaryData.Clones[j][SystemNotes[k].sName] + elseif MACHININGS[i].Machining[SystemNotes[k].sName] then + sValue = MACHININGS[i].Machining[SystemNotes[k].sName] + end + if sValue then + local sSystemNotes = '' + sSystemNotes = EgtGetMachiningParam( MCH_MP.SYSNOTES) + sSystemNotes = EgtSetValInNotes( sSystemNotes, SystemNotes[k].sMchParam, sValue) + EgtSetMachiningParam( MCH_MP.SYSNOTES, sSystemNotes) + end end - end - for k = 1, #MachiningParameters.LeadOut do - local sValue - if MACHININGS[i].AuxiliaryData.Clones and MACHININGS[i].AuxiliaryData.Clones[j].LeadOut and MACHININGS[i].AuxiliaryData.Clones[j].LeadOut[MachiningParameters.LeadOut[k].sName] then - sValue = MACHININGS[i].AuxiliaryData.Clones[j].LeadOut[MachiningParameters.LeadOut[k].sName] - elseif MACHININGS[i].Machining.LeadOut and MACHININGS[i].Machining.LeadOut[MachiningParameters.LeadOut[k].sName] then - sValue = MACHININGS[i].Machining.LeadOut[MachiningParameters.LeadOut[k].sName] - end - if sValue then - EgtSetMachiningParam( MachiningParameters.LeadOut[k].nMchParam, sValue) - end - end - for k = 1, #UserNotes do - local sValue - if MACHININGS[i].AuxiliaryData.Clones and MACHININGS[i].AuxiliaryData.Clones[j][UserNotes[k].sName] then - sValue = MACHININGS[i].AuxiliaryData.Clones[j][UserNotes[k].sName] - elseif MACHININGS[i].Machining[UserNotes[k].sName] then - sValue = MACHININGS[i].Machining[UserNotes[k].sName] - end - if sValue then - local sUserNotes = '' - sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) - sUserNotes = EgtSetValInNotes( sUserNotes, UserNotes[k].sMchParam, sValue) - EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) - end - end - -- parametri da settare nelle note di sistema - -- TODO da decidere quali sono le note da salvare qui. Probabilmente tutte quelle relative all'ordine delle lavorazioni - --if MACHININGS[i].Machining.nMachiningOrder then - -- sSystemNotes = EgtSetValInNotes( sSystemNotes, 'MachiningOrder', MACHININGS[i].Machining.nMachiningOrder) - --end - for k = 1, #SystemNotes do - local sValue - if MACHININGS[i].AuxiliaryData.Clones and MACHININGS[i].AuxiliaryData.Clones[j][SystemNotes[k].sName] then - sValue = MACHININGS[i].AuxiliaryData.Clones[j][SystemNotes[k].sName] - elseif MACHININGS[i].Machining[SystemNotes[k].sName] then - sValue = MACHININGS[i].Machining[SystemNotes[k].sName] - end - if sValue then - local sSystemNotes = '' - sSystemNotes = EgtGetMachiningParam( MCH_MP.SYSNOTES) - sSystemNotes = EgtSetValInNotes( sSystemNotes, SystemNotes[k].sMchParam, sValue) - EgtSetMachiningParam( MCH_MP.SYSNOTES, sSystemNotes) - end - end - local bIsApplyOk = MachiningLib.ApplyMachining( true, false) - if not bIsApplyOk then - bAreAllMachiningApplyOk = false - nErr, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nOperationId, false) - end - - -- TODO è giusto inserire queste info alla fine della lavorazione? oppure conviene creare un record in MACHININGS apposito per la disposizione? - -- se era taglio di separazione, aggiungo nuova fase - if MACHININGS[i].AuxiliaryData.bAddNewPhase then - BeamLib.AddPhaseWithRawParts( MACHININGS[i].Proc.idRaw, BeamData.ptOriXR, BeamData.dPosXR, BeamData.RAW_OFFSET) - -- se grezzo successivo senza pezzi e finale, va tolto - local nNextRawId = EgtGetNextRawPart( MACHININGS[i].Proc.idRaw) - if nNextRawId and EgtGetPartInRawPartCount( nNextRawId) == 0 and EgtGetRawPartBBox( nNextRawId):getDimX() < BeamData.dMinRaw then - EgtRemoveRawPartFromCurrPhase( nNextRawId) + local bIsApplyOk = MachiningLib.ApplyMachining( true, false) + if not bIsApplyOk then + bAreAllMachiningApplyOk = false + nErr, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nOperationId, false) end - local nPhase = EgtGetCurrPhase() - local nDispId = EgtGetPhaseDisposition( nPhase) - EgtSetInfo( nDispId, 'TYPE', 'END') - EgtSetInfo( nDispId, 'ORD', MACHININGS[i].Proc.nIndexPartInParts) + + -- TODO è giusto inserire queste info alla fine della lavorazione? oppure conviene creare un record in MACHININGS apposito per la disposizione? + -- se era taglio di separazione, aggiungo nuova fase + if MACHININGS[i].AuxiliaryData.bAddNewPhase then + bSplitExecuted = true + BeamLib.AddPhaseWithRawParts( MACHININGS[i].Proc.idRaw, BeamData.ptOriXR, BeamData.dPosXR, BeamData.RAW_OFFSET) + -- se grezzo successivo senza pezzi e finale, va tolto + local nNextRawId = EgtGetNextRawPart( MACHININGS[i].Proc.idRaw) + if nNextRawId and EgtGetPartInRawPartCount( nNextRawId) == 0 and EgtGetRawPartBBox( nNextRawId):getDimX() < BeamData.dMinRaw then + EgtRemoveRawPartFromCurrPhase( nNextRawId) + end + local nPhase = EgtGetCurrPhase() + local nDispId = EgtGetPhaseDisposition( nPhase) + + if sRotation == 'DOWN' then + EgtSetInfo( nDispId, 'ROT', -2) + EgtSetInfo( nDispId, 'TYPE', 'MID2') + elseif sRotation == 'SIDE' then + EgtSetInfo( nDispId, 'ROT', -1) + EgtSetInfo( nDispId, 'TYPE', 'MID2') + else + EgtSetInfo( nDispId, 'TYPE', 'END') + end + EgtSetInfo( nDispId, 'ORD', MACHININGS[i].Proc.nIndexPartInParts) + end + else + return false, 'UNEXPECTED ERROR: Error on creating machining', bSplitExecuted end - else - return false, 'UNEXPECTED ERROR: Error on creating machining' end end end - - return bAreAllMachiningApplyOk, sErr + return bAreAllMachiningApplyOk, sErr, bSplitExecuted end -------------------------------------------------------------------------------------------------------------