diff --git a/LuaLibs/ProcessLongCut.lua b/LuaLibs/ProcessLongCut.lua index 95695fc..18437bb 100644 --- a/LuaLibs/ProcessLongCut.lua +++ b/LuaLibs/ProcessLongCut.lua @@ -144,7 +144,7 @@ end --------------------------------------------------------------------- -- Calcolo posizione braccio -function ProcessLongCut.GetSCC( Proc, nFacet, sMachining, nFaceUse, bInvert, nCuttingStep, nC, bAreCuttingStepsTowardsHead, bIsTopBlade) +function ProcessLongCut.GetSCC( Proc, nFacet, sMachining, nFaceUse, bInvert, nCuttingStep, nC, bAreCuttingStepsTowardsHead, bIsTopBlade, bCustUseBlade) local nSCC = MCH_SCC.NONE local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nFacet, GDB_ID.ROOT) local sToolUUID = GetToolUUID( sMachining) @@ -152,28 +152,41 @@ function ProcessLongCut.GetSCC( Proc, nFacet, sMachining, nFaceUse, bInvert, nCu if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sToolUUID) or '') then bIsBlade = ( ( EgtTdbGetCurrToolParam( MCH_TP.TYPE) & MCH_TF.SAWBLADE) ~= 0) end - + + -- se Turn posiziono la testa per creare il minor ingombro possibile + if BD.TURN then + if nFaceUse == MCH_MILL_FU.ORTHO_DOWN or ( ( nFaceUse == MCH_MILL_FU.PARAL_FRONT or nFaceUse == MCH_MILL_FU.PARAL_BACK) and vtN:getZ() > -GEO.EPS_SMALL) then + nSCC = MCH_SCC.ADIR_ZP + elseif nFaceUse == MCH_MILL_FU.ORTHO_TOP or ( nFaceUse == MCH_MILL_FU.PARAL_FRONT or nFaceUse == MCH_MILL_FU.PARAL_BACK) then + nSCC = MCH_SCC.ADIR_ZM + elseif nFaceUse == MCH_MILL_FU.ORTHO_FRONT or ( ( nFaceUse == MCH_MILL_FU.PARAL_DOWN or nFaceUse == MCH_MILL_FU.PARAL_TOP) and vtN:getY() > -GEO.EPS_SMALL) then + nSCC = MCH_SCC.ADIR_YP + elseif nFaceUse == MCH_MILL_FU.ORTHO_BACK or ( nFaceUse == MCH_MILL_FU.PARAL_DOWN or nFaceUse == MCH_MILL_FU.PARAL_TOP) then + nSCC = MCH_SCC.ADIR_YM + end -- se Fast e asse utensile diretto come Z posiziono l'aggregato in Y per avere il minore ingombro possibile - if not BD.C_SIMM and not BD.TURN and AreSameVectorApprox( vtN, Z_AX()) then + elseif not BD.C_SIMM and AreSameVectorApprox( vtN, Z_AX()) then nSCC = MCH_SCC.ADIR_YM - -- se Fast o Turn posiziono l'aggregato in X per ottimizzare il pinzaggio - elseif not BD.C_SIMM then + -- se Fast ( escluso caso speciale con taglio non passante e inclinato in X) posiziono l'aggregato in X per ottimizzare il pinzaggio + elseif not BD.C_SIMM and ( not ( bCustUseBlade and abs(vtN:getX()) > 0.009 + 5 * GEO.EPS_SMALL) or not bIsBlade) then if bAreCuttingStepsTowardsHead then nSCC = EgtIf( ( not ( nCuttingStep == 1 or nCuttingStep == nC - 1)), MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM) else nSCC = EgtIf( ( not ( nCuttingStep == 1 or nCuttingStep == nC - 1)), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) end - -- per PF o simili e lama senza aggregato o fresa non do alcuna preferenza - elseif ( bIsBlade and not bIsTopBlade) or not bIsBlade then - nSCC = MCH_SCC.NONE - -- per PF o simili e lama con aggregato lo posiziono in Y per stare il più lontano possibile dalla trave - else - local vtAux = GetProcessSpecificVectors( Proc, nFacet, nFaceUse, bInvert) - if abs( vtAux:getX()) > abs( vtAux:getY()) - GEO.EPS_SMALL then + -- per PF o simili oppure se Fast ( caso speciale con taglio non passante e inclinato in X) e lama con aggregato lo posiziono per stare il più lontano possibile dalla trave + elseif ( bIsBlade and bIsTopBlade) or not BD.C_SIMM then + local vtAux = GetProcessSpecificVectors( Proc, nFacet, nFaceUse, bInvert, sMachining) + if bCustUseBlade then + nSCC = EgtIf( ( nFaceUse == MCH_MILL_FU.ORTHO_TOP or nFaceUse == MCH_MILL_FU.ORTHO_FRONT) and vtN:getY() > -GEO.EPS_SMALL, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) + elseif ( abs( vtAux:getX()) > abs( vtAux:getY()) - GEO.EPS_SMALL) then nSCC = EgtIf( ( vtAux:getX() > -GEO.EPS_SMALL), MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM) else nSCC = EgtIf( ( vtAux:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) end + -- per PF o simili e lama senza aggregato o fresa non do alcuna preferenza + else + nSCC = MCH_SCC.NONE end return nSCC @@ -1123,12 +1136,7 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus -- step sempre positivi local bAreCuttingStepsTowardsHead = true -- calcolo SCC - local nSCC = ProcessLongCut.GetSCC( Proc, 0, EgtIf( bIsTopBladeCurrent, sCutting, sCuttingDn), nFaceUseCurrent, bInvert, i, nC, bAreCuttingStepsTowardsHead, bIsTopBladeCurrent) - -- 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 - nSCC = EgtIf( ( not bFront and k == 1) or ( bFront and k == 2), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) - end + local nSCC = ProcessLongCut.GetSCC( Proc, 0, EgtIf( bIsTopBladeCurrent, sCutting, sCuttingDn), nFaceUseCurrent, bInvert, i, nC, bAreCuttingStepsTowardsHead, bIsTopBladeCurrent, bCustUseBlade) -- setto la lavorazione con i valori calcolati EgtSetMachiningParam( MCH_MP.INVERT, bInvert) @@ -1361,10 +1369,7 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus EgtSetMachiningParam( MCH_MP.OFFSR, ( k - 1) * dStep - BD.CUT_EXTRA) -- Posizione braccio portatesta local bAreCuttingStepsTowardsHead = ( nStartSide == 0) - local nSCC = ProcessLongCut.GetSCC( Proc, 0, sMilling, nFaceUse, bInvert, i, nC, bAreCuttingStepsTowardsHead, nil) - if BD.TURN then - nSCC = EgtIf( nFaceUse == MCH_MILL_FU.ORTHO_DOWN, MCH_SCC.ADIR_ZP, EgtIf( nFaceUse == MCH_MILL_FU.ORTHO_FRONT, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)) - end + local nSCC = ProcessLongCut.GetSCC( Proc, 0, sMilling, nFaceUse, bInvert, i, nC, bAreCuttingStepsTowardsHead, nil, nil) -- imposto posizione braccio porta testa per non ingombrare agli estremi EgtSetMachiningParam( MCH_MP.SCC, nSCC) -- imposto uso della faccia @@ -1771,7 +1776,7 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus -- step sempre negativi local bAreCuttingStepsTowardsHead = false -- calcolo SCC - local nSCC = ProcessLongCut.GetSCC( Proc, 0, EgtIf( vnHead[k] ~= 2, sMilling, sMillingDn), nFaceUse, bInvert, j, nC, bAreCuttingStepsTowardsHead, nil) + local nSCC = ProcessLongCut.GetSCC( Proc, 0, EgtIf( vnHead[k] ~= 2, sMilling, sMillingDn), nFaceUse, bInvert, j, nC, bAreCuttingStepsTowardsHead, nil, nil) -- imposto posizione braccio porta testa EgtSetMachiningParam( MCH_MP.SCC, nSCC) -- eseguo