-- MachiningLib.lua by Egalware s.r.l. 2024/04/02 -- Libreria ricerca lavorazioni per Travi -- 2024/04/02 PRIMA VERSIONE CALCOLO LAVORAZIONI CON STRATEGIE -- Tabella per definizione modulo local MachiningLib = {} -- Include require( 'EgtBase') EgtOutLog( ' MachiningLib started', 1) ------------------------------------------------------------------------------------------------------------- -- funzione che trova la strategia migliore per lavorare la feature passata -- ritorna la lista della strategia scelta (Id + parameters) e una lista con il risultato di tutte le altre (score + messages) function MachiningLib.CalculateRatingStrategies( Proc, b3Raw) -- flag per non applicare realmente le lavorazioni, ma limitarsi ai calcoli di fattibilità, quando viene lanciata la make delle strategie local bAddMachining = false -- controllo se ci sono strategie disponibili if Proc.AvailableStrategies and #Proc.AvailableStrategies > 0 then -- ciclo tutte le strategie della feature for nIndexStrategy = 1, #Proc.AvailableStrategies do -- eseguo file config con i parametri di default local StrategyDataName = Proc.AvailableStrategies[nIndexStrategy].StrategyId .. '\\' .. Proc.AvailableStrategies[nIndexStrategy].StrategyId .. 'Config' local StrategyDataPath = BEAM.BASEDIR .. '\\Strategies\\' .. StrategyDataName .. '.lua' local StrategyScriptName = '\\Strategies\\' .. Proc.AvailableStrategies[nIndexStrategy].StrategyId .. '\\' .. Proc.AvailableStrategies[nIndexStrategy].StrategyId local StrategyScriptPath = BEAM.BASEDIR .. '\\Strategies\\' .. StrategyScriptName if EgtExistsFile( StrategyDataPath) and EgtExistsFile( StrategyScriptPath) then local StrategyData = require( StrategyDataName) -- eseguo file script strategia local StrategyScript = require( StrategyScriptName) -- sovrascrivo i parametri personalizzati salvati su Proc a quelli di default dalla strategia if Proc.AvailableStrategies[nIndexStrategy].Parameters and #Proc.AvailableStrategies[nIndexStrategy].Parameters > 0 then for j = 1, #StrategyData.Parameters do for k = 1, #Proc.AvailableStrategies[i].Parameters[k] do if StrategyData.Parameters[j].Name == Proc.AvailableStrategies[nIndexStrategy].Parameters[k].Name then StrategyData.Parameters[j].Value = Proc.AvailableStrategies[nIndexStrategy].Parameters[k].Value end end end end -- salvo sul proc i parametri di defalt letti da strategia e personalizzati da interfaccia -- N.B. : I parametri personalizzati non più presenti tra i default della strategia, verranno ignorati Proc.AvailableStrategies[nIndexStrategy].Parameters = StrategyData.Parameters -- eseguo la strategia solo come calcolo fattibilità e voto. Non si applicano le lavorazioni. Si passa la Proc e i parametri personalizzati Proc = StrategyScript.Make( bAddMachining, Proc, Proc.AvailableStrategies[nIndexStrategy].Parameters) -- se lavorazione della feature è completa e si ricerca prima staregia completa, uscire subito if BEAM.GetFirstCompletedStrategy and Proc.AvailableStrategies[nIndexStrategy].Status == 'Completed' then return Proc -- altrimenti continuo e processo le altre strategie e sceglierò la migliore dopo che saranno state tutte analizzate else ; -- non si fa alcunché end -- se non trovo i file della strategia, scrivo che non è più disponibile else Proc.AvailableStrategies[nIndexStrategy].Rating = 0 Proc.AvailableStrategies[nIndexStrategy].Info = 'Strategy not found' Proc.AvailableStrategies[nIndexStrategy].Status = 'Not-Applicable' end end end -- si ritorna la lista relativa alla singola feature con i nuovi parametri aggiunti return Proc end ------------------------------------------------------------------------------------------------------------- return MachiningLib