diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index 8fc9b25..2dcda90 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -718,10 +718,15 @@ function BeamLib.GetNzLimDownUp( b3Raw, vtN, vtOrtho) if vtN and ( abs( vtN:getY()) < 0.174) then return -0.5 else - return -0.240 + return -0.24 end else - return -0.174 + -- N_HorAng < 10° + if vtN and ( abs( vtN:getY()) < 0.174) then + return -0.383 + else + return -0.174 + end end end end diff --git a/LuaLibs/FacesBySaw.lua b/LuaLibs/FacesBySaw.lua index 37ca39f..1a3bab4 100644 --- a/LuaLibs/FacesBySaw.lua +++ b/LuaLibs/FacesBySaw.lua @@ -242,8 +242,8 @@ function FacesBySaw.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, sCutType, local bConvex = ( dAngT > 0) -- verifico non siano orientate troppo verso il basso e molto sbandate (oltre 10 deg) local bFaceOk = {} - bFaceOk[1] = ( vtN[1]:getZ() >= BD.NZ_MINB or ( not bConvex and abs( vtN[1]:getY()) < 0.174)) - bFaceOk[2] = ( vtN[2]:getZ() >= BD.NZ_MINB or ( not bConvex and abs( vtN[2]:getY()) < 0.174)) + bFaceOk[1] = ( vtN[1]:getZ() >= BD.NZ_MINB or abs( vtN[1]:getY()) < 0.174) + bFaceOk[2] = ( vtN[2]:getZ() >= BD.NZ_MINB or abs( vtN[2]:getY()) < 0.174) if not bDownHead and not bFaceOk[1] and not bFaceOk[2] then local sErr = 'Error : TwoFacesBySaw from bottom impossible' EgtOutLog( sErr) diff --git a/LuaLibs/ProcessDoubleCut.lua b/LuaLibs/ProcessDoubleCut.lua index ee182d0..5270304 100644 --- a/LuaLibs/ProcessDoubleCut.lua +++ b/LuaLibs/ProcessDoubleCut.lua @@ -1,4 +1,4 @@ --- ProcessDoubleCut.lua by Egaltech s.r.l. 2021/11/25 +-- ProcessDoubleCut.lua by Egaltech s.r.l. 2022/07/11 -- Gestione calcolo doppi tagli di lama per Travi -- Tabella per definizione modulo @@ -32,8 +32,6 @@ function ProcessDoubleCut.Classify( Proc, b3Raw) if BD.C_SIMM and BD.DOWN_HEAD then return true end - -- limite per facce da sotto - local dNzLimDwnUp = BL.GetNzLimDownUp( b3Raw) -- verifico se convesso local bAdj, _, _, dAng = EgtSurfTmFacetsContact( Proc.Id, 0, 1, GDB_ID.ROOT) local bConvex = ( not bAdj or ( dAng > 0)) @@ -48,6 +46,7 @@ function ProcessDoubleCut.Classify( Proc, b3Raw) return true, true end end + local dNzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN) local bDownCut = ( vtN:getZ() <= dNzLimDwnUp) if bDownCut then local _, DimH, DimV = BL.GetFaceHvRefDim( Proc.Id, nFac) @@ -59,23 +58,37 @@ function ProcessDoubleCut.Classify( Proc, b3Raw) end end return true, false - end -- altrimenti concavo, verifico le normali delle facce per tagli da sotto - for i = 1, 2 do - local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, i-1, GDB_ID.ROOT) - local bDownCut = ( vtN:getZ() <= dNzLimDwnUp) - if bDownCut then - -- dimensione della faccia perpendicolare alla linea di intersezione tra le facce - local vtN2 = EgtSurfTmFacetNormVersor( Proc.Id, 2-i, GDB_ID.ROOT) - local vtX = vtN2 ^ vtN - local frRef = Frame3d( ptC, ptC + 100 * vtX, ptC + 100 * vtN2) - local b3Ref = EgtSurfTmGetFacetBBoxRef( Proc.Id, i-1, GDB_BB.STANDARD, frRef) - if b3Ref:getDimY() > BD.MAX_DIM_DICE then - return true, true + else + local ptC = {} + local vtN = {} + ptC[1], vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT) + ptC[2], vtN[2] = EgtSurfTmFacetCenter( Proc.Id, 1, GDB_ID.ROOT) + local vtX = vtN[1] ^ vtN[2] ; vtX:normalize() + local vtY = { vtX ^ vtN[1], - vtX ^ vtN[2]} + for i = 1, 2 do + local dNzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN[i], vtY[i]) + local bDownCut = ( vtN[i]:getZ() <= dNzLimDwnUp) + if bDownCut then + -- dimensione della faccia perpendicolarmente alla linea di intersezione tra le facce + local frRef = Frame3d( ptC[i], ptC[i] + 100 * vtX, ptC[i] + 100 * vtY[i]) + local b3Ref = EgtSurfTmGetFacetBBoxRef( Proc.Id, i-1, GDB_BB.STANDARD, frRef) + -- dimensione dell'altra faccia perpendicolarmente alla linea di intersezione tra le facce + local frRef2 = Frame3d( ptC[3-i], ptC[3-i] + 100 * vtX, ptC[3-i] + 100 * vtY[3-1]) + local b3Ref2 = EgtSurfTmGetFacetBBoxRef( Proc.Id, 2-i, GDB_BB.STANDARD, frRef2) + -- se faccia grande + if b3Ref:getDimY() > BD.MAX_DIM_DICE then + -- se altra faccia piccola + if b3Ref2:getDimY() < BD.MAX_DIM_DICE then + return true, true + else + return false + end + end end end + return true, false end - return true, false end ---------------------------------------------------------------------