From 60a00a81faef9960f3be4ee21232105e5f23a4f1 Mon Sep 17 00:00:00 2001 From: DarioS Date: Sat, 21 Jan 2023 10:02:28 +0100 Subject: [PATCH 1/2] DataBeam : - in lavorazione Tenoni modificata scelta lato di attacco per pezzo piccolo su macchine con pinza speciale (pinza 5) - in lavorazione LapJoint (sottospecie L020) migliorato riconoscimento caso Special3faces - estesa funzione di libreria PutStartNearestToEdge per gestire lato preferito come Y+, Y-, z*, Z-. --- LuaLibs/BeamLib.lua | 23 +++++++++++++++++------ LuaLibs/ProcessLapJoint.lua | 7 +++---- LuaLibs/ProcessTenon.lua | 14 ++++++++------ 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index c0c165d..1394037 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -1,4 +1,4 @@ --- BeamLib.lua by Egaltech s.r.l. 2022/07/12 +-- BeamLib.lua by Egaltech s.r.l. 2023/01/20 -- Libreria globale per Travi -- 2020/07/28 Corretto calcolo attacchi e uscite di lame per non uscire dalla faccia sotto. -- 2020/08/18 Aggiunto a GetNearestParalOpposite e GetNearestOrthoOpposite parametro opzionale vtNorm. @@ -18,6 +18,7 @@ -- 2022/07/26 Alla funzione FindFaceBestOrientedAsAxis aggiunta la possibilità di escludere una faccia dalla ricerca -- 2022/09/01 Aggiunte le funzioni GetTunnelDimension, CalcCollisionSafety, SetOpenSide, precedentemente in ProcessLapJoint. -- 2023/01/10 In GetFaceWithMostAdj aggiunta verifica che la feature abbia almeno una faccia aperta. +-- 2023/01/20 Modificata PutStartNearestToEdge per gestire lato preferito come Y+, Y-, z*, Z-. -- Tabella per definizione modulo local BeamLib = {} @@ -195,7 +196,8 @@ function BeamLib.PutStartOnLonger( nCrvId) end ------------------------------------------------------------------------------------------------------------- -function BeamLib.PutStartNearestToEdge( nCrvId, b3Raw, dMaxDist, bDown) +-- nNearSide : 2=Y+, -2=Y-, 3=Z+, -3=Z- +function BeamLib.PutStartNearestToEdge( nCrvId, b3Raw, dMaxDist, nNearSide) -- verifico che la curva sia chiusa if not EgtCurveIsClosed( nCrvId) then return false end -- recupero il versore normale al piano di lavoro o estrusione @@ -208,7 +210,7 @@ function BeamLib.PutStartNearestToEdge( nCrvId, b3Raw, dMaxDist, bDown) -- cerco l'estremo più vicino al box e lo imposto come inizio (se da sotto escludo Zmax e viceversa) local dUopt = 0 local dDopt = GEO.INFINITO - local dZopt = GEO.INFINITO + local dSopt = GEO.INFINITO local dUi, dUf = EgtCurveDomain( nCrvId) for dU = dUi, dUf, 0.5 do local ptP = EgtUP( nCrvId, dU, GDB_ID.ROOT) @@ -222,11 +224,20 @@ function BeamLib.PutStartNearestToEdge( nCrvId, b3Raw, dMaxDist, bDown) dD = min( abs( vtMax:getY()) * dCoeffY, dD) dD = min( abs( vtMin:getZ()) * dCoeffZ, dD) dD = min( abs( vtMax:getZ()) * dCoeffZ, dD) - local dZ = abs( EgtIf( bDown, vtMin:getZ(), vtMax:getZ())) * dCoeffZ - if dD < dMaxDist and dZ < dZopt + GEO.EPS_SMALL then + local dS + if nNearSide == -2 then + dS = abs( vtMin:getY() * dCoeffY) + elseif nNearSide == 2 then + dS = abs( vtMax:getY() * dCoeffY) + elseif nNearSide == -3 then + dS = abs( vtMin:getZ() * dCoeffZ) + else --nNearSide == 3 + dS = abs( vtMax:getZ() * dCoeffZ) + end + if dD < dMaxDist and dS < dSopt + GEO.EPS_SMALL then dUopt = dU dDopt = dD - dZopt = dZ + dSopt = dS end end end diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index 17e70da..e2759d5 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -4746,12 +4746,11 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa -- verifico se lavorando la faccia principale rimane esclusa molta sezione trasversale complessiva della feature (da box) local rfFac, dH, dV = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFacInd, GDB_ID.ROOT) local bBoxF = EgtGetBBoxRef( Proc.Id, GDB_BB.STANDARD, rfFac) - if dH * dV < 0.9 * ( bBoxF:getDimX() * bBoxF:getDimY()) then + if dH * dV < 0.9 * ( bBoxF:getDimX() * bBoxF:getDimY()) and nFacInd2 and dFacElev2 < 1.5 * dFacElev then bSpecial3faces = true end - -- se riconosciuta gestione 3 facce - -- e limitata per ora alla feature 20 - if bSpecial3faces and Proc.Prc == 20 and nFacInd2 then + -- se riconosciuta gestione 3 facce (limitatamente per ora alla feature 20) + if bSpecial3faces and Proc.Prc == 20 then -- se smusso non è esclusivo if nChamfer < 2 then -- entrambe le facce non devono essere orientate verso il basso diff --git a/LuaLibs/ProcessTenon.lua b/LuaLibs/ProcessTenon.lua index 52816b4..023f703 100644 --- a/LuaLibs/ProcessTenon.lua +++ b/LuaLibs/ProcessTenon.lua @@ -1,4 +1,4 @@ --- ProcessTenon.lua by Egaltech s.r.l. 2022/12/20 +-- ProcessTenon.lua by Egaltech s.r.l. 2023/01/20 -- Gestione calcolo tenone per Travi -- 2021/10/04 Corretto calcolo HCING per pezzi piccoli. -- 2022/02/15 Aggiornata VerifyOrientation per macchine con testa da sotto. @@ -8,6 +8,7 @@ -- 2022/11/03 Corretto uso di bH2 (da sotto solo se anche bMillDown vero). -- 2022/12/12 Su macchine con rulli pressori e pinze separate si riduce di meno l'ingombro con tenoni inclinati. -- 2022/12/20 Aggiunta gestione smusso. Migliorata scelta tra sopra e sotto per il punto di inizio. In VerifyOrientation aggiunta trave medio alta. +-- 2023/01/20 Modificata scelta lato di attacco per pezzo piccolo su macchine con pinza speciale (pinza 5). -- Tabella per definizione modulo local ProcessTenon = {} @@ -271,16 +272,17 @@ function ProcessTenon.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) -- massimo numero di passate e coefficiente di sovrapposizione ta passate local MAX_PASS = 6 local OVERLAP_COEFF = 0.7 - -- porto inizio curva il più possibile sul bordo in alto o in basso + -- porto inizio curva il più possibile sul bordo in alto, in basso o di lato a seconda delle necessità local dMaxDist = OVERLAP_COEFF * dMillDiam * MAX_PASS - local bFromBottom + local nNearSide = 3 local bMyShortPart = ( bShortPart and vtN:getX() < 0 and abs( vtN:getX()) < 0.999 and abs( vtN:getY()) < 0.259) if bH2 and bMillDown then - bFromBottom = EgtIf( bMyShortPart and vtN:getZ() < -0.018, false, true) + nNearSide = EgtIf( bMyShortPart and vtN:getZ() < -0.018, 3, -3) else - bFromBottom = EgtIf( bMyShortPart and vtN:getZ() > 0.018, true, false) + nNearSide = EgtIf( bMyShortPart and vtN:getZ() > 0.018, -3, 3) end - BL.PutStartNearestToEdge( AuxId, b3Solid, dMaxDist, bFromBottom) + if bMyShortPart and BD.CLAMP5 then nNearSide = -2 end + BL.PutStartNearestToEdge( AuxId, b3Solid, dMaxDist, nNearSide) -- se elevazione superiore a massimo affondamento della fresa, riduco opportunamente local sWarn local dDepth = 0 From ca9fa091cc1d3027a07f81bf790bb1c484fa6b68 Mon Sep 17 00:00:00 2001 From: DarioS Date: Sun, 22 Jan 2023 16:12:50 +0100 Subject: [PATCH 2/2] DataBeam : - aggiunta funzione BeamLib.GetDistanceToNextPart per facilitare controllo di non rovinare parti in coda su lavorazioni longitudinali - utilizzata in LongCut, LongDoubleCut e in LapJoint dove serve. --- LuaLibs/BeamLib.lua | 18 +++++++++++++++++- LuaLibs/ProcessLapJoint.lua | 6 +++--- LuaLibs/ProcessLongCut.lua | 26 ++++++++++---------------- LuaLibs/ProcessLongDoubleCut.lua | 2 +- 4 files changed, 31 insertions(+), 21 deletions(-) diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index 1394037..eb16352 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -18,7 +18,7 @@ -- 2022/07/26 Alla funzione FindFaceBestOrientedAsAxis aggiunta la possibilità di escludere una faccia dalla ricerca -- 2022/09/01 Aggiunte le funzioni GetTunnelDimension, CalcCollisionSafety, SetOpenSide, precedentemente in ProcessLapJoint. -- 2023/01/10 In GetFaceWithMostAdj aggiunta verifica che la feature abbia almeno una faccia aperta. --- 2023/01/20 Modificata PutStartNearestToEdge per gestire lato preferito come Y+, Y-, z*, Z-. +-- 2023/01/20 Modificata PutStartNearestToEdge per gestire lato preferito come Y+, Y-, z*, Z-. Aggiunta funzione GetDistanceToNextPart. -- Tabella per definizione modulo local BeamLib = {} @@ -785,6 +785,22 @@ function BeamLib.GetPhaseType( nPhase) return ( EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'TYPE') or '') end +--------------------------------------------------------------------- +function BeamLib.GetDistanceToNextPart( nRawId, nPhase) + -- Recupero la distanza tra la fine del pezzo e il pezzo successivo + local dDistToNextPiece = EgtGetInfo( nRawId, 'BDST', 'd') or BD.OVM_MID + -- se segue una parte rimanente riutilizzabile, modifico opportunamente questa distanza + if not BeamLib.IsSplittedPartPhase( nPhase) then + local nNextRawId = EgtGetNextRawPart( nRawId) + if nNextRawId and + EgtGetPartInRawPartCount( nNextRawId) <= 0 and + EgtGetRawPartBBox( nNextRawId):getDimX() >= BD.MinRaw then + dDistToNextPiece = BD.OVM_MID + end + end + return dDistToNextPiece +end + --------------------------------------------------------------------- function BeamLib.GetChainSawBlockedAxis( nInd) if BD.GetChainSawBlockedAxis then diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index e2759d5..136929b 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -2499,7 +2499,7 @@ local function MakeByMillAsSaw( Proc, nPhase, nRawId, nPartId, nFacInd, -- ingombro del grezzo local b3Raw = EgtGetRawPartBBox( nRawId) -- ottengo la distanza tra la fine del pezzo e il pezzo successivo - local dDistToNextPiece = EgtGetInfo( nRawId, 'BDST', 'd') or 5. + local dDistToNextPiece = BL.GetDistanceToNextPart( nRawId, nPhase) -- verifico definizione faccia con il maggior numero di adiacenze if not nFacInd then local sErr = 'Error : MakeByMillAsSaw could not find reference face' @@ -2643,7 +2643,7 @@ local function MakeByChainOrSaw( Proc, nPhase, nRawId, nPartId, nFacInd, -- ingombro del grezzo local b3Raw = EgtGetRawPartBBox( nRawId) -- ottengo la distanza tra la fine del pezzo e il pezzo successivo - local dDistToNextPiece = EgtGetInfo( nRawId, 'BDST', 'd') or 5.4 + local dDistToNextPiece = BL.GetDistanceToNextPart( nRawId, nPhase) -- verifico se fessura con 3 facce o tunnel local bOrthoFaces local bIs3Faces = ( Proc.Fct == 3) @@ -5474,7 +5474,7 @@ local function MakeLongMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead) -- recupero l'ingombro del grezzo di appartenenza local b3Raw = EgtGetRawPartBBox( nRawId) -- ottengo la distanza tra la fine del pezzo e il pezzo successivo - local dDistToNextPiece = EgtGetInfo( nRawId, 'BDST', 'd') or BD.OVM_MID + local dDistToNextPiece = BL.GetDistanceToNextPart( nRawId, nPhase) -- verifico se applicare gestione speciale delle giunzioni (U diretta come asse X) local bAddEndCap = false local dAddLen = 0 diff --git a/LuaLibs/ProcessLongCut.lua b/LuaLibs/ProcessLongCut.lua index df1295d..7b15e4a 100644 --- a/LuaLibs/ProcessLongCut.lua +++ b/LuaLibs/ProcessLongCut.lua @@ -1,4 +1,4 @@ --- ProcessLongCut.lua by Egaltech s.r.l. 2022/11/30 +-- ProcessLongCut.lua by Egaltech s.r.l. 2023/01/18 -- Gestione calcolo taglio longitudinale per Travi -- 2021/02/03 Corretto FaceUse con fresa orizzontale su taglio orizzontale. -- 2021/05/18 Possibile taglio con lama anche di fianco su macchina con testa da sotto. @@ -15,7 +15,7 @@ -- 2022/11/04 Aggiunto passaggio parametro bDownHead (Testa da Sotto) nelle chiamate a MakeSideFace. -- 2022/11/28 Correzioni varie per attacco, pulizia spigoli, utilizzo H3 -- 2022/11/30 Modifiche su SCC per TURN. --- 2022/01/18 Aggiunta, se richiesta, una lavorazione ulteriore con sega a catena nei casi in cui la doppia lama non sia sufficiente. +-- 2023/01/18 Aggiunta, se richiesta, una lavorazione ulteriore con sega a catena nei casi in cui la doppia lama non sia sufficiente. -- Tabella per definizione modulo local ProcessLongCut = {} @@ -463,10 +463,10 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus local bTopStart = ( Proc.Box:getMax():getZ() > b3Solid:getMax():getZ() - 20) -- Determino se parte da sotto local bBottomStart = ( Proc.Box:getMin():getZ() < b3Solid:getMin():getZ() + 20) - -- determino se lavorazione da davanti o da dietro + -- Determino se lavorazione da davanti o da dietro local bFront = ( vtN:getY() < 0) - -- ottengo la distanza tra la fine del pezzo e il pezzo successivo - local dDistToNextPiece = EgtGetInfo( nRawId, 'BDST', 'd') or BD.OVM_MID + -- Ottengo la distanza tra la fine del pezzo e il pezzo successivo o grezzo utilizzabile e non ancora separato + local dDistToNextPiece = BL.GetDistanceToNextPart( nRawId, nPhase) local bForcedLim local sWarn ---------------------------------------------------------------------------------------------------------------------------------------- @@ -554,13 +554,7 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus EgtOutLog( sErr) return false, sErr end - - -- verifico se la parte rimanente della barra è riutilizzabile - local nNextRawId = EgtGetNextRawPart( nRawId) - local bIsNextRawPartUnloadable = nNextRawId and - EgtGetPartInRawPartCount( nNextRawId) <= 0 and - EgtGetRawPartBBox( nNextRawId):getDimX() >= BD.MinRaw - + -- Se non limitato o forzato uso lama e da sopra e richiesto con doppio taglio di lama e superiore al limite minimo if ( ( not bLimXmin and not bLimXmax) or bForceUseBladeOnNotThruFace) and ( bCanUseUnderBlade or bCanUseBlade) and nUseBlade > 0 and b3Solid:getDimX() > dLimMinPiece - 1 then local sCutting @@ -607,8 +601,8 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus end end end - -- se la fine (a sinistra) non è limitata e ho un pezzo successivo meno distante di metà raggio, oppure se grezzo finale della barra di lunghezza sufficiente, setto la fine come limitata - if ((( bCanUseBlade or bCanUseUnderBlade) and ( dDistToNextPiece < dToolDiam/2 or dDistToNextPiece < dToolDiamDn/2)) or bIsNextRawPartUnloadable) and not bLimXmin then + -- se la fine (a sinistra) non è limitata e ho un pezzo successivo o grezzo riutilizzabile meno distante di metà raggio, setto la fine come limitata + if (( bCanUseBlade or bCanUseUnderBlade) and ( dDistToNextPiece < dToolDiam/2 or dDistToNextPiece < dToolDiamDn/2)) and not bLimXmin then if bForceUseBladeOnNotThruFace then bForcedLim = true bLimXmin = true @@ -1004,8 +998,8 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth end end - -- se la fine (a sinistra) non è limitata e ho un pezzo successivo meno distante di metà raggio, oppure se grezzo finale della barra di lunghezza sufficiente, setto la fine come limitata - if ( dDistToNextPiece < dToolDiam/2 or bIsNextRawPartUnloadable) and not bLimXmin then + -- se la fine (a sinistra) non è limitata e ho un pezzo successivo o grezzo riutilizzabile meno distante di metà raggio, setto la fine come limitata + if dDistToNextPiece < dToolDiam/2 and not bLimXmin then bForcedLim = true bLimXmin = true end diff --git a/LuaLibs/ProcessLongDoubleCut.lua b/LuaLibs/ProcessLongDoubleCut.lua index 303e153..32a1596 100644 --- a/LuaLibs/ProcessLongDoubleCut.lua +++ b/LuaLibs/ProcessLongDoubleCut.lua @@ -325,7 +325,7 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster end -- ottengo la distanza tra la fine del pezzo e il pezzo successivo - local dDistToNextPiece = EgtGetInfo( nRawId, 'BDST', 'd') or 5.4 + local dDistToNextPiece = BL.GetDistanceToNextPart( nRawId, nPhase) local bForcedLim local sWarn ----------------------------------------------------------------------------------------------------------------------------------------