Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c457ff9acf | ||
|
|
5f9fc0b975 | ||
|
|
51261d1231 | ||
|
|
7f807d6114 | ||
|
|
ac58afc627 | ||
|
|
1d68e47bdf | ||
|
|
1d802852bd | ||
|
|
01386ce711 | ||
|
|
4c4ae7bb6f | ||
|
|
b66bd700f4 | ||
|
|
1c93a079bd | ||
|
|
000454139d | ||
|
|
b460b2c7a4 | ||
|
|
65c344bb30 | ||
|
|
587f4c61e2 | ||
|
|
cc63560b19 | ||
|
|
d6813e4efa | ||
|
|
18ebaf8a16 | ||
|
|
60c489f70b | ||
|
|
8ae94c1de6 |
+12
-6
@@ -1,4 +1,4 @@
|
|||||||
-- BatchProcess.lua by Egaltech s.r.l. 2022/04/28
|
-- BatchProcess.lua by Egaltech s.r.l. 2022/05/10
|
||||||
-- Gestione calcolo batch disposizione e lavorazioni per Travi
|
-- Gestione calcolo batch disposizione e lavorazioni per Travi
|
||||||
-- 2019/07/11 Aggiunta gestione stato rotazione di feature per TS3.
|
-- 2019/07/11 Aggiunta gestione stato rotazione di feature per TS3.
|
||||||
-- 2019/07/16 Aggiunta gestione modalità oltre 10 per impostazione macchina e uscita.
|
-- 2019/07/16 Aggiunta gestione modalità oltre 10 per impostazione macchina e uscita.
|
||||||
@@ -23,6 +23,8 @@
|
|||||||
-- 2021/06/16 Se disponibile si aggiunge la versione dell'eseguibile alle info del programma CN.
|
-- 2021/06/16 Se disponibile si aggiunge la versione dell'eseguibile alle info del programma CN.
|
||||||
-- 2021/08/04 Direzione vista simulazione da BD.SIMUL_VIEW_DIR se esiste.
|
-- 2021/08/04 Direzione vista simulazione da BD.SIMUL_VIEW_DIR se esiste.
|
||||||
-- 2022/04/28 In info generazione aggiunta indicazione se 64bit.
|
-- 2022/04/28 In info generazione aggiunta indicazione se 64bit.
|
||||||
|
-- 2023/05/03 Tolleranza su sezione portata a 0.1 mm (100 * GEO.EPS_SMALL).
|
||||||
|
-- 2022/05/10 Dopo aver fatto rotazioni e inversioni dei pezzi cambio chiave Info relative.
|
||||||
|
|
||||||
-- Intestazioni
|
-- Intestazioni
|
||||||
require( 'EgtBase')
|
require( 'EgtBase')
|
||||||
@@ -266,22 +268,26 @@ if bToProcess then
|
|||||||
vBeam[i].PosX = PosX
|
vBeam[i].PosX = PosX
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Eseguo eventuali rotazioni e inversioni testa-coda
|
-- Se non già eseguite, applico eventuali rotazioni e inversioni testa-coda
|
||||||
for i = 1, #vBeam do
|
for i = 1, #vBeam do
|
||||||
local b3Solid = vBeam[i].Box
|
local b3Solid = vBeam[i].Box
|
||||||
-- rotazione
|
-- rotazione
|
||||||
local dRotAng = EgtGetInfo( vBeam[i].Id, 'ROTATED', 'd')
|
local dRotAng = EgtGetInfo( vBeam[i].Id, 'ROTATED', 'd') or 0
|
||||||
if dRotAng and abs( dRotAng) > GEO.EPS_ANG_SMALL then
|
if abs( dRotAng) > GEO.EPS_ANG_SMALL then
|
||||||
local ptRotCen = b3Solid:getCenter()
|
local ptRotCen = b3Solid:getCenter()
|
||||||
EgtRotate( vBeam[i].Id, ptRotCen, X_AX(), dRotAng, GDB_RT.GLOB)
|
EgtRotate( vBeam[i].Id, ptRotCen, X_AX(), dRotAng, GDB_RT.GLOB)
|
||||||
b3Solid:rotate( ptRotCen, X_AX(), dRotAng)
|
b3Solid:rotate( ptRotCen, X_AX(), dRotAng)
|
||||||
end
|
end
|
||||||
|
EgtRemoveInfo( vBeam[i].Id, 'ROTATED')
|
||||||
|
EgtSetInfo( vBeam[i].Id, 'ROTATED_OK', dRotAng)
|
||||||
-- inversione
|
-- inversione
|
||||||
local dInvAng = 180 - ( EgtGetInfo( vBeam[i].Id, 'INVERTED', 'd') or 0)
|
local dInvAng = 180 - ( EgtGetInfo( vBeam[i].Id, 'INVERTED', 'd') or 0)
|
||||||
if abs( dInvAng) > GEO.EPS_ANG_SMALL then
|
if abs( dInvAng) > GEO.EPS_ANG_SMALL then
|
||||||
local ptInvCen = b3Solid:getCenter()
|
local ptInvCen = b3Solid:getCenter()
|
||||||
EgtRotate( vBeam[i].Id, ptInvCen, Z_AX(), dInvAng, GDB_RT.GLOB)
|
EgtRotate( vBeam[i].Id, ptInvCen, Z_AX(), dInvAng, GDB_RT.GLOB)
|
||||||
end
|
end
|
||||||
|
EgtRemoveInfo( vBeam[i].Id, 'INVERTED')
|
||||||
|
EgtSetInfo( vBeam[i].Id, 'INVERTED_OK', 180 - dInvAng)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Ne verifico le dimensioni
|
-- Ne verifico le dimensioni
|
||||||
@@ -291,8 +297,8 @@ if bToProcess then
|
|||||||
for i = 2, #vBeam do
|
for i = 2, #vBeam do
|
||||||
local dDimW = vBeam[i].Box:getDimY()
|
local dDimW = vBeam[i].Box:getDimY()
|
||||||
local dDimH = vBeam[i].Box:getDimZ()
|
local dDimH = vBeam[i].Box:getDimZ()
|
||||||
if ( abs( dDimW - dRawW) > 10 * GEO.EPS_SMALL or abs( dDimH - dRawH) > 10 * GEO.EPS_SMALL) and
|
if ( abs( dDimW - dRawW) > 100 * GEO.EPS_SMALL or abs( dDimH - dRawH) > 100 * GEO.EPS_SMALL) and
|
||||||
( abs( dDimH - dRawW) > 10 * GEO.EPS_SMALL or abs( dDimW - dRawH) > 10 * GEO.EPS_SMALL) then
|
( abs( dDimH - dRawW) > 100 * GEO.EPS_SMALL or abs( dDimW - dRawH) > 100 * GEO.EPS_SMALL) then
|
||||||
table.insert( vBeamErr, i)
|
table.insert( vBeamErr, i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+50
-26
@@ -1395,16 +1395,14 @@ end
|
|||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
-- Controlla se la feature ProcMirror è la specchiata di Proc, per feature di tipo tasca o simile
|
-- Controlla se la feature ProcMirror è la specchiata di Proc, per feature di tipo tasca o simile
|
||||||
local function CheckMirrorPocket( Proc, ProcMirror, b3Raw, AuxId)
|
local function CheckMirrorPocket( Proc, ProcMirror, b3Raw, AuxId)
|
||||||
|
|
||||||
-- recupero i dati geometrici della curva Proc
|
-- recupero i dati geometrici della curva Proc
|
||||||
local vtExtr = EgtCurveExtrusion( AuxId, GDB_RT.GLOB)
|
local vtExtr = EgtCurveExtrusion( AuxId, GDB_RT.GLOB)
|
||||||
local ptBC = EgtGP( AuxId, GDB_RT.GLOB)
|
local ptBC = EgtGP( AuxId, GDB_RT.GLOB)
|
||||||
local rfDtMrt = EgtSurfTmFacetMinAreaRectangle( Proc.Id, 0, GDB_RT.GLOB)
|
local rfDtMrt = EgtSurfTmFacetMinAreaRectangle( Proc.Id, 0, GDB_RT.GLOB)
|
||||||
local b3DtMrt = EgtGetBBoxRef( Proc.Id, GDB_BB.STANDARD, rfDtMrt)
|
local b3DtMrt = EgtGetBBoxRef( Proc.Id, GDB_BB.STANDARD, rfDtMrt)
|
||||||
local b3Proc = EgtGetBBoxGlob( Proc.Id, GDB_BB.STANDARD)
|
local b3Proc = EgtGetBBoxGlob( Proc.Id, GDB_BB.STANDARD)
|
||||||
-- determino l'asse della curva Proc
|
|
||||||
local vtAx = EgtEV( AuxId, GDB_RT.GLOB) - EgtSV( AuxId, GDB_RT.GLOB)
|
|
||||||
|
|
||||||
-- recupero e verifico l'entità curva ProcMirror
|
-- recupero e verifico l'entità curva ProcMirror
|
||||||
local AuxIdMirror = EgtGetInfo( ProcMirror.Id, 'AUXID', 'i')
|
local AuxIdMirror = EgtGetInfo( ProcMirror.Id, 'AUXID', 'i')
|
||||||
if AuxIdMirror then AuxIdMirror = AuxIdMirror + ProcMirror.Id end
|
if AuxIdMirror then AuxIdMirror = AuxIdMirror + ProcMirror.Id end
|
||||||
@@ -1420,35 +1418,49 @@ local function CheckMirrorPocket( Proc, ProcMirror, b3Raw, AuxId)
|
|||||||
local ptBCMirror = EgtGP( AuxIdMirror, GDB_RT.GLOB)
|
local ptBCMirror = EgtGP( AuxIdMirror, GDB_RT.GLOB)
|
||||||
local b3DtMrtMirror = EgtGetBBoxRef( ProcMirror.Id, GDB_BB.STANDARD, rfDtMrt)
|
local b3DtMrtMirror = EgtGetBBoxRef( ProcMirror.Id, GDB_BB.STANDARD, rfDtMrt)
|
||||||
local b3ProcMirror = EgtGetBBoxGlob( ProcMirror.Id, GDB_BB.STANDARD)
|
local b3ProcMirror = EgtGetBBoxGlob( ProcMirror.Id, GDB_BB.STANDARD)
|
||||||
-- determino l'asse della curva ProcMirror
|
|
||||||
local vtAxMirror = EgtEV( AuxIdMirror, GDB_RT.GLOB) - EgtSV( AuxIdMirror, GDB_RT.GLOB)
|
-- verifico se le mortase sono specchiate :
|
||||||
|
-- devono avere estrusioni opposte
|
||||||
-- verifico se le mortase sono specchiate
|
if not AreOppositeVectorApprox( vtExtr, vtExtrMirror) then
|
||||||
local bIsMirror = true
|
return false
|
||||||
|
end
|
||||||
|
-- se di tipo Dt, devono avere l'asse allineato
|
||||||
|
if DtMortise.SideIdentify( Proc) or DtMortise.SideIdentify( ProcMirror) then
|
||||||
|
local vtAx = EgtEV( AuxId, GDB_RT.GLOB) - EgtSV( AuxId, GDB_RT.GLOB)
|
||||||
|
local vtAxMirror = EgtEV( AuxIdMirror, GDB_RT.GLOB) - EgtSV( AuxIdMirror, GDB_RT.GLOB)
|
||||||
|
if not AreSameVectorApprox( vtAx, vtAxMirror) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- devono avere il centro allineato, essere equidistanti dalla mezzaria trave e non essere troppo vicine
|
||||||
local vtDisplacement = ptBC - ptBCMirror
|
local vtDisplacement = ptBC - ptBCMirror
|
||||||
local ptCenRaw = b3Raw:getCenter()
|
local ptCenRaw = b3Raw:getCenter()
|
||||||
local dYMinDistance = EgtIf( ptBC:getY() > ptBCMirror:getY(), abs( b3ProcMirror:getMax():getY() - b3Proc:getMin():getY()), abs( b3Proc:getMax():getY() - b3ProcMirror:getMin():getY()))
|
|
||||||
local dZMinDistance = EgtIf( ptBC:getZ() > ptBCMirror:getZ(), abs( b3ProcMirror:getMax():getZ() - b3Proc:getMin():getZ()), abs( b3Proc:getMax():getZ() - b3ProcMirror:getMin():getZ()))
|
|
||||||
local dMinimumDistanceMirroredFeatures = 50
|
local dMinimumDistanceMirroredFeatures = 50
|
||||||
-- controllo che il centro delle due mortase sia allineato, che queste siano equidistanti dalla mezzeria della trave
|
|
||||||
-- e che queste non siano troppo vicine
|
|
||||||
if AreSameOrOppositeVectorApprox( vtExtr, Y_AX()) then
|
if AreSameOrOppositeVectorApprox( vtExtr, Y_AX()) then
|
||||||
bIsMirror = abs( vtDisplacement:getX()) < 500 * GEO.EPS_SMALL and abs( vtDisplacement:getZ()) < 500 * GEO.EPS_SMALL and
|
local dYMinDistance = max( b3Proc:getMin():getY(), b3ProcMirror:getMin():getY()) - min( b3Proc:getMax():getY(), b3ProcMirror:getMax():getY())
|
||||||
( abs( ptBC:getY() - ptCenRaw:getY()) - abs( ptBCMirror:getY() - ptCenRaw:getY())) < 500 * GEO.EPS_SMALL and
|
if not ( abs( vtDisplacement:getX()) < 500 * GEO.EPS_SMALL and abs( vtDisplacement:getZ()) < 500 * GEO.EPS_SMALL and
|
||||||
dYMinDistance - dMinimumDistanceMirroredFeatures > 10 * GEO.EPS_SMALL
|
( abs( ptBC:getY() - ptCenRaw:getY()) - abs( ptBCMirror:getY() - ptCenRaw:getY())) < 500 * GEO.EPS_SMALL and
|
||||||
|
dYMinDistance > dMinimumDistanceMirroredFeatures + 10 * GEO.EPS_SMALL) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
elseif AreSameOrOppositeVectorApprox( vtExtr, Z_AX()) then
|
elseif AreSameOrOppositeVectorApprox( vtExtr, Z_AX()) then
|
||||||
bIsMirror = abs( vtDisplacement:getX()) < 500 * GEO.EPS_SMALL and abs( vtDisplacement:getY()) < 500 * GEO.EPS_SMALL and
|
local dZMinDistance = max( b3Proc:getMin():getZ(), b3ProcMirror:getMin():getZ()) - min( b3Proc:getMax():getZ(), b3ProcMirror:getMax():getZ())
|
||||||
( abs( ptBC:getZ() - ptCenRaw:getZ()) - abs( ptBCMirror:getZ() - ptCenRaw:getZ())) < 500 * GEO.EPS_SMALL and
|
if not ( abs( vtDisplacement:getX()) < 500 * GEO.EPS_SMALL and abs( vtDisplacement:getY()) < 500 * GEO.EPS_SMALL and
|
||||||
dZMinDistance - dMinimumDistanceMirroredFeatures > 10 * GEO.EPS_SMALL
|
( abs( ptBC:getZ() - ptCenRaw:getZ()) - abs( ptBCMirror:getZ() - ptCenRaw:getZ())) < 500 * GEO.EPS_SMALL and
|
||||||
|
dZMinDistance > dMinimumDistanceMirroredFeatures + 10 * GEO.EPS_SMALL) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
-- devono avere box con le stesse dimensioni
|
||||||
|
if not ( abs( b3DtMrt:getDimX() - b3DtMrtMirror:getDimX()) < 500 * GEO.EPS_SMALL and
|
||||||
|
abs( b3DtMrt:getDimY() - b3DtMrtMirror:getDimY()) < 500 * GEO.EPS_SMALL and
|
||||||
|
abs( b3DtMrt:getDimZ() - b3DtMrtMirror:getDimZ()) < 500 * GEO.EPS_SMALL) then
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
-- controllo che le dimensioni dei due box siano le stesse
|
|
||||||
bIsMirror = bIsMirror and abs( b3DtMrt:getDimX() - b3DtMrtMirror:getDimX()) < 500 * GEO.EPS_SMALL and
|
|
||||||
abs( b3DtMrt:getDimY() - b3DtMrtMirror:getDimY()) < 500 * GEO.EPS_SMALL and
|
|
||||||
abs( b3DtMrt:getDimZ() - b3DtMrtMirror:getDimZ()) < 500 * GEO.EPS_SMALL
|
|
||||||
-- controllo che l'asse delle due mortase sia allineato
|
|
||||||
bIsMirror = bIsMirror and AreSameVectorApprox( vtAx, vtAxMirror)
|
|
||||||
|
|
||||||
return bIsMirror
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
@@ -1833,11 +1845,15 @@ function BeamExec.ProcessFeatures()
|
|||||||
nRId = EgtGetNextRawPart( nRId)
|
nRId = EgtGetNextRawPart( nRId)
|
||||||
end
|
end
|
||||||
EgtSetInfo( nDispId, 'ROT', -2)
|
EgtSetInfo( nDispId, 'ROT', -2)
|
||||||
|
-- flag feature precedente in doppio
|
||||||
|
local nPrevDouble = 0
|
||||||
-- inserisco le lavorazioni da lavorare ribaltate
|
-- inserisco le lavorazioni da lavorare ribaltate
|
||||||
for i = 1, #vProc do
|
for i = 1, #vProc do
|
||||||
-- creo la lavorazione
|
-- creo la lavorazione
|
||||||
local Proc = vProc[i]
|
local Proc = vProc[i]
|
||||||
if Proc.Flg ~= 0 and Proc.Down then
|
if Proc.Flg ~= 0 and Proc.Down then
|
||||||
|
Proc.PrevDouble = nPrevDouble
|
||||||
|
nPrevDouble = Proc.Double
|
||||||
local bOk, sMsg, nNewPhase = AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, bNeedHCut, b3Raw, nOrd, sDownOrSideOrStd, nil, nil, dCurrOvmT)
|
local bOk, sMsg, nNewPhase = AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, bNeedHCut, b3Raw, nOrd, sDownOrSideOrStd, nil, nil, dCurrOvmT)
|
||||||
if not bOk then
|
if not bOk then
|
||||||
nTotErr = nTotErr + 1
|
nTotErr = nTotErr + 1
|
||||||
@@ -1905,12 +1921,16 @@ function BeamExec.ProcessFeatures()
|
|||||||
nRId = EgtGetNextRawPart( nRId)
|
nRId = EgtGetNextRawPart( nRId)
|
||||||
end
|
end
|
||||||
EgtSetInfo( nDispId, 'ROT', -1)
|
EgtSetInfo( nDispId, 'ROT', -1)
|
||||||
|
-- flag feature precedente in doppio
|
||||||
|
local nPrevDouble = 0
|
||||||
-- inserisco le lavorazioni da lavorare ruotate
|
-- inserisco le lavorazioni da lavorare ruotate
|
||||||
local nSideMchOk = 0
|
local nSideMchOk = 0
|
||||||
for i = 1, #vProc do
|
for i = 1, #vProc do
|
||||||
-- creo la lavorazione
|
-- creo la lavorazione
|
||||||
local Proc = vProc[i]
|
local Proc = vProc[i]
|
||||||
if Proc.Flg ~= 0 and Proc.Side then
|
if Proc.Flg ~= 0 and Proc.Side then
|
||||||
|
Proc.PrevDouble = nPrevDouble
|
||||||
|
nPrevDouble = Proc.Double
|
||||||
local bOk, sMsg, nNewPhase = AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, false, b3Raw, nOrd, sDownOrSideOrStd, bPreMove, vtMove, dCurrOvmT)
|
local bOk, sMsg, nNewPhase = AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, false, b3Raw, nOrd, sDownOrSideOrStd, bPreMove, vtMove, dCurrOvmT)
|
||||||
if not bOk then
|
if not bOk then
|
||||||
nTotErr = nTotErr + 1
|
nTotErr = nTotErr + 1
|
||||||
@@ -1967,11 +1987,15 @@ function BeamExec.ProcessFeatures()
|
|||||||
EgtSetInfo( nDispId, 'ORD', nOrd)
|
EgtSetInfo( nDispId, 'ORD', nOrd)
|
||||||
end
|
end
|
||||||
sDownOrSideOrStd = 'STD'
|
sDownOrSideOrStd = 'STD'
|
||||||
|
-- flag feature precedente in doppio
|
||||||
|
local nPrevDouble = 0
|
||||||
-- inserisco le lavorazioni non ribaltate della trave
|
-- inserisco le lavorazioni non ribaltate della trave
|
||||||
for i = 1, #vProc do
|
for i = 1, #vProc do
|
||||||
-- creo la lavorazione
|
-- creo la lavorazione
|
||||||
local Proc = vProc[i]
|
local Proc = vProc[i]
|
||||||
if Proc.Flg ~= 0 and ( not ( Proc.Down or Proc.Side) or BD.DOWN_HEAD or BD.TURN) then
|
if Proc.Flg ~= 0 and ( not ( Proc.Down or Proc.Side) or BD.DOWN_HEAD or BD.TURN) then
|
||||||
|
Proc.PrevDouble = nPrevDouble
|
||||||
|
nPrevDouble = Proc.Double
|
||||||
local bOk, sMsg, nNewPhase = AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, false, b3Raw, nOrd, sDownOrSideOrStd, nil, nil, dCurrOvmT)
|
local bOk, sMsg, nNewPhase = AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, false, b3Raw, nOrd, sDownOrSideOrStd, nil, nil, dCurrOvmT)
|
||||||
if not bOk then
|
if not bOk then
|
||||||
nTotErr = nTotErr + 1
|
nTotErr = nTotErr + 1
|
||||||
|
|||||||
+32
-29
@@ -1,4 +1,4 @@
|
|||||||
-- FacesBySaw.lua by Egaltech s.r.l. 2022/09/24
|
-- FacesBySaw.lua by Egaltech s.r.l. 2023/05/18
|
||||||
-- Gestione taglio con lama di feature con una o due facce
|
-- Gestione taglio con lama di feature con una o due facce
|
||||||
-- 2021/01/06 Cambiato limite per attacco Tg con lama e CalcLeadInOutGeom rinominata in CalcLeadInOutPerpGeom.
|
-- 2021/01/06 Cambiato limite per attacco Tg con lama e CalcLeadInOutGeom rinominata in CalcLeadInOutPerpGeom.
|
||||||
-- 2021/02/03 In taglio lama si accettano anche due lati con deviazione minore di 20deg.
|
-- 2021/02/03 In taglio lama si accettano anche due lati con deviazione minore di 20deg.
|
||||||
@@ -14,7 +14,8 @@
|
|||||||
-- 2022/06/29 DS In MakeTwo modificato controllo facce dirette verso il basso.
|
-- 2022/06/29 DS In MakeTwo modificato controllo facce dirette verso il basso.
|
||||||
-- 2022/09/08 In MakeOne aggiunto argomento bForceInvert per poter forzare l'inversione del percorso.
|
-- 2022/09/08 In MakeOne aggiunto argomento bForceInvert per poter forzare l'inversione del percorso.
|
||||||
-- 2023/02/13 Migliorata la direzione di lavoro della lama in modo da essere tendenzialmente opposta all'avanzamento.
|
-- 2023/02/13 Migliorata la direzione di lavoro della lama in modo da essere tendenzialmente opposta all'avanzamento.
|
||||||
-- 2023/04/20 Alcune modifiche per gestire tagli con faceuse parallelo
|
-- 2023/04/20 Alcune modifiche per gestire tagli con faceuse parallelo.
|
||||||
|
-- 2023/05/18 Imposto in ogni caso dVzLimDwnUp prima anche di bDownHead.
|
||||||
|
|
||||||
-- Tabella per definizione modulo
|
-- Tabella per definizione modulo
|
||||||
local FacesBySaw = {}
|
local FacesBySaw = {}
|
||||||
@@ -44,8 +45,10 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
nOrthoOpposite = Par5
|
nOrthoOpposite = Par5
|
||||||
vtOrthO = BL.GetVersRef( Par5)
|
vtOrthO = BL.GetVersRef( Par5)
|
||||||
end
|
end
|
||||||
-- verifico se testa da sotto
|
-- verifico se testa da sotto oppure se lavorazione sotto con testa da sopra
|
||||||
|
if not dVzLimDwnUp then dVzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN, vtOrthO) end
|
||||||
local bDownHead = ( dVzLimDwnUp and dVzLimDwnUp < - 1.5)
|
local bDownHead = ( dVzLimDwnUp and dVzLimDwnUp < - 1.5)
|
||||||
|
local bDownUp = ( vtN:getZ() < dVzLimDwnUp)
|
||||||
-- linea o bilinea di lavorazione (qui uso nOrthoOpposite per ripetere esattamente il calcolo del Mach)
|
-- linea o bilinea di lavorazione (qui uso nOrthoOpposite per ripetere esattamente il calcolo del Mach)
|
||||||
local ptP1, ptPm, ptP2, vtV1, vtV2, dLen, dWidth = EgtSurfTmFacetOppositeSide( nSurfId, nFacet, BL.GetVersRef( nOrthoOpposite), GDB_ID.ROOT)
|
local ptP1, ptPm, ptP2, vtV1, vtV2, dLen, dWidth = EgtSurfTmFacetOppositeSide( nSurfId, nFacet, BL.GetVersRef( nOrthoOpposite), GDB_ID.ROOT)
|
||||||
if not dLen or dLen < 1.1 or not dWidth or dWidth < 1.1 then
|
if not dLen or dLen < 1.1 or not dWidth or dWidth < 1.1 then
|
||||||
@@ -54,24 +57,24 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
return true, ''
|
return true, ''
|
||||||
end
|
end
|
||||||
vtV1 = - vtV1
|
vtV1 = - vtV1
|
||||||
-- verifico se lavorazione con lama sotto e testa sopra
|
|
||||||
if not dVzLimDwnUp then dVzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN, vtOrthO) end
|
|
||||||
local bDownUp = ( vtN:getZ() < dVzLimDwnUp)
|
|
||||||
-- verifico se la lama ruota in senso antiorario
|
-- verifico se la lama ruota in senso antiorario
|
||||||
if not EgtMdbSetCurrMachining( sCutting) then
|
if not EgtMdbSetCurrMachining( sCutting) then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
local bIsSawCCW = EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) < 0
|
local bIsSawCCW = ( EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) < 0)
|
||||||
local bInvert = bForceInvert
|
local bInvert = bForceInvert
|
||||||
-- se la lama ruota in senso antiorario inverto la direzione di lavorazione, per avere rotazione lama opposta a avanzamento
|
-- se la lama ruota in senso antiorario inverto la direzione di lavorazione, per avere rotazione lama opposta a avanzamento
|
||||||
if bInvert == nil and bIsSawCCW and not bDownUp then
|
if bInvert == nil then
|
||||||
if ( ptP2:getZ() > ptP1:getZ() + 100 * GEO.EPS_SMALL) then
|
if not BD.TURN then
|
||||||
bInvert = false
|
if bIsSawCCW and not bDownUp then
|
||||||
|
bInvert = ( ptP2:getZ() < ptP1:getZ() + 100 * GEO.EPS_SMALL)
|
||||||
|
else
|
||||||
|
bInvert = ( ptP2:getZ() < ptP1:getZ() - 100 * GEO.EPS_SMALL)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
bInvert = true
|
local vtTmp = ptP2 - ptP1 ; vtTmp:normalize()
|
||||||
|
bInvert = ( ( vtOrthO:getX() > 0.1 and vtTmp:getX() < -0.1) or ( vtOrthO:getX() < -0.1 and vtTmp:getX() > 0.1))
|
||||||
end
|
end
|
||||||
elseif bInvert == nil then
|
|
||||||
bInvert = ( ptP2:getZ() < ptP1:getZ() - 100 * GEO.EPS_SMALL)
|
|
||||||
end
|
end
|
||||||
if bInvert then
|
if bInvert then
|
||||||
ptP1, ptP2 = ptP2, ptP1
|
ptP1, ptP2 = ptP2, ptP1
|
||||||
@@ -148,15 +151,13 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
local b3Box = BBox3d( b3Raw)
|
local b3Box = BBox3d( b3Raw)
|
||||||
b3Box:expand( dCutSic)
|
b3Box:expand( dCutSic)
|
||||||
local dCutDeltaN, dCutDeltaX = dCutOffset, dCutExtra
|
local dCutDeltaN, dCutDeltaX = dCutOffset, dCutExtra
|
||||||
-- per lavorazioni parallele, nel calcolo dei lead in e out gli offset vanno invertiti
|
-- per lavorazioni parallele, nel calcolo dei Lead-In e Out gli offset vanno invertiti
|
||||||
if (
|
if ( nFaceUse == MCH_MILL_FU.PARAL_DOWN or
|
||||||
nFaceUse == MCH_MILL_FU.PARAL_DOWN or
|
nFaceUse == MCH_MILL_FU.PARAL_TOP or
|
||||||
nFaceUse == MCH_MILL_FU.PARAL_TOP or
|
nFaceUse == MCH_MILL_FU.PARAL_FRONT or
|
||||||
nFaceUse == MCH_MILL_FU.PARAL_FRONT or
|
nFaceUse == MCH_MILL_FU.PARAL_BACK or
|
||||||
nFaceUse == MCH_MILL_FU.PARAL_BACK or
|
nFaceUse == MCH_MILL_FU.PARAL_LEFT or
|
||||||
nFaceUse == MCH_MILL_FU.PARAL_LEFT or
|
nFaceUse == MCH_MILL_FU.PARAL_RIGHT) then
|
||||||
nFaceUse == MCH_MILL_FU.PARAL_RIGHT
|
|
||||||
) then
|
|
||||||
dCutDeltaN, dCutDeltaX = dCutDeltaX, dCutDeltaN
|
dCutDeltaN, dCutDeltaX = dCutDeltaX, dCutDeltaN
|
||||||
end
|
end
|
||||||
local ptP1act = ptP1 + vtN * dCutDeltaN
|
local ptP1act = ptP1 + vtN * dCutDeltaN
|
||||||
@@ -170,7 +171,7 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
local dLenLi2 = abs( dLi2Tang)
|
local dLenLi2 = abs( dLi2Tang)
|
||||||
local dLenLo2 = abs( dLo2Tang)
|
local dLenLo2 = abs( dLo2Tang)
|
||||||
-- scelgo l'attacco più conveniente (se non taglio praticamente longitudinale)
|
-- scelgo l'attacco più conveniente (se non taglio praticamente longitudinale)
|
||||||
local bTurnTang
|
local bLioTang
|
||||||
local Ktp = 1.1
|
local Ktp = 1.1
|
||||||
if BD.KIOTP then Ktp = BD.KIOTP end
|
if BD.KIOTP then Ktp = BD.KIOTP end
|
||||||
if ( not bDownUp or abs( vtTg:getY()) > 0.5) and
|
if ( not bDownUp or abs( vtTg:getY()) > 0.5) and
|
||||||
@@ -179,10 +180,11 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
( ( abs( vtTg:getZ()) < 0.17 and ( vtV1:getZ() < -0.5 or vtV2:getZ() < -0.5) and not bDownHead) or
|
( ( abs( vtTg:getZ()) < 0.17 and ( vtV1:getZ() < -0.5 or vtV2:getZ() < -0.5) and not bDownHead) or
|
||||||
( abs( vtTg:getZ()) < 0.51 and b3Box:getDimZ() > 300 and BD.C_SIMM and BD.MAX_HEIGHT > 450 and b3Box:getDimX() > BD.LEN_SHORT_PART) or
|
( abs( vtTg:getZ()) < 0.51 and b3Box:getDimZ() > 300 and BD.C_SIMM and BD.MAX_HEIGHT > 450 and b3Box:getDimX() > BD.LEN_SHORT_PART) or
|
||||||
( abs( vtTg:getZ()) < 0.51 and ( dLenLi2 + dLenLo2) < ( dLenLi + dLenLo)) or Ktp * ( dLenLi2 + dLenLo2) < ( dLenLi + dLenLo)) then
|
( abs( vtTg:getZ()) < 0.51 and ( dLenLi2 + dLenLo2) < ( dLenLi + dLenLo)) or Ktp * ( dLenLi2 + dLenLo2) < ( dLenLi + dLenLo)) then
|
||||||
|
bLioTang = true
|
||||||
dLiTang, dLiPerp, dLoTang, dLoPerp = dLi2Tang, dLi2Perp, dLo2Tang, dLo2Perp
|
dLiTang, dLiPerp, dLoTang, dLoPerp = dLi2Tang, dLi2Perp, dLo2Tang, dLo2Perp
|
||||||
if BD.TURN then
|
if BD.TURN then
|
||||||
bTurnTang = true
|
local dMove = dist( ptP1, ptP2)
|
||||||
dLoTang = -( dLiTang + dAllStart - dAccStart + dAllEnd - dAccEnd + dLen)
|
dLoTang = -( dLiTang + dAllStart - dAccStart + dAllEnd - dAccEnd + dMove)
|
||||||
dLoPerp = BD.COLL_SIC
|
dLoPerp = BD.COLL_SIC
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -198,8 +200,9 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
nSCC = EgtIf( ( vtAux:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
|
nSCC = EgtIf( ( vtAux:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if bTurnTang then
|
if bLioTang then
|
||||||
local vtTest = EgtIf( bInvert, vtTg, -vtTg)
|
--local vtTest = EgtIf( bInvert, vtTg, -vtTg)
|
||||||
|
local vtTest = -vtTg
|
||||||
if abs( vtTest:getY()) > abs( vtTest:getZ()) then
|
if abs( vtTest:getY()) > abs( vtTest:getZ()) then
|
||||||
nSCC = EgtIf( vtTest:getY() > 0, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
|
nSCC = EgtIf( vtTest:getY() > 0, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
|
||||||
else
|
else
|
||||||
@@ -246,7 +249,7 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
-- imposto attacco/uscita
|
-- imposto attacco/uscita
|
||||||
EgtSetMachiningParam( MCH_MP.LITANG, dLiTang)
|
EgtSetMachiningParam( MCH_MP.LITANG, dLiTang)
|
||||||
EgtSetMachiningParam( MCH_MP.LIPERP, dLiPerp)
|
EgtSetMachiningParam( MCH_MP.LIPERP, dLiPerp)
|
||||||
if bTurnTang then EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.PERP_TG) end
|
if BD.TURN and bLioTang then EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.PERP_TG) end
|
||||||
EgtSetMachiningParam( MCH_MP.LOTANG, dLoTang)
|
EgtSetMachiningParam( MCH_MP.LOTANG, dLoTang)
|
||||||
EgtSetMachiningParam( MCH_MP.LOPERP, dLoPerp)
|
EgtSetMachiningParam( MCH_MP.LOPERP, dLoPerp)
|
||||||
-- imposto allungamenti iniziale e finale
|
-- imposto allungamenti iniziale e finale
|
||||||
@@ -332,7 +335,7 @@ function FacesBySaw.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, sCutType,
|
|||||||
local nOtInd = 3 - nUpInd
|
local nOtInd = 3 - nUpInd
|
||||||
-- metto in relazione la scelta facce con il confronto del versore Z con la scelta in base alla grandezza faccia
|
-- metto in relazione la scelta facce con il confronto del versore Z con la scelta in base alla grandezza faccia
|
||||||
-- se la faccia più grande è messa secondaria e il suo versore Z non è troppo negativo
|
-- se la faccia più grande è messa secondaria e il suo versore Z non è troppo negativo
|
||||||
if nOtInd == nBigInd and vtN[nBigInd]:getZ() > -0.5 and vtN[nSmaInd]:getZ() < 0.966 then
|
if nOtInd == nBigInd and (( vtN[nBigInd]:getZ() > -0.5 and vtN[nSmaInd]:getZ() < 0.966) or bDownHead) then
|
||||||
nUpInd = nBigInd
|
nUpInd = nBigInd
|
||||||
nOtInd = nSmaInd
|
nOtInd = nSmaInd
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
-- ProcessDrill.lua by Egaltech s.r.l. 2022/11/30
|
-- ProcessDrill.lua by Egaltech s.r.l. 2023/05/11
|
||||||
-- Gestione calcolo forature per Travi
|
-- Gestione calcolo forature per Travi
|
||||||
-- 2021/04/14 DS Corretta gestione Invert con testa da sotto. Migliorato calcolo ingombro portautensile.
|
-- 2021/04/14 DS Corretta gestione Invert con testa da sotto. Migliorato calcolo ingombro portautensile.
|
||||||
-- 2021/05/03 DS Su macchina con testa da sotto aggiunta possibilità di fare fori verticali metà sopra e l'altra sotto.
|
-- 2021/05/03 DS Su macchina con testa da sotto aggiunta possibilità di fare fori verticali metà sopra e l'altra sotto.
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
-- 2022/10/25 Nella funzione Split aggiunto il controllo che le facce di ingresso e uscita siano differenti (potrebbe succedere per fori molto corti). Modifica importatore in futuro.
|
-- 2022/10/25 Nella funzione Split aggiunto il controllo che le facce di ingresso e uscita siano differenti (potrebbe succedere per fori molto corti). Modifica importatore in futuro.
|
||||||
-- 2022/11/23 Aggiunta la gestione dei fori con angolo < 30 gradi, per i quali si usa la testa della macchina per accorciare l'utile di lavoro.
|
-- 2022/11/23 Aggiunta la gestione dei fori con angolo < 30 gradi, per i quali si usa la testa della macchina per accorciare l'utile di lavoro.
|
||||||
-- 2022/12/28 Implementata gestione forature in doppio
|
-- 2022/12/28 Implementata gestione forature in doppio
|
||||||
|
-- 2023/05/11 Se lavorazione in doppio e precedente no oppure di tipo diverso, forzo risalita a Zmax.
|
||||||
|
|
||||||
-- Tabella per definizione modulo
|
-- Tabella per definizione modulo
|
||||||
local ProcessDrill = {}
|
local ProcessDrill = {}
|
||||||
@@ -494,6 +495,9 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
|
|||||||
-- se lavorazione in doppio
|
-- se lavorazione in doppio
|
||||||
if Proc.Double and Proc.Double > 0 then
|
if Proc.Double and Proc.Double > 0 then
|
||||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', Proc.Double)
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', Proc.Double)
|
||||||
|
if Proc.Double ~= Proc.PrevDouble then
|
||||||
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'StartZmax', 2)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
||||||
-- eseguo
|
-- eseguo
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
-- ProcessDtMortise.lua by Egaltech s.r.l. 2023/03/28
|
-- ProcessDtMortise.lua by Egaltech s.r.l. 2023/05/11
|
||||||
-- Gestione calcolo mortase a coda di rondine per Travi
|
-- Gestione calcolo mortase a coda di rondine per Travi
|
||||||
-- 2021/04/08 Aggiunto controllo massimo materiale lavorabile dalla fresa.
|
-- 2021/04/08 Aggiunto controllo massimo materiale lavorabile dalla fresa.
|
||||||
-- 2021/04/08 Miglioria scelta lavorazione in presenza di testa da sotto.
|
-- 2021/04/08 Miglioria scelta lavorazione in presenza di testa da sotto.
|
||||||
@@ -11,6 +11,7 @@
|
|||||||
-- 2022/12/28 Aggiunta gestione lavorazione in doppio.
|
-- 2022/12/28 Aggiunta gestione lavorazione in doppio.
|
||||||
-- 2023/03/06 Aggiunta forzatura ingresso fuori dal grezzo con pocket.
|
-- 2023/03/06 Aggiunta forzatura ingresso fuori dal grezzo con pocket.
|
||||||
-- 2023/03/28 Corretto calcolo larghezza mortasa quando più larga che lunga.
|
-- 2023/03/28 Corretto calcolo larghezza mortasa quando più larga che lunga.
|
||||||
|
-- 2023/05/11 Se lavorazione in doppio e precedente no oppure di tipo diverso, forzo risalita a Zmax.
|
||||||
|
|
||||||
-- Tabella per definizione modulo
|
-- Tabella per definizione modulo
|
||||||
local ProcessDtMortise = {}
|
local ProcessDtMortise = {}
|
||||||
@@ -289,7 +290,7 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
EgtOutLog( sErr)
|
EgtOutLog( sErr)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
-- se con tasca, la lavoro
|
-- se con tasca, la lavoro (mai in doppio)
|
||||||
if bPocket then
|
if bPocket then
|
||||||
-- recupero il contorno della tasca (seconda curva ausiliaria)
|
-- recupero il contorno della tasca (seconda curva ausiliaria)
|
||||||
local sVal = EgtGetInfo( Proc.Id, 'AUXID')
|
local sVal = EgtGetInfo( Proc.Id, 'AUXID')
|
||||||
@@ -350,6 +351,8 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
nSCC = EgtIf( vtAx:getZ() > 0, MCH_SCC.ADIR_ZP, MCH_SCC.ADIR_ZM)
|
nSCC = EgtIf( vtAx:getZ() > 0, MCH_SCC.ADIR_ZP, MCH_SCC.ADIR_ZM)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- flag di mirror precedente aggiornabile localmente
|
||||||
|
local nMyPrevDouble = Proc.PrevDouble
|
||||||
-- se parametro interno abilitato e il percorso non è chiuso, aggiungo percorso e lavorazione antischeggia
|
-- se parametro interno abilitato e il percorso non è chiuso, aggiungo percorso e lavorazione antischeggia
|
||||||
if bMakeAntiSplitPath and not EgtCurveIsClosed( AuxId) then
|
if bMakeAntiSplitPath and not EgtCurveIsClosed( AuxId) then
|
||||||
-- recupero gruppo per geometria addizionale
|
-- recupero gruppo per geometria addizionale
|
||||||
@@ -431,6 +434,10 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
-- se lavorazione in doppio
|
-- se lavorazione in doppio
|
||||||
if Proc.Double and Proc.Double > 0 then
|
if Proc.Double and Proc.Double > 0 then
|
||||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', Proc.Double)
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', Proc.Double)
|
||||||
|
if Proc.Double ~= nMyPrevDouble then
|
||||||
|
nMyPrevDouble = Proc.Double
|
||||||
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'StartZmax', 2)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
||||||
-- eseguo
|
-- eseguo
|
||||||
@@ -516,6 +523,10 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
-- se lavorazione in doppio
|
-- se lavorazione in doppio
|
||||||
if Proc.Double and Proc.Double > 0 then
|
if Proc.Double and Proc.Double > 0 then
|
||||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', Proc.Double)
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', Proc.Double)
|
||||||
|
if Proc.Double ~= nMyPrevDouble then
|
||||||
|
nMyPrevDouble = Proc.Double
|
||||||
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'StartZmax', 2)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
||||||
-- eseguo
|
-- eseguo
|
||||||
|
|||||||
+30
-22
@@ -1,4 +1,4 @@
|
|||||||
-- ProcessLongCut.lua by Egaltech s.r.l. 2023/03/06
|
-- ProcessLongCut.lua by Egaltech s.r.l. 2023/05/19
|
||||||
-- Gestione calcolo taglio longitudinale per Travi
|
-- Gestione calcolo taglio longitudinale per Travi
|
||||||
-- 2021/02/03 Corretto FaceUse con fresa orizzontale su taglio orizzontale.
|
-- 2021/02/03 Corretto FaceUse con fresa orizzontale su taglio orizzontale.
|
||||||
-- 2021/05/18 Possibile taglio con lama anche di fianco su macchina con testa da sotto.
|
-- 2021/05/18 Possibile taglio con lama anche di fianco su macchina con testa da sotto.
|
||||||
@@ -26,6 +26,8 @@
|
|||||||
-- 2023/03/15 Modifica alla lavorazione ulteriore con sega a catena per togliere il codolo e lasciare solo dei punti di supporto.
|
-- 2023/03/15 Modifica alla lavorazione ulteriore con sega a catena per togliere il codolo e lasciare solo dei punti di supporto.
|
||||||
-- 2023/03/22 Correzione a SCC lama a seguito di modifiche alle direzioni dei tagli.
|
-- 2023/03/22 Correzione a SCC lama a seguito di modifiche alle direzioni dei tagli.
|
||||||
-- 2023/04/17 Gestione unificata SCC tramite funzione apposita GetSCC
|
-- 2023/04/17 Gestione unificata SCC tramite funzione apposita GetSCC
|
||||||
|
-- 2023/05/03 Corretto SCC in caso di asse utensile allineato con Z.
|
||||||
|
-- 2023/05/19 Migliorato calcolo e verifica affondamento per lavorazione con lama con codolo in mezzo.
|
||||||
|
|
||||||
-- Tabella per definizione modulo
|
-- Tabella per definizione modulo
|
||||||
local ProcessLongCut = {}
|
local ProcessLongCut = {}
|
||||||
@@ -115,10 +117,10 @@ function GetProcessSpecificVectors( Proc, nFacet, nFaceUse, bInvert, sMachining)
|
|||||||
vtTg = ptP2 - ptP1 ; vtTg:normalize()
|
vtTg = ptP2 - ptP1 ; vtTg:normalize()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local bWsRight = ( not bInvert)
|
local bWsRight = ( bInvert)
|
||||||
-- Versore di riferimento
|
-- Versore di riferimento
|
||||||
local vtRef = Vector3d( vtTg)
|
local vtRef = Vector3d( vtTg)
|
||||||
vtRef:rotate( vtN, EgtIf( bInvert, -90, 90))
|
vtRef:rotate( vtN, 90)
|
||||||
-- Versore esterno
|
-- Versore esterno
|
||||||
local vtOut = vtRef - vtRef * vtTg * vtTg ; vtOut:normalize()
|
local vtOut = vtRef - vtRef * vtTg * vtTg ; vtOut:normalize()
|
||||||
-- Versore ausiliario (direzione braccio)
|
-- Versore ausiliario (direzione braccio)
|
||||||
@@ -165,17 +167,17 @@ function ProcessLongCut.GetSCC( Proc, nFacet, sMachining, nFaceUse, bInvert, nCu
|
|||||||
elseif nFaceUse == MCH_MILL_FU.ORTHO_BACK or ( nFaceUse == MCH_MILL_FU.PARAL_DOWN or nFaceUse == MCH_MILL_FU.PARAL_TOP) then
|
elseif nFaceUse == MCH_MILL_FU.ORTHO_BACK or ( nFaceUse == MCH_MILL_FU.PARAL_DOWN or nFaceUse == MCH_MILL_FU.PARAL_TOP) then
|
||||||
nSCC = MCH_SCC.ADIR_YM
|
nSCC = MCH_SCC.ADIR_YM
|
||||||
end
|
end
|
||||||
-- se Fast e asse utensile diretto come Z posiziono l'aggregato in Y per avere il minore ingombro possibile
|
-- se Fast e fresa con asse utensile diretto come Z posiziono l'aggregato in Ym per avere il minore ingombro possibile
|
||||||
elseif not BD.C_SIMM and AreSameVectorApprox( vtN, Z_AX()) then
|
elseif not BD.C_SIMM and not bIsBlade and AreSameVectorApprox( vtN, Z_AX()) then
|
||||||
nSCC = MCH_SCC.ADIR_YM
|
nSCC = MCH_SCC.ADIR_YM
|
||||||
-- se Fast ( escluso caso speciale con taglio non passante e inclinato in X) posiziono l'aggregato in X per ottimizzare il pinzaggio
|
-- se Fast ( escluso caso speciale con taglio non passante e inclinato in X e escluso caso con lama esattamente diretta in Z) posiziono l'aggregato in X per ottimizzare il pinzaggio
|
||||||
elseif not BD.C_SIMM and ( not ( bCustUseBlade and abs(vtN:getX()) > 0.009 + 5 * GEO.EPS_SMALL) or not bIsBlade) then
|
elseif not BD.C_SIMM and ( not ( bCustUseBlade and abs(vtN:getX()) > 0.001) or not bIsBlade) and not ( bIsBlade and AreSameVectorApprox( vtN, Z_AX())) then
|
||||||
if bAreCuttingStepsTowardsHead then
|
if bAreCuttingStepsTowardsHead then
|
||||||
nSCC = EgtIf( ( not ( nCuttingStep == 1 or nCuttingStep == nC - 1)), MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM)
|
nSCC = EgtIf( ( not ( nCuttingStep == 1 or nCuttingStep == nC - 1)), MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM)
|
||||||
else
|
else
|
||||||
nSCC = EgtIf( ( not ( nCuttingStep == 1 or nCuttingStep == nC - 1)), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP)
|
nSCC = EgtIf( ( not ( nCuttingStep == 1 or nCuttingStep == nC - 1)), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP)
|
||||||
end
|
end
|
||||||
-- per Fast ( caso speciale con taglio non passante e inclinato in X)
|
-- per Fast ( caso speciale con taglio non passante e inclinato in X e caso lama diretta esattamente in Z)
|
||||||
elseif not BD.C_SIMM then
|
elseif not BD.C_SIMM then
|
||||||
local vtAux = GetProcessSpecificVectors( Proc, nFacet, nFaceUse, bInvert, sMachining)
|
local vtAux = GetProcessSpecificVectors( Proc, nFacet, nFaceUse, bInvert, sMachining)
|
||||||
if bCustUseBlade then
|
if bCustUseBlade then
|
||||||
@@ -187,7 +189,12 @@ function ProcessLongCut.GetSCC( Proc, nFacet, sMachining, nFaceUse, bInvert, nCu
|
|||||||
end
|
end
|
||||||
-- per PF o simili e lama con aggregato lo posiziono per stare il più lontano possibile dalla trave
|
-- per PF o simili e lama con aggregato lo posiziono per stare il più lontano possibile dalla trave
|
||||||
elseif ( bIsBlade and bIsTopBlade) then
|
elseif ( bIsBlade and bIsTopBlade) then
|
||||||
nSCC = MCH_SCC.ADIR_XP
|
if abs( vtN:getX()) > 0.001 then
|
||||||
|
local vtAux = GetProcessSpecificVectors( Proc, nFacet, nFaceUse, bInvert, sMachining)
|
||||||
|
nSCC = EgtIf( ( vtAux:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
|
||||||
|
else
|
||||||
|
nSCC = MCH_SCC.ADIR_XP
|
||||||
|
end
|
||||||
-- per PF o simili e lama senza aggregato o fresa non do alcuna preferenza
|
-- per PF o simili e lama senza aggregato o fresa non do alcuna preferenza
|
||||||
else
|
else
|
||||||
nSCC = MCH_SCC.NONE
|
nSCC = MCH_SCC.NONE
|
||||||
@@ -719,11 +726,12 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus
|
|||||||
local dToolDiam = 0
|
local dToolDiam = 0
|
||||||
local dThick = 0
|
local dThick = 0
|
||||||
local dMaxDepth = 0
|
local dMaxDepth = 0
|
||||||
|
local dMaxVertDepth = 0
|
||||||
local sCuttingDn
|
local sCuttingDn
|
||||||
local dToolDiamDn = 0
|
local dToolDiamDn = 0
|
||||||
local dThickDn = 0
|
local dThickDn = 0
|
||||||
local dMaxDepthDn = 0
|
local dMaxDepthDn = 0
|
||||||
-- recupero la lavorazione
|
-- recupero eventuale lavorazione con lama su testa da sotto
|
||||||
if bCanUseUnderBlade then
|
if bCanUseUnderBlade then
|
||||||
sCuttingDn = ML.FindCutting( 'HeadSide_H2', false, true)
|
sCuttingDn = ML.FindCutting( 'HeadSide_H2', false, true)
|
||||||
if not sCuttingDn then
|
if not sCuttingDn then
|
||||||
@@ -741,6 +749,7 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- recupero eventuale lavorazione con lama
|
||||||
if bCanUseBlade then
|
if bCanUseBlade then
|
||||||
local sCutType = EgtIf( BD.USE_LONGCUT, 'LongCut', 'HeadSide')
|
local sCutType = EgtIf( BD.USE_LONGCUT, 'LongCut', 'HeadSide')
|
||||||
sCutting = ML.FindCutting( sCutType)
|
sCutting = ML.FindCutting( sCutType)
|
||||||
@@ -756,6 +765,7 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus
|
|||||||
dToolDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dToolDiam
|
dToolDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dToolDiam
|
||||||
dThick = EgtTdbGetCurrToolParam( MCH_TP.THICK) or dThick
|
dThick = EgtTdbGetCurrToolParam( MCH_TP.THICK) or dThick
|
||||||
dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth
|
dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth
|
||||||
|
dMaxVertDepth = dMaxDepth - ( BD.DECR_VERT_CUT or 0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -910,25 +920,23 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus
|
|||||||
end
|
end
|
||||||
-- si percorrono i lati alto e basso della faccia
|
-- si percorrono i lati alto e basso della faccia
|
||||||
-- calcolo quanto è l'affondamento del taglio
|
-- calcolo quanto è l'affondamento del taglio
|
||||||
local dOffsetTopBlade = ( dWidth + dDimStrip) / 2
|
local dMainMaxDepth = EgtIf( abs( vtN:getY()) < 1e-6, dMaxDepth, dMaxVertDepth)
|
||||||
local dOffsetDownBlade = ( dWidth + dDimStrip) / 2
|
local dOtherMaxDept = EgtIf( bCanUseUnderBlade, dMaxDepthDn, dMainMaxDepth)
|
||||||
if bFinishWithChainSaw then
|
local dCoeff = min( ( dWidth - dDimStrip) / ( dMainMaxDepth + dOtherMaxDept), 1)
|
||||||
dOffsetTopBlade = dWidth / 2
|
local dOffsetTopBlade = dWidth - dCoeff * dMainMaxDepth
|
||||||
dOffsetDownBlade = dWidth / 2
|
local dOffsetDownBlade = dWidth - dCoeff * dOtherMaxDept
|
||||||
end
|
|
||||||
local nStepDownBlade = 1
|
local nStepDownBlade = 1
|
||||||
local dStepDownBlade = dWidth - dOffsetDownBlade
|
local dStepDownBlade = dOtherMaxDept
|
||||||
-- se lama da sotto verifico se la componente Y della profondità di taglio supera la capacità della lama
|
-- se lama da sotto verifico se la componente Y della profondità di taglio supera la capacità della lama
|
||||||
if ( nSide == -1 or abs(nSide) == 2) and bCanUseUnderBlade and (( dWidth - dDimStrip) / 2) > dMaxDepthDn then
|
if ( nSide == -1 or abs(nSide) == 2) and bCanUseUnderBlade and ( dOffsetTopBlade - dDimStrip) > dOtherMaxDept then
|
||||||
if bFinishWithChainSaw then
|
if bFinishWithChainSaw then
|
||||||
dOffsetTopBlade = max( dWidth - dMaxDepth + ( BD.DECR_VERT_CUT or 0), dOffsetTopBlade)
|
|
||||||
dOffsetDownBlade = max( dWidth - dMaxDepthDn, dOffsetDownBlade)
|
|
||||||
local dHCutDownBlade = dWidth - dOffsetDownBlade
|
local dHCutDownBlade = dWidth - dOffsetDownBlade
|
||||||
local dMaxStepDownBlade = 64
|
local dMaxStepDownBlade = 80
|
||||||
nStepDownBlade = ceil( dHCutDownBlade / dMaxStepDownBlade)
|
nStepDownBlade = ceil( dHCutDownBlade / dMaxStepDownBlade)
|
||||||
dStepDownBlade = dHCutDownBlade / nStepDownBlade
|
dStepDownBlade = dHCutDownBlade / nStepDownBlade
|
||||||
else
|
else
|
||||||
local sErr = 'Error : side depth is bigger than underneath blade cut depth'
|
local dDelta = dWidth - dDimStrip - ( dMainMaxDepth + dOtherMaxDept)
|
||||||
|
local sErr = 'Error : side depth is bigger than total cut depth (Diff=' .. EgtNumToString( dDelta)..')'
|
||||||
EgtOutLog( sErr)
|
EgtOutLog( sErr)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -125,9 +125,9 @@ function ProcessLong2Cut.GetLongFacesCount( Proc)
|
|||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local function MakeSideFace( nId, nFac, nSideLimitingFace, sMilling, dToolDiam, nL2CSide, bIsAnyFaceUpsideDown)
|
local function MakeSideFace( nId, nFac, nSideLimitingFace, nInd, sMilling, dToolDiam, nL2CSide, bIsAnyFaceUpsideDown)
|
||||||
if ( not BD.DOWN_HEAD or not BD.TURN) and bIsAnyFaceUpsideDown then
|
if ( not BD.DOWN_HEAD and not BD.TURN) and bIsAnyFaceUpsideDown then
|
||||||
EgtOutLog( 'Long2Cut : side face finishing skipped , down head required')
|
EgtOutLog( 'Long2Cut : side face finishing skipped, down head required')
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
-- inserisco la lavorazione
|
-- inserisco la lavorazione
|
||||||
@@ -141,8 +141,15 @@ local function MakeSideFace( nId, nFac, nSideLimitingFace, sMilling, dToolDiam,
|
|||||||
-- aggiungo geometria
|
-- aggiungo geometria
|
||||||
EgtSetMachiningGeometry( {{ nId, nFac}})
|
EgtSetMachiningGeometry( {{ nId, nFac}})
|
||||||
-- lato di lavoro e inversione
|
-- lato di lavoro e inversione
|
||||||
EgtSetMachiningParam( MCH_MP.INVERT, false)
|
if BD.TURN and
|
||||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
|
( ( nSideLimitingFace == 1 and nInd == EgtIf( nL2CSide ~= -1, 2, 1)) or
|
||||||
|
( nSideLimitingFace == -1 and nInd == EgtIf( nL2CSide ~= -1, 1, 2))) then
|
||||||
|
EgtSetMachiningParam( MCH_MP.INVERT, true)
|
||||||
|
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
|
||||||
|
else
|
||||||
|
EgtSetMachiningParam( MCH_MP.INVERT, false)
|
||||||
|
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
|
||||||
|
end
|
||||||
-- uso della faccia
|
-- uso della faccia
|
||||||
local nFaceUse = EgtIf( nSideLimitingFace == 1, MCH_MILL_FU.ORTHO_RIGHT, MCH_MILL_FU.ORTHO_LEFT)
|
local nFaceUse = EgtIf( nSideLimitingFace == 1, MCH_MILL_FU.ORTHO_RIGHT, MCH_MILL_FU.ORTHO_LEFT)
|
||||||
EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse)
|
EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse)
|
||||||
@@ -151,8 +158,11 @@ local function MakeSideFace( nId, nFac, nSideLimitingFace, sMilling, dToolDiam,
|
|||||||
-- attacco e uscita
|
-- attacco e uscita
|
||||||
EgtSetMachiningParam( MCH_MP.LIPERP, 0)
|
EgtSetMachiningParam( MCH_MP.LIPERP, 0)
|
||||||
EgtSetMachiningParam( MCH_MP.LITANG, dToolDiam / 2 + 30)
|
EgtSetMachiningParam( MCH_MP.LITANG, dToolDiam / 2 + 30)
|
||||||
EgtSetMachiningParam( MCH_MP.LOPERP, 2)
|
EgtSetMachiningParam( MCH_MP.LOPERP, 5)
|
||||||
EgtSetMachiningParam( MCH_MP.LOTANG, 10)
|
EgtSetMachiningParam( MCH_MP.LOTANG, 10)
|
||||||
|
if BD.TURN then
|
||||||
|
EgtSetMachiningParam( MCH_MP.LOELEV, 10)
|
||||||
|
end
|
||||||
-- se faccia di fianco e testa da sotto, aumento la sicurezza
|
-- se faccia di fianco e testa da sotto, aumento la sicurezza
|
||||||
if nL2CSide == 0 and BD.DOWN_HEAD then
|
if nL2CSide == 0 and BD.DOWN_HEAD then
|
||||||
EgtSetMachiningParam( MCH_MP.STARTPOS, 80)
|
EgtSetMachiningParam( MCH_MP.STARTPOS, 80)
|
||||||
@@ -1095,6 +1105,9 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
|||||||
local nPos = EgtIf( i == 1, j, nC - j + 1)
|
local nPos = EgtIf( i == 1, j, nC - j + 1)
|
||||||
local dSal = EgtIf( nPos == 1, - EgtIf( i == nIni, dStartDist, dEndDist), - EgtIf( i == nIni, dStartAccDist, dEndAccDist) - ( nPos - 2) * dC + EgtIf( bSide, dOverLapExtend, 0))
|
local dSal = EgtIf( nPos == 1, - EgtIf( i == nIni, dStartDist, dEndDist), - EgtIf( i == nIni, dStartAccDist, dEndAccDist) - ( nPos - 2) * dC + EgtIf( bSide, dOverLapExtend, 0))
|
||||||
local dEal = EgtIf( nPos == nC, - EgtIf( i == nIni, dEndDist, dStartDist), - EgtIf( i == nIni, dEndAccDist, dStartAccDist) - ( nC - nPos - 1) * dC + EgtIf( bSide, dOverLapExtend, 0))
|
local dEal = EgtIf( nPos == nC, - EgtIf( i == nIni, dEndDist, dStartDist), - EgtIf( i == nIni, dEndAccDist, dStartAccDist) - ( nC - nPos - 1) * dC + EgtIf( bSide, dOverLapExtend, 0))
|
||||||
|
if nSide == -1 then
|
||||||
|
dSal, dEal = dEal, dSal
|
||||||
|
end
|
||||||
-- Posizione braccio portatesta
|
-- Posizione braccio portatesta
|
||||||
local nSCC = MCH_SCC.NONE
|
local nSCC = MCH_SCC.NONE
|
||||||
if not BD.C_SIMM then
|
if not BD.C_SIMM then
|
||||||
@@ -1178,11 +1191,11 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
|||||||
end
|
end
|
||||||
-- se facce principali convesse, eventuale lavorazione della faccia limitante l'inizio (a destra)
|
-- se facce principali convesse, eventuale lavorazione della faccia limitante l'inizio (a destra)
|
||||||
if bConvex and j == 1 and not bStartFixed then
|
if bConvex and j == 1 and not bStartFixed then
|
||||||
MakeSideFace( Proc.Id, tFaceLong[vOrd[i]], 1, sMilling, dToolDiam, nSide, bIsAnyFaceUpsideDown)
|
MakeSideFace( Proc.Id, tFaceLong[vOrd[i]], 1, i, sMilling, dToolDiam, nSide, bIsAnyFaceUpsideDown)
|
||||||
end
|
end
|
||||||
-- se facce principali convesse, eventuale lavorazione della faccia limitante la fine (a sinistra)
|
-- se facce principali convesse, eventuale lavorazione della faccia limitante la fine (a sinistra)
|
||||||
if bConvex and j == nC and not bEndFixed then
|
if bConvex and j == nC and not bEndFixed then
|
||||||
MakeSideFace( Proc.Id, tFaceLong[vOrd[i]], -1, sMilling, dToolDiam, nSide, bIsAnyFaceUpsideDown)
|
MakeSideFace( Proc.Id, tFaceLong[vOrd[i]], -1, i, sMilling, dToolDiam, nSide, bIsAnyFaceUpsideDown)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1620,11 +1633,11 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
|||||||
end
|
end
|
||||||
-- se facce principali convesse, eventuale lavorazione della faccia limitante l'inizio (a destra)
|
-- se facce principali convesse, eventuale lavorazione della faccia limitante l'inizio (a destra)
|
||||||
if bConvex and j == 1 and not bStartFixed and bRemoveToolRadius then
|
if bConvex and j == 1 and not bStartFixed and bRemoveToolRadius then
|
||||||
MakeSideFace( Proc.Id, tFaceLong[vOrd[i]], 1, sMilling, dToolDiam)
|
MakeSideFace( Proc.Id, tFaceLong[vOrd[i]], 1, i, sMilling, dToolDiam)
|
||||||
end
|
end
|
||||||
-- se facce principali convesse, eventuale lavorazione della faccia limitante la fine (a sinistra)
|
-- se facce principali convesse, eventuale lavorazione della faccia limitante la fine (a sinistra)
|
||||||
if bConvex and j == nC and not bEndFixed and bRemoveToolRadius then
|
if bConvex and j == nC and not bEndFixed and bRemoveToolRadius then
|
||||||
MakeSideFace( Proc.Id, tFaceLong[vOrd[i]], -1, sMilling, dToolDiam)
|
MakeSideFace( Proc.Id, tFaceLong[vOrd[i]], -1, i, sMilling, dToolDiam)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
-- ProcessMortise.lua by Egaltech s.r.l. 2022/12/12
|
-- ProcessMortise.lua by Egaltech s.r.l. 2023/05/11
|
||||||
-- Gestione calcolo mortase per Travi
|
-- Gestione calcolo mortase per Travi
|
||||||
-- 2021/07/20 Aggiunta gestione rinvio angolare su FAST.
|
-- 2021/07/20 Aggiunta gestione rinvio angolare su FAST.
|
||||||
-- 2021/12/01 Se frontale aggiungo taglio con Grp e Proc di vero taglio (per aggiornare ingombro di testa /coda).
|
-- 2021/12/01 Se frontale aggiungo taglio con Grp e Proc di vero taglio (per aggiornare ingombro di testa /coda).
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
-- 2022/12/12 Migliorato controllo necessità CleanCorners.
|
-- 2022/12/12 Migliorato controllo necessità CleanCorners.
|
||||||
-- 2023/01/31 Aggiunta gestione lavorazione in doppio.
|
-- 2023/01/31 Aggiunta gestione lavorazione in doppio.
|
||||||
-- 2023/01/31 Creata la funzione ConvertToClosedCurve (parte della ProcessMortise.Make) e spostata in BeamLib.
|
-- 2023/01/31 Creata la funzione ConvertToClosedCurve (parte della ProcessMortise.Make) e spostata in BeamLib.
|
||||||
|
-- 2023/05/11 Se lavorazione in doppio e precedente no oppure di tipo diverso, forzo risalita a Zmax.
|
||||||
|
|
||||||
-- Tabella per definizione modulo
|
-- Tabella per definizione modulo
|
||||||
local ProcessMortise = {}
|
local ProcessMortise = {}
|
||||||
@@ -506,6 +507,9 @@ function ProcessMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
-- se lavorazione in doppio
|
-- se lavorazione in doppio
|
||||||
if Proc.Double and Proc.Double > 0 then
|
if Proc.Double and Proc.Double > 0 then
|
||||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', Proc.Double)
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', Proc.Double)
|
||||||
|
if Proc.Double ~= Proc.PrevDouble then
|
||||||
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'StartZmax', 2)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
||||||
-- eseguo
|
-- eseguo
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
-- ProcessRidgeLap.lua by Egaltech s.r.l. 2021/09/10
|
-- ProcessRidgeLap.lua by Egaltech s.r.l. 2023/05/18
|
||||||
-- Gestione calcolo mezzolegno di testa per Travi
|
-- Gestione calcolo mezzolegno di testa per Travi
|
||||||
|
|
||||||
-- Tabella per definizione modulo
|
-- Tabella per definizione modulo
|
||||||
@@ -26,8 +26,8 @@ end
|
|||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- Classificazione della feature
|
-- Classificazione della feature
|
||||||
function ProcessRidgeLap.Classify( Proc, b3Raw)
|
function ProcessRidgeLap.Classify( Proc, b3Raw)
|
||||||
-- se PF con testa da sotto, ammessa qualunque orientazione
|
-- se PF con testa da sotto oppure TURN, ammessa qualunque orientazione
|
||||||
if BD.C_SIMM and BD.DOWN_HEAD then
|
if ( BD.C_SIMM and BD.DOWN_HEAD) or BD.TURN then
|
||||||
return true, false
|
return true, false
|
||||||
end
|
end
|
||||||
-- Se più corta del limite si può fare anche da sotto
|
-- Se più corta del limite si può fare anche da sotto
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
-- ProcessRoundArch.lua by Egaltech s.r.l. 2021/01/29
|
-- ProcessRoundArch.lua by Egaltech s.r.l. 2023/05/18
|
||||||
-- Gestione calcolo archi per Travi
|
-- Gestione calcolo archi per Travi
|
||||||
|
|
||||||
-- Tabella per definizione modulo
|
-- Tabella per definizione modulo
|
||||||
@@ -93,6 +93,8 @@ function ProcessRoundArch.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
EgtOutLog( sErr)
|
EgtOutLog( sErr)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
|
-- normale alla superficie nel mezzo
|
||||||
|
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, Proc.Fct // 2, GDB_RT.GLOB)
|
||||||
-- recupero e verifico l'entità curva
|
-- recupero e verifico l'entità curva
|
||||||
local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i')
|
local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i')
|
||||||
if AuxId then AuxId = AuxId + Proc.Id end
|
if AuxId then AuxId = AuxId + Proc.Id end
|
||||||
@@ -222,13 +224,27 @@ function ProcessRoundArch.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
|
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
|
||||||
end
|
end
|
||||||
-- posizione braccio porta testa
|
-- posizione braccio porta testa
|
||||||
if Proc.Head then
|
local nSCC = MCH_SCC.NONE
|
||||||
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_XP)
|
if not BD.C_SIMM and not BD.TURN then
|
||||||
elseif Proc.Tail then
|
if Proc.Head then
|
||||||
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_XM)
|
nSCC = MCH_SCC.ADIR_XP
|
||||||
elseif AreSameOrOppositeVectorApprox( vtExtr, Z_AX()) then
|
elseif Proc.Tail then
|
||||||
EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YP)
|
nSCC = MCH_SCC.ADIR_XM
|
||||||
|
elseif AreSameOrOppositeVectorApprox( vtExtr, Z_AX()) then
|
||||||
|
nSCC = MCH_SCC.ADIR_YP
|
||||||
|
end
|
||||||
|
elseif BD.TURN then
|
||||||
|
if vtN:getZ() > 0.707 then
|
||||||
|
nSCC = MCH_SCC.ADIR_ZP
|
||||||
|
elseif vtN:getZ() < -0.707 then
|
||||||
|
nSCC = MCH_SCC.ADIR_ZM
|
||||||
|
elseif vtN:getY() > 0.707 then
|
||||||
|
nSCC = MCH_SCC.ADIR_YP
|
||||||
|
elseif vtN:getY() < -0.707 then
|
||||||
|
nSCC = MCH_SCC.ADIR_YM
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
||||||
-- eseguo
|
-- eseguo
|
||||||
if not ML.ApplyMachining( true, false) then
|
if not ML.ApplyMachining( true, false) then
|
||||||
local _, sErr = EgtGetLastMachMgrError()
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
-- ProcessSplit.lua by Egaltech s.r.l. 2023/04/04
|
-- ProcessSplit.lua by Egaltech s.r.l. 2023/05/09
|
||||||
-- Gestione calcolo tagli di separazione per Travi
|
-- Gestione calcolo tagli di separazione per Travi
|
||||||
-- 2022/05/31 Aggiunta gestione sezioni alte e larghe con taglio con sega a catena seguito da rifinitura con lama (aggiunta funzione MakeSplitByChainSaw); gestione eventuale creazione nuova fase dall'interno della Make.
|
-- 2022/05/31 Aggiunta gestione sezioni alte e larghe con taglio con sega a catena seguito da rifinitura con lama (aggiunta funzione MakeSplitByChainSaw); gestione eventuale creazione nuova fase dall'interno della Make.
|
||||||
-- 2022/06/10 Per sezioni alte e larghe aggiunta gestione finitura in base a sovramateriale e a parametro Q05 dell' eventuale lavorazione sostituita.
|
-- 2022/06/10 Per sezioni alte e larghe aggiunta gestione finitura in base a sovramateriale e a parametro Q05 dell' eventuale lavorazione sostituita.
|
||||||
@@ -9,7 +9,8 @@
|
|||||||
-- 2022/11/16 Correzioni per travi larghe
|
-- 2022/11/16 Correzioni per travi larghe
|
||||||
-- 2022/11/30 Correzione per tagli su grandi sezioni (dopo taglio con sega a catena senza finitura aggiungeva uno split con lama).
|
-- 2022/11/30 Correzione per tagli su grandi sezioni (dopo taglio con sega a catena senza finitura aggiungeva uno split con lama).
|
||||||
-- 2023/04/04 Modifiche per travi con sezioni molto grandi e materiale inferiore allo spessore lama.
|
-- 2023/04/04 Modifiche per travi con sezioni molto grandi e materiale inferiore allo spessore lama.
|
||||||
-- 2023/04/20 Per travi alte aggiunti tagli orizzontali per ridurre le dimensioni degli scarti
|
-- 2023/04/20 Per travi alte aggiunti tagli orizzontali per ridurre le dimensioni degli scarti.
|
||||||
|
-- 2023/05/09 Aggiunta richiesta risalita preliminare a Zmax per tagli da sopra su macchine PF e ONE.
|
||||||
|
|
||||||
-- Tabella per definizione modulo
|
-- Tabella per definizione modulo
|
||||||
local ProcessSplit = {}
|
local ProcessSplit = {}
|
||||||
@@ -526,6 +527,10 @@ function ProcessSplit.Make( Proc, nPhase, nRawId, nPartId, nOrd, sDownOrSideOrSt
|
|||||||
else
|
else
|
||||||
sNotes = EgtIf( i == 1, 'Cut;', 'Precut;')
|
sNotes = EgtIf( i == 1, 'Cut;', 'Precut;')
|
||||||
end
|
end
|
||||||
|
-- se primo taglio da sopra e PF o ONE richiedo risalita preliminare a Zmax
|
||||||
|
if i == nCuts and bHorizCut and BD.C_SIMM and not BD.DOWN_HEAD then
|
||||||
|
sNotes = EgtSetValInNotes( sNotes, 'StartZmax', 2)
|
||||||
|
end
|
||||||
local bOk, sErr = Fbs.MakeOne( Proc.Id, 0, sCutting, dSawDiam, nOrthoOpposite, nil, dCutExtra, BD.CUT_SIC, dCutOffset, dAccStart, dAccEnd, sNotes, b3Raw)
|
local bOk, sErr = Fbs.MakeOne( Proc.Id, 0, sCutting, dSawDiam, nOrthoOpposite, nil, dCutExtra, BD.CUT_SIC, dCutOffset, dAccStart, dAccEnd, sNotes, b3Raw)
|
||||||
if not bOk then return false, sErr end
|
if not bOk then return false, sErr end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,5 +1,16 @@
|
|||||||
==== Beam Update Log ====
|
==== Beam Update Log ====
|
||||||
|
|
||||||
|
Versione 2.5e2 (04/05/2023)
|
||||||
|
- Modif : Piccola modifica a SCC per LongCut derivanti da Cut
|
||||||
|
|
||||||
|
Versione 2.5e1 (03/05/2023)
|
||||||
|
- Modif : in TS3v7 tolleranza su quote sezione portata a 0.1 mm
|
||||||
|
- Fixed : Corretto SCC in caso di asse utensile allineato con Z [Ticket #1232]
|
||||||
|
|
||||||
|
Versione 2.5d2 (20/04/2023)
|
||||||
|
- Added : nei tagli di testa e coda, nel caso di travi alte, aggiunti tagli orizzontali per diminuire la dimensione degli sfridi [Ticket #1175, #1185]
|
||||||
|
- Modif : unificata gestione lato testa per tagli longitudinali [Ticket #1167].
|
||||||
|
|
||||||
Versione 2.5d1 (06/04/23)
|
Versione 2.5d1 (06/04/23)
|
||||||
- Added : in svuotatura aggiunta possibilità di impostare una distanza di sicurezza minima su attacco da lato aperto
|
- Added : in svuotatura aggiunta possibilità di impostare una distanza di sicurezza minima su attacco da lato aperto
|
||||||
- Modif : in split per travi con sezioni molto grandi e materiale inferiore allo spessore lama, miglioramenti volti ad evitare collisioni prevedibili
|
- Modif : in split per travi con sezioni molto grandi e materiale inferiore allo spessore lama, miglioramenti volti ad evitare collisioni prevedibili
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
-- Version.lua by Egaltech s.r.l. 2023/04/05
|
-- Version.lua by Egaltech s.r.l. 2023/05/18
|
||||||
-- Gestione della versione di Beam
|
-- Gestione della versione di Beam
|
||||||
|
|
||||||
NAME = 'Beam'
|
NAME = 'Beam'
|
||||||
VERSION = '2.5d2'
|
VERSION = '2.5e4'
|
||||||
MIN_EXE = '2.5c1'
|
MIN_EXE = '2.5c1'
|
||||||
|
|||||||
Reference in New Issue
Block a user