- in Squaring migliorie varie
- aggiunta rimozione lavorazioni fuori dall'area di squadratura - in WallExec squadratura suddivisa prima e dopo le altre lavorazioni - in FreeContour aggiunta funzione IsFaceOutsideSquaring per evitare di lavorare le facce che finiscono fuori dall'area di squadratura
This commit is contained in:
+83
-51
@@ -178,7 +178,7 @@ end
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
-- *** Inserimento delle lavorazioni nelle pareti ***
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
function WallExec.CollectFeatures( PartId, b3Raw)
|
||||
function WallExec.CollectFeatures( PartId, b3Raw, b3Squaring)
|
||||
-- recupero le feature
|
||||
local vProc = {}
|
||||
local LayerId = {}
|
||||
@@ -227,6 +227,14 @@ function WallExec.CollectFeatures( PartId, b3Raw)
|
||||
end
|
||||
if Proc.Box and not Proc.Box:isEmpty() then
|
||||
table.insert( vProc, Proc)
|
||||
-- se squadratura sui pezzi, si annullano le lavorazioni esterne al box di squadratura
|
||||
if b3Squaring then
|
||||
local b3SquaringReduced = BBox3d( b3Squaring)
|
||||
b3SquaringReduced:expand( -0.1)
|
||||
if not OverlapsXY( Proc.Box, b3SquaringReduced) then
|
||||
Proc.Flag = 0
|
||||
end
|
||||
end
|
||||
-- se foro
|
||||
if Drill.Identify( Proc) then
|
||||
-- assegno diametro e facce di ingresso e uscita (dati tabelle sempre per riferimento)
|
||||
@@ -352,7 +360,7 @@ local function PrintFeatures( vProc)
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
local function AddFeatureMachining( Proc, nRawId, b3Raw, vNLO)
|
||||
local function AddFeatureMachining( Proc, nRawId, b3Raw, vNLO, b3Squaring)
|
||||
local bOk = true
|
||||
local sErr = ''
|
||||
EgtOutLog( ' * Process ' .. tostring( Proc.Id) .. ' *', 1)
|
||||
@@ -395,7 +403,7 @@ local function AddFeatureMachining( Proc, nRawId, b3Raw, vNLO)
|
||||
-- se contorno libero, outline o apertura ( 0/3/4-250/251/252-X)
|
||||
elseif FreeContour.Identify( Proc) then
|
||||
-- esecuzione contorno libero
|
||||
bOk, sErr = FreeContour.Make( Proc, nRawId, b3Raw, vNLO)
|
||||
bOk, sErr = FreeContour.Make( Proc, nRawId, b3Raw, vNLO, b3Squaring)
|
||||
-- se feature custom (Variant)
|
||||
elseif Variant.Identify( Proc) then
|
||||
-- esecuzione
|
||||
@@ -1079,25 +1087,38 @@ local function SetMirroredOperations()
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
local function AddSquaring( sSquaringTool, RawPart, vPart)
|
||||
local nFirstOperationId = EgtGetNextOperation( EgtGetPhaseDisposition( 1))
|
||||
local dMachiningDepth = RawPart.b3:getDimZ()
|
||||
local function CalculateSquaring( sSquaringTool, RawPart, vPart)
|
||||
local dRawPartHeight = RawPart.b3:getDimZ()
|
||||
local bOk
|
||||
local sMsg = ''
|
||||
local SquaringTools = {}
|
||||
local Geometry = {}
|
||||
local OperationsId = {}
|
||||
local SquaringParameters = {}
|
||||
local b3Squaring
|
||||
|
||||
SquaringTools = Squaring.GetTools()
|
||||
bOk = Squaring.AreToolsOk( sSquaringTool, SquaringTools, dMachiningDepth)
|
||||
bOk = Squaring.AreToolsOk( sSquaringTool, SquaringTools, dRawPartHeight)
|
||||
if not bOk then
|
||||
sMsg = 'Squaring failed: cannot find matching tools'
|
||||
return false, sMsg
|
||||
return false, {}, nil, sMsg
|
||||
end
|
||||
|
||||
local SquaringGeometries, b3Squaring = Squaring.CreateGeometry( sSquaringTool, SquaringTools, RawPart, vPart)
|
||||
SquaringParameters, b3Squaring = Squaring.CalculateParameters( sSquaringTool, SquaringTools, RawPart, vPart)
|
||||
if not SquaringParameters or next( SquaringParameters) == nil then
|
||||
sMsg = 'Squaring failed: cannot calculate parameters'
|
||||
return false, {}, nil, sMsg
|
||||
end
|
||||
|
||||
bOk, sMsg, OperationsId = Squaring.AddMachinings( SquaringGeometries, b3Squaring, nFirstOperationId)
|
||||
return true, SquaringParameters, b3Squaring, sMsg
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
local function AddSquaring( SquaringParameters, b3Squaring)
|
||||
local nFirstOperationId = EgtGetNextOperation( EgtGetPhaseDisposition( 1))
|
||||
local bOk
|
||||
local sMsg = ''
|
||||
local OperationsId = {}
|
||||
|
||||
bOk, sMsg, OperationsId = Squaring.AddMachinings( SquaringParameters, b3Squaring, nFirstOperationId)
|
||||
if not bOk then
|
||||
for i = 1, #OperationsId do
|
||||
EgtRemoveOperation( i)
|
||||
@@ -1108,10 +1129,6 @@ local function AddSquaring( sSquaringTool, RawPart, vPart)
|
||||
|
||||
Squaring.AddScrapRemoval( nFirstOperationId)
|
||||
|
||||
if WD.SQUARING_TYPE == 2 then
|
||||
Squaring.RemoveExternalMachinings( Geometry)
|
||||
end
|
||||
|
||||
return true, sMsg
|
||||
end
|
||||
|
||||
@@ -1132,11 +1149,57 @@ function WallExec.ProcessFeatures()
|
||||
table.insert( vPart, {Id=nPartId, Box=b3Solid})
|
||||
nPartId = EgtGetNextPartInRawPart( nPartId)
|
||||
end
|
||||
|
||||
-- calcolo i parametri della squadratura, se richiesta
|
||||
local SquaringParameters = {}
|
||||
local b3Squaring
|
||||
if WD.SQUARING_TYPE and WD.SQUARING_TYPE > 0 then
|
||||
local RawPart = { nId = nRawId, b3 = b3Raw}
|
||||
local bOk, sMsg
|
||||
if type( WD.SQUARING_TOOL) ~= "number" then
|
||||
WD.SQUARING_TOOL = 0
|
||||
end
|
||||
|
||||
if WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 1 then
|
||||
bOk, SquaringParameters, b3Squaring, sMsg = CalculateSquaring( 'DoubleDiskmill', RawPart, vPart)
|
||||
end
|
||||
if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 2) then
|
||||
-- attualmente non gestito, va modificata la configurazione macchina e non si sa se sia gestito in macchina (PLC)
|
||||
bOk = false
|
||||
sMsg = 'Squaring not possible : double blade + diskmill not supported'
|
||||
--SquaringParameters, b3Squaring, sMsg = CalculateSquaring( 'DoubleDiskmillAndBlade', RawPart)
|
||||
end
|
||||
if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 3) then
|
||||
bOk, SquaringParameters, b3Squaring, sMsg = CalculateSquaring( 'DoubleBlade', RawPart, vPart)
|
||||
end
|
||||
if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 4) then
|
||||
bOk, SquaringParameters, b3Squaring, sMsg = CalculateSquaring( 'Diskmill', RawPart, vPart)
|
||||
end
|
||||
if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 5) then
|
||||
bOk, SquaringParameters, b3Squaring, sMsg = CalculateSquaring( 'Blade', RawPart, vPart)
|
||||
end
|
||||
if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 6) then
|
||||
bOk, SquaringParameters, b3Squaring, sMsg = CalculateSquaring( 'DoubleMill', RawPart, vPart)
|
||||
end
|
||||
if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 7) then
|
||||
bOk, SquaringParameters, b3Squaring, sMsg = CalculateSquaring( 'Mill', RawPart, vPart)
|
||||
end
|
||||
|
||||
if not bOk then
|
||||
nTotErr = nTotErr + 1
|
||||
table.insert( Stats, {Err=1, Msg=sMsg, Rot=0, CutId=0, TaskId=0})
|
||||
elseif sMsg and #sMsg > 0 then
|
||||
table.insert( Stats, {Err=-1, Msg=sMsg, Rot=0, CutId=0, TaskId=0})
|
||||
else
|
||||
table.insert( Stats, {Err=0, Msg='', Rot=0, CutId=0, TaskId=0})
|
||||
end
|
||||
end
|
||||
|
||||
-- raccolgo l'elenco delle feature da lavorare, ciclando sui pezzi
|
||||
local vProc = {}
|
||||
for i = 1, #vPart do
|
||||
-- recupero le feature di lavorazione della parete
|
||||
local vPartProc = WallExec.CollectFeatures( vPart[i].Id, b3Raw)
|
||||
local vPartProc = WallExec.CollectFeatures( vPart[i].Id, b3Raw, b3Squaring)
|
||||
vProc = EgtJoinTables( vProc, vPartProc)
|
||||
end
|
||||
-- classifico topologicamente le feature
|
||||
@@ -1163,7 +1226,7 @@ function WallExec.ProcessFeatures()
|
||||
-- creo la lavorazione
|
||||
local Proc = vProc[i]
|
||||
if Proc.Flg ~= 0 then
|
||||
local bOk, sMsg = AddFeatureMachining( Proc, nRawId, b3Raw, vNLO)
|
||||
local bOk, sMsg = AddFeatureMachining( Proc, nRawId, b3Raw, vNLO, b3Squaring)
|
||||
if not bOk then
|
||||
nTotErr = nTotErr + 1
|
||||
table.insert( Stats, {Err=1, Msg=sMsg, Rot=0, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||
@@ -1263,39 +1326,9 @@ function WallExec.ProcessFeatures()
|
||||
end
|
||||
-- ordinamento standard
|
||||
SortMachinings( nPhase, PrevMch)
|
||||
|
||||
-- squadratura, se richiesta
|
||||
if WD.SQUARING_TYPE and WD.SQUARING_TYPE > 0 then
|
||||
local RawPart = { nId = nRawId, b3 = b3Raw}
|
||||
local bOk, sMsg
|
||||
if type( WD.SQUARING_TOOL) ~= "number" then
|
||||
WD.SQUARING_TOOL = 0
|
||||
end
|
||||
|
||||
if WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 1 then
|
||||
bOk, sMsg = AddSquaring( 'DoubleDiskmill', RawPart, vPart)
|
||||
end
|
||||
if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 2) then
|
||||
-- attualmente non gestito, va modificata la configurazione macchina e non si sa se sia gestito in macchina (PLC)
|
||||
bOk = false
|
||||
sMsg = 'Squaring not possible : double blade + diskmill not supported'
|
||||
--bOk, sMsg = AddSquaring( 'DoubleDiskmillAndBlade', RawPart)
|
||||
end
|
||||
if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 3) then
|
||||
bOk, sMsg = AddSquaring( 'DoubleBlade', RawPart, vPart)
|
||||
end
|
||||
if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 4) then
|
||||
bOk, sMsg = AddSquaring( 'Diskmill', RawPart, vPart)
|
||||
end
|
||||
if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 5) then
|
||||
bOk, sMsg = AddSquaring( 'Blade', RawPart, vPart)
|
||||
end
|
||||
if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 6) then
|
||||
bOk, sMsg = AddSquaring( 'DoubleMill', RawPart, vPart)
|
||||
end
|
||||
if not bOk and ( WD.SQUARING_TOOL == 0 or WD.SQUARING_TOOL == 7) then
|
||||
bOk, sMsg = AddSquaring( 'Mill', RawPart, vPart)
|
||||
end
|
||||
if SquaringParameters and next( SquaringParameters) ~= nil then
|
||||
local bOk, sMsg = AddSquaring( SquaringParameters, b3Squaring)
|
||||
|
||||
if not bOk then
|
||||
nTotErr = nTotErr + 1
|
||||
@@ -1306,7 +1339,6 @@ function WallExec.ProcessFeatures()
|
||||
table.insert( Stats, {Err=0, Msg='', Rot=0, CutId=0, TaskId=0})
|
||||
end
|
||||
end
|
||||
|
||||
-- Aggiornamento finale di tutto
|
||||
if nGetPriorityFromBtl > 0 then
|
||||
InsertScrapRemoval( nPhase)
|
||||
|
||||
Reference in New Issue
Block a user