From 60a00a81faef9960f3be4ee21232105e5f23a4f1 Mon Sep 17 00:00:00 2001 From: DarioS Date: Sat, 21 Jan 2023 10:02:28 +0100 Subject: [PATCH] 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