From 29af699ad5f47033f320012d09b3ea49031ed51d Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Tue, 24 Oct 2023 14:28:35 +0200 Subject: [PATCH] - LongCut e LongDoubleCut: migliorata spezzatura taglio passante con due spezzoni - BeamExec: aggiunta scrittura parametro BARLEN nelle info del mach group --- LuaLibs/BeamExec.lua | 10 ++++++++++ LuaLibs/ProcessLongCut.lua | 24 ++++++++++++++++++++---- LuaLibs/ProcessLongDoubleCut.lua | 18 +++++++++++++++--- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index efcf30e..67cd780 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -49,6 +49,7 @@ -- 2023/09/13 Aggiunta ClassifyTopology per la classificazione topologica delle feature. In CollectFeatures aggiunta la raccolta preliminare di alcune informazioni. -- 2022/09/26 Funzione IsFeatureCuttingEntireSection spostata in BeamLib -- 2022/09/26 In ClassifyTopology aggiunto passaggio del parametro nRawId +-- 2023/10/24 Aggiunta scrittura parametro BARLEN nelle info del mach group -- Tabella per definizione modulo local BeamExec = {} @@ -478,6 +479,15 @@ function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, vBeam, bMachGroup -- Impostazione della tavola EgtSetTable( 'Tab') + -- salvo nota con lunghezza grezzo + -- Recupero l'identificativo del gruppo di lavoro corrente + local nMGrpId = EgtGetCurrMachGroup() + -- Lunghezza della barra + local dBarLen = EgtGetInfo( nMGrpId, 'BARLEN', 'd') + if not dBarLen then + EgtSetInfo( nMGrpId, 'BARLEN', dRawL) + end + -- Area tavola local b3Tab = EgtGetTableArea() -- Calcolo posizione estremo TR/BR della tavola rispetto a sua origine in BL diff --git a/LuaLibs/ProcessLongCut.lua b/LuaLibs/ProcessLongCut.lua index 6f52027..9af60f7 100644 --- a/LuaLibs/ProcessLongCut.lua +++ b/LuaLibs/ProcessLongCut.lua @@ -30,6 +30,7 @@ -- 2023/05/19 Migliorato calcolo e verifica affondamento per lavorazione con lama con codolo in mezzo. -- 2023/08/01 Ammesso uso lama da sotto fino a N +3deg in verticale. -- 2023/09/26 Modificata chiamata a GetFaceWithMostAdj. +-- 2023/10/24 Migliorata spezzatura taglio passante con due spezzoni -- Tabella per definizione modulo local ProcessLongCut = {} @@ -593,6 +594,11 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus -- recupero l'ingombro del grezzo di appartenenza local b3Raw = EgtGetRawPartBBox( nRawId) local b3Solid = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD) + + -- recupero lunghezza grezzo totale da info sulla macchinata + local dBarLen = EgtGetInfo( EgtGetCurrMachGroup(), 'BARLEN', 'd') + local dOvmHead = b3Raw:getMax():getX() - b3Solid:getMax():getX() + -- dati della faccia local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT) local _, dLen, dWidth = EgtSurfTmFacetMinAreaRectangle( Proc.Id, 0, GDB_ID.ROOT) @@ -1311,8 +1317,18 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus dEndAccDist = min( dEndAccDist, dLen/2) dStartAccDist = dLen - dEndAccDist else - dStartAccDist = dLen/2 - dEndAccDist = dStartAccDist + -- se c'è del grezzo aggiuntivo e, considerando il grezzo mi resta abbastanza materiale per pinzare, allora faccio spezzatura asimmetrica + if BD.MIN_CLAMPING_LEN and ( dBarLen - dLen) > dOvmHead + 100 * GEO.EPS_SMALL and ( dBarLen - dStartAccDist > BD.MIN_CLAMPING_LEN) then + dStartAccDist = dBarLen/2 + dEndAccDist = dLen - dStartAccDist + -- se sono sul fronte, la spezzatura assimmetrica è inversa + if Proc.AffectedFaces.Front then + dStartAccDist, dEndAccDist = dEndAccDist, dStartAccDist + end + else + dStartAccDist = dLen/2 + dEndAccDist = dStartAccDist + end end else nC = 1 @@ -1361,9 +1377,9 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus end -- aggiungo geometria EgtSetMachiningGeometry( {{ Proc.Id, 0}}) - + -- inverto se utensile antiorario per garantire senso di percorrenza migliore + local bInvert = EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) < 0 -- setto workside e eventuale inversione - local bInvert if bInvert then EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) EgtSetMachiningParam( MCH_MP.INVERT, true) diff --git a/LuaLibs/ProcessLongDoubleCut.lua b/LuaLibs/ProcessLongDoubleCut.lua index bc89247..35748c2 100644 --- a/LuaLibs/ProcessLongDoubleCut.lua +++ b/LuaLibs/ProcessLongDoubleCut.lua @@ -18,6 +18,7 @@ -- 2023/03/06 Correzione per i casi con lavorazione limitata. -- 2023/03/23 Correzione per caso con doppia lama da sotto. -- 2023/06/07 Sistemazione SCC per macchina TURN +-- 2023/10/24 Migliorata spezzatura taglio passante con due spezzoni -- Tabella per definizione modulo local ProcessLong2Cut = {} @@ -311,12 +312,17 @@ end --------------------------------------------------------------------- -- Applicazione della lavorazione function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster, nUseSideToolMaster) - + -- recupero l'ingombro del grezzo di appartenenza + local b3Raw = EgtGetRawPartBBox( nRawId) local b3Solid = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD) -- carico i dati delle face già inserite nelle opportune tabelle local nFaceLimit, tFaceLong, ptC, vtN = IdentifyFaces( Proc) local dLen = Proc.Box:getDimX() + -- recupero lunghezza grezzo totale da info sulla macchinata + local dBarLen = EgtGetInfo( EgtGetCurrMachGroup(), 'BARLEN', 'd') + local dOvmHead = b3Raw:getMax():getX() - b3Solid:getMax():getX() + -- verifico posizione (+1=sopra, -1=sotto, 0=sui lati) local nSide = 0 if vtN[1]:getZ() > 0.0175 and vtN[2]:getZ() > 0.0175 then @@ -1048,8 +1054,14 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster dEndAccDist = min( dEndAccDist, dLen/2) dStartAccDist = dLen - dEndAccDist else - dStartAccDist = dLen/2 - dEndAccDist = dStartAccDist + -- se c'è del grezzo aggiuntivo e, considerando il grezzo mi resta abbastanza materiale per pinzare, allora faccio spezzatura asimmetrica + if BD.MIN_CLAMPING_LEN and ( dBarLen - dLen) > dOvmHead + 100 * GEO.EPS_SMALL and ( dBarLen - dStartAccDist > BD.MIN_CLAMPING_LEN) then + dStartAccDist = dBarLen/2 + dEndAccDist = dLen - dStartAccDist + else + dStartAccDist = dLen/2 + dEndAccDist = dStartAccDist + end end else nC = 1