From 38ab9d4a40df9bade34129e0cb6c57b8b4897a4d Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Wed, 13 Mar 2024 12:30:00 +0100 Subject: [PATCH] Prima versione gestione Predrill --- LuaLibs/BeamExec.lua | 13 ++++++++++-- LuaLibs/MachiningLib.lua | 9 ++++++-- LuaLibs/ProcessDrill.lua | 46 +++++++++++++++++++++++++++++++++++----- 3 files changed, 59 insertions(+), 9 deletions(-) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 8676b0f..d12f226 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -60,6 +60,7 @@ -- 2024/03/04 Creata funzione calcolo dipendenze tra feature con calcolo topologia. -- 2024/03/07 Implementate le lavorazioni in doppio per fori specchiati non passanti e DrillPocket. -- 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 -- Tabella per definizione modulo local BeamExec = {} @@ -376,7 +377,11 @@ local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT) -- se foro if Drill.Identify( Proc) then -- assegno diametro e facce di ingresso e uscita (dati tabelle sempre per riferimento) - Proc.Diam, Proc.Fcs, Proc.Fce = Drill.GetData( Proc, b3Raw) + Proc.Diam, Proc.Len, Proc.Fcs, Proc.Fce = Drill.GetData( Proc, b3Raw) + -- verifico se devo inserire i prefori + if Drill.IsPredrillNeeded( Proc) then + Drill.AddPredrillFromDrillProc( Proc) + end -- verifico se necessaria seconda lavorazione da parte opposta per foro più lungo della punta if Drill.Split( Proc, b3Raw) then -- aggiorno flags prima parte foro (dati tabelle sempre per riferimento) @@ -393,6 +398,7 @@ local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT) Proc2.Box = BBox3d( Proc.Box) Proc2.Fct = Proc.Fct Proc2.Diam = Proc.Diam + Proc2.Len = Proc.Len Proc2.Head = Drill.IsHeadFeature( Proc2, b3Raw, dCurrOvmH) Proc2.Tail = Drill.IsTailFeature( Proc2, b3Raw, dCurrOvmH) Proc2.Fcs = Proc.Fce @@ -401,7 +407,10 @@ local function CollectFeatures( PartId, b3Raw, dCurrOvmH, dCurrOvmT) Proc2.TaskId = Proc.TaskId Proc2.AdjId = Proc.AdjId Proc2.MainId = Proc.MainId - table.insert( vProc, Proc2) + -- verifico se devo inserire i prefori + if Drill.IsPredrillNeeded( Proc2) then + Drill.AddPredrillFromDrillProc( Proc2) + end end -- se BlockHaus HalfLap elseif Proc.Prc == 37 then diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 89c9b1c..87e053f 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -13,6 +13,7 @@ -- 2024/01/23 Nella GetMachinings vengono ora raccolti i parametri utensile necessari per i VerifyTool, scritti direttamente nella tabella Machining.Tool. -- Le lavorazioni possono essere ora ordinate per dimensioni utensile (Longest, Shortest, Biggest, Smallest) se passato l'apposito parametro SortingCriterion in FindMachining. Al momento implementato solo per FindSawing. -- 2024/03/01 In VerifyPocketing implementato l'ordinamento per dimensioni utensile. +-- 2024/03/13 In FindDrilling se Predrill si cerca solo tra le svuotature -- Tabella per definizione modulo local MachiningLib = {} @@ -467,8 +468,12 @@ function MachiningLib.FindCutting( sType, bTopHead, bDownHead) end --------------------------------------------------------------------- -function MachiningLib.FindDrilling( dDiam, dDepth, bTopHead, bDownHead, bExcludeH2, bAngleTransmission) - local MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, EgtIf( bAngleTransmission, 'Drill_AT', 'Drill'), { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead, bExcludeH2) +function MachiningLib.FindDrilling( dDiam, dDepth, bTopHead, bDownHead, bExcludeH2, bAngleTransmission, bIsPredrill) + local MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 + -- se il foro è un predrill, non devo cercare tra le punte + if not bIsPredrill then + MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, EgtIf( bAngleTransmission, 'Drill_AT', 'Drill'), { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead, bExcludeH2) + end if ( not MachiningName or MachiningName == '') then MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, EgtIf( bAngleTransmission, 'Pocket_AT', 'Pocket'), { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead) end diff --git a/LuaLibs/ProcessDrill.lua b/LuaLibs/ProcessDrill.lua index 2eb3f9b..c997af8 100644 --- a/LuaLibs/ProcessDrill.lua +++ b/LuaLibs/ProcessDrill.lua @@ -20,6 +20,7 @@ -- 2023/07/28 Aggiunta gestione rinvio 90deg solo per forature da sotto esattamente verticali. -- 2023/09/26 Se errore in applicazione lavorazione si inverte e riprova solo se foratura singola su foro aperto. -- 2023/11/06 Migliorata gestione dei fori con AngularTransmission. +-- 2024/03/13 Prima versione gestione Predrill -- Tabella per definizione modulo local ProcessDrill = {} @@ -96,20 +97,21 @@ end --------------------------------------------------------------------- -- Recupero dati foro e adattamento se speciale function ProcessDrill.GetData( Proc, b3Raw) + local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i') -- verifico se foro da adattare if EgtExistsInfo( Proc.Id, 'DiamUser') then - local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i') if AuxId then AuxId = AuxId + Proc.Id end if AuxId and EgtGetType( AuxId) == GDB_TY.CRV_ARC and BD.USER_HOLE_DIAM and BD.USER_HOLE_DIAM > 1 then EgtModifyArcRadius( AuxId, BD.USER_HOLE_DIAM / 2) end end - -- recupero diametro + -- recupero diametro e lunghezza local dDiam = EgtGetInfo( Proc.Id, 'P12', 'd') or 0 + local dLen = abs( EgtCurveThickness( Proc.Id + AuxId)) or 0 -- recupero faccia di entrata e uscita local nFcs = EgtGetInfo( Proc.Id, 'FCS', 'i') or 0 local nFce = EgtGetInfo( Proc.Id, 'FCE', 'i') or 0 - return dDiam, nFcs, nFce + return dDiam, dLen, nFcs, nFce end --------------------------------------------------------------------- @@ -139,6 +141,40 @@ function ProcessDrill.Split( Proc, b3Raw) return ( bOpen and ( bHoriz or BD.ROT90 or BD.DOWN_HEAD or BD.TURN or bAngTransm) and not bSlant) end +--------------------------------------------------------------------- +-- Verifica se bisogna aggiungere un preforo +function ProcessDrill.IsPredrillNeeded( Proc) + local dDepthPredrill = EgtGetInfo( Proc.Id, 'Q03', 'i') + -- se non c'è la Q oppure se zero, allora non è da fare + if not dDepthPredrill or dDepthPredrill <= 0 then + return false + -- altrimenti Predrill da fare + else + return true + end +end + +--------------------------------------------------------------------- +-- Aggiunge il preforo alla feature passata +function ProcessDrill.AddPredrillFromDrillProc( Proc) + local dDepthPredrill = EgtGetInfo( Proc.Id, 'Q03', 'i') + -- foro più corto del preforo, allora è il foro che diventa il preforo stesso + if Proc.Len <= dDepthPredrill then + Proc.IsPredrill = true + Proc.IsPredrillOf = Proc.Id + -- altrimenti creo un nuovo process + else + -- recupero gruppo per geometria aggiuntiva + local AddGrpId = BL.GetAddGroup( Proc.PartId) + if not AddGrpId then + local sErr = 'Error on Predrill impossible to find AddGroup' + EgtOutLog( sErr) + return false, sErr + end + + end +end + --------------------------------------------------------------------- -- Classificazione della feature function ProcessDrill.Classify( Proc, b3Raw) @@ -295,9 +331,9 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId) end -- primo gruppo di controlli con lunghezza utensile pari a metà foro se passante -- recupero la lavorazione - local sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, dCheckDepth, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm) + local sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, dCheckDepth, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill) if not sDrilling and dCheckDepth then - sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, 0, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm) + sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, 0, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill) if sDrilling then dCheckDepth = nil end end if not sDrilling then