DataBeam :
- migliorie a contorno libero e arco.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
-- ProcessRoundArch.lua by Egaltech s.r.l. 2019/06/13
|
||||
-- ProcessRoundArch.lua by Egaltech s.r.l. 2019/12/07
|
||||
-- Gestione calcolo archi per Travi
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
@@ -101,7 +101,9 @@ function ProcessRoundArch.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
||||
-- recupero i dati della curva e del profilo
|
||||
local dDepth = abs( EgtCurveThickness( AuxId))
|
||||
local vtExtr = EgtCurveExtrusion( AuxId, GDB_RT.GLOB)
|
||||
local b3Aux = EgtGetBBoxGlob( AuxId, GDB_BB.STANDARD)
|
||||
local bToolInv = ( vtExtr:getZ() < -0.1)
|
||||
local bDown = ( b3Aux:getMin():getZ() < b3Raw:getMin():getZ() + 5)
|
||||
-- recupero la lavorazione
|
||||
local sMilling = ML.FindMilling( 'FreeContour')
|
||||
if not sMilling then
|
||||
@@ -117,11 +119,10 @@ function ProcessRoundArch.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
||||
dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth
|
||||
end
|
||||
end
|
||||
-- se non di testa o coda ne verifico la lunghezza per eventuale spezzatura
|
||||
-- ne verifico la lunghezza per eventuale spezzatura e lavorazione in doppio
|
||||
local nStep = 1
|
||||
local dStep = 0
|
||||
local dLenMax = BD.LONGCUT_MAXLEN
|
||||
local b3Aux = EgtGetBBoxGlob( AuxId, GDB_BB.STANDARD)
|
||||
local dLenMax = BD.LONGCUT_ENDLEN
|
||||
if b3Aux:getDimX() > dLenMax then
|
||||
local dCrvLen = EgtCurveLength( AuxId)
|
||||
nStep = ceil( dCrvLen / dLenMax)
|
||||
@@ -129,14 +130,30 @@ function ProcessRoundArch.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
||||
EgtOutLog( string.format( 'CrvLen=%.1f StepNbr=%d StepLen=%.1f', dCrvLen, nStep, dStep), 3)
|
||||
end
|
||||
-- verifiche per affondamento ( possibili lavorazioni in doppio)
|
||||
local bCross = false
|
||||
if abs( vtExtr:getY()) > 0.707 then
|
||||
if b3Aux:getDimY() > b3Raw:getDimY() - 1.0 then
|
||||
bCross = true
|
||||
dDepth = min( dDepth, b3Raw:getDimY())
|
||||
end
|
||||
elseif abs( vtExtr:getZ()) > 0.707 then
|
||||
if b3Aux:getDimZ() > b3Raw:getDimZ() - 1.0 then
|
||||
bCross = true
|
||||
dDepth = min( dDepth, b3Raw:getDimZ())
|
||||
end
|
||||
end
|
||||
local nDouble = 1
|
||||
local bCanDouble = ( abs( vtExtr:getZ()) < 0.5 and abs( vtExtr:getX()) < 0.1 and b3Aux:getDimY() > b3Raw:getDimY() - 1.0)
|
||||
if nStep > 1 then
|
||||
-- devo lasciare un codolo
|
||||
dDepth = dDepth - BD.DIM_STRIP
|
||||
else
|
||||
-- devo affondare un poco oltre
|
||||
dDepth = dDepth + BD.CUT_EXTRA
|
||||
local bCanDouble = abs( vtExtr:getY()) > 0.707 and bCross
|
||||
local bStripOnSide = false
|
||||
if bCross then
|
||||
if nStep > 1 or ( bDown and b3Aux:getDimX() > 0.5 * b3Raw:getDimX()) then
|
||||
-- devo lasciare un codolo
|
||||
dDepth = dDepth - BD.DIM_STRIP
|
||||
bStripOnSide = true
|
||||
else
|
||||
-- devo affondare un poco oltre
|
||||
dDepth = dDepth + BD.CUT_EXTRA
|
||||
end
|
||||
end
|
||||
if dDepth > dMaxDepth then
|
||||
if bCanDouble then
|
||||
@@ -146,6 +163,10 @@ function ProcessRoundArch.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
||||
dDepth = dMaxDepth
|
||||
end
|
||||
end
|
||||
-- se utensile orizzontale verso Y+, non in doppio e codolo da lasciare, devo invertire per lavorare sempre da Y-
|
||||
if vtExtr:getY() > 0.707 and nDouble == 1 and bStripOnSide then
|
||||
bToolInv = true
|
||||
end
|
||||
-- eseguo
|
||||
for i = 1, nStep do
|
||||
for j = 1, nDouble do
|
||||
|
||||
Reference in New Issue
Block a user