diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 0c4569d..4633774 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -1,4 +1,4 @@ --- BeamExec.lua by Egaltech s.r.l. 2022/08/18 +-- BeamExec.lua by Egaltech s.r.l. 2022/09/24 -- Libreria esecuzione lavorazioni per Travi -- 2019/07/11 Aggiunta gestione stato rotazione di feature per TS3. -- 2019/09/04 Corretto controllo feature di testa e coda con sovramateriale di testa elevato. @@ -1256,7 +1256,7 @@ local function AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, bN EgtOutLog( sErr) bOk = false end - return bOk, sErr, nNewPhase + return bOk, sErr, ( nNewPhase or -1) end ------------------------------------------------------------------------------------------------------------- diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index c9a5be5..b2c8e42 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -703,8 +703,10 @@ end ------------------------------------------------------------------------------------------------------------- function BeamLib.GetNzLimDownUp( b3Raw, vtN, vtOrtho) - if BD.C_SIMM or BD.TURN then + if BD.C_SIMM then return -0.484 + elseif BD.TURN then + return -2 else if vtOrtho and vtOrtho:getZ() > 0.35 then -- N_HorAng < 15° or N_HorAng > 55° diff --git a/LuaLibs/DiceCut.lua b/LuaLibs/DiceCut.lua index 6400c05..f8c5162 100644 --- a/LuaLibs/DiceCut.lua +++ b/LuaLibs/DiceCut.lua @@ -496,6 +496,12 @@ function DiceCut.GetDice( nParent, BBoxRawPart, ptCPlanes, vtNPlanes, bGetOrtoPl if bDownHead and vtO:getZ() > 0.05 then vtO = -vtO end + -- per macchina TURN + if BD.TURN then + if vtO:getY() > 0.707 then + vtO = -vtO + end + end -- calcolo le dimensioni dell'offset e dove posizionare la prima faccia: -- CopyPlane: 0 => crea la prima faccia direttamente sul punto passato -- CopyPlane: 1 => crea la prima faccia e tutte le altre con l'offset passato diff --git a/LuaLibs/FacesBySaw.lua b/LuaLibs/FacesBySaw.lua index eaa92d1..6c6073e 100644 --- a/LuaLibs/FacesBySaw.lua +++ b/LuaLibs/FacesBySaw.lua @@ -1,4 +1,4 @@ --- FacesBySaw.lua by Egaltech s.r.l. 2022/06/29 +-- FacesBySaw.lua by Egaltech s.r.l. 2022/09/24 -- 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. @@ -126,7 +126,7 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw local ptP1act = ptP1 + vtN * dCutOffset local ptP2act = ptP2 + vtN * dCutOffset -- attacco perpendicolare - local dLiTang, dLiPerp, dLoTang, dLoPerp = FacesBySaw.CalcLeadInOutPerpGeom( ptP1act, ptP2act, vtV1, vtV2, vtN, dSawDiam/2, vtRef, dCutExtra, b3Box) + local dLiTang, dLiPerp, dLoTang, dLoPerp, vtLio = FacesBySaw.CalcLeadInOutPerpGeom( ptP1act, ptP2act, vtV1, vtV2, vtN, dSawDiam/2, vtRef, dCutExtra, b3Box) local dLenLi = sqrt( dLiTang * dLiTang + dLiPerp * dLiPerp) local dLenLo = sqrt( dLoTang * dLoTang + dLoPerp * dLoPerp) -- attacco tangente @@ -160,11 +160,26 @@ 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 - local vtTest = EgtIf( bTurnTang, EgtIf( bInvert, vtTg, -vtTg), vtOut) - if abs( vtTest:getY()) > abs( vtTest:getZ()) then - nSCC = EgtIf( vtTest:getY() > 0, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) + if bTurnTang then + local vtTest = EgtIf( bInvert, vtTg, -vtTg) + if abs( vtTest:getY()) > abs( vtTest:getZ()) then + nSCC = EgtIf( vtTest:getY() > 0, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) + else + nSCC = EgtIf( vtTest:getZ() > 0, MCH_SCC.ADIR_ZP, MCH_SCC.ADIR_ZM) + end else - nSCC = EgtIf( vtTest:getZ() > 0, MCH_SCC.ADIR_ZP, MCH_SCC.ADIR_ZM) + local vtTest = vtOut -- vtLio + if abs( vtN:getY()) < 0.174 and abs( vtN:getZ()) < 0.174 then + if abs( vtTest:getY()) > abs( vtTest:getZ()) then + nSCC = EgtIf( vtTest:getY() > 0, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) + else + nSCC = EgtIf( vtTest:getZ() > 0, MCH_SCC.ADIR_ZP, MCH_SCC.ADIR_ZM) + end + elseif abs( vtN:getZ()) < 0.174 then + nSCC = EgtIf( vtTest:getZ() > -0.017, MCH_SCC.ADIR_ZP, MCH_SCC.ADIR_ZM) + else + nSCC = EgtIf( vtTest:getY() > 0, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) + end end end -- inserisco la lavorazione di taglio @@ -464,29 +479,24 @@ function FacesBySaw.CalcLeadInOutPerpGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vt local vtX = vtTg ^ vtN local frFace = Frame3d( ptP1, vtX, vtTg, vtN) EgtOutLog( 'Vref=' .. tostring( vtRef) .. ' V1=' .. tostring( vtV1) .. ' V2=' .. tostring( vtV2), 3) - -- Versori di attacco e uscita + -- Versore di attacco e uscita local dCos1 = vtV1 * vtRef local dCos2 = vtV2 * vtRef - local vtLi, vtLo + local vtLio if abs( dCos1 - dCos2) < 0.001 then if abs( vtV1:getZ()) < abs( vtV2:getZ()) then - vtLi = vtV1 - vtLo = vtV1 + vtLio = vtV1 else - vtLi = vtV2 - vtLo = vtV2 + vtLio = vtV2 end elseif dCos1 > dCos2 then - vtLi = vtV1 - vtLo = vtV1 + vtLio = vtV1 else - vtLi = vtV2 - vtLo = vtV2 + vtLio = vtV2 end - local bRight = ( vtX * vtLi > 0) - -- Versori di attacco e uscita nel riferimento intrinseco al taglio - local vtLiL = Vector3d( vtLi) ; vtLiL:toLoc( frFace) - local vtLoL = Vector3d( vtLo) ; vtLoL:toLoc( frFace) + local bRight = ( vtX * vtLio > 0) + -- Versore di attacco e uscita nel riferimento intrinseco al taglio + local vtLioL = Vector3d( vtLio) ; vtLioL:toLoc( frFace) -- Spostamento punti per effetto dell'extra o della deficienza di taglio ptP1 = ptP1 + vtX * ( EgtIf( bRight, - dCutExtra, dCutExtra)) ptP2 = ptP2 + vtX * ( EgtIf( bRight, - dCutExtra, dCutExtra)) @@ -496,30 +506,30 @@ function FacesBySaw.CalcLeadInOutPerpGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vt -- Attacco local dLiTang = 10000 local dLiPerp = 10000 - local bLiOk, _, vLiPar = EgtLineBoxInters( ptP1, vtLi, b3MyBox) + local bLiOk, _, vLiPar = EgtLineBoxInters( ptP1, vtLio, b3MyBox) if bLiOk and #vLiPar > 0 then -- con la prima faccia di uscita local dLen = vLiPar[#vLiPar] - local ptInt = ptP1 + vtLi * dLen - local vtFN = BL.GetBoxFaceNorm( b3MyBox, ptInt, vtLi) + local ptInt = ptP1 + vtLio * dLen + local vtFN = BL.GetBoxFaceNorm( b3MyBox, ptInt, vtLio) EgtOutLog( 'LiFaceNorm=' .. tostring( vtFN), 3) - local dAddLen = dRad * ( sqrt( 1 - ( vtN * vtFN) * ( vtN * vtFN)) - abs( vtX * vtFN)) / ( vtLi * vtFN) + local dAddLen = dRad * ( sqrt( 1 - ( vtN * vtFN) * ( vtN * vtFN)) - abs( vtX * vtFN)) / ( vtLio * vtFN) local dLiLen = dLen + dAddLen EgtOutLog( 'LeadIn Dist=' .. EgtNumToString( dLiLen), 3) - dLiTang = - dLiLen * vtLiL:getY() - dLiPerp = EgtIf( bRight, dLiLen, - dLiLen) * vtLiL:getX() + dLiTang = - dLiLen * vtLioL:getY() + dLiPerp = EgtIf( bRight, dLiLen, - dLiLen) * vtLioL:getX() -- verifico se miglioro calcolando con faccia successiva local b3Mod = BBox3d( b3MyBox) ; b3Mod:Add( ptInt + 1000 * vtFN) - local bLiOk2, _, vLiPar2 = EgtLineBoxInters( ptP1, vtLi, b3Mod) + local bLiOk2, _, vLiPar2 = EgtLineBoxInters( ptP1, vtLio, b3Mod) if bLiOk2 and #vLiPar2 > 0 then local dLen2 = vLiPar2[#vLiPar2] - local vtFN2 = BL.GetBoxFaceNorm( b3Mod, ptP1 + vtLi * dLen2, vtLi) + local vtFN2 = BL.GetBoxFaceNorm( b3Mod, ptP1 + vtLio * dLen2, vtLio) EgtOutLog( 'LiFaceNorm2=' .. tostring( vtFN2), 3) - local dAddLen2 = dRad * ( sqrt( 1 - ( vtN * vtFN2) * ( vtN * vtFN2)) - abs( vtX * vtFN2)) / ( vtLi * vtFN2) + local dAddLen2 = dRad * ( sqrt( 1 - ( vtN * vtFN2) * ( vtN * vtFN2)) - abs( vtX * vtFN2)) / ( vtLio * vtFN2) local dLiLen2 = dLen2 + dAddLen2 EgtOutLog( 'LeadIn Dist2=' .. EgtNumToString( dLiLen2), 3) - local dLiTang2 = - dLiLen2 * vtLiL:getY() - local dLiPerp2 = EgtIf( bRight, dLiLen2, - dLiLen2) * vtLiL:getX() + local dLiTang2 = - dLiLen2 * vtLioL:getY() + local dLiPerp2 = EgtIf( bRight, dLiLen2, - dLiLen2) * vtLioL:getX() if dLiLen2 < dLiLen then dLiTang = dLiTang2 dLiPerp = dLiPerp2 @@ -529,37 +539,37 @@ function FacesBySaw.CalcLeadInOutPerpGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vt -- Lunghezza di uscita local dLoTang = 10000 local dLoPerp = 10000 - local bLoOk, _, vLoPar = EgtLineBoxInters( ptP2, vtLo, b3MyBox) + local bLoOk, _, vLoPar = EgtLineBoxInters( ptP2, vtLio, b3MyBox) if bLoOk and #vLoPar > 0 then -- con la prima faccia di uscita local dLen = vLoPar[#vLoPar] - local ptInt = ptP2 + vtLo * dLen - local vtFN = BL.GetBoxFaceNorm( b3MyBox, ptInt, vtLo) + local ptInt = ptP2 + vtLio * dLen + local vtFN = BL.GetBoxFaceNorm( b3MyBox, ptInt, vtLio) EgtOutLog( 'LoFaceNorm=' .. tostring( vtFN), 3) - local dAddLen = dRad * ( sqrt( 1 - ( vtN * vtFN) * ( vtN * vtFN)) - abs( vtX * vtFN)) / ( vtLo * vtFN) + local dAddLen = dRad * ( sqrt( 1 - ( vtN * vtFN) * ( vtN * vtFN)) - abs( vtX * vtFN)) / ( vtLio * vtFN) local dLoLen = dLen + dAddLen EgtOutLog( 'LeadOut Dist=' .. EgtNumToString( dLoLen), 3) - dLoTang = dLoLen * vtLoL:getY() - dLoPerp = EgtIf( bRight, dLoLen, - dLoLen) * vtLoL:getX() + dLoTang = dLoLen * vtLioL:getY() + dLoPerp = EgtIf( bRight, dLoLen, - dLoLen) * vtLioL:getX() -- verifico se miglioro calcolando con faccia successiva local b3Mod = BBox3d( b3MyBox) ; b3Mod:Add( ptInt + 1000 * vtFN) - local bLoOk2, _, vLoPar2 = EgtLineBoxInters( ptP2, vtLo, b3Mod) + local bLoOk2, _, vLoPar2 = EgtLineBoxInters( ptP2, vtLio, b3Mod) if bLoOk2 and #vLoPar2 > 0 then local dLen2 = vLoPar2[#vLoPar2] - local vtFN2 = BL.GetBoxFaceNorm( b3Mod, ptP2 + vtLo * dLen2, vtLo) + local vtFN2 = BL.GetBoxFaceNorm( b3Mod, ptP2 + vtLio * dLen2, vtLio) EgtOutLog( 'LoFaceNorm2=' .. tostring( vtFN2), 3) - local dAddLen2 = dRad * ( sqrt( 1 - ( vtN * vtFN2) * ( vtN * vtFN2)) - abs( vtX * vtFN2)) / ( vtLo * vtFN2) + local dAddLen2 = dRad * ( sqrt( 1 - ( vtN * vtFN2) * ( vtN * vtFN2)) - abs( vtX * vtFN2)) / ( vtLio * vtFN2) local dLoLen2 = dLen2 + dAddLen2 EgtOutLog( 'LeadOut Dist2=' .. EgtNumToString( dLoLen2), 3) - local dLoTang2 = dLoLen2 * vtLoL:getY() - local dLoPerp2 = EgtIf( bRight, dLoLen2, - dLoLen2) * vtLoL:getX() + local dLoTang2 = dLoLen2 * vtLioL:getY() + local dLoPerp2 = EgtIf( bRight, dLoLen2, - dLoLen2) * vtLioL:getX() if dLoLen2 < dLoLen then dLoTang = dLoTang2 dLoPerp = dLoPerp2 end end end - return dLiTang, dLiPerp, dLoTang, dLoPerp + return dLiTang, dLiPerp, dLoTang, dLoPerp, vtLio end --------------------------------------------------------------------- diff --git a/LuaLibs/ProcessCut.lua b/LuaLibs/ProcessCut.lua index e4fb523..af6d7c3 100644 --- a/LuaLibs/ProcessCut.lua +++ b/LuaLibs/ProcessCut.lua @@ -435,7 +435,7 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b local dVzLimDwnUp = dNzLimDwnUp if j ~= 1 then vtNewOrthoO = -vtOrthoO - if not BD.C_SIMM and abs( vtN:getY()) > 0.05 then dVzLimDwnUp = -0.707 end + 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 @@ -459,7 +459,7 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b end end local dVzLimDwnUp = dNzLimDwnUp - if not BD.C_SIMM and vtN:getZ() > 0.707 then dVzLimDwnUp = -0.708 end + 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