diff --git a/LuaLibs/ProcessMortise.lua b/LuaLibs/ProcessMortise.lua index 9d953ee..f539e6c 100644 --- a/LuaLibs/ProcessMortise.lua +++ b/LuaLibs/ProcessMortise.lua @@ -79,6 +79,52 @@ function ProcessMortise.GetCutPlane( Proc) end end +--------------------------------------------------------------------- +-- Aggiunge la lavorazione di pulizia angoli + local function AddCleanCornersMachining( nProcId, sMortising, nWorkFaceInd, vtN) + local sName = 'Mort_' .. ( EgtGetName( nProcId) or tostring( nProcId)) .. '_CleanCorners1' + local nMchFId = EgtAddMachining( sName, sMortising) + if not nMchFId then + local sErr = 'Error adding machining ' .. sName .. '-' .. sMortising + EgtOutLog( sErr) + return false, sErr + end + sName = EgtGetOperationName( nMchFId) + -- aggiungo geometria + EgtSetMachiningGeometry( {{ nProcId, nWorkFaceInd}}) + local nFaceUse = BL.GetNearestParalOpposite( vtN) + local vtOrtho = BL.GetVersRef( nFaceUse) + -- imposto angolo 3° asse rot + EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetChainSawBlockedAxis( 1)) + EgtSetMachiningParam( MCH_MP.INITANGS, BL.GetChainSawInitAngs( vtN, vtOrtho, 1)) + -- imposto uso del lato faccia + EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse) + -- applico il parametro plunge, che setta la lavorazione per affondare solamente, senza lavorare tutto il contorno; 1: solo lato iniziale, 2: solo lato finale, 3: entrambi + sNotes = 'Plunge=3;' + EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) + if not ML.ApplyMachining( true, false) then + if EgtGetOutstrokeInfo() then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchFId, false) + return false, sErr + end + -- impostazione alternativa angolo 3° asse rot + EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetChainSawBlockedAxis( 2)) + EgtSetMachiningParam( MCH_MP.INITANGS, BL.GetChainSawInitAngs( vtN, vtOrtho, 2)) + if not ML.ApplyMachining( true, false) then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchFId, false) + return false, sErr + end + end + if EgtIsMachiningEmpty() then + _, sWarn = EgtGetMachMgrWarning( 0) + EgtSetOperationMode( nMchFId, false) + return false, sWarn + end + return true, sWarn + end + --------------------------------------------------------------------- -- Pulizia angoli nel caso sia settato il parametro P04=1 local function CleanCorners( Proc, dMorH, vtN, bOpenBtm) @@ -112,25 +158,23 @@ local function CleanCorners( Proc, dMorH, vtN, bOpenBtm) EgtOutLog( sErr) return false, sErr end - local sName = 'Mort_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_CleanCorners' - nMchFId = EgtAddMachining( sName, sMortisingCleanCorners) - if not nMchFId then - local sErr = 'Error adding machining ' .. sName .. '-' .. sMortisingCleanCorners - EgtOutLog( sErr) - return false, sErr - end - sName = EgtGetOperationName( nMchFId) - -- aggiungo geometria + -- cerco le due facce migliori da lavorare local nWorkFaceInd, _, _ = BL.FindFaceBestOrientedAsAxis( Proc, vtN ^ X_AX()) local nWorkFaceInd2, _, _ = BL.FindFaceBestOrientedAsAxis( Proc, vtN ^ X_AX(), nWorkFaceInd) - EgtSetMachiningGeometry( {{ Proc.Id, nWorkFaceInd}, { Proc.Id, nWorkFaceInd2}}) - local nFaceUse = BL.GetNearestParalOpposite( vtN) - -- imposto uso del lato faccia - EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse) - -- applico il parametro plunge, che setta la lavorazione per affondare solamente, senza lavorare tutto il contorno; 1: solo lato iniziale, 2: solo lato finale, 3: entrambi - local sNotes = 'Plunge=3;' - EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) - return true, sWarn + -- lavoro la prima faccia + local bOk1, sErr = AddCleanCornersMachining( Proc.Id, sMortisingCleanCorners, nWorkFaceInd, vtN) + -- lavoro la seconda faccia + local bOk2, sErr2 = AddCleanCornersMachining( Proc.Id, sMortisingCleanCorners, nWorkFaceInd2, vtN) + if sErr2 then + if not sErr then sErr = '' end + if sErr ~= sErr2 then + sErr = EgtIf( #sErr > 0, sErr .. '\n' .. sErr2, sErr2) + end + end + if not bOk1 or not bOk2 then + return false, sErr + end + return true, sErr end end end