diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index f352374..0e25610 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -401,6 +401,7 @@ end function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, dOvmMid, PARTS, bCreateMachGroup, bIsFlipRot ) -- 1. Inizializzazione e Default local idTempGroup = BeamLib.GetTempGroup( ) + local dMinLengthToCreateRaw = 10 BeamData.OVM_BLADE_HBEAM = ( BeamData.OVM_BLADE_HBEAM or 11 ) BeamData.OVM_CHAIN_HBEAM = ( BeamData.OVM_CHAIN_HBEAM or 8 ) @@ -465,7 +466,17 @@ function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, dOvmMid, PARTS, b end local dStartOffset = dNextStartOffset - local dEndOffset = ( i == #PARTS ) and 0 or dOvmMid + local dEndOffset = dOvmMid + + -- se ultimo pezzo bisogna allungare il grezzo del restante solo se non viene creato un grezzo indipendente + if ( i == #PARTS ) then + local dPotentialRemaining = max( 0, dRawL - ( CurrentPart.dPosX + dPartLen )) + if ( dPotentialRemaining > dMinLengthToCreateRaw - GEO.EPS_SMALL) then + dEndOffset = 0 -- Coda a zero, il resto diventerà un idRawRest indipendente + else + dEndOffset = dPotentialRemaining -- Il pezzo si allunga per prendere tutta la barra residua + end + end -- Gap reale tra i pezzi (può essere negativo in caso di compenetrazione nesting obliqui) if ( i < #PARTS ) then @@ -568,7 +579,7 @@ function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, dOvmMid, PARTS, b if ( idPrevRaw ) then EgtSetInfo( idPrevRaw, 'BDST', 10000 ) end local dRemaining = dRawL - dMaxX - if ( dRemaining > 10 ) then + if ( dRemaining > dMinLengthToCreateRaw - GEO.EPS_SMALL) then local idRawRest = EgtAddRawPart( Point3d( 0, 0, 0 ), dRemaining, dRawW, dRawH, BeamData.RAWCOL ) EgtMoveToCornerRawPart( idRawRest, BeamData.ptOriXR, BeamData.dPosXR ) EgtMoveRawPart( idRawRest, Vector3d( -dMaxX, 0, 0 ) )