-- 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 StrategyDefaultParam = {} StrategyDefaultParam.Config = require( 'TAILCUT\\TAILCUTConfig') Strategy.sName = StrategyDefaultParam.Config.sStrategyId CustomParameters = BeamLib.GetUpdateCustomParameters( CustomParameters, StrategyDefaultParam.Config.Parameters) Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( CustomParameters) 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.vtNormal = 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.AddNewMachining( Proc, MachiningsToAdd[i].Splitting, MachiningsToAdd[i].AuxiliaryData) end return bAreAllMachiningsAdded, Strategy.Result else return nil, Strategy.Result end end ------------------------------------------------------------------------------------------------------------- return TAILCUT