From 9bee171cef4a53472725e3656d5ef99c811ae608 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Thu, 16 Jul 2026 18:17:19 +0200 Subject: [PATCH 1/5] - in STR0003 rimosso MaxElev per sega a catena (entrava in rapido nella slot) --- Strategies/Standard/STR0003/STR0003.lua | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/Strategies/Standard/STR0003/STR0003.lua b/Strategies/Standard/STR0003/STR0003.lua index ae361c1..eb89b1f 100644 --- a/Strategies/Standard/STR0003/STR0003.lua +++ b/Strategies/Standard/STR0003/STR0003.lua @@ -411,12 +411,8 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) -- si lavora tutto il fondo else - OptionalParameters.dMaxElev = Blade.Result.Bottom[1].dResidualDepth + BeamData.CUT_EXTRA - Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, BottomEdge, OptionalParameters) Chainsaw.AddResult( Mortising) - - OptionalParameters.dMaxElev = nil end -- ancora materiale residuo - se possibile si lavora dal lato @@ -457,14 +453,12 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) end if BottomEdge.bIsStartOpen then - OptionalParameters.dMaxElev = dBladeResidualDepth + BeamData.CUT_EXTRA OptionalParameters.OppositeToolDirectionMode = 'Enabled' Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge1, OptionalParameters) Mortising.dAreaToMachine = Mortising.dDepthToMachine * ( Mortising.dEdgeLength - Chainsaw.Result.Bottom[1].dDepthToMachine) elseif BottomEdge.bIsEndOpen then - OptionalParameters.dMaxElev = dBladeResidualDepth + BeamData.CUT_EXTRA OptionalParameters.OppositeToolDirectionMode = 'Enabled' Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge2, OptionalParameters) @@ -480,12 +474,8 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) if Blade.Result.Bottom[1].dResidualDepth > 10 * GEO.EPS_SMALL then -- si lavora tutto il fondo - OptionalParameters.dMaxElev = Blade.Result.Bottom[1].dResidualDepth + BeamData.CUT_EXTRA - Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, BottomEdge, OptionalParameters) Chainsaw.AddResult( Mortising) - - OptionalParameters.dMaxElev = nil -- ancora materiale residuo - si lavorano i lati if Chainsaw.Result.Bottom[1].dResidualDepth > 10 * GEO.EPS_SMALL then @@ -536,7 +526,6 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) else OptionalParameters.dDepthToMachine = SideEdge1.dElevation + BeamData.CUT_EXTRA - OptionalParameters.dMaxElev = Blade.Result.Side[1].dResidualDepth + BeamData.CUT_EXTRA OptionalParameters.OppositeToolDirectionMode = 'Enabled' Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge1, OptionalParameters) @@ -549,14 +538,12 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) Chainsaw.Result.Side[1].bIsApplicable = false OptionalParameters.dDepthToMachine = SideEdge1.dElevation / 2 + BeamData.CUT_EXTRA_MIN - OptionalParameters.dMaxElev = Blade.Result.Side[1].dResidualDepth + BeamData.CUT_EXTRA Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge1, OptionalParameters) Mortising.dAreaToMachine = Mortising.dDepthToMachine * ( Mortising.dEdgeLength - Chainsaw.Result.Bottom[1].dDepthToMachine) Chainsaw.AddResult( Mortising) OptionalParameters.dDepthToMachine = SideEdge2.dElevation / 2 + BeamData.CUT_EXTRA_MIN - OptionalParameters.dMaxElev = Blade.Result.Side[2].dResidualDepth + BeamData.CUT_EXTRA Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, SideEdge2, OptionalParameters) Mortising.dAreaToMachine = 0 @@ -638,7 +625,6 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) -- si lavora tutto il lato else OptionalParameters.dDepthToMachine = OppositeEdge1.dElevation + BeamData.CUT_EXTRA - OptionalParameters.dMaxElev = Blade.Result.Opposite[1].dResidualDepth + BeamData.CUT_EXTRA Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, OppositeEdge1, OptionalParameters) Chainsaw.AddResult( Mortising) @@ -648,13 +634,11 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) Chainsaw.Result.Opposite[1].bIsApplicable = false OptionalParameters.dDepthToMachine = OppositeEdge1.dElevation / 2 + BeamData.CUT_EXTRA_MIN - OptionalParameters.dMaxElev = Blade.Result.Opposite[1].dResidualDepth + BeamData.CUT_EXTRA Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, OppositeEdge1, OptionalParameters) Chainsaw.AddResult( Mortising) OptionalParameters.dDepthToMachine = OppositeEdge2.dElevation / 2 + BeamData.CUT_EXTRA_MIN - OptionalParameters.dMaxElev = Blade.Result.Opposite[2].dResidualDepth + BeamData.CUT_EXTRA Mortising = FaceByChainsaw.Make( Proc, Part, LongFace, OppositeEdge2, OptionalParameters) Chainsaw.AddResult( Mortising) From fc41ee320090ae125df74d1d83c31b48c0c43601 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Mon, 20 Jul 2026 16:08:30 +0200 Subject: [PATCH 2/5] - in strategie di base si setta vtHead - in MachiningLib.GetSplitMachinings correzione a SCC nei casi con componente X --- LuaLibs/MachiningLib.lua | 21 +++++++++++++++++++-- StrategyLibs/FACEBYBLADE.lua | 5 ++++- StrategyLibs/FACEBYCHAINSAW.lua | 2 ++ StrategyLibs/FACEBYMILL.lua | 2 ++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index edb61d6..0319c2e 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -191,12 +191,29 @@ function MachiningLib.GetSplitMachinings( Machinings, SplittingPoints, Part) Machinings[nCurrentMachiningIndex].LeadIn.dStartAddLength = dStartAddLength Machinings[nCurrentMachiningIndex].LeadOut.dEndAddLength = dEndAddLength end + -- TODO qui funzione per SCC, da macchina!!! Non qua dentro if not bIsLastSegment then Machinings[nCurrentMachiningIndex].sStage = '' - Machinings[nCurrentMachiningIndex].nSCC = MCH_SCC.ADIR_XP + if abs( Machinings[nCurrentMachiningIndex].vtHead:getX()) > GEO.EPS_SMALL then + if Machinings[nCurrentMachiningIndex].vtToolDirection:getY() > GEO.EPS_SMALL then + Machinings[nCurrentMachiningIndex].nSCC = MCH_SCC.ADIR_YP + else + Machinings[nCurrentMachiningIndex].nSCC = MCH_SCC.ADIR_YM + end + else + Machinings[nCurrentMachiningIndex].nSCC = MCH_SCC.ADIR_XP + end else Machinings[nCurrentMachiningIndex].sStage = sOriginalStage - Machinings[nCurrentMachiningIndex].nSCC = MCH_SCC.ADIR_XM + if abs( Machinings[nCurrentMachiningIndex].vtHead:getX()) > GEO.EPS_SMALL then + if Machinings[nCurrentMachiningIndex].vtToolDirection:getY() > GEO.EPS_SMALL then + Machinings[nCurrentMachiningIndex].nSCC = MCH_SCC.ADIR_YP + else + Machinings[nCurrentMachiningIndex].nSCC = MCH_SCC.ADIR_YM + end + else + Machinings[nCurrentMachiningIndex].nSCC = MCH_SCC.ADIR_XM + end end Machinings[nCurrentMachiningIndex].nFeatureSegment = j Machinings[nCurrentMachiningIndex].dLengthToMachine = Machinings[nCurrentMachiningIndex].dEdgeLength + Machinings[nCurrentMachiningIndex].LeadIn.dStartAddLength + Machinings[nCurrentMachiningIndex].LeadOut.dEndAddLength diff --git a/StrategyLibs/FACEBYBLADE.lua b/StrategyLibs/FACEBYBLADE.lua index c425881..c46ed9f 100644 --- a/StrategyLibs/FACEBYBLADE.lua +++ b/StrategyLibs/FACEBYBLADE.lua @@ -330,10 +330,13 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar Cutting.bInvert = false end - -- ToolInvert + -- ToolInvert e direzione testa if Cutting.sBladeEngagement == 'DownUp' then Cutting.bToolInvert = true Cutting.bInvert = not Cutting.bInvert + Cutting.vtHead = Vector3d( -FaceToMachine.vtN) + else + Cutting.vtHead = Vector3d( FaceToMachine.vtN) end -- se dicing, lato di lavoro e inversione per avere taglio sempre verso l'alto diff --git a/StrategyLibs/FACEBYCHAINSAW.lua b/StrategyLibs/FACEBYCHAINSAW.lua index b6e9f99..263e1b1 100644 --- a/StrategyLibs/FACEBYCHAINSAW.lua +++ b/StrategyLibs/FACEBYCHAINSAW.lua @@ -159,6 +159,8 @@ function FACEBYCHAINSAW.Make( Proc, Part, FaceToMachine, EdgeToMachine, Optional Mortising.nWorkside = MCH_MILL_WS.RIGHT Mortising.bToolInvert = false end + -- direzione testa + Mortising.vtHead = Vector3d( FaceToMachine.vtN) -- profondità e offset longitudinale if bExtendWithCornerRadius then dDepthToMachine = dDepthToMachine + TOOLS[Mortising.nToolIndex].dCornerRadius diff --git a/StrategyLibs/FACEBYMILL.lua b/StrategyLibs/FACEBYMILL.lua index 294e3d1..10efb90 100644 --- a/StrategyLibs/FACEBYMILL.lua +++ b/StrategyLibs/FACEBYMILL.lua @@ -304,6 +304,8 @@ function FACEBYMILL.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPara if Milling.bToolInvert then Milling.bInvert = not Milling.bInvert end + -- direzione testa + Milling.vtHead = Vector3d( FaceToMachine.vtN) -- profondità da lavorare e offset radiale if OptionalParameters.dPocketHeight then if TOOLS[Milling.nToolIndex].dSideDepth > dDepthToMachine - 10 * GEO.EPS_SMALL then From cf79256c9ba07bc246880485159df6d44fffebff Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Mon, 20 Jul 2026 16:09:56 +0200 Subject: [PATCH 3/5] - update version --- Version.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Version.lua b/Version.lua index b890239..93286af 100644 --- a/Version.lua +++ b/Version.lua @@ -2,5 +2,5 @@ -- Gestione della versione di BeamNT NAME = 'BeamNT' -VERSION = '3.1g1' -MIN_EXE = '3.1g1' +VERSION = '3.1h1' +MIN_EXE = '3.1g3' From 1650d3af8280766a70d72a589bfea3a877861c19 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Mon, 20 Jul 2026 16:11:02 +0200 Subject: [PATCH 4/5] - corretta versione --- Version.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Version.lua b/Version.lua index 93286af..b890239 100644 --- a/Version.lua +++ b/Version.lua @@ -2,5 +2,5 @@ -- Gestione della versione di BeamNT NAME = 'BeamNT' -VERSION = '3.1h1' -MIN_EXE = '3.1g3' +VERSION = '3.1g1' +MIN_EXE = '3.1g1' From ae720e71d438077738e355faccc7fd9bb6ee6a2d Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Mon, 20 Jul 2026 17:53:33 +0200 Subject: [PATCH 5/5] - in BeamExec.ProcessBeams correzione nella creazione grezzi --- LuaLibs/BeamExec.lua | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) 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 ) )