diff --git a/LuaLibs/ProcessTenon.lua b/LuaLibs/ProcessTenon.lua index f2224ca..bfcd71a 100644 --- a/LuaLibs/ProcessTenon.lua +++ b/LuaLibs/ProcessTenon.lua @@ -4,6 +4,7 @@ -- 2022/02/15 Aggiornata VerifyOrientation per macchine con testa da sotto. -- 2022/05/18 Migliorata gestione attacco. -- 2022/05/28 Spostato calcolo svuotatura in modulo di libreria. +-- 2022/09/20 Migliorato il calcolo delle passate laterali; ora considera la reale distanza tra contorno del tenone e estremi della faccia -- Tabella per definizione modulo local ProcessTenon = {} @@ -120,11 +121,32 @@ function ProcessTenon.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) local vtN = vtExtr local ptC = ptBC + vtN * dTenH EgtOutLog( 'ptC=' .. tostring( ptC) ..' vtN=' .. tostring( vtN), 3) - -- determino larghezza massima di svuotatura - local b3Aux = EgtGetBBoxRef( AuxId, GDB_BB.STANDARD, frTen) - local dPockX = max( b3Ten:getMax():getX() - b3Aux:getMax():getX(), b3Aux:getMin():getX() - b3Ten:getMin():getX()) - local dPockY = max( b3Ten:getMax():getY() - b3Aux:getMax():getY(), b3Aux:getMin():getY() - b3Ten:getMin():getY()) - local dPockL = sqrt( dPockX * dPockX + dPockY * dPockY) + -- determino larghezza svuotatura per calcolare il numero di passate laterali + -- ricavo i contorni della faccia principale + local nLoopId, nLoopCnt = EgtExtractSurfTmFacetLoops( Proc.Id, 0, EgtGetParent( Proc.Id)) + local dPockL = 0 + -- ricavo la massima distanza tra gli estremi della faccia e la curva del tenone + if nLoopId then + local dUmin, dUmax = EgtCurveDomain( nLoopId) + for dU = dUmin, dUmax do + local ptP = EgtUP( nLoopId, dU, GDB_ID.ROOT) + local ptNear = EgtNP( AuxId, ptP, GDB_ID.ROOT) + local dDist = dist( ptP, ptNear) + if dDist > dPockL then + dPockL = dDist + end + end + -- cancello i contorni dopo averli analizzati + for i = 1, nLoopCnt do + EgtErase( nLoopId + i - 1) + end + else + -- se il metodo sopra non funziona uso il metodo semplice (distanza tra gli angoli retti della curva tenone e faccia principale) + local b3Aux = EgtGetBBoxRef( AuxId, GDB_BB.STANDARD, frTen) + local dPockX = max( b3Ten:getMax():getX() - b3Aux:getMax():getX(), b3Aux:getMin():getX() - b3Ten:getMin():getX()) + local dPockY = max( b3Ten:getMax():getY() - b3Aux:getMax():getY(), b3Aux:getMin():getY() - b3Ten:getMin():getY()) + dPockL = sqrt( dPockX * dPockX + dPockY * dPockY) + end -- abilitazione lavorazione da sotto local bMillUp = ( BD.DOWN_HEAD and vtExtr:getZ() > -0.259) local bMillDown = ( BD.DOWN_HEAD and vtExtr:getZ() < 0.1)