diff --git a/LuaLibs/ProcessLongCut.lua b/LuaLibs/ProcessLongCut.lua index f718917..5896150 100644 --- a/LuaLibs/ProcessLongCut.lua +++ b/LuaLibs/ProcessLongCut.lua @@ -17,6 +17,8 @@ -- 2022/11/30 Modifiche su SCC per TURN. -- 2023/01/18 Aggiunta, se richiesta, una lavorazione ulteriore con sega a catena nei casi in cui la doppia lama non sia sufficiente. -- 2023/01/26 Rimossa la pulitura della faccia laterale nel caso in cui la feature abbia almeno una faccia rivolta verso il basso. +-- 2023/01/27 In MakeSideFace il prolungamento di uscita è ora fissato a 10 mm. +-- 2023/01/27 In caso di lavorazione aggiuntiva con fresa a catena il taglio con lama da sotto viene effettuato a step. -- Tabella per definizione modulo local ProcessLongCut = {} @@ -107,8 +109,8 @@ local function MakeSideFace( nId, nFac, nSide, sMilling, dToolDiam, bForcedLim, -- attacco e uscita EgtSetMachiningParam( MCH_MP.LIPERP, 0) EgtSetMachiningParam( MCH_MP.LITANG, dToolDiam / 2 + 30) - EgtSetMachiningParam( MCH_MP.LOPERP, 0) - EgtSetMachiningParam( MCH_MP.LOTANG, dToolDiam / 2 + 30) + EgtSetMachiningParam( MCH_MP.LOPERP, 2) + EgtSetMachiningParam( MCH_MP.LOTANG, 10) -- eseguo if not ML.ApplyMachining( true, false) then local _, sErr = EgtGetLastMachMgrError() @@ -740,7 +742,7 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus -- solo per T010 local bFinishWithChainSaw = false if ( Proc.Prc == 10 and not ProcessLongCut.Identify( Proc)) and bLarghAsFace and abs( nSide) == 2 and ( bCanUseBlade and bCanUseUnderBlade) and Proc.Fct == 1 then - bFinishWithChainSaw = EgtIf ( EgtGetInfo( Proc.Id, 'Q05', 'i') or 0 == 1, true, false) + bFinishWithChainSaw = EgtIf ( ( EgtGetInfo( Proc.Id, 'Q05', 'i') or 0) == 1, true, false) end local nFaceUse @@ -759,11 +761,17 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus -- calcolo quanto è l'affondamento del taglio local dOffsetTopBlade = ( dWidth + dDimStrip) / 2 local dOffsetDownBlade = ( dWidth + dDimStrip) / 2 + local nStepDownBlade = 1 + local dStepDownBlade = dWidth - dOffsetDownBlade -- se lama da sotto verifico se la componente Y della profondità di taglio supera la capacità della lama if ( nSide == -1 or abs(nSide) == 2) and bCanUseUnderBlade and (( dWidth - dDimStrip) / 2) > dMaxDepthDn then if bFinishWithChainSaw then dOffsetTopBlade = max( dWidth - dMaxDepth + ( BD.DECR_VERT_CUT or 0), dOffsetTopBlade) dOffsetDownBlade = max( dWidth - dMaxDepthDn, dOffsetDownBlade) + local dHCutDownBlade = dWidth - dOffsetDownBlade + local dMaxStepDownBlade = 64 + nStepDownBlade = ceil( dHCutDownBlade / dMaxStepDownBlade) + dStepDownBlade = dHCutDownBlade / nStepDownBlade else local sErr = 'Error : side depth is bigger than underneath blade cut depth' EgtOutLog( sErr) @@ -844,121 +852,125 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus local dLioTang = 0 for k = 1, 2 do - local dLioPerp = ( dWidth - dDimStrip) / 2 + BD.CUT_SIC - local bAddOpposite = true - local dAddExtraPerp = 0 - -- se faccia da sotto e angolo inferiore ai 12° o faccia di fianco e angolo inferiore a 15° (al di sotto di questo angolo - -- l'attacco lama si comporta in modo diverso) allora calcolo il valore perpendicolare con la funzione CalcLeadInOutPerpGeom - if ( nSide == -1 and abs(vtN:getY()) >= 0.2079) or ( abs(nSide) == 2 and abs(vtN:getZ()) >= 0.2588) then - bAddOpposite = false - end - -- faccio in modo di calcolare il valore perpendicolare solo sulla faccia da sotto nel secondo passo o sulla faccia di fianco nel primo passo - if nSide == 1 or ( nSide == -1 and k == 1) or ( abs(nSide) == 2 and k == 2) then - bAddOpposite = false - end - if bAddOpposite then - -- controllo se devo aggiungere un extra all'attacco perpendicolare - if nSide == -1 then - if vtN:getY() > 0 then - dAddExtraPerp = Proc.Box:getMin():getY() - b3Solid:getMin():getY() - elseif vtN:getY() < 0 then - dAddExtraPerp = b3Solid:getMax():getY() - Proc.Box:getMax():getY() + local nStep = 1 + if k == 2 then nStep = nStepDownBlade end + for Zstep = nStep, 1, -1 do + local dLioPerp = ( dWidth - dDimStrip) / 2 + BD.CUT_SIC + local bAddOpposite = true + local dAddExtraPerp = 0 + -- se faccia da sotto e angolo inferiore ai 12° o faccia di fianco e angolo inferiore a 15° (al di sotto di questo angolo + -- l'attacco lama si comporta in modo diverso) allora calcolo il valore perpendicolare con la funzione CalcLeadInOutPerpGeom + if ( nSide == -1 and abs(vtN:getY()) >= 0.2079) or ( abs(nSide) == 2 and abs(vtN:getZ()) >= 0.2588) then + bAddOpposite = false + end + -- faccio in modo di calcolare il valore perpendicolare solo sulla faccia da sotto nel secondo passo o sulla faccia di fianco nel primo passo + if nSide == 1 or ( nSide == -1 and k == 1) or ( abs(nSide) == 2 and k == 2) then + bAddOpposite = false + end + if bAddOpposite then + -- controllo se devo aggiungere un extra all'attacco perpendicolare + if nSide == -1 then + if vtN:getY() > 0 then + dAddExtraPerp = Proc.Box:getMin():getY() - b3Solid:getMin():getY() + elseif vtN:getY() < 0 then + dAddExtraPerp = b3Solid:getMax():getY() - Proc.Box:getMax():getY() + end + elseif abs(nSide) == 2 then + dAddExtraPerp = Proc.Box:getMin():getZ() - b3Solid:getMin():getZ() end - elseif abs(nSide) == 2 then - dAddExtraPerp = Proc.Box:getMin():getZ() - b3Solid:getMin():getZ() + dLioPerp = dLioPerp + dAddExtraPerp end - dLioPerp = dLioPerp + dAddExtraPerp - end - -- inserisco le parti di lavorazione - nM = nM + 1 - local sNameF - local nMchFId + -- inserisco le parti di lavorazione + nM = nM + 1 + local sNameF + local nMchFId - if ( k == 1 and bCanUseBlade) or ( k == 2 and ( bCanUseBlade and not bCanUseUnderBlade)) then - sNameF = 'L2C_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( nM) - nMchFId = EgtAddMachining( sNameF, sCutting) - if not nMchFId then - local sErr = 'Error adding machining ' .. sNameF .. '-' .. sCutting - EgtOutLog( sErr) - return false, sErr + if ( k == 1 and bCanUseBlade) or ( k == 2 and ( bCanUseBlade and not bCanUseUnderBlade)) then + sNameF = 'L2C_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( nM) + nMchFId = EgtAddMachining( sNameF, sCutting) + if not nMchFId then + local sErr = 'Error adding machining ' .. sNameF .. '-' .. sCutting + EgtOutLog( sErr) + return false, sErr + end + -- setto le variabili delle distanze dagli estremi + dEndDist = dEndDistUp + dEndAccDist = dEndAccDistUp + dStartDist = dStartDistUp + dStartAccDist = dStartAccDistUp + elseif ( k == 2 and bCanUseUnderBlade) or ( k == 1 and ( bCanUseUnderBlade and not bCanUseBlade)) then + sNameF = 'L2CD_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( nM) + nMchFId = EgtAddMachining( sNameF, sCuttingDn) + if not nMchFId then + local sErr = 'Error adding machining ' .. sNameF .. '-' .. sCuttingDn + EgtOutLog( sErr) + return false, sErr + end + -- setto le variabili delle distanze dagli estremi + dEndDist = dEndDistDn + dEndAccDist = dEndAccDistDn + dStartDist = dStartDistDn + dStartAccDist = dStartAccDistDn end - -- setto le variabili delle distanze dagli estremi - dEndDist = dEndDistUp - dEndAccDist = dEndAccDistUp - dStartDist = dStartDistUp - dStartAccDist = dStartAccDistUp - elseif ( k == 2 and bCanUseUnderBlade) or ( k == 1 and ( bCanUseUnderBlade and not bCanUseBlade)) then - sNameF = 'L2CD_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( nM) - nMchFId = EgtAddMachining( sNameF, sCuttingDn) - if not nMchFId then - local sErr = 'Error adding machining ' .. sNameF .. '-' .. sCuttingDn - EgtOutLog( sErr) - return false, sErr + -- aggiungo geometria + EgtSetMachiningGeometry( {{ Proc.Id, 0}}) + -- limito opportunamente la lavorazione + local dSal = EgtIf( i == nC, -dEndDist, - dEndAccDist - ( nC - i - 1) * dC) + local dEal = EgtIf( i == 1, -dStartDist, - dStartAccDist - ( i - 2) * dC) + if ( not bFront and k == 1) or ( bFront and k == 2) then + dSal, dEal = dEal, dSal end - -- setto le variabili delle distanze dagli estremi - dEndDist = dEndDistDn - dEndAccDist = dEndAccDistDn - dStartDist = dStartDistDn - dStartAccDist = dStartAccDistDn - end - -- aggiungo geometria - EgtSetMachiningGeometry( {{ Proc.Id, 0}}) - -- limito opportunamente la lavorazione - local dSal = EgtIf( i == nC, -dEndDist, - dEndAccDist - ( nC - i - 1) * dC) - local dEal = EgtIf( i == 1, -dStartDist, - dStartAccDist - ( i - 2) * dC) - if ( not bFront and k == 1) or ( bFront and k == 2) then - dSal, dEal = dEal, dSal - end - - if bCanUseBlade and bCanUseUnderBlade then - EgtSetMachiningParam( MCH_MP.INVERT, true) - EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) - dSal, dEal = dEal, dSal - -- imposto uso della faccia - EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse2, nFaceUse)) - elseif bCanUseBlade and BD.USE_LONGCUT then - EgtSetMachiningParam( MCH_MP.INVERT, true) - EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) - dSal, dEal = dEal, dSal - -- imposto uso della faccia - EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse2, nFaceUse)) - elseif bCanUseUnderBlade then - if abs(nSide) ~= 2 then - EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) - end - -- imposto uso della faccia - EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse, nFaceUse2)) - else - -- imposto uso della faccia - EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse, nFaceUse2)) - end - - EgtSetMachiningParam( MCH_MP.STARTADDLEN, dSal) - EgtSetMachiningParam( MCH_MP.ENDADDLEN, dEal) - -- imposto offset radiale - local dOffset = EgtIf( k == 1, dOffsetTopBlade, dOffsetDownBlade) - EgtSetMachiningParam( MCH_MP.OFFSR, EgtIf( nSide == -1, -dOffset, dOffset)) - -- imposto attacco/uscita - EgtSetMachiningParam( MCH_MP.LITANG, dLioTang) - EgtSetMachiningParam( MCH_MP.LIPERP, dLioPerp) - EgtSetMachiningParam( MCH_MP.LOTANG, dLioTang) - EgtSetMachiningParam( MCH_MP.LOPERP, dLioPerp) - -- se il flag uso lama custom abilitato (indica che questo script è lanciato dal ProcessCut) - -- controllo se componente X versore è maggiore di un valore limite cambio la direzione della forcella - if bCustUseBlade and abs(vtN:getX()) > 0.009 + 5 * GEO.EPS_SMALL then - if BD.USE_LONGCUT then - nSCC = EgtIf( ( bFront and k == 1) or ( not bFront and k == 2), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) + + if bCanUseBlade and bCanUseUnderBlade then + EgtSetMachiningParam( MCH_MP.INVERT, true) + EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) + dSal, dEal = dEal, dSal + -- imposto uso della faccia + EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse2, nFaceUse)) + elseif bCanUseBlade and BD.USE_LONGCUT then + EgtSetMachiningParam( MCH_MP.INVERT, true) + EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) + dSal, dEal = dEal, dSal + -- imposto uso della faccia + EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse2, nFaceUse)) + elseif bCanUseUnderBlade then + if abs(nSide) ~= 2 then + EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) + end + -- imposto uso della faccia + EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse, nFaceUse2)) else - nSCC = EgtIf( ( not bFront and k == 1) or ( bFront and k == 2), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) + -- imposto uso della faccia + EgtSetMachiningParam( MCH_MP.FACEUSE, EgtIf( k == 1, nFaceUse, nFaceUse2)) + end + + EgtSetMachiningParam( MCH_MP.STARTADDLEN, dSal) + EgtSetMachiningParam( MCH_MP.ENDADDLEN, dEal) + -- imposto offset radiale + local dOffset = EgtIf( k == 1, dOffsetTopBlade, dOffsetDownBlade + dStepDownBlade * ( Zstep - 1)) + EgtSetMachiningParam( MCH_MP.OFFSR, EgtIf( nSide == -1, -dOffset, dOffset)) + -- imposto attacco/uscita + EgtSetMachiningParam( MCH_MP.LITANG, dLioTang) + EgtSetMachiningParam( MCH_MP.LIPERP, dLioPerp) + EgtSetMachiningParam( MCH_MP.LOTANG, dLioTang) + EgtSetMachiningParam( MCH_MP.LOPERP, dLioPerp) + -- se il flag uso lama custom abilitato (indica che questo script è lanciato dal ProcessCut) + -- controllo se componente X versore è maggiore di un valore limite cambio la direzione della forcella + if bCustUseBlade and abs(vtN:getX()) > 0.009 + 5 * GEO.EPS_SMALL then + if BD.USE_LONGCUT then + nSCC = EgtIf( ( bFront and k == 1) or ( not bFront and k == 2), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) + else + nSCC = EgtIf( ( not bFront and k == 1) or ( bFront and k == 2), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) + end + end + -- imposto posizione braccio porta testa per non ingombrare agli estremi + EgtSetMachiningParam( MCH_MP.SCC, nSCC) + -- eseguo + if not ML.ApplyMachining( true, false) then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchFId, false) + return false, sErr end - end - -- imposto posizione braccio porta testa per non ingombrare agli estremi - EgtSetMachiningParam( MCH_MP.SCC, nSCC) - -- eseguo - if not ML.ApplyMachining( true, false) then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchFId, false) - return false, sErr end end end diff --git a/LuaLibs/ProcessLongDoubleCut.lua b/LuaLibs/ProcessLongDoubleCut.lua index bc17405..90adb4b 100644 --- a/LuaLibs/ProcessLongDoubleCut.lua +++ b/LuaLibs/ProcessLongDoubleCut.lua @@ -11,6 +11,7 @@ -- 2022/06/29 Corretto calcolo lunghezza attacco/uscita perpendicolare per lavorazioni di fianco. -- 2022/11/30 Modifiche su SCC per TURN. -- 2023/01/26 Rimossa la pulitura della faccia laterale nel caso in cui la feature abbia almeno una faccia rivolta verso il basso. +-- 2023/01/27 In MakeSideFace il prolungamento di uscita è ora fissato a 10 mm. -- Tabella per definizione modulo local ProcessLong2Cut = {} @@ -145,8 +146,8 @@ local function MakeSideFace( nId, nFac, nSideLimitingFace, sMilling, dToolDiam, -- attacco e uscita EgtSetMachiningParam( MCH_MP.LIPERP, 0) EgtSetMachiningParam( MCH_MP.LITANG, dToolDiam / 2 + 30) - EgtSetMachiningParam( MCH_MP.LOPERP, 0) - EgtSetMachiningParam( MCH_MP.LOTANG, dToolDiam / 2 + 30) + EgtSetMachiningParam( MCH_MP.LOPERP, 2) + EgtSetMachiningParam( MCH_MP.LOTANG, 10) -- se faccia di fianco e testa da sotto, aumento la sicurezza if nL2CSide == 0 and BD.DOWN_HEAD then EgtSetMachiningParam( MCH_MP.STARTPOS, 80)