diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index d6697fd..07fa52e 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -4710,9 +4710,9 @@ function SawPlusChain.GetToolFromMachining( sMachiningName) Tool.Name = EgtTdbGetCurrToolParam( MCH_TP.NAME) Tool.IsCCW = ( EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) < 0) Tool.Type = EgtTdbGetCurrToolParam( MCH_TP.TYPE) + Tool.Diameter = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or 0 -- lama if Tool.Type == MCH_TY.SAW_STD or Tool.Type == MCH_TY.SAW_FLAT then - Tool.Diameter = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or 0 Tool.Thickness = EgtTdbGetCurrToolParam(MCH_TP.THICK) or 0 Tool.MaxDepth = EgtTdbGetCurrToolMaxDepth() or 0 Tool.SideStep = EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'SIDESTEP', 'd') @@ -4776,12 +4776,9 @@ function SawPlusChain.GetHorizontalSteps( Machining) end local HorizontalSteps = {} HorizontalSteps.StepLength = 0 - HorizontalSteps.Count = 1 - if Machining.Tool.SideStep then - HorizontalSteps.Count = ceil( ( Machining.Depth - 10 * GEO.EPS_SMALL) / Machining.Tool.SideStep) - if HorizontalSteps.Count > 1 then - HorizontalSteps.StepLength = ( Machining.Depth - Machining.Tool.SideStep) / ( HorizontalSteps.Count - 1) - end + HorizontalSteps.Count = ceil( ( Machining.Depth - 10 * GEO.EPS_SMALL) / Machining.Tool.SideStep) + if HorizontalSteps.Count > 1 then + HorizontalSteps.StepLength = ( Machining.Depth - Machining.Tool.SideStep) / ( HorizontalSteps.Count - 1) end return HorizontalSteps @@ -4791,13 +4788,19 @@ function SawPlusChain.GetLeadInOut( Proc, Machining) -- si determina se l'inizio o la fine della lavorazione sono chiusi e l'eventuale riduzione da applicare local bIsStartClosed = false local bIsEndClosed = false - local dAddLengthToReduce = sqrt( Machining.Depth * Machining.Tool.Diameter - Machining.Depth * Machining.Depth) + local bIsMortising = ( Machining.Tool.Type == MCH_TY.MORTISE_STD) + local dAddLengthToReduce = 0 + if bIsMortising then + dAddLengthToReduce = Machining.Tool.Diameter / 2 + else + dAddLengthToReduce = sqrt( Machining.Depth * Machining.Tool.Diameter - Machining.Depth * Machining.Depth) + end if #( Proc.Pocket.SideFaces) == 2 then bIsStartClosed = true bIsEndClosed = true elseif #( Proc.Pocket.SideFaces) == 1 then local CCWDirection = ( Machining.FaceToMachine.VtN ^ Proc.Pocket.BottomFace.VtN) - if Machining.ToolInvert then + if Machining.ToolInvert or bIsMortising then CCWDirection = - CCWDirection end if CCWDirection * Proc.Pocket.SideFaces[1].VtN > 10 * GEO.EPS_SMALL then @@ -4817,25 +4820,34 @@ function SawPlusChain.GetLeadInOut( Proc, Machining) local LeadIn = {} local LeadOut = {} - LeadIn.Type = MCH_MILL_LI.LINEAR - LeadOut.Type = MCH_MILL_LI.LINEAR - LeadIn.TangentDistance = 0 - LeadOut.TangentDistance = 0 - LeadIn.Elevation = 0 - LeadOut.Elevation = 0 - LeadIn.CompLength = 0 - LeadOut.CompLength = 0 LeadIn.StartAddLength = 0 LeadOut.EndAddLength = 0 - LeadIn.PerpDistance = 0 - LeadOut.PerpDistance = 0 - if bIsStartClosed then - LeadIn.StartAddLength = -dAddLengthToReduce - LeadIn.PerpDistance = 1 - end - if bIsEndClosed then - LeadOut.EndAddLength = -dAddLengthToReduce - LeadOut.PerpDistance = 1 + if Machining.Tool.Type ~= MCH_TY.MORTISE_STD then + LeadIn.Type = MCH_MILL_LI.LINEAR + LeadOut.Type = MCH_MILL_LI.LINEAR + LeadIn.TangentDistance = 0 + LeadOut.TangentDistance = 0 + LeadIn.Elevation = 0 + LeadOut.Elevation = 0 + LeadIn.CompLength = 0 + LeadOut.CompLength = 0 + LeadIn.PerpDistance = 0 + LeadOut.PerpDistance = 0 + if bIsStartClosed then + LeadIn.StartAddLength = -dAddLengthToReduce + LeadIn.PerpDistance = 1 + end + if bIsEndClosed then + LeadOut.EndAddLength = -dAddLengthToReduce + LeadOut.PerpDistance = 1 + end + else + if bIsStartClosed then + LeadIn.StartAddLength = -dAddLengthToReduce + end + if bIsEndClosed then + LeadOut.EndAddLength = -dAddLengthToReduce + end end return LeadIn, LeadOut @@ -4851,6 +4863,7 @@ function SawPlusChain.ApplyMachining( Machining, sOperationNamePrefix, b3Raw) end -- impostazione parametri lavorazione + local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) EgtSetMachiningGeometry( {{ Machining.ProcId, Machining.FaceToMachine.Id}}) EgtSetMachiningParam( MCH_MP.FACEUSE, Machining.Faceuse) EgtSetMachiningParam( MCH_MP.SCC, Machining.SCC) @@ -4859,24 +4872,30 @@ function SawPlusChain.ApplyMachining( Machining, sOperationNamePrefix, b3Raw) EgtSetMachiningParam( MCH_MP.TOOLINVERT, Machining.ToolInvert) EgtSetMachiningParam( MCH_MP.OFFSR, Machining.RadialOffset) EgtSetMachiningParam( MCH_MP.OFFSL, Machining.LongitudinalOffset) - EgtSetMachiningParam( MCH_MP.LITANG, Machining.LeadIn.TangentDistance) - EgtSetMachiningParam( MCH_MP.LIPERP, Machining.LeadIn.PerpDistance) - EgtSetMachiningParam( MCH_MP.LOTANG, Machining.LeadOut.TangentDistance) - EgtSetMachiningParam( MCH_MP.LOPERP, Machining.LeadOut.PerpDistance) + if Machining.Tool.Type ~= MCH_TY.MORTISE_STD then + EgtSetMachiningParam( MCH_MP.LITANG, Machining.LeadIn.TangentDistance) + EgtSetMachiningParam( MCH_MP.LIPERP, Machining.LeadIn.PerpDistance) + EgtSetMachiningParam( MCH_MP.LOTANG, Machining.LeadOut.TangentDistance) + EgtSetMachiningParam( MCH_MP.LOPERP, Machining.LeadOut.PerpDistance) + end EgtSetMachiningParam( MCH_MP.STARTADDLEN, Machining.LeadIn.StartAddLength) EgtSetMachiningParam( MCH_MP.ENDADDLEN, Machining.LeadOut.EndAddLength) - EgtSetMachiningParam( MCH_MP.ENDADDLEN, Machining.LeadOut.EndAddLength) - EgtSetMachiningParam( MCH_MP.STEPTYPE, Machining.VerticalSteps.StepType) - EgtSetMachiningParam( MCH_MP.STEP, Machining.VerticalSteps.StepLength) - local sNotes - if Machining.VerticalSteps.MaxElev then - sNotes = EgtSetValInNotes( sNotes, 'MaxElev', Machining.VerticalSteps.MaxElev) + if Machining.Steps then + if Machining.Steps.StepType then + EgtSetMachiningParam( MCH_MP.STEPTYPE, Machining.Steps.StepType) + end + if Machining.Steps.StepLength then + EgtSetMachiningParam( MCH_MP.STEP, Machining.Steps.StepLength) + end + if Machining.Steps.MaxElev then + sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', Machining.Steps.MaxElev) + end end EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetBlockedAxis( Machining.Name, Machining.BlockedAxis.Orientation, b3Raw, Machining.FaceToMachine.VtN, Machining.BlockedAxis.VtOut)) EgtSetMachiningParam( MCH_MP.OVERL, Machining.Overlap) EgtSetMachiningParam( MCH_MP.INITANGS, Machining.SuggestedAngles) EgtSetMachiningParam( MCH_MP.STARTPOS, max( Machining.StartSafetyLength, EgtGetMachiningParam( MCH_MP.STARTPOS))) - EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) + EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) local bIsApplyOk = ML.ApplyMachining( true, false) if not bIsApplyOk then @@ -4984,16 +5003,16 @@ function SawPlusChain.Make( Proc, b3Raw, bOnlySaw) Cutting.RadialOffset = Proc.Pocket.Depth - Cutting.Depth end -- step verticale e offset longitudinale - Cutting.VerticalSteps = SawPlusChain.GetVerticalSteps( Proc, Cutting) - if Cutting.ToolInvert and Cutting.VerticalSteps.Count > 1 then + Cutting.Steps = SawPlusChain.GetVerticalSteps( Proc, Cutting) + if Cutting.ToolInvert and Cutting.Steps.Count > 1 then Cutting.LongitudinalOffset = - Proc.Pocket.Height else Cutting.LongitudinalOffset = 0 end + -- distanza di sicurezza Cutting.StartSafetyLength = 10 + -- overlap Cutting.Overlap = 0 - -- step orizzontale - Cutting.HorizontalSteps = SawPlusChain.GetHorizontalSteps( Cutting) -- faceuse Cutting.Faceuse = BL.GetNearestOrthoOpposite( Proc.Pocket.Direction) -- SCC @@ -5010,9 +5029,16 @@ function SawPlusChain.Make( Proc, b3Raw, bOnlySaw) local bOk, sErr -- lavorazione con lama - local dOriginalRadialOffset = Cutting.RadialOffset + -- eventuale step orizzontale + if Cutting.Tool.SideStep then + Cutting.HorizontalSteps = SawPlusChain.GetHorizontalSteps( Cutting) + else + Cutting.HorizontalSteps.Count = 1 + Cutting.HorizontalSteps.StepLength = 0 + end + local dOriginalRadialOffsetCutting = Cutting.RadialOffset for i = Cutting.HorizontalSteps.Count, 1, -1 do - Cutting.RadialOffset = dOriginalRadialOffset + Cutting.HorizontalSteps.StepLength * ( i - 1) + Cutting.RadialOffset = dOriginalRadialOffsetCutting + Cutting.HorizontalSteps.StepLength * ( i - 1) bOk, sErr = SawPlusChain.ApplyMachining( Cutting, 'Cut_', b3Raw) end @@ -5021,12 +5047,48 @@ function SawPlusChain.Make( Proc, b3Raw, bOnlySaw) end -- parametri della lavorazione con sega a catena + -- lato di lavoro e inversioni + if Chainsawing.Tool.IsCCW then + Chainsawing.Workside = MCH_MILL_WS.RIGHT + Chainsawing.Invert = false + else + Chainsawing.Workside = MCH_MILL_WS.LEFT + Chainsawing.Invert = true + end + Chainsawing.ToolInvert = false + -- profondità e offset longitudinale + if Chainsawing.Tool.MaxMat > Proc.Pocket.Depth - 10 * GEO.EPS_SMALL then + Chainsawing.Depth = Proc.Pocket.Depth + Chainsawing.LongitudinalOffset = 0 + else + Chainsawing.Depth = Chainsawing.Tool.MaxMat + Chainsawing.LongitudinalOffset = Proc.Pocket.Depth - Chainsawing.Depth + end + -- offset radiale + Chainsawing.RadialOffset = 0 + -- distanza di sicurezza + Chainsawing.StartSafetyLength = 10 + -- overlap + Chainsawing.Overlap = 0 + -- faceuse + Chainsawing.Faceuse = BL.GetNearestParalOpposite( Proc.Pocket.Direction) + -- SCC + Chainsawing.SCC = MCH_SCC.NONE + -- angoli suggeriti + Chainsawing.SuggestedAngles = '' + -- asse bloccato + Chainsawing.BlockedAxis = {} + Chainsawing.BlockedAxis.Orientation = 'perpendicular' + -- approccio e retrazione + Chainsawing.LeadIn, Chainsawing.LeadOut = SawPlusChain.GetLeadInOut( Proc, Chainsawing) - - - - - -- lavorazione con sega a catena +-- lavorazione con sega a catena +Chainsawing.VerticalSteps = SawPlusChain.GetVerticalSteps( Proc, Chainsawing) +local dOriginalRadialOffsetChainsawing = Chainsawing.RadialOffset +for i = Chainsawing.VerticalSteps.Count, 1, -1 do + Chainsawing.RadialOffset = dOriginalRadialOffsetChainsawing + Chainsawing.VerticalSteps.StepLength * ( i - 1) + bOk, sErr = SawPlusChain.ApplyMachining( Chainsawing, 'Chainsaw_', b3Raw) +end return bOk, sErr end