DataBeam :

- aggiunta gestione ingombri di testa o coda per tagli doppi generici con lama.
This commit is contained in:
Dario Sassi
2019-09-10 08:12:06 +00:00
parent 4d26232057
commit 39be33451a
3 changed files with 37 additions and 27 deletions
+21 -21
View File
@@ -1,4 +1,4 @@
-- ProcessLapJoint.lua by Egaltech s.r.l. 2019/08/29
-- ProcessLapJoint.lua by Egaltech s.r.l. 2019/09/09
-- Gestione calcolo mezzo-legno per Travi
-- Tabella per definizione modulo
@@ -207,15 +207,15 @@ local function MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId)
-- dati delle facce
local ptC = {}
local vtN = {}
ptC[0], vtN[0] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
ptC[1], vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 1, GDB_ID.ROOT)
ptC[1], vtN[1] = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
ptC[2], vtN[2] = EgtSurfTmFacetCenter( Proc.Id, 1, GDB_ID.ROOT)
-- dati medi
local ptM = ( ptC[0] + ptC[1]) / 2
local ptM = ( ptC[1] + ptC[2]) / 2
-- verifico non siano orientate verso il basso
local bFaceOk = {}
bFaceOk[0] = ( vtN[0]:getZ() >= BD.NZ_MINB)
bFaceOk[1] = ( vtN[1]:getZ() >= BD.NZ_MINB)
if not bFaceOk[0] and not bFaceOk[1] then
bFaceOk[2] = ( vtN[2]:getZ() >= BD.NZ_MINB)
if not bFaceOk[1] and not bFaceOk[2] then
local sErr = 'Error on process ' .. tostring( Proc.Id) .. ' LapJoint from bottom impossible'
EgtOutLog( sErr)
return false, sErr
@@ -223,29 +223,29 @@ local function MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId)
-- scelta faccia da lavorare
local nFacInd
-- se entrambe possibili
if bFaceOk[0] and bFaceOk[1] then
if bFaceOk[1] and bFaceOk[2] then
-- se in testa o coda, scelgo quella con la normale più parallela all'asse trave
if Proc.Head or Proc.Tail then
if vtN[0]:getZ() < BD.NZ_MINA then
if vtN[1]:getZ() < BD.NZ_MINA then
nFacInd = 1
elseif vtN[1]:getZ() < BD.NZ_MINA then
elseif vtN[2]:getZ() < BD.NZ_MINA then
nFacInd = 0
else
nFacInd = EgtIf( abs( vtN[0]:getX()) > abs( vtN[1]:getX()), 0, 1)
nFacInd = EgtIf( abs( vtN[1]:getX()) > abs( vtN[2]:getX()), 0, 1)
end
-- altrimenti, scelgo quella con la normale più perpendicolare all'asse trave (se uguali, quella verso X+)
else
if abs( abs( vtN[0]:getX()) - abs( vtN[1]:getX())) < GEO.EPS_SMALL then
if abs( abs( vtN[1]:getX()) - abs( vtN[2]:getX())) < GEO.EPS_SMALL then
if ptM:getX() > b3Raw:getCenter():getX() then
nFacInd = EgtIf( vtN[0]:getX() > vtN[1]:getX(), 0, 1)
nFacInd = EgtIf( vtN[1]:getX() > vtN[2]:getX(), 0, 1)
else
nFacInd = EgtIf( vtN[0]:getX() < vtN[1]:getX(), 0, 1)
nFacInd = EgtIf( vtN[1]:getX() < vtN[2]:getX(), 0, 1)
end
else
nFacInd = EgtIf( abs( vtN[0]:getX()) < abs( vtN[1]:getX()), 0, 1)
nFacInd = EgtIf( abs( vtN[1]:getX()) < abs( vtN[2]:getX()), 0, 1)
end
end
elseif bFaceOk[0] then
elseif bFaceOk[1] then
nFacInd = 0
else
nFacInd = 1
@@ -269,11 +269,11 @@ local function MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId)
-- aggiungo geometria
EgtSetMachiningGeometry( {{ Proc.Id, nFacInd}})
-- imposto uso faccia e lato correzione
if vtN[nOthInd]:getX() > 0.1 then
if vtN[nOthInd+1]:getX() > 0.1 then
EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_LEFT)
elseif vtN[nOthInd]:getX() < -0.1 then
elseif vtN[nOthInd+1]:getX() < -0.1 then
EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_RIGHT)
elseif vtN[nOthInd]:getZ() < -0.1 then
elseif vtN[nOthInd+1]:getZ() < -0.1 then
EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_TOP)
else
EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_DOWN)
@@ -281,7 +281,7 @@ local function MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId)
-- imposto lato di correzione
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
-- imposto posizione braccio porta testa
if vtN[nFacInd]:getY() < GEO.EPS_SMALL then
if vtN[nFacInd+1]:getY() < GEO.EPS_SMALL then
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YM)
else
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YP)
@@ -608,7 +608,7 @@ end
---------------------------------------------------------------------
-- Applicazione della lavorazione
---------------------------------------------------------------------
function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId)
function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
-- limiti di fresatura semplice
local MAX_MILL_LIN = 80
local MAX_MILL_VOL = ( 80 * 240 * 20) / 2
@@ -676,7 +676,7 @@ function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId)
return MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId)
-- altrimenti, con lama
else
return Fbs.MakeTwo( Proc, nPhase, nRawId, nPartId, 'HeadSide')
return Fbs.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, 'HeadSide')
end
-- tre o più facce
else