From 3e74e7f1e25a171b7484457e326cf12ce10d1b0e Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Tue, 23 Jun 2026 17:49:33 +0200 Subject: [PATCH] =?UTF-8?q?-=20in=20tutte=20le=20strategie=20di=20base=20a?= =?UTF-8?q?ccorciamento=20percorsi=20corretto=20(non=20funzionava=20in=20c?= =?UTF-8?q?aso=20di=20utensile=20che=20entra=20pi=C3=B9=20del=20raggio)=20?= =?UTF-8?q?-=20piccole=20correzioni=20e=20migliorie=20varie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LuaLibs/LeadInOutLib.lua | 27 ++++++++++++++------------- StrategyLibs/FACEBYBLADE.lua | 8 ++++---- StrategyLibs/FACEBYCHAINSAW.lua | 12 ++++++------ StrategyLibs/FACEBYMILL.lua | 26 +++++++++++++++++--------- 4 files changed, 41 insertions(+), 32 deletions(-) diff --git a/LuaLibs/LeadInOutLib.lua b/LuaLibs/LeadInOutLib.lua index bc62cf2..3c8dd34 100644 --- a/LuaLibs/LeadInOutLib.lua +++ b/LuaLibs/LeadInOutLib.lua @@ -20,14 +20,7 @@ local function GetExtraAddLengthInclinedSides( Face, Edge) return 0, 0 end - local nPreviousEdgeIndex = Edge.id + 1 - 1 - if nPreviousEdgeIndex < 1 then - nPreviousEdgeIndex = #Face.Edges - end - local nNextEdgeIndex = Edge.id + 1 + 1 - if nNextEdgeIndex > #Face.Edges then - nNextEdgeIndex = 1 - end + local nPreviousEdgeIndex, nNextEdgeIndex = BeamLib.GetAdjacentIndices( Edge.id + 1, #Face.Edges) local vtEdgePrevious = Face.Edges[nPreviousEdgeIndex].vtEdge local vtEdgeNext = Face.Edges[nNextEdgeIndex].vtEdge @@ -99,6 +92,14 @@ local function CalculateLeadInOutLength( ptToolCenter, vtNFace, b3Box, vtLeadInO end +------------------------------------------------------------------------------------------------------------- +local function GetToolAddLength( dToolDiameter, dDepthToMachine) + local dCheckDepth = min( dToolDiameter / 2, dDepthToMachine) + local dToolAddLength = sqrt( dCheckDepth * dToolDiameter - dCheckDepth * dCheckDepth) + + return dToolAddLength +end + ------------------------------------------------------------------------------------------------------------- function LeadInOutLib.CalculateLeadInOut( sLeadInOutType, Parameters, OptionalParameters) @@ -118,7 +119,7 @@ function LeadInOutLib.CalculateLeadInOut( sLeadInOutType, Parameters, OptionalPa local bIsEndClosed = not Edge.bIsEndOpen -- accorciamento per lati chiusi - LeadInOut.dToolMarkLength = sqrt( dDepthToMachine * Tool.dDiameter - dDepthToMachine * dDepthToMachine) + LeadInOut.dToolAddLength = GetToolAddLength( Tool.dDiameter, dDepthToMachine) LeadInOut.dExtraAddLengthStart, LeadInOut.dExtraAddLengthEnd = GetExtraAddLengthInclinedSides( Face, Edge) -- allungamento per faccia singola (aperta in tutte le direzioni) LeadInOut.dAddedLengthOpenFace = BeamData.CUT_EXTRA @@ -140,14 +141,14 @@ function LeadInOutLib.CalculateLeadInOut( sLeadInOutType, Parameters, OptionalPa -- calcolo allungamenti / accorciamenti if bIsStartClosed and bIsEndClosed then - LeadIn.dStartAddLength = -LeadInOut.dToolMarkLength - LeadInOut.dExtraAddLengthStart - LeadOut.dEndAddLength = -LeadInOut.dToolMarkLength - LeadInOut.dExtraAddLengthEnd + LeadIn.dStartAddLength = -LeadInOut.dToolAddLength - LeadInOut.dExtraAddLengthStart + LeadOut.dEndAddLength = -LeadInOut.dToolAddLength - LeadInOut.dExtraAddLengthEnd elseif bIsStartClosed then - LeadIn.dStartAddLength = -LeadInOut.dToolMarkLength - LeadInOut.dExtraAddLengthStart + LeadIn.dStartAddLength = -LeadInOut.dToolAddLength - LeadInOut.dExtraAddLengthStart -- eventuale correzione per accorciamento maggiore di larghezza tasca LeadOut.dEndAddLength = max( -LeadIn.dStartAddLength - Edge.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA) elseif bIsEndClosed then - LeadOut.dEndAddLength = -LeadInOut.dToolMarkLength - LeadInOut.dExtraAddLengthEnd + LeadOut.dEndAddLength = -LeadInOut.dToolAddLength - LeadInOut.dExtraAddLengthEnd -- eventuale correzione per accorciamento maggiore di larghezza tasca LeadIn.dStartAddLength = max( -LeadOut.dEndAddLength - Edge.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA) else diff --git a/StrategyLibs/FACEBYBLADE.lua b/StrategyLibs/FACEBYBLADE.lua index b376796..ae32c79 100644 --- a/StrategyLibs/FACEBYBLADE.lua +++ b/StrategyLibs/FACEBYBLADE.lua @@ -607,7 +607,7 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar end local bStartLeft = MachiningLib.StartsLeftSide( Cutting) local dAddLengthLeftSide = Cutting.LeadOut.dEndAddLength - local dAddLengthToReduce = sqrt( Cutting.dDepthToMachine * TOOLS[Cutting.nToolIndex].dDiameter - Cutting.dDepthToMachine * Cutting.dDepthToMachine) + local dToolAddLength = sqrt( Cutting.dDepthToMachine * TOOLS[Cutting.nToolIndex].dDiameter - Cutting.dDepthToMachine * Cutting.dDepthToMachine) if bStartLeft then dAddLengthLeftSide = Cutting.LeadIn.dStartAddLength end @@ -618,15 +618,15 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar else Cutting.bIsApplicable = false end - elseif dAddLengthLeftSide + dAddLengthToReduce > dExtendAfterTail then + elseif dAddLengthLeftSide + dToolAddLength > dExtendAfterTail then if MachiningLib.CanMoveAfterSplitcut( dLengthOnX, Part) then Cutting.sStage = 'AfterTail' Cutting.bMoveAfterSplit = true else if bStartLeft then - Cutting.LeadIn.dStartAddLength = - dAddLengthToReduce + dExtendAfterTail + Cutting.LeadIn.dStartAddLength = - dToolAddLength + dExtendAfterTail else - Cutting.LeadOut.dEndAddLength = - dAddLengthToReduce + dExtendAfterTail + Cutting.LeadOut.dEndAddLength = - dToolAddLength + dExtendAfterTail end end end diff --git a/StrategyLibs/FACEBYCHAINSAW.lua b/StrategyLibs/FACEBYCHAINSAW.lua index ab9526c..b6e9f99 100644 --- a/StrategyLibs/FACEBYCHAINSAW.lua +++ b/StrategyLibs/FACEBYCHAINSAW.lua @@ -17,8 +17,8 @@ local function CalculateLeadInOut( Machining, EdgeToMachine, sSideToMachine, dLe -- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom) -- si determina l'eventuale riduzione da applicare in caso di inizio o fine chiusi - local dAddLengthToReduce = 0 - dAddLengthToReduce = TOOLS[Machining.nToolIndex].dDiameter / 2 + local dToolAddLength = 0 + dToolAddLength = TOOLS[Machining.nToolIndex].dDiameter / 2 if Machining.bInvert then Machining.bIsStartClosed, Machining.bIsEndClosed = Machining.bIsEndClosed, Machining.bIsStartClosed @@ -29,16 +29,16 @@ local function CalculateLeadInOut( Machining, EdgeToMachine, sSideToMachine, dLe LeadIn.dStartAddLength = 0 LeadOut.dEndAddLength = 0 if sSideToMachine == 'End' then - LeadIn.dStartAddLength = dAddLengthToReduce + dLengthToMachine + BeamData.CUT_EXTRA - EdgeToMachine.dLength + LeadIn.dStartAddLength = dToolAddLength + dLengthToMachine + BeamData.CUT_EXTRA - EdgeToMachine.dLength elseif Machining.bIsStartClosed then - LeadIn.dStartAddLength = -dAddLengthToReduce + LeadIn.dStartAddLength = -dToolAddLength else LeadIn.dStartAddLength = BeamData.CUT_EXTRA end if sSideToMachine == 'Start' then - LeadOut.dEndAddLength = dAddLengthToReduce + dLengthToMachine + BeamData.CUT_EXTRA - EdgeToMachine.dLength + LeadOut.dEndAddLength = dToolAddLength + dLengthToMachine + BeamData.CUT_EXTRA - EdgeToMachine.dLength elseif Machining.bIsEndClosed then - LeadOut.dEndAddLength = -dAddLengthToReduce + LeadOut.dEndAddLength = -dToolAddLength else LeadOut.dEndAddLength = BeamData.CUT_EXTRA end diff --git a/StrategyLibs/FACEBYMILL.lua b/StrategyLibs/FACEBYMILL.lua index d7f8c48..294e3d1 100644 --- a/StrategyLibs/FACEBYMILL.lua +++ b/StrategyLibs/FACEBYMILL.lua @@ -58,11 +58,19 @@ local function GetLeadInOutType( Machining) end +local function GetToolAddLength( dToolDiameter, dDepthToMachine) + local dCheckDepth = min( dToolDiameter / 2, dDepthToMachine) + local dToolAddLength = sqrt( dCheckDepth * dToolDiameter - dCheckDepth * dCheckDepth) + + return dToolAddLength +end + + local function CalculateLeadInOut( Machining, EdgeToMachine, bIsSplitFeature) -- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom) -- si determina l'eventuale riduzione da applicare in caso di inizio o fine chiusi - local dAddLengthToReduce = sqrt( Machining.dDepthToMachine * TOOLS[Machining.nToolIndex].dDiameter - Machining.dDepthToMachine * Machining.dDepthToMachine) + local dToolAddLength = GetToolAddLength( TOOLS[Machining.nToolIndex].dDiameter, Machining.dDepthToMachine) if Machining.bInvert then Machining.bIsStartClosed, Machining.bIsEndClosed = Machining.bIsEndClosed, Machining.bIsStartClosed @@ -106,14 +114,14 @@ local function CalculateLeadInOut( Machining, EdgeToMachine, bIsSplitFeature) LeadIn.dCompLength = 0 LeadOut.dCompLength = 0 if Machining.bIsStartClosed and Machining.bIsEndClosed then - LeadIn.dStartAddLength = -dAddLengthToReduce - LeadOut.dEndAddLength = -dAddLengthToReduce + LeadIn.dStartAddLength = -dToolAddLength + LeadOut.dEndAddLength = -dToolAddLength elseif Machining.bIsStartClosed then - LeadIn.dStartAddLength = -dAddLengthToReduce + LeadIn.dStartAddLength = -dToolAddLength -- eventuale correzione per accorciamento maggiore di larghezza tasca LeadOut.dEndAddLength = max( -LeadIn.dStartAddLength - EdgeToMachine.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA) elseif Machining.bIsEndClosed then - LeadOut.dEndAddLength = -dAddLengthToReduce + LeadOut.dEndAddLength = -dToolAddLength -- eventuale correzione per accorciamento maggiore di larghezza tasca LeadIn.dStartAddLength = max( -LeadOut.dEndAddLength - EdgeToMachine.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA) else @@ -421,7 +429,7 @@ function FACEBYMILL.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPara end local bStartLeft = MachiningLib.StartsLeftSide( Milling) local dAddLengthLeftSide = Milling.LeadOut.dEndAddLength - local dAddLengthToReduce = sqrt( Milling.dDepthToMachine * TOOLS[Milling.nToolIndex].dDiameter - Milling.dDepthToMachine * Milling.dDepthToMachine) + local dToolAddLength = sqrt( Milling.dDepthToMachine * TOOLS[Milling.nToolIndex].dDiameter - Milling.dDepthToMachine * Milling.dDepthToMachine) if bStartLeft then dAddLengthLeftSide = Milling.LeadIn.dStartAddLength end @@ -431,14 +439,14 @@ function FACEBYMILL.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPara else Milling.bIsApplicable = false end - elseif dAddLengthLeftSide + dAddLengthToReduce > dExtendAfterTail then + elseif dAddLengthLeftSide + dToolAddLength > dExtendAfterTail then if MachiningLib.CanMoveAfterSplitcut( dLengthOnX, Part) then Milling.sStage = 'AfterTail' else if bStartLeft then - Milling.LeadIn.dStartAddLength = - dAddLengthToReduce + dExtendAfterTail + Milling.LeadIn.dStartAddLength = - dToolAddLength + dExtendAfterTail else - Milling.LeadOut.dEndAddLength = - dAddLengthToReduce + dExtendAfterTail + Milling.LeadOut.dEndAddLength = - dToolAddLength + dExtendAfterTail end end end