- aggiunta ricerca e esecuzione di fresature in doppio da percorso specchiato

- piccole correzioni
This commit is contained in:
luca.mazzoleni
2023-08-30 18:21:10 +02:00
parent 5524fbf0cb
commit d24a86bcdd
2 changed files with 89 additions and 22 deletions
+81 -14
View File
@@ -670,6 +670,7 @@ end
-- Controlla in vProc la presenza di feature da lavorare in doppio e, se trovate, ne setta i parametri
local function SetMirroredFeatures( vProc, b3Raw)
-- interasse minimo
local dMinimumDistanceMirroredFeatures = 780
local vPockets = {}
local vDrillings = {}
@@ -760,8 +761,7 @@ local function SetMirroredFeatures( vProc, b3Raw)
Proc.TopologyLongName == 'Groove-Blind-RightAngles-Parallel-4' and Proc.AffectedFaces.Top and Proc.AffectedFaces.Right and ProcMirror.AffectedFaces.Top and ProcMirror.AffectedFaces.Right or
Proc.TopologyLongName == 'Tunnel-Blind-RightAngles-Parallel-5' and Proc.AffectedFaces.Top and ProcMirror.AffectedFaces.Top
-- box delle stesse dimensioni
local bIsMirrorFeatureSameDimension = false
bIsMirrorFeatureSameDimension = abs( b3Proc:getDimX() - b3ProcMirror:getDimX()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) and
local bIsMirrorFeatureSameDimension = abs( b3Proc:getDimX() - b3ProcMirror:getDimX()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) and
abs( b3Proc:getDimY() - b3ProcMirror:getDimY()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) and
abs( b3Proc:getDimZ() - b3ProcMirror:getDimZ()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5)
-- box allineati in X
@@ -822,8 +822,7 @@ local function SetMirroredFeatures( vProc, b3Raw)
-- feature non disattivata e diversa da nCurrentDrilling
local bIsMirrorIdOk = ( Proc.Id ~= ProcMirror.Id and ProcMirror.Flg ~= 0)
-- box delle stesse dimensioni
local bIsMirrorFeatureSameDimension = false
bIsMirrorFeatureSameDimension = abs( b3Proc:getDimX() - b3ProcMirror:getDimX()) < ( WD.DOUBLE_HEAD_DRILLING_TOLERANCE or 0.1) and
local bIsMirrorFeatureSameDimension = abs( b3Proc:getDimX() - b3ProcMirror:getDimX()) < ( WD.DOUBLE_HEAD_DRILLING_TOLERANCE or 0.1) and
abs( b3Proc:getDimY() - b3ProcMirror:getDimY()) < ( WD.DOUBLE_HEAD_DRILLING_TOLERANCE or 0.1) and
abs( b3Proc:getDimZ() - b3ProcMirror:getDimZ()) < ( WD.DOUBLE_HEAD_DRILLING_TOLERANCE or 0.1)
-- box allineati in X
@@ -862,6 +861,82 @@ local function SetMirroredFeatures( vProc, b3Raw)
end
end
-------------------------------------------------------------------------------------------------------------
-- verifico e imposto le fresature da specchiare
local function SetMirroredOperations()
-- interasse minimo
local dMinimumDistanceMirroredOperations = 780
local nOperIdMaster = EgtGetNextOperation( EgtGetPhaseDisposition( 1))
while nOperIdMaster do
EgtSetCurrMachining( nOperIdMaster)
local nClId = EgtGetFirstNameInGroup( nOperIdMaster, 'CL')
local nPathId = EgtGetFirstInGroup( nClId or GDB_ID.NULL)
-- vettore direzione utensile lavorazione master
local vtTool = EgtGetInfo( nPathId, 'EXTR', 'v')
local ptMin = EgtGetInfo( nClId, 'MMIN', 'p')
local ptMax = EgtGetInfo( nClId, 'MMAX', 'p')
-- box percorso lavorazione master
local b3Operation = BBox3d( ptMin, ptMax)
local sMachining = EgtGetMachiningParam( MCH_MP.NAME, 's')
-- lavorazione master adatta alla specchiatura
local bIsMachiningOk = ( EgtGetMachiningParam( MCH_MP.TYPE) == MCH_OY.MILLING) and EgtGetOperationMode( nOperIdMaster) and WM.IsMachiningOkForDouble( sMachining)
local nOperIdMirror = EgtGetNextOperation( EgtGetPhaseDisposition( 1))
if bIsMachiningOk then
while nOperIdMirror do
EgtSetCurrMachining( nOperIdMirror)
local nClIdMirror = EgtGetFirstNameInGroup( nOperIdMirror, 'CL')
local nPathIdMirror = EgtGetFirstInGroup( nClIdMirror or GDB_ID.NULL)
-- vettore direzione utensile lavorazione mirror
local vtToolMirror = EgtGetInfo( nPathIdMirror, 'EXTR', 'v')
local ptMinMirror = EgtGetInfo( nClIdMirror, 'MMIN', 'p')
local ptMaxMirror = EgtGetInfo( nClIdMirror, 'MMAX', 'p')
-- box percorso lavorazione mirror
local b3OperationMirror = BBox3d( ptMinMirror, ptMaxMirror)
-- lavorazione mirror adatta alla specchiatura
local bIsMirrorMachiningOk = ( EgtGetMachiningParam( MCH_MP.TYPE) == MCH_OY.MILLING) and EgtGetOperationMode( nOperIdMirror) and nOperIdMaster ~= nOperIdMirror
-- lavorazione master più a sinistra
local bIsMirrorSideOk = ( b3OperationMirror:getCenter():getY() - b3Operation:getCenter():getY()) > ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5)
-- box delle stesse dimensioni
local bIsMirrorOperationSameDimension = abs( b3Operation:getDimX() - b3OperationMirror:getDimX()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) and
abs( b3Operation:getDimY() - b3OperationMirror:getDimY()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) and
abs( b3Operation:getDimZ() - b3OperationMirror:getDimZ()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5)
-- box allineati in X
local bIsMirrorBoxXAligned = abs( b3Operation:getCenter():getX() - b3OperationMirror:getCenter():getX()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) and
abs( b3Operation:getCenter():getX() - b3OperationMirror:getCenter():getX()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5)
-- box che non si intersecano
local bIsNotMirrorBoxOverlapping = not OverlapsXY( b3Operation, b3OperationMirror)
-- distanza minima tra le feature
local dYMinDistance = max( b3Operation:getMin():getY(), b3OperationMirror:getMin():getY()) - min( b3Operation:getMax():getY(), b3OperationMirror:getMax():getY())
local bIsMirrorOperationDistanceOk = dYMinDistance > dMinimumDistanceMirroredOperations + 10 * GEO.EPS_SMALL
-- vettori utensile specchiati
vtTool:mirror( Y_AX())
local bIsMirrorVectorOk = AreSameVectorApprox( vtTool, vtToolMirror)
-- se condizioni corrette, scrivo le note e cancello la specchiata
if bIsMirrorMachiningOk and bIsMirrorSideOk and bIsMirrorOperationSameDimension and bIsMirrorBoxXAligned and bIsNotMirrorBoxOverlapping and bIsMirrorOperationDistanceOk and bIsMirrorVectorOk then
-- calcolo asse di specchiatura
local dYMirrorAx
local b3Tab = EgtGetTableArea()
local ptOnMirrorAx = ( b3Operation:getCenter() + b3OperationMirror:getCenter()) / 2
dYMirrorAx = ptOnMirrorAx:getY() - b3Tab:getMin():getY()
EgtSetCurrMachining( nOperIdMaster)
-- leggo note esistenti
local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES)
-- aggiungo note per doppio
sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', 2)
sUserNotes = EgtSetValInNotes( sUserNotes, 'MirrorAx', dYMirrorAx)
-- scrivo le note della lavorazione
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
-- cancello l'operazione specchiata
EgtRemoveOperation( nOperIdMirror)
break
end
nOperIdMirror = EgtGetNextOperation( nOperIdMirror)
end
end
nOperIdMaster = EgtGetNextOperation( nOperIdMaster)
end
end
-------------------------------------------------------------------------------------------------------------
function WallExec.ProcessFeatures()
-- errori e stato
@@ -962,7 +1037,7 @@ function WallExec.ProcessFeatures()
local ProcId = vProcToDisable[i]
if nOperationProcId == ProcId then
nOperId = EgtGetNextOperation( nOperId)
EgtRemoveOperation(nCurrentOperId)
EgtRemoveOperation( nCurrentOperId)
break
end
end
@@ -971,15 +1046,7 @@ function WallExec.ProcessFeatures()
end
end
-- -- verifico le fresature da specchiare
-- local nClId = EgtGetFirstNameInGroup( nOperId, 'CL')
-- local nPathId = EgtGetFirstInGroup( nClId or GDB_ID.NULL)
-- local vtTool = EgtGetInfo( nPathId, 'EXTR', 'v')
-- local ptMin = EgtGetInfo( nClId, 'MMIN', 'p')
-- local ptMax = EgtGetInfo( nClId, 'MMAX', 'p')
-- local b3Operation = BBox3d( ptMin, ptMax)
-- local sMachining = EgtGetMachiningParam( MCH_MP.NAME, 's')
SetMirroredOperations()
-- se macchina pareti
if not WD.BEAM_MACHINE then