From 27ce6a30cea61333b3978c9a0fb563dc554f1287 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Tue, 7 Jul 2026 11:59:45 +0200 Subject: [PATCH] - per lama aggiunti attacchi speciali SpecialTangent e SpecialTangentInverted --- LuaLibs/LeadInOutLib.lua | 44 +++++++++++++++++++++++++++++++++++++ LuaLibs/MachiningLib.lua | 47 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) diff --git a/LuaLibs/LeadInOutLib.lua b/LuaLibs/LeadInOutLib.lua index 3c8dd34..e4bc95e 100644 --- a/LuaLibs/LeadInOutLib.lua +++ b/LuaLibs/LeadInOutLib.lua @@ -215,6 +215,50 @@ function LeadInOutLib.CalculateLeadInOut( sLeadInOutType, Parameters, OptionalPa -- punti dell'attacco LeadIn.ptPoint = Point3d( ptStartAtDepth - Edge.vtEdge * dLeadInLength) LeadOut.ptPoint = Point3d( ptEndAtDepth + Edge.vtEdge * dLeadOutLength) + + elseif sLeadInOutType == 'SpecialTangent' then + + -- ingresso con componente aggiuntiva perpendicolare + LeadIn.nType = MCH_MILL_LO.PERP_TG + local dStartEndOffset = 10 + local ptEndAtDepthWithOffset = ptEndAtDepth + Edge.vtN * dStartEndOffset + local ptEndBladeCenterWithOffset = ptEndBladeCenter + Edge.vtN * dStartEndOffset + + -- calcolo distanza per uscire dal box con questa lama nella direzione tangenziale + local dLeadInLength = CalculateLeadInOutLength( ptStartBladeCenter, Face.vtN, b3BoxPartExpanded, -Edge.vtEdge, Tool) + local dLeadOutLength = -CalculateLeadInOutLength( ptEndBladeCenterWithOffset, Face.vtN, b3BoxPartExpanded, -Edge.vtEdge, Tool) + + -- componenti dell'attacco + LeadIn.dPerpDistance = 0 + LeadIn.dTangentDistance = dLeadInLength + LeadOut.dPerpDistance = dStartEndOffset + LeadOut.dTangentDistance = dLeadOutLength + + -- punti dell'attacco + LeadIn.ptPoint = Point3d( ptStartAtDepth - Edge.vtEdge * dLeadInLength) + LeadOut.ptPoint = Point3d( ptEndAtDepthWithOffset + Edge.vtEdge * dLeadOutLength) + + elseif sLeadInOutType == 'SpecialTangentInverted' then + + -- ingresso con componente aggiuntiva perpendicolare + LeadIn.nType = MCH_MILL_LI.TG_PERP + local dStartEndOffset = 10 + local ptStartAtDepthWithOffset = ptStartAtDepth + Edge.vtN * dStartEndOffset + local ptStartBladeCenterWithOffset = ptStartBladeCenter + Edge.vtN * dStartEndOffset + + -- calcolo distanza per uscire dal box con questa lama nella direzione tangenziale + local dLeadInLength = -CalculateLeadInOutLength( ptStartBladeCenterWithOffset, Face.vtN, b3BoxPartExpanded, Edge.vtEdge, Tool) + local dLeadOutLength = CalculateLeadInOutLength( ptEndBladeCenter, Face.vtN, b3BoxPartExpanded, Edge.vtEdge, Tool) + + -- componenti dell'attacco + LeadIn.dPerpDistance = dStartEndOffset + LeadIn.dTangentDistance = dLeadInLength + LeadOut.dPerpDistance = 0 + LeadOut.dTangentDistance = dLeadOutLength + + -- punti dell'attacco + LeadIn.ptPoint = Point3d( ptStartAtDepthWithOffset - Edge.vtEdge * dLeadInLength) + LeadOut.ptPoint = Point3d( ptEndAtDepth + Edge.vtEdge * dLeadOutLength) end -- lunghezza totale attacco diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 77f77c3..39388b5 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -411,6 +411,53 @@ local function TestEngagement( sBladeEngagement, Parameters, OptionalParameters) end end + -- se attacco tangenziale standard non possibile si prova l'attacco tangenziale speciale tutto da un lato + if not LeadInOut.Tangent then + -- prima si prova l'invertito (il più frequente) + TangentLeadInOut = LeadInOutLib.CalculateLeadInOut( 'SpecialTangentInverted', Parameters, LeadInOutOptionalParameters) + -- check extracorsa nei punti di attacco + PointsOnToolTipCenter = { + PreSimulationLib.GetPointOnToolTipCenter( TangentLeadInOut.LeadIn.ptPoint, vtHead, Face.vtN, Edge.vtN, Tool), + PreSimulationLib.GetPointOnToolTipCenter( TangentLeadInOut.LeadOut.ptPoint, vtHead, Face.vtN, Edge.vtN, Tool) + } + bOutOfStrokeTangent = PreSimulationLib.CheckOutOfStrokeFromPoints( PointsOnToolTipCenter, vtHead, nSCC, Tool) + -- attacco tangenziale non in extracorsa: si verifica se è in collisione + if not bOutOfStrokeTangent then + CheckCollisionOptionalParameters.PointsToCheck = {} + table.insert( CheckCollisionOptionalParameters.PointsToCheck, TangentLeadInOut.LeadIn.ptPoint) + table.insert( CheckCollisionOptionalParameters.PointsToCheck, TangentLeadInOut.LeadOut.ptPoint) + local bCollisionFoundTangent, bMoveAfterSplitTangent = PreSimulationLib.CheckCollision( CheckCollisionParameters, CheckCollisionOptionalParameters) + -- attacco tangenziale possibile + if not bCollisionFoundTangent then + LeadInOut.Tangent = TangentLeadInOut + LeadInOut.Tangent.bMoveAfterSplit = bMoveAfterSplitTangent + end + end + + if not LeadInOut.Tangent then + -- se speciale invertito non applicabile si prova lo speciale non invertito + TangentLeadInOut = LeadInOutLib.CalculateLeadInOut( 'SpecialTangent', Parameters, LeadInOutOptionalParameters) + -- check extracorsa nei punti di attacco + PointsOnToolTipCenter = { + PreSimulationLib.GetPointOnToolTipCenter( TangentLeadInOut.LeadIn.ptPoint, vtHead, Face.vtN, Edge.vtN, Tool), + PreSimulationLib.GetPointOnToolTipCenter( TangentLeadInOut.LeadOut.ptPoint, vtHead, Face.vtN, Edge.vtN, Tool) + } + bOutOfStrokeTangent = PreSimulationLib.CheckOutOfStrokeFromPoints( PointsOnToolTipCenter, vtHead, nSCC, Tool) + -- attacco tangenziale non in extracorsa: si verifica se è in collisione + if not bOutOfStrokeTangent then + CheckCollisionOptionalParameters.PointsToCheck = {} + table.insert( CheckCollisionOptionalParameters.PointsToCheck, TangentLeadInOut.LeadIn.ptPoint) + table.insert( CheckCollisionOptionalParameters.PointsToCheck, TangentLeadInOut.LeadOut.ptPoint) + local bCollisionFoundTangent, bMoveAfterSplitTangent = PreSimulationLib.CheckCollision( CheckCollisionParameters, CheckCollisionOptionalParameters) + -- attacco tangenziale possibile + if not bCollisionFoundTangent then + LeadInOut.Tangent = TangentLeadInOut + LeadInOut.Tangent.bMoveAfterSplit = bMoveAfterSplitTangent + end + end + end + end + -- se disponibili più attacchi si sceglie il più corto, altrimenti quello possibile if LeadInOut.Perpendicular and LeadInOut.Tangent then if LeadInOut.Perpendicular.dTotalLength > LeadInOut.Tangent.dTotalLength + 10 then