diff --git a/LuaLibs/FacesBySaw.lua b/LuaLibs/FacesBySaw.lua index 5d0a213..3dc1a00 100644 --- a/LuaLibs/FacesBySaw.lua +++ b/LuaLibs/FacesBySaw.lua @@ -26,6 +26,7 @@ -- 2024/01/07 Modifiche per OikosX (BD.TURN == 2). -- 2024/01/18 Gestita lama con aggregato con asse bloccato per massimizzare capacità di taglio verticale, se da sotto. -- Implementata GetBlockedAxis che gestisce gli assi bloccati per tutti i tipi di utensile. +-- 2024/02/22 Migliorato calcolo area non pinzabile in testa HCING e coda TCING -- Tabella per definizione modulo local FacesBySaw = {} @@ -714,13 +715,43 @@ function FacesBySaw.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, sCutType, -- eventuale segnalazione ingombro di testa o coda local dMinHIng = min( 0.5 * BD.VICE_MINH, 0.5 * b3Raw:getDimZ()) local dMinZ = max( BD.MIN_HEIGHT, 0.35 * b3Raw:getDimZ()) - if bUpdateIng and Proc.Box:getDimZ() > dMinHIng and Proc.Box:getMin():getZ() < b3Raw:getMin():getZ() + dMinZ and - not ( abs( vtN[nBigInd]:getX()) < 0.05 and vtN[nBigInd]:getY() < 0 and Proc.Box:getDimX() > 500 and Proc.Box:getDimY() < 40) then + -- calcolo punto massimo in Z fino a dove considerare il pinzaggio. Minimo tra pinzaggio massimo e altezza pezzo + local dMaxHZ = b3Raw:getMin():getZ() + min( BD.VICE_MAXH or BD.MAX_HEIGHT, b3Raw:getDimZ()) + -- punto massimo in Z considerando anche la Z della feature + local dMaxHZFeat = min( dMaxHZ, Proc.Box:getMax():getZ()) + -- dimensione Z del pinzaggio (differenza massima Z pinzabile e box feature) + local dDeltaZClamp = ( ( dMaxHZ - b3Raw:getMin():getZ()) - max( 0, dMaxHZFeat - Proc.Box:getMin():getZ())) + -- se pinzaggio minimo è come il massimo (oppure come l'altezza massima del pezzo) significa che è verticale + local bIsVertClamps = BD.VICE_MINH > BD.MAX_HEIGHT - 100 * GEO.EPS_SMALL + + -- condizioni per limitare pinzaggio testa/coda + -- se dimensione del box della feature maggiore di metà pinzaggio minimo o metà spessore pezzo + bUpdateIng = bUpdateIng and Proc.Box:getDimZ() > dMinHIng + -- se la feature si trova più in basso del minimo pinzabile in Z o il 35% dello spessore pezzo + bUpdateIng = bUpdateIng and Proc.Box:getMin():getZ() < b3Raw:getMin():getZ() + dMinZ + -- riportata condizione, ma poco chiara + bUpdateIng = bUpdateIng and not ( abs( vtN[nBigInd]:getX()) < 0.05 and vtN[nBigInd]:getY() < 0 and Proc.Box:getDimX() > 500 and Proc.Box:getDimY() < 40) + -- se feature è al di sotto del pinzaggio massimo + bUpdateIng = bUpdateIng and Proc.Box:getMin():getZ() < dMaxHZ + -- se ho le morse verticali, o se la feature è in centro o verso alto, controllo se non prendo abbastanza. + if bIsVertClamps or ( Proc.Box:getMin():getZ() - b3Raw:getMin():getZ()) > BD.MIN_HEIGHT then + bUpdateIng = bUpdateIng and dDeltaZClamp < BD.VICE_MINH + end + + if bUpdateIng then if Proc.Head then local dOffs = b3Solid:getMax():getX() - Proc.Box:getMin():getX() + -- se pinze a 45° e pinza abbastanza materiale, compenso comunque, ma solo inclinazione morse + if not bIsVertClamps and dDeltaZClamp > BD.VICE_MINH and BD.VICE_MAXH then + dOffs = min( dOffs, BD.VICE_MAXH - BD.VICE_MINH) + end BL.UpdateHCING( nRawId, dOffs) elseif Proc.Tail then local dOffs = Proc.Box:getMax():getX() - b3Solid:getMin():getX() + -- se pinze a 45° e pinza abbastanza materiale, compenso comunque, ma solo inclinazione morse + if not bIsVertClamps and dDeltaZClamp > BD.VICE_MINH and BD.VICE_MAXH then + dOffs = min( dOffs, BD.VICE_MAXH - BD.VICE_MINH) + end BL.UpdateTCING( nRawId, dOffs) elseif Proc.Box:getCenter():getX() > b3Solid:getCenter():getX() then local dOffs = b3Solid:getMax():getX() - Proc.Box:getMin():getX() diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index 1d17328..b2ad498 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -93,6 +93,7 @@ -- Aggiunta funzione GetToolEntryAngle per determinare l'angolo di ingresso dell'utensile nella faccia. -- 2024/02/08 Ora i rabbet lungo X che guardano in basso sono sempre fatti con fresatura di lato per evitare di ruotare. -- 2024/02/13 In MakeMoreFaces escluse le Groove 2 facce dalla gestione Special3faces. +-- 2024/02/22 Migliorato calcolo area non pinzabile in testa HCING e coda TCING -- Tabella per definizione modulo local ProcessLapJoint = {} @@ -615,21 +616,54 @@ end local function UpdateEncumbrance( Proc, nRawId, b3Raw, b3Solid) -- verifico siano una o due facce if Proc.Fct > 2 then return end + -- eventuale segnalazione ingombro di testa o coda local dMinHIng = min( 0.5 * BD.VICE_MINH, 0.5 * b3Raw:getDimZ()) local dMinZ = max( BD.MIN_HEIGHT, 0.35 * b3Raw:getDimZ()) - if Proc.Box:getDimZ() > dMinHIng and Proc.Box:getMin():getZ() < b3Raw:getMin():getZ() + dMinZ then + -- calcolo punto massimo in Z fino a dove considerare il pinzaggio. Minimo tra pinzaggio massimo e altezza pezzo + local dMaxHZ = b3Raw:getMin():getZ() + min( BD.VICE_MAXH or BD.MAX_HEIGHT, b3Raw:getDimZ()) + -- punto massimo in Z considerando anche la Z della feature + local dMaxHZFeat = min( dMaxHZ, Proc.Box:getMax():getZ()) + -- dimensione Z del pinzaggio (differenza massima Z pinzabile e box feature) + local dDeltaZClamp = ( ( dMaxHZ - b3Raw:getMin():getZ()) - max( 0, dMaxHZFeat - Proc.Box:getMin():getZ())) + -- se pinzaggio minimo è come il massimo (oppure come l'altezza massima del pezzo) significa che è verticale + local bIsVertClamps = BD.VICE_MINH > BD.MAX_HEIGHT - 100 * GEO.EPS_SMALL + + -- condizioni per limitare pinzaggio testa/coda + local bUpdateIng = true + -- se dimensione del box della feature maggiore di metà pinzaggio minimo o metà spessore pezzo + bUpdateIng = bUpdateIng and Proc.Box:getDimZ() > dMinHIng + -- se la feature si trova più in basso del minimo pinzabile in Z o il 35% dello spessore pezzo + bUpdateIng = bUpdateIng and Proc.Box:getMin():getZ() < b3Raw:getMin():getZ() + dMinZ + -- riportata condizione, ma poco chiara + bUpdateIng = bUpdateIng and not ( abs( vtN[nBigInd]:getX()) < 0.05 and vtN[nBigInd]:getY() < 0 and Proc.Box:getDimX() > 500 and Proc.Box:getDimY() < 40) + -- se feature è al di sotto del pinzaggio massimo + bUpdateIng = bUpdateIng and Proc.Box:getMin():getZ() < dMaxHZ + -- se ho le morse verticali, o se la feature è in centro o verso alto, controllo se non prendo abbastanza. + if bIsVertClamps or ( Proc.Box:getMin():getZ() - b3Raw:getMin():getZ()) > BD.MIN_HEIGHT then + bUpdateIng = bUpdateIng and dDeltaZClamp < BD.VICE_MINH + end + + if bUpdateIng then if Proc.Head then local dOffs = b3Solid:getMax():getX() - Proc.Box:getMin():getX() + -- se pinze a 45° e pinza abbastanza materiale, compenso comunque, ma solo inclinazione morse + if not bIsVertClamps and dDeltaZClamp > BD.VICE_MINH and BD.VICE_MAXH then + dOffs = min( dOffs, BD.VICE_MAXH - BD.VICE_MINH) + end BL.UpdateHCING( nRawId, dOffs) elseif Proc.Tail then local dOffs = Proc.Box:getMax():getX() - b3Solid:getMin():getX() + -- se pinze a 45° e pinza abbastanza materiale, compenso comunque, ma solo inclinazione morse + if not bIsVertClamps and dDeltaZClamp > BD.VICE_MINH and BD.VICE_MAXH then + dOffs = min( dOffs, BD.VICE_MAXH - BD.VICE_MINH) + end BL.UpdateTCING( nRawId, dOffs) - elseif Proc.Fct > 1 and Proc.Box:getCenter():getX() > b3Solid:getCenter():getX() then + elseif Proc.Box:getCenter():getX() > b3Solid:getCenter():getX() then local dOffs = b3Solid:getMax():getX() - Proc.Box:getMin():getX() local dDist = b3Solid:getMax():getX() - Proc.Box:getMax():getX() - -- sempre concavo aumento la distanza (rimane una punta...) - dDist = dDist + 10 + -- se concavo aumento la distanza (rimane una punta...) + --if dAngT < 0 then dDist = dDist + 10 end BL.UpdateHCING( nRawId, dOffs, dDist) end end