From ccb363f6f18410f092764fc2bbd1ab7beb7f8e6d Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Wed, 6 Jul 2022 12:01:40 +0200 Subject: [PATCH] Per forature su feature di testa o coda corretta l'assegnazione di head o tail ( funzione SetDrillingsToMachineAfterHeadOrTailCut in BeamExec) --- LuaLibs/BeamExec.lua | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 5d16f02..a9db6a9 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -228,6 +228,7 @@ local function IsTailFeature( Proc, b3Raw, dCurrOvmH, dCurrOvmT) end ------------------------------------------------------------------------------------------------------------- +-- restituisce vero se la feature con box b3Proc taglia l'intera sezione della barra, rappresentata dalle sue dimensioni W e H local function IsFeatureCuttingEntireSection( b3Proc, dRawW, dRawH) return ((abs(b3Proc:getDimY() - dRawW) < 10 * GEO.EPS_SMALL or b3Proc:getDimY() > dRawW) and (abs(b3Proc:getDimZ() - dRawH) < 10 * GEO.EPS_SMALL or b3Proc:getDimZ() > dRawH)) end @@ -1313,20 +1314,35 @@ local function MoveDrillsOnTenon( vProc) end ------------------------------------------------------------------------------------------------------------- +-- verifica se ci sono forature da lavorare dopo tagli di testa o coda e nel caso le classifica come Head o Tail e gli assegna l'Id della rispettiva feature di taglio local function SetDrillingsToMachineAfterHeadOrTailCut( vProc, vMachineBeforeIntersectingDrillings) for i = 1, #vProc do if Drill.Identify( vProc[i]) then - -- se esiste intersezione tra il foro e la feature di testa - if vMachineBeforeIntersectingDrillings.Head.Box and vProc[i].Box:getMin():getX() < vMachineBeforeIntersectingDrillings.Head.Box:getMax():getX() + 100 * GEO.EPS_SMALL and - vMachineBeforeIntersectingDrillings.Head.Box:getMin():getX() < vProc[i].Box:getMax():getX() + 100 * GEO.EPS_SMALL then + -- recupero e verifico l'entità foro + local AuxId = EgtGetInfo( vProc[i].Id, 'AUXID', 'i') + if AuxId then AuxId = AuxId + vProc[i].Id end + if not AuxId or EgtGetType( AuxId) ~= GDB_TY.CRV_ARC then + return false + end + -- recupero il vettore estrusione + local vtExtr = EgtCurveExtrusion( AuxId, GDB_RT.GLOB) + -- se esiste intersezione tra il foro e la feature di testa + if vMachineBeforeIntersectingDrillings.Head.Box and vProc[i].Box:getMin():getX() < vMachineBeforeIntersectingDrillings.Head.Box:getMax():getX() + 100 * GEO.EPS_SMALL and + vMachineBeforeIntersectingDrillings.Head.Box:getMin():getX() < vProc[i].Box:getMax():getX() + 100 * GEO.EPS_SMALL then + -- verifico che il foro sia di testa + if ( vProc[i].Flg > 0 and vtExtr:getX() > 0) or ( vProc[i].Flg == -2 and vtExtr:getX() < 0) then vProc[i].MachineAfterHeadCutId = vMachineBeforeIntersectingDrillings.Head.Id vProc[i].Head = true - -- se esiste intersezione tra il foro e la feature di coda - elseif vMachineBeforeIntersectingDrillings.Tail.Box and vProc[i].Box:getMin():getX() < vMachineBeforeIntersectingDrillings.Tail.Box:getMax():getX() + 100 * GEO.EPS_SMALL and - vMachineBeforeIntersectingDrillings.Tail.Box:getMin():getX() < vProc[i].Box:getMax():getX() + 100 * GEO.EPS_SMALL then + end + -- se esiste intersezione tra il foro e la feature di coda + elseif vMachineBeforeIntersectingDrillings.Tail.Box and vProc[i].Box:getMin():getX() < vMachineBeforeIntersectingDrillings.Tail.Box:getMax():getX() + 100 * GEO.EPS_SMALL and + vMachineBeforeIntersectingDrillings.Tail.Box:getMin():getX() < vProc[i].Box:getMax():getX() + 100 * GEO.EPS_SMALL then + -- verifico che il foro sia di coda + if ( vProc[i].Flg > 0 and vtExtr:getX() < 0) or ( vProc[i].Flg == -2 and vtExtr:getX() > 0) then vProc[i].MachineAfterTailCutId = vMachineBeforeIntersectingDrillings.Tail.Id vProc[i].Tail = true end + end end end end