DataBeam :
- corretta lunghezza libera frese per forature con interpolazione - in tagli di testa aggiunta gestione come tagli longitudinali se vanno da inizio a fine trave - in forature inclinate corretto calcolo ingombro portautensile - in LapJoint corretta verifica dimensioni sega a catena rispetto alla geometria - in LongCut aggiunta gestione tagli da Cut.
This commit is contained in:
+51
-18
@@ -1,4 +1,4 @@
|
||||
-- ProcessCut.lua by Egaltech s.r.l. 2020/12/09
|
||||
-- ProcessCut.lua by Egaltech s.r.l. 2021/01/13
|
||||
-- Gestione calcolo singoli tagli di lama per Travi
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
@@ -8,6 +8,7 @@ local ProcessCut = {}
|
||||
require( 'EgtBase')
|
||||
local BL = require( 'BeamLib')
|
||||
local DC = require( 'DiceCut')
|
||||
local LongCut = require( 'ProcessLongCut')
|
||||
|
||||
EgtOutLog( ' ProcessCut started', 1)
|
||||
|
||||
@@ -195,21 +196,42 @@ function ProcessCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom)
|
||||
local bFillTail
|
||||
-- se pezzo ancora attaccato alla trave, per non rovinare quello successivo
|
||||
if not BL.IsSplittedPartPhase( nPhase) then
|
||||
-- se non da sotto e praticamente orizzontale ( inclinazione inferiore a 11.5deg)
|
||||
if not bDownCut and vtN:getZ() > 0.98 then
|
||||
-- se la faccia occupa tutta la trave in X e Y e non interessa la faccia inferiore, si fanno partire i tagli a cubetti dalla testa
|
||||
if abs( Proc.Box:getMin():getX() - b3Solid:getMin():getX()) < 10*GEO.EPS_SMALL and abs( Proc.Box:getMax():getX() - b3Solid:getMax():getX()) < 10*GEO.EPS_SMALL and
|
||||
abs( Proc.Box:getMin():getY() - b3Solid:getMin():getY()) < 10*GEO.EPS_SMALL and abs( Proc.Box:getMax():getY() - b3Solid:getMax():getY()) < 10*GEO.EPS_SMALL and
|
||||
b3Solid:getMin():getZ() < Proc.Box:getMin():getZ() - 100 * GEO.EPS_SMALL then
|
||||
bFillAreaPiece = true
|
||||
-- se non da sotto
|
||||
if not bDownCut then
|
||||
-- se praticamente orizzontale ( inclinazione inferiore a 11.5deg)
|
||||
if vtN:getZ() > 0.98 then
|
||||
-- se la faccia occupa tutta la trave in X e Y e non interessa la faccia inferiore, si fanno partire i tagli a cubetti dalla testa
|
||||
if abs( Proc.Box:getMin():getX() - b3Solid:getMin():getX()) < 10*GEO.EPS_SMALL and abs( Proc.Box:getMax():getX() - b3Solid:getMax():getX()) < 10*GEO.EPS_SMALL and
|
||||
abs( Proc.Box:getMin():getY() - b3Solid:getMin():getY()) < 10*GEO.EPS_SMALL and abs( Proc.Box:getMax():getY() - b3Solid:getMax():getY()) < 10*GEO.EPS_SMALL and
|
||||
b3Solid:getMin():getZ() < Proc.Box:getMin():getZ() - 100 * GEO.EPS_SMALL then
|
||||
bFillAreaPiece = true
|
||||
end
|
||||
-- se praticamente verticale di fianco ( inclinazione inferiore a 11.5deg)
|
||||
elseif abs( vtN:getY()) > 0.98 then
|
||||
-- se la faccia occupa tutta la trave in X e Z e non interessa la faccia inferiore, do errore
|
||||
if abs( Proc.Box:getMin():getX() - b3Solid:getMin():getX()) < 10*GEO.EPS_SMALL and abs( Proc.Box:getMax():getX() - b3Solid:getMax():getX()) < 10*GEO.EPS_SMALL and
|
||||
abs( Proc.Box:getMin():getZ() - b3Solid:getMin():getZ()) < 10*GEO.EPS_SMALL and abs( Proc.Box:getMax():getZ() - b3Solid:getMax():getZ()) < 10*GEO.EPS_SMALL then
|
||||
local sErr = 'Error : Impossible to machine by orientation (on side)'
|
||||
EgtOutLog( sErr)
|
||||
return false, sErr
|
||||
end
|
||||
end
|
||||
end
|
||||
-- se non da sotto e quasi orizzontale ( inclinazione inferiore a 30)
|
||||
if not bDownCut and vtN:getZ() > 0.866 then
|
||||
-- se la faccia termina davanti o dietro la trave e arriva in coda e non interessa la faccia inferiore, forzo il taglio a cubetti a partire dal davanti
|
||||
if ( abs( Proc.Box:getMin():getY() - b3Solid:getMin():getY()) < 10*GEO.EPS_SMALL or abs( Proc.Box:getMax():getY() - b3Solid:getMax():getY()) < 10*GEO.EPS_SMALL) and
|
||||
abs( Proc.Box:getMin():getX() - b3Solid:getMin():getX()) < 10*GEO.EPS_SMALL and b3Solid:getMin():getZ() < Proc.Box:getMin():getZ() - 100 * GEO.EPS_SMALL then
|
||||
bFillTail = true
|
||||
-- se quasi orizzontale ( inclinazione inferiore a 30)
|
||||
if vtN:getZ() > 0.866 then
|
||||
-- se la faccia termina davanti o dietro la trave e arriva in coda e non interessa la faccia inferiore, forzo il taglio a cubetti a partire dal davanti
|
||||
if ( abs( Proc.Box:getMin():getY() - b3Solid:getMin():getY()) < 10*GEO.EPS_SMALL or abs( Proc.Box:getMax():getY() - b3Solid:getMax():getY()) < 10*GEO.EPS_SMALL) and
|
||||
abs( Proc.Box:getMin():getX() - b3Solid:getMin():getX()) < 10*GEO.EPS_SMALL and b3Solid:getMin():getZ() < Proc.Box:getMin():getZ() - 100 * GEO.EPS_SMALL then
|
||||
bFillTail = true
|
||||
end
|
||||
-- se verticale quasi completamente di fianco ( inclinazione inferiore a 30)
|
||||
elseif abs( vtN:getY()) > 0.866 then
|
||||
-- se la faccia termina davanti o dietro la trave e arriva in coda e non interessa la faccia inferiore, forzo il taglio a cubetti a partire dal davanti
|
||||
if ( abs( Proc.Box:getMin():getZ() - b3Solid:getMin():getZ()) < 10*GEO.EPS_SMALL or abs( Proc.Box:getMax():getZ() - b3Solid:getMax():getZ()) < 10*GEO.EPS_SMALL) and
|
||||
abs( Proc.Box:getMin():getX() - b3Solid:getMin():getX()) < 10*GEO.EPS_SMALL then
|
||||
local sErr = 'Error : Impossible to machine by orientation (on side)'
|
||||
EgtOutLog( sErr)
|
||||
return false, sErr
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -231,6 +253,11 @@ function ProcessCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom)
|
||||
if Proc.CutFront then
|
||||
return true
|
||||
end
|
||||
-- se ho il parametro Q04 = 1 e il taglio copre la lunghezza della trave allora lancio il processo dell'L10
|
||||
local nAsLongCut = EgtGetInfo( Proc.Id, 'Q04', 'd') or 0
|
||||
if nAsLongCut == 1 and bFillAreaPiece then
|
||||
return LongCut.Make( Proc, nPhase, nRawId, nPartId, true)
|
||||
end
|
||||
-- se vero taglio, eventuale inserimento smussi
|
||||
if Proc.Prc == 10 then
|
||||
local bOkc, sErrC = MakeChamfer( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
||||
@@ -381,7 +408,9 @@ function ProcessCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom)
|
||||
dExtraCut = BD.CUT_EXTRA
|
||||
end
|
||||
end
|
||||
local bOk, sErr = BL.MakeOneFaceBySaw( vCuts[i][j], 0, sCutting, dSawDiam, vtOrthoO, dNzLimDwnUp, dExtraCut, BD.CUT_SIC, 0, 0, nil, b3Raw)
|
||||
local dVzLimDwnUp = dNzLimDwnUp
|
||||
if not BD.C_SIMM and vtN:getZ() > 0.707 then dVzLimDwnUp = -0.708 end
|
||||
local bOk, sErr = BL.MakeOneFaceBySaw( vCuts[i][j], 0, sCutting, dSawDiam, vtOrthoO, dVzLimDwnUp, dExtraCut, BD.CUT_SIC, 0, 0, nil, b3Raw)
|
||||
if not bOk then
|
||||
return bOk, sErr
|
||||
end
|
||||
@@ -434,16 +463,20 @@ function ProcessCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bFromBottom)
|
||||
if Proc.Box:getDimZ() > dMinHIng and Proc.Box:getMin():getZ() < b3Raw:getMin():getZ() + dMinHIng then
|
||||
if Proc.Head then
|
||||
local dOffs = b3Raw:getMax():getX() - dOvmHead - Proc.Box:getMin():getX()
|
||||
if abs( vtN:getZ()) > 0.5 then
|
||||
if vtN:getZ() > 0.5 then
|
||||
dOffs = dOffs - 0.6 * Proc.Box:getDimX()
|
||||
elseif vtN:getZ() < -0.5 then
|
||||
dOffs = dOffs - 0.2 * Proc.Box:getDimX()
|
||||
elseif ( abs( vtN:getY()) > 0.9 and vtN:getZ() > 0.2) then
|
||||
dOffs = dOffs - 0.3 * Proc.Box:getDimX()
|
||||
end
|
||||
BL.UpdateHCING( nRawId, dOffs)
|
||||
elseif Proc.Tail then
|
||||
local dOffs = Proc.Box:getMax():getX() - b3Solid:getMin():getX()
|
||||
if abs( vtN:getZ()) > 0.5 then
|
||||
if vtN:getZ() > 0.5 then
|
||||
dOffs = dOffs - 0.6 * Proc.Box:getDimX()
|
||||
elseif vtN:getZ() < -0.5 then
|
||||
dOffs = dOffs - 0.2 * Proc.Box:getDimX()
|
||||
elseif ( abs( vtN:getY()) > 0.9 and vtN:getZ() > 0.2) then
|
||||
dOffs = dOffs - 0.3 * Proc.Box:getDimX()
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user