diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index ab47c40..a91d878 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -1,5 +1,6 @@ --- BeamLib.lua by Egaltech s.r.l. 2020/06/18 +-- BeamLib.lua by Egaltech s.r.l. 2020/07/28 -- Libreria globale per Travi +-- 2020/07/28 Corretto calcolo attacchi e uscite di lame per non uscire dalla faccia sotto. -- Tabella per definizione modulo local BeamLib = {} @@ -551,15 +552,17 @@ function BeamLib.CalcLeadInOutGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vtRef, dC -- 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)) + -- Non va considerata l'uscita dalla faccia sotto, pertanto va abbassata + local b3MyBox = BBox3d( b3Box) ; b3MyBox:Add( b3MyBox:getMin() - 1000 * Z_AX()) -- Attacco local dLiTang = 10000 local dLiPerp = 10000 - local bLiOk, _, vLiPar = EgtLineBoxInters( ptP1, vtLi, b3Box) + local bLiOk, _, vLiPar = EgtLineBoxInters( ptP1, vtLi, b3MyBox) if bLiOk and #vLiPar > 0 then -- con la prima faccia di uscita local dLen = vLiPar[#vLiPar] local ptInt = ptP1 + vtLi * dLen - local vtFN = BeamLib.GetBoxFaceNorm( b3Box, ptInt, vtLi) + local vtFN = BeamLib.GetBoxFaceNorm( b3MyBox, ptInt, vtLi) EgtOutLog( 'LiFaceNorm=' .. tostring( vtFN), 3) local dAddLen = dRad * ( sqrt( 1 - ( vtN * vtFN) * ( vtN * vtFN)) - abs( vtX * vtFN)) / ( vtLi * vtFN) local dLiLen = dLen + dAddLen @@ -567,7 +570,7 @@ function BeamLib.CalcLeadInOutGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vtRef, dC dLiTang = - dLiLen * vtLiL:getY() dLiPerp = EgtIf( bRight, dLiLen, - dLiLen) * vtLiL:getX() -- verifico se miglioro calcolando con faccia successiva - local b3Mod = BBox3d( b3Box) ; b3Mod:Add( ptInt + 1000 * vtFN) + local b3Mod = BBox3d( b3MyBox) ; b3Mod:Add( ptInt + 1000 * vtFN) local bLiOk2, _, vLiPar2 = EgtLineBoxInters( ptP1, vtLi, b3Mod) if bLiOk2 and #vLiPar2 > 0 then local dLen2 = vLiPar2[#vLiPar2] @@ -587,12 +590,12 @@ function BeamLib.CalcLeadInOutGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vtRef, dC -- Lunghezza di uscita local dLoTang = 10000 local dLoPerp = 10000 - local bLoOk, _, vLoPar = EgtLineBoxInters( ptP2, vtLo, b3Box) + local bLoOk, _, vLoPar = EgtLineBoxInters( ptP2, vtLo, b3MyBox) if bLoOk and #vLoPar > 0 then -- con la prima faccia di uscita local dLen = vLoPar[#vLoPar] local ptInt = ptP2 + vtLo * dLen - local vtFN = BeamLib.GetBoxFaceNorm( b3Box, ptInt, vtLo) + local vtFN = BeamLib.GetBoxFaceNorm( b3MyBox, ptInt, vtLo) EgtOutLog( 'LoFaceNorm=' .. tostring( vtFN), 3) local dAddLen = dRad * ( sqrt( 1 - ( vtN * vtFN) * ( vtN * vtFN)) - abs( vtX * vtFN)) / ( vtLo * vtFN) local dLoLen = dLen + dAddLen @@ -600,7 +603,7 @@ function BeamLib.CalcLeadInOutGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vtRef, dC dLoTang = dLoLen * vtLoL:getY() dLoPerp = EgtIf( bRight, dLoLen, - dLoLen) * vtLoL:getX() -- verifico se miglioro calcolando con faccia successiva - local b3Mod = BBox3d( b3Box) ; b3Mod:Add( ptInt + 1000 * vtFN) + local b3Mod = BBox3d( b3MyBox) ; b3Mod:Add( ptInt + 1000 * vtFN) local bLoOk2, _, vLoPar2 = EgtLineBoxInters( ptP2, vtLo, b3Mod) if bLoOk2 and #vLoPar2 > 0 then local dLen2 = vLoPar2[#vLoPar2] @@ -635,21 +638,23 @@ function BeamLib.CalcLeadInOutTangGeom( ptP1, ptP2, vtN, dRad, vtRef, dCutExtra, -- Spostamento punti per effetto dell'extra o della deficienza di taglio ptP1 = ptP1 - vtX * dCutExtra ptP2 = ptP2 - vtX * dCutExtra + -- Non va considerata l'uscita dalla faccia sotto, pertanto va abbassata + local b3MyBox = BBox3d( b3Box) ; b3MyBox:Add( b3MyBox:getMin() - 1000 * Z_AX()) -- Attacco local dLiTang = 10000 local dLiPerp = 0 - local bLiOk, _, vLiPar = EgtLineBoxInters( ptP1, vtTg, b3Box) + local bLiOk, _, vLiPar = EgtLineBoxInters( ptP1, vtTg, b3MyBox) if bLiOk and #vLiPar > 0 then local dLen = vLiPar[1] local ptInt = ptP1 + vtTg * dLen - local vtFN = BeamLib.GetBoxFaceNorm( b3Box, ptInt, -vtTg) + local vtFN = BeamLib.GetBoxFaceNorm( b3MyBox, ptInt, -vtTg) EgtOutLog( 'LiFaceNorm=' .. tostring( vtFN), 3) local dAddLen = dRad * ( sqrt( 1 - ( vtN * vtFN) * ( vtN * vtFN)) - ( vtX * vtFN)) / ( vtTg * vtFN) local dLiLen = dLen + dAddLen EgtOutLog( 'LeadIn Dist=' .. EgtNumToString( dLiLen), 3) dLiTang = - dLiLen -- verifico se miglioro calcolando con faccia successiva - local b3Mod = BBox3d( b3Box) ; b3Mod:Add( ptInt + 1000 * vtFN) + local b3Mod = BBox3d( b3MyBox) ; b3Mod:Add( ptInt + 1000 * vtFN) local bLiOk2, _, vLiPar2 = EgtLineBoxInters( ptP1, vtTg, b3Mod) if bLiOk2 and #vLiPar2 > 0 then local dLen2 = vLiPar2[1] @@ -666,18 +671,18 @@ function BeamLib.CalcLeadInOutTangGeom( ptP1, ptP2, vtN, dRad, vtRef, dCutExtra, -- Lunghezza di uscita local dLoTang = 10000 local dLoPerp = 0 - local bLoOk, _, vLoPar = EgtLineBoxInters( ptP2, vtTg, b3Box) + local bLoOk, _, vLoPar = EgtLineBoxInters( ptP2, vtTg, b3MyBox) if bLoOk and #vLoPar > 0 then local dLen = vLoPar[#vLoPar] local ptInt = ptP2 + vtTg * dLen - local vtFN = BeamLib.GetBoxFaceNorm( b3Box, ptInt, vtTg) + local vtFN = BeamLib.GetBoxFaceNorm( b3MyBox, ptInt, vtTg) EgtOutLog( 'LoFaceNorm=' .. tostring( vtFN), 3) local dAddLen = dRad * ( sqrt( 1 - ( vtN * vtFN) * ( vtN * vtFN)) - ( vtX * vtFN)) / ( vtTg * vtFN) local dLoLen = dLen + dAddLen EgtOutLog( 'LeadOut Dist=' .. EgtNumToString( dLoLen), 3) dLoTang = dLoLen -- verifico se miglioro calcolando con faccia successiva - local b3Mod = BBox3d( b3Box) ; b3Mod:Add( ptInt + 1000 * vtFN) + local b3Mod = BBox3d( b3MyBox) ; b3Mod:Add( ptInt + 1000 * vtFN) local bLoOk2, _, vLoPar2 = EgtLineBoxInters( ptP2, vtTg, b3Mod) if bLoOk2 and #vLoPar2 > 0 then local dLen2 = vLoPar2[#vLoPar2]