From 617058cdda1038f8b0d6688996d387cf7358d2e6 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Thu, 11 Apr 2024 12:14:33 +0200 Subject: [PATCH] - in SawPlusChain nei messaggi si scrive il FeatureId invece di TaskId - commenti e piccole correzioni --- LuaLibs/BeamExec.lua | 3 +++ LuaLibs/ProcessLapJoint.lua | 41 ++++++++++++++++++++----------------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 99814a8..66167cc 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -62,6 +62,7 @@ -- 2024/03/11 In CollectFeatures si scrive ora Width e Height della faccia sia trimmate con il grezzo che intere. -- 2024/03/13 In CollectFeatures si scrive lunghezza foro su Proc e si controla se serve Predrill -- In OrderFeature, preforo sempre prima del foro +-- 2024/04/11 In CollectFeatures aggiunta lettura info PRID, scritta in Proc.FeatureId -- Tabella per definizione modulo local BeamExec = {} @@ -344,6 +345,8 @@ local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT) end Proc.Box = EgtGetBBoxGlob( ProcId, GDB_BB.STANDARD) if b3Raw then + -- id della feature + Proc.FeatureId = EgtGetInfo( ProcId, 'PRID', 'i') or Proc.TaskId -- recupero l'elenco delle facce della parte interessate dalla feature Proc.AffectedFaces = BL.GetProcessAffectedFaces( Proc) -- recupero informazioni sulle facce della feature diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index 31a18d1..151a24c 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -101,6 +101,7 @@ -- 2024/03/04 Implementato attacco esterno se tasca 4 facce sulla coda ma nessun pezzo successivo. -- 2024/03/15 Correzione a calcolo ingombro per feature basse e lunghe dalla testa. -- 2024/04/02 In ForceSideMill escluso caso 4 facce senza possibilità di ingresso lungo Y. +-- 2024/04/11 Aggiunta strategia SawPlusChain per lavorazione tasche con lama + sega a catena opzionale. Attivata con Q11. -- Tabella per definizione modulo local ProcessLapJoint = {} @@ -4606,10 +4607,11 @@ function SawPlusChain.IsTopologyOk( Proc) if Proc.TopologyLongName == 'Pocket-Blind-RightAngles-Parallel-5' or Proc.TopologyLongName == 'Groove-Through-RightAngles-Parallel-3' or Proc.TopologyLongName == 'Groove-Blind-RightAngles-Parallel-4' then - return true - else - return false - end + + return true + else + return false + end end @@ -4776,7 +4778,7 @@ end function SawPlusChain.CalculateLeadInOut( Proc, Machining) - -- TODO qui saranno da implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom) + -- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom) -- si determina se l'inizio o la fine della lavorazione sono chiusi e l'eventuale riduzione da applicare local bIsStartClosed = false @@ -4944,6 +4946,7 @@ end function SawPlusChain.Saw.GetSCC( vtMachiningDirection) + -- TODO implementare SCC come per FacesBySaw local nSCC = MCH_SCC.NONE if AreSameVectorApprox( vtMachiningDirection, Z_AX()) then nSCC = MCH_SCC.ADIR_ZP @@ -4972,7 +4975,7 @@ function SawPlusChain.Saw.CalculateMachiningParameters( Proc) -- ricerca lavorazione Cutting.Name = ML.FindCutting( 'HeadSide', true, false) if not Cutting.Name then - Cutting.Message = 'Feature '.. Proc.TaskId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - saw blade not found' + Cutting.Message = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - saw blade not found' Cutting.CanApply = false EgtOutLog( Cutting.Message) return Cutting @@ -4984,7 +4987,7 @@ function SawPlusChain.Saw.CalculateMachiningParameters( Proc) -- verifica dimensioni tasca compatibili -- se tasca meno spessa della lama la strategia non è applicabile if Cutting.Tool.Thickness > Proc.Pocket.Height - 10 * GEO.EPS_SMALL then - Cutting.Message = 'Feature '.. Proc.TaskId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - pocket too narrow for saw blade thickness' + Cutting.Message = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - pocket too narrow for saw blade thickness' Cutting.CanApply = false EgtOutLog( Cutting.Message) return Cutting @@ -4992,7 +4995,7 @@ function SawPlusChain.Saw.CalculateMachiningParameters( Proc) if #( Proc.Pocket.SideFaces) > 1 then -- se tasca più stretta della lama la strategia non è applicabile if Cutting.Tool.Diameter > Proc.Pocket.Width - 10 * GEO.EPS_SMALL then - Cutting.Message = 'Feature '.. Proc.TaskId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - pocket too narrow for saw blade diameter' + Cutting.Message = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - pocket too narrow for saw blade diameter' Cutting.CanApply = false EgtOutLog( Cutting.Message) return Cutting @@ -5025,7 +5028,7 @@ function SawPlusChain.Saw.CalculateMachiningParameters( Proc) Cutting.Depth = Cutting.Tool.MaxDepth Cutting.RadialOffset = Proc.Pocket.Depth - Cutting.Depth if Proc.Pocket.ApplyOnlySawblade then - Cutting.Message = 'Feature '.. Proc.TaskId .. ' : sawblade elevation (' .. EgtNumToString( Proc.Pocket.Depth, 1) .. ') bigger than max tool depth (' .. EgtNumToString( Cutting.Depth, 1) .. ')' + Cutting.Message = 'Feature '.. Proc.FeatureId .. ' : sawblade elevation (' .. EgtNumToString( Proc.Pocket.Depth, 1) .. ') bigger than max tool depth (' .. EgtNumToString( Cutting.Depth, 1) .. ')' EgtOutLog( Cutting.Message) end end @@ -5068,7 +5071,7 @@ function SawPlusChain.Saw.CalculateMachiningParameters( Proc) -- eventuale avviso di danneggiamento pezzo successivo local dOffsideLength = max( Cutting.LeadIn.StartAddLength, Cutting.LeadOut.EndAddLength) + Cutting.Tool.Diameter / 2 + 10 * GEO.EPS_SMALL if ( not Proc.Tail or Proc.AdvTail) and Proc.AffectedFaces.Left and ( Proc.Pocket.DistanceToNextPart < dOffsideLength) then - local sDamageNextPieceMessage = 'Feature '.. Proc.TaskId .. ' : sawblade can damage next piece.' + local sDamageNextPieceMessage = 'Feature '.. Proc.FeatureId .. ' : sawblade can damage next piece.' if #Cutting.Message > 0 then Cutting.Message = Cutting.Message .. '\n' .. sDamageNextPieceMessage else @@ -5093,7 +5096,7 @@ function SawPlusChain.Chainsaw.CalculateMachiningParameters( Proc) Chainsawing.Name = ML.FindSawing( 'Sawing', nil, nil, 'Longest') end if not Chainsawing.Name then - Chainsawing.Message = 'Feature '.. Proc.TaskId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - chainsaw not found' + Chainsawing.Message = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - chainsaw not found' Chainsawing.CanApply = false EgtOutLog( Chainsawing.Message) return Chainsawing @@ -5105,7 +5108,7 @@ function SawPlusChain.Chainsaw.CalculateMachiningParameters( Proc) -- verifica dimensioni tasca compatibili -- se tasca meno spessa della sega a catena la strategia non è applicabile if Chainsawing.Tool.Thickness > Proc.Pocket.Height - 10 * GEO.EPS_SMALL then - Chainsawing.Message = 'Feature '.. Proc.TaskId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - pocket too narrow for chainsaw thickness' + Chainsawing.Message = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - pocket too narrow for chainsaw thickness' Chainsawing.CanApply = false EgtOutLog( Chainsawing.Message) return Chainsawing @@ -5113,7 +5116,7 @@ function SawPlusChain.Chainsaw.CalculateMachiningParameters( Proc) if #( Proc.Pocket.SideFaces) > 1 then -- se tasca più stretta della sega a catena la strategia non è applicabile if Chainsawing.Tool.Width > Proc.Pocket.Width - 10 * GEO.EPS_SMALL then - Chainsawing.Message = 'Feature '.. Proc.TaskId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - pocket too narrow for chainsaw width' + Chainsawing.Message = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - pocket too narrow for chainsaw width' Chainsawing.CanApply = false EgtOutLog( Chainsawing.Message) return Chainsawing @@ -5139,7 +5142,7 @@ function SawPlusChain.Chainsaw.CalculateMachiningParameters( Proc) else Chainsawing.Depth = Chainsawing.Tool.MaxMat Chainsawing.LongitudinalOffset = Proc.Pocket.Depth - Chainsawing.Depth - Chainsawing.Message = 'Feature '.. Proc.TaskId .. ' : chainsaw elevation (' .. EgtNumToString( Proc.Pocket.Depth, 1) .. ') bigger than max tool depth (' .. EgtNumToString( Chainsawing.Depth, 1) .. ')' + Chainsawing.Message = 'Feature '.. Proc.FeatureId .. ' : chainsaw elevation (' .. EgtNumToString( Proc.Pocket.Depth, 1) .. ') bigger than max tool depth (' .. EgtNumToString( Chainsawing.Depth, 1) .. ')' EgtOutLog( Chainsawing.Message) end -- offset radiale @@ -5167,7 +5170,7 @@ function SawPlusChain.Chainsaw.CalculateMachiningParameters( Proc) -- eventuale avviso di danneggiamento pezzo successivo local dOffsideLength = max( Chainsawing.LeadIn.StartAddLength, Chainsawing.LeadOut.EndAddLength) + Chainsawing.Tool.Width / 2 + 10 * GEO.EPS_SMALL if ( not Proc.Tail or Proc.AdvTail) and Proc.AffectedFaces.Left and ( Proc.Pocket.DistanceToNextPart < dOffsideLength) then - local sDamageNextPieceMessage = 'Feature '.. Proc.TaskId .. ' : chainsaw can damage next piece.' + local sDamageNextPieceMessage = 'Feature '.. Proc.FeatureId .. ' : chainsaw can damage next piece.' if #Chainsawing.Message > 0 then Chainsawing.Message = Chainsawing.Message .. '\n' .. sDamageNextPieceMessage else @@ -5188,13 +5191,13 @@ function SawPlusChain.Make( Proc, nRawId, nPhase, bOnlySaw) -- TODO per implementare la strategia con lapjoint lunghe bisogna prima riconoscere le topologie che arrivano if Proc.IsSplittedLapJoint then - local sErr = 'Feature '.. Proc.TaskId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not implemented for long lapjoint ' + local sErr = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not implemented for long lapjoint' EgtOutLog( sErr) return false, sErr end if not SawPlusChain.IsTopologyOk( Proc) then - local sErr = 'Feature '.. Proc.TaskId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not implemented for topology ' .. Proc.TopologyLongName + local sErr = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not implemented' EgtOutLog( sErr) return false, sErr end @@ -5202,7 +5205,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 and ( Proc.Fct > 3 or not Proc.AffectedFaces.Top) then - local sErr = 'Feature '.. Proc.TaskId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - pocket on bottom face' + local sErr = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. Proc.Pocket.Strategy .. ' not applicable - pocket on bottom face' EgtOutLog( sErr) return false, sErr end @@ -6494,7 +6497,7 @@ local function MakeLongMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead) for i = 1, #vAddId do local b3Box = EgtGetBBoxGlob( vAddId[i], GDB_BB.STANDARD) local nFct = EgtSurfTmFacetCount( vAddId[i]) - local AddProc = { Id = vAddId[i], Grp = Proc.Grp, Prc = Proc.Prc, Box = b3Box, TotBox = Proc.Box, Fct = nFct, Flg = Proc.Flg, PartId = Proc.PartId, TaskId = Proc.TaskId, IsSplittedLapJoint = true} + local AddProc = { Id = vAddId[i], Grp = Proc.Grp, Prc = Proc.Prc, Box = b3Box, TotBox = Proc.Box, Fct = nFct, Flg = Proc.Flg, PartId = Proc.PartId, TaskId = Proc.TaskId, FeatureId = Proc.FeatureId, IsSplittedLapJoint = true} Topology.Classify( AddProc, b3Raw) -- lasciare il false nel sesto parametro (perchè internamente viene verificato se diverso da nil) local bOk, sMyWarn