diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index d83bc94..1857a94 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -4593,7 +4593,7 @@ end -- 4 facce con faccia di fondo grande: la faccia da lavorare è piccola (3 adj) e le facce laterali sono le due piccole -- 3 facce: la faccia di fondo è il fondo della tasca, la faccia da lavorare è grande, non ci sono facce laterali --- TODO: gestione messaggi in funzione apposita ( almeno per append) +-- TODO gestione messaggi in funzione apposita (almeno per append) local SawPlusChain = {} SawPlusChain.Saw = {} @@ -4856,12 +4856,11 @@ function SawPlusChain.CalculateLeadInOut( Proc, Machining) end -function SawPlusChain.ApplyMachining( Machining, sOperationNamePrefix, b3Raw) +function SawPlusChain.ApplyMachining( Machining, b3Raw) local sErr = '' - local sOperationName = sOperationNamePrefix .. ( EgtGetName( Machining.ProcId) or tostring( Machining.ProcId)) .. '_' .. tostring( Machining.FaceToMachine.Id + 1) - local nOperationId = EgtAddMachining( sOperationName, Machining.Name) + local nOperationId = EgtAddMachining( Machining.OperationName, Machining.Name) if not nOperationId then - sErr = 'Error adding machining ' .. sOperationName .. '-' .. Machining.Name + sErr = 'Error adding machining ' .. Machining.OperationName .. '-' .. Machining.Name EgtOutLog( sErr) return false, sErr end @@ -4899,8 +4898,8 @@ function SawPlusChain.ApplyMachining( Machining, sOperationNamePrefix, b3Raw) end end EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetBlockedAxis( Machining.Name, Machining.BlockedAxis.Orientation, b3Raw, Machining.FaceToMachine.VtN, Machining.BlockedAxis.VtOut)) + EgtSetMachiningParam( MCH_MP.INITANGS, BL.GetChainSawInitAngs( Machining.FaceToMachine.VtN, Machining.Direction, Machining.SuggestedAngles.Index)) EgtSetMachiningParam( MCH_MP.OVERL, Machining.Overlap) - EgtSetMachiningParam( MCH_MP.INITANGS, Machining.SuggestedAngles) EgtSetMachiningParam( MCH_MP.STARTPOS, max( Machining.StartSafetyLength, EgtGetMachiningParam( MCH_MP.STARTPOS))) if Machining.MaxElev then sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', Machining.MaxElev) @@ -4909,9 +4908,31 @@ function SawPlusChain.ApplyMachining( Machining, sOperationNamePrefix, b3Raw) local bIsApplyOk = ML.ApplyMachining( true, false) if not bIsApplyOk then - sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nOperationId, false) - return false, sErr + local nErr + nErr, sErr = EgtGetLastMachMgrError() + -- se mortasatura e l'errore è compatibile (Axes values not calculable) si prova con l'altra configurazione dell'asse bloccato + -- TODO valutare se c'è modo di capire preventivamente la configurazione dell'asse bloccato e quindi rimuovere questa parte di codice + if Machining.Type == MCH_OY.MORTISING and nErr == 2507 then + if Machining.BlockedAxis.Orientation == 'perpendicular' then + Machining.BlockedAxis.Orientation = 'parallel' + else + Machining.BlockedAxis.Orientation = 'perpendicular' + end + EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetBlockedAxis( Machining.Name, Machining.BlockedAxis.Orientation, b3Raw, Machining.FaceToMachine.VtN, Machining.BlockedAxis.VtOut)) + if Machining.SuggestedAngles.Index == 1 then + Machining.SuggestedAngles.Index = 2 + else + Machining.SuggestedAngles.Index = 1 + end + EgtSetMachiningParam( MCH_MP.INITANGS, BL.GetChainSawInitAngs( Machining.FaceToMachine.VtN, Machining.Direction, Machining.SuggestedAngles.Index)) + sErr = '' + bIsApplyOk = ML.ApplyMachining( true, false) + end + if not bIsApplyOk then + nErr, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nOperationId, false) + return false, sErr + end end return true, sErr @@ -4975,6 +4996,8 @@ function SawPlusChain.Saw.CalculateMachiningParameters( Proc) end -- parametri della lavorazione + -- direzione utensile + Cutting.Direction = Proc.Pocket.Direction -- lato di lavoro e inversioni if Cutting.Tool.IsCCW then Cutting.Workside = MCH_MILL_WS.RIGHT @@ -5012,9 +5035,9 @@ function SawPlusChain.Saw.CalculateMachiningParameters( Proc) -- overlap Cutting.Overlap = 0 -- faceuse - Cutting.Faceuse = BL.GetNearestOrthoOpposite( Proc.Pocket.Direction) + Cutting.Faceuse = BL.GetNearestOrthoOpposite( Cutting.Direction) -- SCC - Cutting.SCC = SawPlusChain.Saw.GetSCC( Proc.Pocket.Direction) + Cutting.SCC = SawPlusChain.Saw.GetSCC( Cutting.Direction) -- angoli suggeriti Cutting.SuggestedAngles = '' -- asse bloccato @@ -5031,6 +5054,8 @@ function SawPlusChain.Saw.CalculateMachiningParameters( Proc) Cutting.HorizontalSteps.Count = 1 Cutting.HorizontalSteps.StepLength = 0 end + -- nome operazione + Cutting.OperationName = 'Cut_' .. ( EgtGetName( Cutting.ProcId) or tostring( Cutting.ProcId)) .. '_' .. tostring( Cutting.FaceToMachine.Id + 1) -- eventuale avviso di danneggiamento pezzo successivo local dOffsideLength = max( Cutting.LeadIn.StartAddLength, Cutting.LeadOut.EndAddLength) + Cutting.Tool.Diameter / 2 + 10 * GEO.EPS_SMALL @@ -5085,6 +5110,8 @@ function SawPlusChain.Chainsaw.CalculateMachiningParameters( Proc) end -- parametri della lavorazione + -- direzione utensile + Chainsawing.Direction = Proc.Pocket.Direction -- lato di lavoro e inversioni if Chainsawing.Tool.IsCCW then Chainsawing.Workside = MCH_MILL_WS.RIGHT @@ -5110,18 +5137,20 @@ function SawPlusChain.Chainsaw.CalculateMachiningParameters( Proc) -- overlap Chainsawing.Overlap = 0 -- faceuse - Chainsawing.Faceuse = BL.GetNearestParalOpposite( Proc.Pocket.Direction) + Chainsawing.Faceuse = BL.GetNearestParalOpposite( Chainsawing.Direction) -- SCC Chainsawing.SCC = MCH_SCC.NONE - -- angoli suggeriti - Chainsawing.SuggestedAngles = '' - -- asse bloccato + -- asse bloccato e angoli suggeriti Chainsawing.BlockedAxis = {} Chainsawing.BlockedAxis.Orientation = 'perpendicular' + Chainsawing.SuggestedAngles = {} + Chainsawing.SuggestedAngles.Index = 1 -- approccio e retrazione Chainsawing.LeadIn, Chainsawing.LeadOut = SawPlusChain.CalculateLeadInOut( Proc, Chainsawing) -- eventuale step verticale Chainsawing.VerticalSteps = SawPlusChain.GetVerticalSteps( Proc, Chainsawing) + -- nome operazione + Chainsawing.OperationName = 'Chainsaw_' .. ( EgtGetName( Chainsawing.ProcId) or tostring( Chainsawing.ProcId)) .. '_' .. tostring( Chainsawing.FaceToMachine.Id + 1) -- eventuale avviso di danneggiamento pezzo successivo local dOffsideLength = max( Chainsawing.LeadIn.StartAddLength, Chainsawing.LeadOut.EndAddLength) + Chainsawing.Tool.Width / 2 + 10 * GEO.EPS_SMALL @@ -5151,7 +5180,7 @@ function SawPlusChain.Make( Proc, nRawId, nPhase, bOnlySaw) -- se tasca su faccia sotto la strategia non è applicabile (la sega a catena in generale non può lavorare da sotto) -- TODO se OnlySaw questo test è da rimuovere ma bisogna considerare anche la lama da sotto - if Proc.AffectedFaces.Bottom then + if Proc.AffectedFaces.Bottom and ( Proc.Fct > 3 or not Proc.AffectedFaces.Top) then local sErr = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - pocket on bottom face' return false, sErr end @@ -5182,7 +5211,7 @@ function SawPlusChain.Make( Proc, nRawId, nPhase, bOnlySaw) Cutting.LeadIn.PerpDistance = dOriginalLeadInPerpDistance - Cutting.RadialOffset Cutting.LeadOut.PerpDistance = dOriginalLeadOutPerpDistance - Cutting.RadialOffset -- applicazione lavorazione - bIsCuttingOk, sCuttingApplyMessage = SawPlusChain.ApplyMachining( Cutting, 'Cut_', b3Raw) + bIsCuttingOk, sCuttingApplyMessage = SawPlusChain.ApplyMachining( Cutting, b3Raw) -- update messaggi if sCuttingApplyMessage and #sCuttingApplyMessage > 0 then Cutting.Message = Cutting.Message .. 'Apply : ' .. sCuttingApplyMessage .. '\n' @@ -5212,7 +5241,7 @@ function SawPlusChain.Make( Proc, nRawId, nPhase, bOnlySaw) for i = Chainsawing.VerticalSteps.Count, 1, -1 do Chainsawing.RadialOffset = dOriginalRadialOffsetChainsawing + Chainsawing.VerticalSteps.StepLength * ( i - 1) -- applicazione lavorazione - bIsChainsawingOk, sChainsawingApplyMessage = SawPlusChain.ApplyMachining( Chainsawing, 'Chainsaw_', b3Raw) + bIsChainsawingOk, sChainsawingApplyMessage = SawPlusChain.ApplyMachining( Chainsawing, b3Raw) -- update messaggi if sChainsawingApplyMessage and #sChainsawingApplyMessage > 0 then Chainsawing.Message = Chainsawing.Message .. '\n' .. 'Apply : ' .. sChainsawingApplyMessage