diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index 872a722..0c20f0e 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -845,6 +845,15 @@ function BeamLib.GetChainSawInitAngs( vtN, vtO, nInd) end end +--------------------------------------------------------------------- +function BeamLib.GetSawBlockedAxis( nInd, bDownHead, b3Raw, vtTool, vtOut) + if BD.GetSawBlockedAxis then + return BD.GetSawBlockedAxis( nInd, bDownHead, b3Raw, vtTool, vtOut) + else + return '' + end +end + --------------------------------------------------------------------- -- Trova l'Ind (0 based) della faccia meglio orientata come l'asse vtAx. Restituisce anche vtN e ptC della faccia stessa. La faccia di indice (0 based) fctExclude non viene considerata nella ricerca. function BeamLib.FindFaceBestOrientedAsAxis( Proc, vtAx, fctExclude) diff --git a/LuaLibs/FacesBySaw.lua b/LuaLibs/FacesBySaw.lua index 10f0e26..e9d60ac 100644 --- a/LuaLibs/FacesBySaw.lua +++ b/LuaLibs/FacesBySaw.lua @@ -1,4 +1,4 @@ --- FacesBySaw.lua by Egaltech s.r.l. 2023/12/30 +-- FacesBySaw.lua by Egaltech s.r.l. 2024/01/07 -- Gestione taglio con lama di feature con una o due facce -- 2021/01/06 Cambiato limite per attacco Tg con lama e CalcLeadInOutGeom rinominata in CalcLeadInOutPerpGeom. -- 2021/02/03 In taglio lama si accettano anche due lati con deviazione minore di 20deg. @@ -23,6 +23,7 @@ -- 2023/11/28 In MakeTwo raffinamento calcolo vtRef per casi dubbi. -- 2023/12/06 In CalcLeadInOutPerpGeom gestito caso in cui la geometria della feature esce dal grezzo. -- 2023/12/30 Modifiche in CalcLeadInOutPerpGeom e CalcLeadInOutTangGeom con uso di EgtCAvToolPosBox. +-- 2024/01/07 Modifiche per OikosX (BD.TURN == 2). -- Tabella per definizione modulo local FacesBySaw = {} @@ -135,6 +136,20 @@ function MakeParallelOne( nSurfId, nFacet, sCutting, dSawDiam, nFaceUse, dVzLimD -- imposto allungamenti iniziale e finale EgtSetMachiningParam( MCH_MP.STARTADDLEN, -dAccStart) EgtSetMachiningParam( MCH_MP.ENDADDLEN, -dAccEnd) + -- imposto angolo 3° asse rot + local bDownHead = ( dVzLimDwnUp and dVzLimDwnUp < - 1.5) + local vtTool + if nFaceUse == MCH_MILL_FU.PARAL_FRONT then + vtTool = Y_AX() + elseif nFaceUse == MCH_MILL_FU.PARAL_BACK then + vtTool = -Y_AX() + elseif nFaceUse == MCH_MILL_FU.PARAL_DOWN then + vtTool = Z_AX() + else + vtTool = -Z_AX() + end + local vtOut = EgtIf( vtN:getX() > 0, X_AX(), -X_AX()) + EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetSawBlockedAxis( 1, bDownHead, b3Raw, vtTool, vtOut)) -- eventuali note if sNotes and #sNotes > 0 then EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) end -- eseguo @@ -172,7 +187,7 @@ local function GetNameSolidFaceIncludingLine( b3Solid, ptP1Comp, ptP2Comp) end --------------------------------------------------------------------- -function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDwnUp, dCutExtra, dCutSic, dCutOffset, dAccStart, dAccEnd, sNotes, b3Raw, bForceInvert) +function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDwnUp, dCutExtra, dCutSic, dCutOffset, dAccStart, dAccEnd, sNotes, b3Raw, bForceInvert, bMaximizeVerticalDepth) -- se lama con asse parallelo alla faccia, passo alla apposita funzione if ( Par5 == MCH_MILL_FU.PARAL_DOWN or Par5 == MCH_MILL_FU.PARAL_TOP or @@ -356,13 +371,32 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw abs( vtTg:getX()) < 0.9848 and ( ( abs( vtTg:getZ()) < 0.17 and ( vtV1:getZ() < -0.5 or vtV2:getZ() < -0.5) and not bDownHead) or ( abs( vtTg:getZ()) < 0.51 and b3Box:getDimZ() > 300 and BD.C_SIMM and BD.MAX_HEIGHT > 450 and b3Box:getDimX() > BD.LEN_SHORT_PART) or - ( abs( vtTg:getZ()) < 0.51 and ( dLenLi2 + dLenLo2) < ( dLenLi + dLenLo)) or Ktp * ( dLenLi2 + dLenLo2) < ( dLenLi + dLenLo)) then - bLioTang = true - dLiTang, dLiPerp, dLoTang, dLoPerp = dLi2Tang, dLi2Perp, dLo2Tang, dLo2Perp - if BD.TURN then + ( abs( vtTg:getZ()) < 0.51 and ( dLenLi2 + dLenLo2) < ( dLenLi + dLenLo)) or + Ktp * ( dLenLi2 + dLenLo2) < ( dLenLi + dLenLo) or + ( BD.TURN == 2 and vtRef:getZ() < -0.1)) then + if BD.TURN == 2 then + if vtTg:getY() < -0.1 then + bLioTang = 1 + local dMove = dist( ptP1, ptP2) + dLiTang = -( dLi2Tang - dAccStart - dAccEnd + dMove) + -- dLiPerp rimane invariato + dLoTang, dLoPerp = dLo2Tang, dLo2Perp + else + bLioTang = 2 + local dMove = dist( ptP1, ptP2) + dLiTang, dLiPerp = dLi2Tang, dLi2Perp + dLoTang = -( dLiTang - dAccStart - dAccEnd + dMove) + -- dLoPerp rimane invariato + end + elseif BD.TURN then + bLioTang = 2 local dMove = dist( ptP1, ptP2) + dLiTang, dLiPerp = dLi2Tang, dLi2Perp dLoTang = -( dLiTang - dAccStart - dAccEnd + dMove) dLoPerp = BD.COLL_SIC + else + bLioTang = true + dLiTang, dLiPerp, dLoTang, dLoPerp = dLi2Tang, dLi2Perp, dLo2Tang, dLo2Perp end end -- posizione braccio @@ -375,8 +409,13 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw nSCC = EgtIf( ( vtAux:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) end else - if bLioTang then - --local vtTest = EgtIf( bInvert, vtTg, -vtTg) + if BD.TURN == 2 then + if vtRef:getZ() > -0.01 then + nSCC = MCH_SCC.ADIR_ZP + else + nSCC = MCH_SCC.ADIR_ZM + end + elseif bLioTang then local vtTest = -vtTg if abs( vtTest:getY()) > abs( vtTest:getZ()) then -- calcolo direzione risultante da versore utensile e direzione di lavorazione inverso @@ -424,14 +463,18 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw -- offset longitudinale EgtSetMachiningParam( MCH_MP.OFFSL, EgtIf( bDownUp, -dCutOffset, dCutOffset)) -- imposto attacco/uscita + if BD.TURN and bLioTang == 1 then EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.TG_PERP) end EgtSetMachiningParam( MCH_MP.LITANG, dLiTang) EgtSetMachiningParam( MCH_MP.LIPERP, dLiPerp) - if BD.TURN and bLioTang then EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.PERP_TG) end + if BD.TURN and bLioTang == 2 then EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.PERP_TG) end EgtSetMachiningParam( MCH_MP.LOTANG, dLoTang) EgtSetMachiningParam( MCH_MP.LOPERP, dLoPerp) -- imposto allungamenti iniziale e finale EgtSetMachiningParam( MCH_MP.STARTADDLEN, dAllStart - dAccStart) EgtSetMachiningParam( MCH_MP.ENDADDLEN, dAllEnd - dAccEnd) + -- imposto angolo 3° asse rot + local nInd = EgtIf( bMaximizeVerticalDepth, 0, 1) + EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetSawBlockedAxis( nInd, bDownHead, b3Raw, vtN, vtOut)) -- eventuali note if sNotes and #sNotes > 0 then EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) end -- eseguo diff --git a/LuaLibs/ProcessCut.lua b/LuaLibs/ProcessCut.lua index fe94f6e..f6fc9a1 100644 --- a/LuaLibs/ProcessCut.lua +++ b/LuaLibs/ProcessCut.lua @@ -388,9 +388,9 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b dMaxElev = Proc.Box:getMax():getX() - b3Solid:getMin():getX() end end - -- per macchina TURN aggiusto massima dimensione cubetto + -- per macchina TURN (ma non OikosX) aggiusto massima dimensione cubetto local dNewDiceDim - if BD.TURN then + if BD.TURN and BD.TURN ~= 2 then local dDimRef = GEO.INFINITO if abs( vtN:getZ()) < 0.003 then dDimRef = b3Raw:getDimZ()