DataBeam :
- numerose correzioni di Filippo per FAST.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
-- ProcessLongDoubleCut.lua by Egaltech s.r.l. 2020/11/16
|
||||
-- ProcessLongDoubleCut.lua by Egaltech s.r.l. 2020/12/04
|
||||
-- Gestione calcolo doppio taglio longitudinale per Travi
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
@@ -146,9 +146,10 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Applicazione della lavorazione
|
||||
local function MakeByPocketing( Proc, nPhase, nRawId, nPartId, nFacInd, dFacElev)
|
||||
local function MakeByPocketing( Proc, nPhase, nRawId, nPartId, nSide, nFacInd, dFacElev)
|
||||
-- cerco la svuotatura opportuna
|
||||
local sPocketing = ML.FindPocketing( 'OpenPocket', Proc.Box:getDimX())
|
||||
local sPockType = EgtIf( nSide ~=1 and BD.DOWN_HEAD, 'OpenPocket_H2', 'OpenPocket')
|
||||
local sPocketing = ML.FindPocketing( sPockType, Proc.Box:getDimX())
|
||||
if not sPocketing then
|
||||
local sErr = 'Error : OpenPocket not found in library'
|
||||
EgtOutLog( sErr)
|
||||
@@ -473,7 +474,13 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
||||
local dElev = 0
|
||||
local dFacElev1 = BL.GetFaceElevation( Proc.Id, tFaceLong[1], nPartId)
|
||||
local dFacElev2 = BL.GetFaceElevation( Proc.Id, tFaceLong[2], nPartId)
|
||||
dElev = max( dFacElev1, dFacElev2)
|
||||
-- 03/12/2020
|
||||
-- se facce concave e a 90 gradi, prendo l'elevazione minima
|
||||
if bOrtho then
|
||||
dElev = min( dFacElev1, dFacElev2)
|
||||
else
|
||||
dElev = max( dFacElev1, dFacElev2)
|
||||
end
|
||||
-- recupero la lavorazione
|
||||
local sMilling = ML.FindMilling( 'Long2Cut', dElev)
|
||||
if not sMilling then
|
||||
@@ -505,10 +512,10 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
||||
-- se chiuso e corto, applico svuotatura con fresa opportuna
|
||||
if nFaceLimit == 3 and Proc.Box:getDimX() < 2 * dToolDiam then
|
||||
-- svuotatura della prima faccia longitudinale
|
||||
local bOk, sErr = MakeByPocketing( Proc, nPhase, nRawId, nPartId, tFaceLong[1], dFacElev1)
|
||||
local bOk, sErr = MakeByPocketing( Proc, nPhase, nRawId, nPartId, nSide, tFaceLong[1], dFacElev1)
|
||||
-- svuotatura della seconda faccia longitudinale
|
||||
if not bOk then return bOk, sErr end
|
||||
return MakeByPocketing( Proc, nPhase, nRawId, nPartId, tFaceLong[2], dFacElev2)
|
||||
return MakeByPocketing( Proc, nPhase, nRawId, nPartId, nSide, tFaceLong[2], dFacElev2)
|
||||
end
|
||||
-- determino gli estremi
|
||||
local dStartDist = 0
|
||||
@@ -589,13 +596,36 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
||||
dEndAccDist = 0
|
||||
end
|
||||
end
|
||||
-- se facce ortogonali (concave), lavoro solo quella con versore maggiormente verso l'alto
|
||||
local nIni, nFin = 1, 2
|
||||
local dLimitAngle = -0.5 - 20 * GEO.EPS_SMALL
|
||||
-- se facce ortogonali (concave), mantengo la lavorazione di testa sulla faccia più grande purchè non superi di 30 gradi il sottosquadra
|
||||
if bOrtho then
|
||||
if vtN[vOrd[1]]:getZ() >= vtN[vOrd[2]]:getZ() then
|
||||
nFin = 1
|
||||
if vtN[vOrd[1]]:getZ() > 0.001 and vtN[vOrd[2]]:getZ() > 0.001 then
|
||||
if vtN[vOrd[1]]:getZ() >= vtN[vOrd[2]]:getZ() then
|
||||
nFin = 1
|
||||
else
|
||||
nIni = 2
|
||||
end
|
||||
else
|
||||
nIni = 2
|
||||
if vtN[vOrd[1]]:getZ() < dLimitAngle then
|
||||
nIni = 2
|
||||
elseif vtN[vOrd[2]]:getZ() < dLimitAngle then
|
||||
nFin = 1
|
||||
else
|
||||
if vtN[vOrd[1]]:getZ() >= vtN[vOrd[2]]:getZ() then
|
||||
if vtN[vOrd[2]]:getZ() < dLimitAngle then
|
||||
nFin = 1
|
||||
else
|
||||
nIni = 2
|
||||
end
|
||||
else
|
||||
if vtN[vOrd[1]]:getZ() < dLimitAngle then
|
||||
nIni = 2
|
||||
else
|
||||
nFin = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
-- ciclo sulle parti
|
||||
@@ -613,7 +643,7 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
||||
nSCC = EgtIf( ( j == 1 or j == nC - 1), MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM)
|
||||
end
|
||||
-- Verifico se da fare di fianco perchè normale troppo verso il basso (minore di -30deg)
|
||||
local bSide = ( vtN[vOrd[i]]:getZ() < -0.5 and not BD.DOWN_HEAD)
|
||||
local bSide = ( vtN[vOrd[i]]:getZ() < dLimitAngle and not BD.DOWN_HEAD)
|
||||
-- ciclo sulle passate
|
||||
local nO = 1
|
||||
local dStep = 0
|
||||
@@ -813,19 +843,71 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
||||
-- ciclo sulle parti
|
||||
local nM = 0
|
||||
for j = 1, nC do
|
||||
local nFin = 2
|
||||
-- se concavo e facce ortogonali controllo se con la lavorazione della prima faccia il diametro copre la seconda (e non la eseguo)
|
||||
if not bConvex and bOrtho then
|
||||
if dToolDiam > vWidth[vOrd[2]] then
|
||||
nFin = 1
|
||||
local nIni, nFin = 1, 2
|
||||
local nDir = 1
|
||||
-- se facce ortogonali (concave) controllo se con la lavorazione della prima faccia il diametro copre la seconda (e non la eseguo)
|
||||
if bOrtho then
|
||||
-- se da sotto scelgo la faccia (lavorta col fianco utensile) con direzione più sottosquadra
|
||||
if nSide == -1 and vtN[vOrd[1]]:getZ() < -0.001 and vtN[vOrd[2]]:getZ() < -0.001 then
|
||||
-- se gli angoli delle due facce sono uguali ( sotto il grado di differenza) sgelgo la faccia più vicina a un fianco
|
||||
if abs(vtN[vOrd[1]]:getZ() - vtN[vOrd[2]]:getZ()) < 0.017 then
|
||||
-- se punto medio più vicino al lato dietro
|
||||
if b3Solid:getMax():getY() - ptM:getY() < ptM:getY() - b3Solid:getMin():getY() then
|
||||
-- se prima faccia più vicina alla faccia dietro eseguo prima questa
|
||||
if ptC[vOrd[1]]:getY() > ptC[vOrd[2]]:getY() then
|
||||
if dToolDiam > vWidth[vOrd[2]] then
|
||||
nFin = 1
|
||||
end
|
||||
-- se è più lontana inverto la direzione di lavoro
|
||||
else
|
||||
-- inverto la direzione di lavorazione delle facce
|
||||
nDir = -1
|
||||
nIni, nFin = 2, 1
|
||||
if dToolDiam > vWidth[vOrd[1]] then
|
||||
nFin = 2
|
||||
end
|
||||
end
|
||||
-- altrimenti punto medio più vicino al lato davanti
|
||||
else
|
||||
-- se prima faccia più vicina alla faccia dietro inverto la direzione di lavorazione
|
||||
if ptC[vOrd[1]]:getY() > ptC[vOrd[2]]:getY() then
|
||||
-- inverto la direzione di lavorazione delle facce
|
||||
nDir = -1
|
||||
nIni, nFin = 2, 1
|
||||
if dToolDiam > vWidth[vOrd[1]] then
|
||||
nFin = 2
|
||||
end
|
||||
else
|
||||
if dToolDiam > vWidth[vOrd[2]] then
|
||||
nFin = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif vtN[vOrd[2]]:getZ() < vtN[vOrd[1]]:getZ() then
|
||||
-- inverto la direzione di lavorazione delle facce
|
||||
nDir = -1
|
||||
nIni, nFin = 2, 1
|
||||
if dToolDiam > vWidth[vOrd[1]] then
|
||||
nFin = 2
|
||||
end
|
||||
else
|
||||
if dToolDiam > vWidth[vOrd[2]] then
|
||||
nFin = 1
|
||||
end
|
||||
end
|
||||
-- in tutti gli altri casi
|
||||
else
|
||||
if dToolDiam > vWidth[vOrd[2]] then
|
||||
nFin = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
-- su entrambe le facce
|
||||
for i = 1, nFin do
|
||||
for i = nIni, nFin, nDir do
|
||||
-- Limitazioni della lavorazione
|
||||
local nPos = EgtIf( i == 1, j, nC - j + 1)
|
||||
local dSal = EgtIf( nPos == 1, - EgtIf( i == 1, dStartDist, dEndDist), - EgtIf( i == 1, dStartAccDist, dEndAccDist) - ( nPos - 2) * dC)
|
||||
local dEal = EgtIf( nPos == nC, - EgtIf( i == 1, dEndDist, dStartDist), - EgtIf( i == 1, dEndAccDist, dStartAccDist) - ( nC - nPos - 1) * dC)
|
||||
local dSal = EgtIf( nPos == 1, - EgtIf( i == nIni, dStartDist, dEndDist), - EgtIf( i == nIni, dStartAccDist, dEndAccDist) - ( nPos - 2) * dC)
|
||||
local dEal = EgtIf( nPos == nC, - EgtIf( i == nIni, dEndDist, dStartDist), - EgtIf( i == nIni, dEndAccDist, dStartAccDist) - ( nC - nPos - 1) * dC)
|
||||
-- Posizione braccio portatesta
|
||||
local nSCC = EgtIf( BD.C_SIMM, MCH_SCC.NONE, MCH_SCC.ADIR_XP)
|
||||
-- inserisco le parti di lavorazione
|
||||
|
||||
Reference in New Issue
Block a user