- a WallExec aggiunta rimozione operazioni se legate a lavorazioni specchiate

- modifiche varie per forzare sideGroove in caso la lavorazione principale sia una tasca cieca che guarda in alto
- modificata MakeMoreFaces per contemplare lavorazioni in doppio
This commit is contained in:
luca.mazzoleni
2023-08-04 18:57:04 +02:00
parent 57ed0d934f
commit 5ff950015e
2 changed files with 76 additions and 21 deletions
+36 -19
View File
@@ -2212,30 +2212,23 @@ local function MakeByPocketing( Proc, nFacet, nRawId, b3Raw, bCheckQPar)
dDiam = min( dDiam, WD.MAXDIAM_POCK_CORNER or 1000)
end
-- recupero la lavorazione
local bUseDElevToFindPocketing = true
local sPocketing = WM.FindPocketing( 'Pocket', dDiam, dElev)
if not sPocketing then
bUseDElevToFindPocketing = false
sPocketing = WM.FindPocketing( 'Pocket', dDiam)
if Proc.Double and Proc.Double == 2 then
local sPocketingBackup = sPocketing
sPocketing = WM.FindPocketing( 'Pocket', dDiam, nil, nil, 'H1')
if not IsMachiningOkForDouble( sPocketing) then
Proc.Double = 0
sPocketing = sPocketingBackup
end
end
if not sPocketing then
local sErr = 'Error : pocketing not found in library'
EgtOutLog( sErr)
return false, sErr
end
else
if Proc.Double and Proc.Double == 2 then
local sPocketingBackup = sPocketing
sPocketing = WM.FindPocketing( 'Pocket', dDiam, dElev, nil, 'H1')
if not IsMachiningOkForDouble( sPocketing) then
Proc.Double = 0
sPocketing = sPocketingBackup
end
end
if Proc.Double and Proc.Double == 2 then
local sPocketingBackup = sPocketing
sPocketing = WM.FindPocketing( 'Pocket', dDiam, EgtIf( bUseDElevToFindPocketing, dElev, nil), nil, 'H1')
if not IsMachiningOkForDouble( sPocketing) then
Proc.Double = 0
sPocketing = sPocketingBackup
end
end
-- recupero i dati dell'utensile
@@ -2681,6 +2674,17 @@ local function MakeMoreFaces( Proc, nRawId, b3Raw)
local dSideElev = WL.GetFaceElevation( Proc.Id, nFacInd)
-- se abilitata lavorazione ribasso con fresa di fianco e parametro Q03 abilitato
local sMillOnSide, dTMaxDepth, dMaxMat, dDiam = WM.FindMilling( 'SideMill', nil, nil, nil, nil, min( dH, dV), nil, dSideElev)
-- se Proc è settata per essere specchiata cerco la lavorazione adatta e verifico possa essere effettivamente specchiata
local bDoubleMillOnSide = false
if Proc.Double and Proc.Double == 2 then
local sMillOnSideBackup = sMillOnSide
sMillOnSide = WM.FindMilling( 'SideMill', nil, nil, nil, nil, min( dH, dV), nil, dSideElev, 'H1')
if IsMachiningOkForDouble( sMillOnSide) then
bDoubleMillOnSide = true
else
sMillOnSide = sMillOnSideBackup
end
end
local _, nUseMillOnSide = EvaluateQParam( Proc)
-- se ho abilitata lavorazione di fresa di fianco
if Proc.Fct >= 3 and sMillOnSide and nUseMillOnSide >= 1 and not bIsSmallSlot then
@@ -2721,14 +2725,27 @@ local function MakeMoreFaces( Proc, nRawId, b3Raw)
nSinglePass = 2
bMakeFirstGroove = false
end
return MakeSideGrooveByMill( Proc, nFacInd, nRawId, b3Raw, EgtIf( dMaxDepthOnSide, sMillOnSide, nil), dMaxDepthOnSide, bMakeFirstGroove, nil, nil, bLikeAsMakeFirstGroove, nSinglePass)
return MakeSideGrooveByMill( Proc, nFacInd, nRawId, b3Raw, EgtIf( dMaxDepthOnSide, sMillOnSide, nil), dMaxDepthOnSide, bMakeFirstGroove, nil, nil, bLikeAsMakeFirstGroove, nSinglePass, nil, bDoubleMillOnSide)
end
else
-- fresatura (se definita); se disponibile, cerco di usare un utensile che non lavori al limite della capacità di sottosquadro
local sMilling = WM.FindMilling( 'SideGroove', nil, nil, nil, nil, min( dH, dV), nil, 1.2 * dSideElev)
local dSideElevMultiplier = 1.2
local sMilling = WM.FindMilling( 'SideGroove', nil, nil, nil, nil, min( dH, dV), nil, dSideElevMultiplier * dSideElev)
-- se non ho trovato un utensile un po' più grande del sottosquadro richiesto, passo alla ricerca standard
if not sMilling then
sMilling = WM.FindMilling( 'SideGroove', nil, nil, nil, nil, min( dH, dV), nil, dSideElev)
dSideElevMultiplier = 1
end
-- se Proc è settata per essere specchiata cerco la lavorazione adatta e verifico possa essere effettivamente specchiata
bDoubleMillOnSide = false
if Proc.Double and Proc.Double == 2 then
local sMillOnSideBackup = sMillOnSide
sMillOnSide = WM.FindMilling( 'SideGroove', nil, nil, nil, nil, min( dH, dV), nil, dSideElevMultiplier * dSideElev, 'H1')
if IsMachiningOkForDouble( sMillOnSide) then
bDoubleMillOnSide = true
else
sMillOnSide = sMillOnSideBackup
end
end
-- recupero i dati dell'utensile
local dMaxMat = 1000
@@ -2753,7 +2770,7 @@ local function MakeMoreFaces( Proc, nRawId, b3Raw)
end
end
if sMilling and dElev < dMaxDepthOnSide then
return MakeSideGrooveByMill( Proc, nFacInd, nRawId, b3Raw, sMilling)
return MakeSideGrooveByMill( Proc, nFacInd, nRawId, b3Raw, sMilling, nil, nil, nil, nil, nil, nil, nil, bDoubleMillOnSide)
-- altrimenti sega a catena
else
return MakeByChainSaw( Proc, nFacInd, nRawId, b3Raw, dElev, dH, dV)
+40 -2
View File
@@ -673,6 +673,7 @@ local function SetMirroredFeatures( vProc, b3Raw)
local nMirrorId
local dYMirrorAx
local dDeltaZ
local bIsMirrorTowardsBottom = false
for j = 1, #vProc do
local ProcMirror = vProc[j]
if ProcMirror.TopologyLongName == Proc.TopologyLongName and ProcMirror.Id ~= Proc.Id and ProcMirror.Flg ~= 0 then
@@ -709,6 +710,7 @@ local function SetMirroredFeatures( vProc, b3Raw)
local ptOnMirrorAx = ( Proc.Box:getCenter() + ProcMirror.Box:getCenter()) / 2
dYMirrorAx = ptOnMirrorAx:getY() - b3Tab:getMin():getY()
dDeltaZ = ProcMirror.Box:getMax():getZ() - Proc.Box:getMax():getZ()
bIsMirrorTowardsBottom = ProcMirror.AffectedFaces.Bottom
end
end
end
@@ -721,6 +723,11 @@ local function SetMirroredFeatures( vProc, b3Raw)
Proc.MirrorAx = dYMirrorAx
-- Offset Z tra le feature
Proc.MirrorDeltaZ = dDeltaZ
-- se sono groove cieche e la principale guarda su e l'altra guarda giù, la principale va trattata come sidegroove in accordo con la seconda
if ( Proc.TopologyLongName == 'Groove-Blind-RightAngles-Parallel-3' or Proc.TopologyLongName == 'Groove-Blind-RightAngles-Parallel-4') and
Proc.AffectedFaces.Top and bIsMirrorTowardsBottom then
Proc.Stype = 2
end
end
end
@@ -783,7 +790,7 @@ function WallExec.ProcessFeatures()
else
table.insert( Stats, {Err=0, Msg='', Rot=0, CutId=Proc.CutId, TaskId=Proc.TaskId})
end
elseif not Proc.Double then
elseif not Proc.Double then
local sMsg = 'Feature not machinable by orientation'
table.insert( Stats, {Err=1, Msg=sMsg, Rot=0, CutId=Proc.CutId, TaskId=Proc.TaskId})
end
@@ -795,7 +802,38 @@ function WallExec.ProcessFeatures()
-- ELIMINAZIONE LAVORAZIONI MIRROR IN BASE A SETTAGGIO MACHININGTODELETE IN PROC
-- VERIFICA E UPDATE NOTE PER LAVORAZIONI IN CUI SI CONTROLLA SE I PERCORSI SONO SPECCHIATI
-------
-- setto quali sono le lavorazioni da disattivare perchè specchiate di lavorazioni in doppio
local vProcToDisable = {}
for i = 1, #vProc do
local Proc = vProc[i]
if Proc.Double and Proc.Double > 0 then
for j = 1, #vProc do
local ProcMirror = vProc[j]
if Proc.MirrorId == ProcMirror.Id then
table.insert( vProcToDisable, ProcMirror.Id)
end
end
end
end
-- cancello le operazioni legate a lavorazioni specchiate
local nOperId = EgtGetNextOperation( EgtGetPhaseDisposition( 1))
while nOperId do
EgtSetCurrMachining( nOperId)
local nOperationProcIds = EgtGetMachiningGeometry()
local nOperationProcId = EgtIf( #nOperationProcIds[1] > 1, nOperationProcIds[1][1], nOperationProcIds[1])
local nCurrentOperId = nOperId
for i = 1, #vProcToDisable do
local ProcId = vProcToDisable[i]
if nOperationProcId == ProcId then
nOperId = EgtGetNextOperation( nOperId)
EgtRemoveOperation(nCurrentOperId)
break
end
end
if nCurrentOperId == nOperId then
nOperId = EgtGetNextOperation( nOperId)
end
end
-- se macchina pareti
if not WD.BEAM_MACHINE then
-- riordino le lavorazioni tra tutti i pezzi