diff --git a/LuaLibs/ProcessCut.lua b/LuaLibs/ProcessCut.lua index 30290cc..3071633 100644 --- a/LuaLibs/ProcessCut.lua +++ b/LuaLibs/ProcessCut.lua @@ -401,7 +401,7 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b local frFace = BL.GetFaceHvRefDim( Proc.Id, 0) -- verifico che i tagli perpendicolari siano perpendicolari al lato più vicino a Z local vtTemp = EgtSurfTmFacetNormVersor( vCuts[1][1], 0, GDB_ID.ROOT) ^ frFace:getVersY() - if #vCuts > 0 and not ( bDownCut or bFromBottom) and bVertCutOk and vtTemp:isSmall() then + if #vCuts > 0 and vtTemp:isSmall() and not ( bDownCut or bFromBottom) then bDangerousReliefCut = true end @@ -464,49 +464,65 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b end end - -- - if bDangerousReliefCut and i % 2 == 0 then - + local bDoubleCutOk = false + local nSurfToCut + if i % 2 == 0 then + local _, dDiceFaceH = BL.GetFaceHvRefDim( vCuts[i][1], 0) + bDoubleCutOk = dDiceFaceH < 2 * ( dMaxDepth - BD.CUT_EXTRA) + nSurfToCut = EgtSurfTmBySewing( nAddGrpId, vCuts[i], false) end - - -- lavoro la faccia - for j = 1, #vCuts[i] do - -- se taglio dal basso - if bDownCut then - -- se strato pari composto da 1 o 2 elementi - if ( i % 2) == 0 and #vCuts[i] <= 2 then - -- il primo elemento prende la direzione prevista, il secondo quella opposta - local vtNewOrthoO = Vector3d( vtOrthoO) - local dVzLimDwnUp = dNzLimDwnUp - if j ~= 1 then - vtNewOrthoO = -vtOrthoO - if not BD.C_SIMM and not BD.TURN and abs( vtN:getY()) > 0.05 then dVzLimDwnUp = -0.708 end + -- caso speciale con rischio cubetto sul motore + if bDangerousReliefCut and bDoubleCutOk then + local nFaceUseCut1, nFaceUseCut2 = MCH_MILL_FU.ORTHO_BACK, MCH_MILL_FU.ORTHO_FRONT + if Proc.Tail then + nFaceUseCut1, nFaceUseCut2 = nFaceUseCut2, nFaceUseCut1 + end + local dCutExtra = - 0.5 * b3Raw:getDimY() + BD.CUT_EXTRA_MIN + local bOk, sErr = Fbs.MakeOne( nSurfToCut, 0, sCutting, dSawDiam, nFaceUseCut1, nil, dCutExtra, BD.CUT_SIC, 0, 0, 0, '', b3Raw, true) + if not bOk then return false, sErr end + local bOk2, sErr2 = Fbs.MakeOne( nSurfToCut, 0, sCutting, dSawDiam, nFaceUseCut2, nil, dCutExtra, BD.CUT_SIC, 0, 0, 0, '', b3Raw) + if not bOk2 then return false, sErr2 end + -- caso standard + else + -- lavoro la faccia + for j = 1, #vCuts[i] do + -- se taglio dal basso + if bDownCut then + -- se strato pari composto da 1 o 2 elementi + if ( i % 2) == 0 and #vCuts[i] <= 2 then + -- il primo elemento prende la direzione prevista, il secondo quella opposta + local vtNewOrthoO = Vector3d( vtOrthoO) + local dVzLimDwnUp = dNzLimDwnUp + if j ~= 1 then + vtNewOrthoO = -vtOrthoO + if not BD.C_SIMM and not BD.TURN and abs( vtN:getY()) > 0.05 then dVzLimDwnUp = -0.708 end + end + local bOk, sErr = Fbs.MakeOne( vCuts[i][j], 0, sCutting, dSawDiam, vtNewOrthoO, dVzLimDwnUp, BD.CUT_EXTRA, BD.CUT_SIC, 0, 0, 0, nil, b3Raw) + if not bOk then return bOk, sErr end end - local bOk, sErr = Fbs.MakeOne( vCuts[i][j], 0, sCutting, dSawDiam, vtNewOrthoO, dVzLimDwnUp, BD.CUT_EXTRA, BD.CUT_SIC, 0, 0, 0, nil, b3Raw) + -- tutti gli altri casi vengono saltati + -- caso generale + else + -- in generale sta sollevato di pochissimo + local dExtraCut = -0.1 + -- se tagli paralleli + if ( i % 2) == 0 then + -- se non ci sono tagli ortogonali devo affondare + if bNoPerpCuts then + dExtraCut = BD.CUT_EXTRA + -- se altrimenti tagli ortogonali invertiti, devo approfondire dello spessore lama + elseif bOrthInv then + dExtraCut = dSawThick + -- se ultimo taglio, devo affondare + elseif j == #vCuts[i] then + dExtraCut = BD.CUT_EXTRA + end + end + local dVzLimDwnUp = dNzLimDwnUp + if not BD.C_SIMM and not BD.TURN and vtN:getZ() > 0.707 then dVzLimDwnUp = -0.708 end + local bOk, sErr = Fbs.MakeOne( vCuts[i][j], 0, sCutting, dSawDiam, vtOrthoO, dVzLimDwnUp, dExtraCut, BD.CUT_SIC, 0, 0, 0, sNotes, b3Raw) if not bOk then return bOk, sErr end end - -- tutti gli altri casi vengono saltati - -- caso generale - else - -- in generale sta sollevato di pochissimo - local dExtraCut = -0.1 - -- se tagli paralleli - if ( i % 2) == 0 then - -- se non ci sono tagli ortogonali devo affondare - if bNoPerpCuts then - dExtraCut = BD.CUT_EXTRA - -- se altrimenti tagli ortogonali invertiti, devo approfondire dello spessore lama - elseif bOrthInv then - dExtraCut = dSawThick - -- se ultimo taglio, devo affondare - elseif j == #vCuts[i] then - dExtraCut = BD.CUT_EXTRA - end - end - local dVzLimDwnUp = dNzLimDwnUp - if not BD.C_SIMM and not BD.TURN and vtN:getZ() > 0.707 then dVzLimDwnUp = -0.708 end - local bOk, sErr = Fbs.MakeOne( vCuts[i][j], 0, sCutting, dSawDiam, vtOrthoO, dVzLimDwnUp, dExtraCut, BD.CUT_SIC, 0, 0, 0, sNotes, b3Raw) - if not bOk then return bOk, sErr end end end end