diff --git a/LuaLibs/FaceData.lua b/LuaLibs/FaceData.lua index e716295..13d9b1c 100644 --- a/LuaLibs/FaceData.lua +++ b/LuaLibs/FaceData.lua @@ -138,8 +138,7 @@ function FaceData.GetEdgesInfo( ProcOrId, idFace ) CurrentEdge.bIsEndOpen = EdgesEgt[nNextEdgeIndex].Open CurrentEdge.ptStart = Point3d( EdgesEgt[i].Start) CurrentEdge.ptEnd = Point3d( EdgesEgt[nNextEdgeIndex].Start) - CurrentEdge.vtEdge = CurrentEdge.ptEnd - CurrentEdge.ptStart - CurrentEdge.vtEdge:normalize() + CurrentEdge.vtEdge = CurrentEdge.ptEnd - CurrentEdge.ptStart ; CurrentEdge.vtEdge:normalize() CurrentEdge.sType = 'Standard' CurrentEdge.id = i - 1 diff --git a/LuaLibs/LeadInOutLib.lua b/LuaLibs/LeadInOutLib.lua index cb8f14e..93cf9f7 100644 --- a/LuaLibs/LeadInOutLib.lua +++ b/LuaLibs/LeadInOutLib.lua @@ -7,9 +7,38 @@ local LeadInOutLib = {} -- Include require( 'EgtBase') local BeamData = require( 'BeamDataNew') +local FaceData = require( 'FaceData') EgtOutLog( ' LeadInOutLib started', 1) +------------------------------------------------------------------------------------------------------------- +local function GetExtraAddLengthInclinedSides( Face, Edge) + + -- se faccia rettangolare i lati sono tutti a 90deg, inutile fare conti + if FaceData.IsFaceRectangle( Face) then + 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 vtEdgePrevious = Face.Edges[nPreviousEdgeIndex].vtEdge + local vtEdgeNext = Face.Edges[nNextEdgeIndex].vtEdge + local dLengthEdgePrevious = Face.Edges[nPreviousEdgeIndex].dLength + local dLengthEdgeNext = Face.Edges[nNextEdgeIndex].dLength + + local dExtraPrevious = dLengthEdgePrevious * ( Edge.vtEdge * -vtEdgePrevious) + local dExtraNext = dLengthEdgeNext * ( -Edge.vtEdge * vtEdgeNext) + + return dExtraPrevious, dExtraNext +end + ------------------------------------------------------------------------------------------------------------- local function GetPerpendicularLeadInOutDirection( Face, Edge) @@ -83,8 +112,9 @@ function LeadInOutLib.CalculateLeadInOut( sLeadInOutType, Parameters) local bIsStartClosed = not Edge.bIsStartOpen local bIsEndClosed = not Edge.bIsEndOpen - -- accorciamento per lati chiusi (รจ sempre l'impronta utensile) + -- accorciamento per lati chiusi LeadInOut.dToolMarkLength = sqrt( dDepthToMachine * Tool.dDiameter - dDepthToMachine * dDepthToMachine) + LeadInOut.dExtraAddLengthStart, LeadInOut.dExtraAddLengthEnd = GetExtraAddLengthInclinedSides( Face, Edge) -- allungamento per faccia singola (aperta in tutte le direzioni) LeadInOut.dAddedLengthOpenFace = BeamData.CUT_EXTRA @@ -105,14 +135,14 @@ function LeadInOutLib.CalculateLeadInOut( sLeadInOutType, Parameters) -- calcolo allungamenti / accorciamenti if bIsStartClosed and bIsEndClosed then - LeadIn.dStartAddLength = -LeadInOut.dToolMarkLength - LeadOut.dEndAddLength = -LeadInOut.dToolMarkLength + LeadIn.dStartAddLength = -LeadInOut.dToolMarkLength - LeadInOut.dExtraAddLengthStart + LeadOut.dEndAddLength = -LeadInOut.dToolMarkLength - LeadInOut.dExtraAddLengthEnd elseif bIsStartClosed then - LeadIn.dStartAddLength = -LeadInOut.dToolMarkLength + LeadIn.dStartAddLength = -LeadInOut.dToolMarkLength - 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 + LeadOut.dEndAddLength = -LeadInOut.dToolMarkLength - 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