From fb61114039b522e92581c846c1aacef99fe76218 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Sat, 7 Dec 2019 19:15:41 +0000 Subject: [PATCH] DataBeam : - migliorie a contorno libero e arco. --- LuaLibs/ProcessFreeContour.lua | 15 ++++++++---- LuaLibs/ProcessRoundArch.lua | 43 +++++++++++++++++++++++++--------- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/LuaLibs/ProcessFreeContour.lua b/LuaLibs/ProcessFreeContour.lua index 7d45a4b..34b4c0c 100644 --- a/LuaLibs/ProcessFreeContour.lua +++ b/LuaLibs/ProcessFreeContour.lua @@ -1,4 +1,4 @@ --- ProcessFreeContour.lua by Egaltech s.r.l. 2019/07/19 +-- ProcessFreeContour.lua by Egaltech s.r.l. 2019/12/07 -- Gestione calcolo profilo libero per Travi -- Tabella per definizione modulo @@ -131,7 +131,9 @@ local function MakeByMill( Proc, nPhase, nRawId, nPartId, dOvmHead) -- recupero i dati della curva e del profilo local dDepth = abs( EgtCurveThickness( AuxId)) local vtExtr = EgtCurveExtrusion( AuxId, GDB_RT.GLOB) + local b3Aux = EgtGetBBoxGlob( AuxId, GDB_BB.STANDARD) local bToolInv = ( vtExtr:getZ() < -0.1) + local bDown = ( b3Aux:getMin():getZ() < b3Raw:getMin():getZ() + 5) -- recupero la lavorazione local sMilling = ML.FindMilling( 'FreeContour') if not sMilling then @@ -150,8 +152,7 @@ local function MakeByMill( Proc, nPhase, nRawId, nPartId, dOvmHead) -- ne verifico la lunghezza per eventuale spezzatura e lavorazione in doppio local nStep = 1 local dStep = 0 - local dLenMax = BD.LONGCUT_MAXLEN - local b3Aux = EgtGetBBoxGlob( AuxId, GDB_BB.STANDARD) + local dLenMax = BD.LONGCUT_ENDLEN if b3Aux:getDimX() > dLenMax then local dCrvLen = EgtCurveLength( AuxId) nStep = ceil( dCrvLen / dLenMax) @@ -173,10 +174,12 @@ local function MakeByMill( Proc, nPhase, nRawId, nPartId, dOvmHead) end local nDouble = 1 local bCanDouble = abs( vtExtr:getY()) > 0.707 and bCross + local bStripOnSide = false if bCross then - if nStep > 1 then + if nStep > 1 or ( bDown and b3Aux:getDimX() > 0.5 * b3Raw:getDimX()) then -- devo lasciare un codolo dDepth = dDepth - BD.DIM_STRIP + bStripOnSide = true else -- devo affondare un poco oltre dDepth = dDepth + BD.CUT_EXTRA @@ -190,6 +193,10 @@ local function MakeByMill( Proc, nPhase, nRawId, nPartId, dOvmHead) dDepth = dMaxDepth end end + -- se utensile orizzontale verso Y+, non in doppio e codolo da lasciare, devo invertire per lavorare sempre da Y- + if vtExtr:getY() > 0.707 and nDouble == 1 and bStripOnSide then + bToolInv = true + end -- eseguo for i = 1, nStep do for j = 1, nDouble do diff --git a/LuaLibs/ProcessRoundArch.lua b/LuaLibs/ProcessRoundArch.lua index be1633f..d109dd7 100644 --- a/LuaLibs/ProcessRoundArch.lua +++ b/LuaLibs/ProcessRoundArch.lua @@ -1,4 +1,4 @@ --- ProcessRoundArch.lua by Egaltech s.r.l. 2019/06/13 +-- ProcessRoundArch.lua by Egaltech s.r.l. 2019/12/07 -- Gestione calcolo archi per Travi -- Tabella per definizione modulo @@ -101,7 +101,9 @@ function ProcessRoundArch.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) -- recupero i dati della curva e del profilo local dDepth = abs( EgtCurveThickness( AuxId)) local vtExtr = EgtCurveExtrusion( AuxId, GDB_RT.GLOB) + local b3Aux = EgtGetBBoxGlob( AuxId, GDB_BB.STANDARD) local bToolInv = ( vtExtr:getZ() < -0.1) + local bDown = ( b3Aux:getMin():getZ() < b3Raw:getMin():getZ() + 5) -- recupero la lavorazione local sMilling = ML.FindMilling( 'FreeContour') if not sMilling then @@ -117,11 +119,10 @@ function ProcessRoundArch.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth end end - -- se non di testa o coda ne verifico la lunghezza per eventuale spezzatura + -- ne verifico la lunghezza per eventuale spezzatura e lavorazione in doppio local nStep = 1 local dStep = 0 - local dLenMax = BD.LONGCUT_MAXLEN - local b3Aux = EgtGetBBoxGlob( AuxId, GDB_BB.STANDARD) + local dLenMax = BD.LONGCUT_ENDLEN if b3Aux:getDimX() > dLenMax then local dCrvLen = EgtCurveLength( AuxId) nStep = ceil( dCrvLen / dLenMax) @@ -129,14 +130,30 @@ function ProcessRoundArch.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) EgtOutLog( string.format( 'CrvLen=%.1f StepNbr=%d StepLen=%.1f', dCrvLen, nStep, dStep), 3) end -- verifiche per affondamento ( possibili lavorazioni in doppio) + local bCross = false + if abs( vtExtr:getY()) > 0.707 then + if b3Aux:getDimY() > b3Raw:getDimY() - 1.0 then + bCross = true + dDepth = min( dDepth, b3Raw:getDimY()) + end + elseif abs( vtExtr:getZ()) > 0.707 then + if b3Aux:getDimZ() > b3Raw:getDimZ() - 1.0 then + bCross = true + dDepth = min( dDepth, b3Raw:getDimZ()) + end + end local nDouble = 1 - local bCanDouble = ( abs( vtExtr:getZ()) < 0.5 and abs( vtExtr:getX()) < 0.1 and b3Aux:getDimY() > b3Raw:getDimY() - 1.0) - if nStep > 1 then - -- devo lasciare un codolo - dDepth = dDepth - BD.DIM_STRIP - else - -- devo affondare un poco oltre - dDepth = dDepth + BD.CUT_EXTRA + local bCanDouble = abs( vtExtr:getY()) > 0.707 and bCross + local bStripOnSide = false + if bCross then + if nStep > 1 or ( bDown and b3Aux:getDimX() > 0.5 * b3Raw:getDimX()) then + -- devo lasciare un codolo + dDepth = dDepth - BD.DIM_STRIP + bStripOnSide = true + else + -- devo affondare un poco oltre + dDepth = dDepth + BD.CUT_EXTRA + end end if dDepth > dMaxDepth then if bCanDouble then @@ -146,6 +163,10 @@ function ProcessRoundArch.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) dDepth = dMaxDepth end end + -- se utensile orizzontale verso Y+, non in doppio e codolo da lasciare, devo invertire per lavorare sempre da Y- + if vtExtr:getY() > 0.707 and nDouble == 1 and bStripOnSide then + bToolInv = true + end -- eseguo for i = 1, nStep do for j = 1, nDouble do