Files
databeamnew/Strategies/Standard/TAILCUT/TAILCUT.lua
T
andrea.villa 5f930e2e21 - Miglioramento lettura parametri strategia custom o forzati. Si fa tutto all'esecuzione della strategia
- Si è evitata la chiamata della DeepCopy su libreria Config delle strategie
- se strategia forzata, si salva solo l'id. I parametri verranno letti dopo
2025-03-14 12:00:24 +01:00

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