5f930e2e21
- Si è evitata la chiamata della DeepCopy su libreria Config delle strategie - se strategia forzata, si salva solo l'id. I parametri verranno letti dopo
105 lines
3.8 KiB
Lua
105 lines
3.8 KiB
Lua
-- Strategia: TAILCUT
|
|
-- Descrizione
|
|
-- Taglio di separazione
|
|
-- Feature: TailCut
|
|
|
|
-- carico librerie
|
|
local BeamLib = require( 'BeamLib')
|
|
local BeamData = require( 'BeamData')
|
|
local MachiningLib = require( 'MachiningLib')
|
|
local SPLITCUT = require( 'SPLITCUT')
|
|
local DiceCut = require( 'DiceCut')
|
|
|
|
-- Tabella per definizione modulo
|
|
local TAILCUT = {}
|
|
local Strategy = {}
|
|
|
|
|
|
-------------------------------------------------------------------------------------------------------------
|
|
local function MakeChamfer()
|
|
-- TODO funzionalità da aggiungere
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------------------------------
|
|
function TAILCUT.Make( bAddMachining, Proc, Part, CustomParameters)
|
|
local StrategyLib = {}
|
|
StrategyLib.Config = require( 'TAILCUT\\TAILCUTConfig')
|
|
Strategy.sName = StrategyLib.Config.sStrategyId
|
|
Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, StrategyLib.Config)
|
|
Strategy.SplitStrategy = {}
|
|
Strategy.Result = {}
|
|
Strategy.Machining = {}
|
|
Strategy.Result.sInfo = ''
|
|
local bAreAllMachiningsAdded = true
|
|
|
|
-- separazione solo se esiste grezzo successivo con pezzi o scaricabile
|
|
Strategy.bSplit = not( Part.bIsLastPart) or Part.dRestLength >= BeamData.dMinRaw
|
|
|
|
-- se devo fare split perchè c'è un grezzo da scaricare o un altro pezzo
|
|
if Strategy.bSplit then
|
|
Strategy.SplitStrategy, Strategy.Result = SPLITCUT.GetStrategy( Proc, Part, Strategy.Parameters)
|
|
|
|
-- se devo rimuovere tutto il restante
|
|
else
|
|
-- se abilitato, faccio tagli di PRECUT a zero (come SPLIT)
|
|
if Strategy.Parameters.bExecutePreCut then
|
|
Strategy.SplitStrategy, Strategy.Result = SPLITCUT.GetStrategy( Proc, Part, Strategy.Parameters)
|
|
-- se non faccio tagli PRECUT, imposto tabella Result direttamente. Non serve verificare che riesca a rimuovere il materiale extra
|
|
else
|
|
Strategy.Result.sStatus = 'Completed'
|
|
Strategy.Result.nCompletionIndex = 5
|
|
Strategy.Result.dMRR = 1
|
|
Strategy.Result.nQuality = 5
|
|
Strategy.Result.sInfo = 'Split not possible'
|
|
end
|
|
end
|
|
|
|
-- se devo applicare le lavorazioni
|
|
if bAddMachining then
|
|
|
|
-- inserimento smussi su spigoli del taglio
|
|
if Strategy.Parameters.bMakeChamfer then
|
|
MakeChamfer()
|
|
end
|
|
|
|
local MachiningsToAdd = {}
|
|
-- se devo fare split perchè c'è un grezzo da scaricare o un altro pezzo
|
|
if Strategy.bSplit then
|
|
Strategy.dOffset = 0
|
|
MachiningsToAdd = SPLITCUT.Execute( Proc, Part, Strategy)
|
|
-- se devo rimuovere tutto il restante
|
|
else
|
|
-- se abilitato, faccio tagli di PRECUT a zero (come SPLIT)
|
|
if Strategy.Parameters.bExecutePreCut then
|
|
Strategy.dOffset = Part.dRestLength
|
|
MachiningsToAdd = SPLITCUT.Execute( Proc, Part, Strategy)
|
|
end
|
|
|
|
-- TODO: funzione che calcola tagli data una faccia
|
|
-- BladeToWaste( Proc, Part)
|
|
|
|
local Faces = {}
|
|
local Face1 = {}
|
|
local Face2 = {}
|
|
local OptionalParameters = {}
|
|
Face1.ptCenter = Proc.Faces[1].ptCenter
|
|
Face1.vtN = Proc.Faces[1].vtN
|
|
OptionalParameters.b3BoxToDicing = Part.b3Raw
|
|
Faces = DiceCut.GetDice( Part, Face1, Face2, OptionalParameters)
|
|
end
|
|
|
|
-- aggiungo lavorazioni trovate alla lista generale
|
|
for i = 1, #MachiningsToAdd do
|
|
MachiningsToAdd[i].Splitting.sStage = 'Tail'
|
|
MachiningLib.AddMachinings( Proc, MachiningsToAdd[i].Splitting, MachiningsToAdd[i].AuxiliaryData)
|
|
end
|
|
|
|
return bAreAllMachiningsAdded, Strategy.Result
|
|
else
|
|
return nil, Strategy.Result
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------------------------------
|
|
|
|
return TAILCUT |