From 5f930e2e21a54634af9bffce75c8ea896fc73281 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Fri, 14 Mar 2025 12:00:24 +0100 Subject: [PATCH] =?UTF-8?q?-=20Miglioramento=20lettura=20parametri=20strat?= =?UTF-8?q?egia=20custom=20o=20forzati.=20Si=20fa=20tutto=20all'esecuzione?= =?UTF-8?q?=20della=20strategia=20-=20Si=20=C3=A8=20evitata=20la=20chiamat?= =?UTF-8?q?a=20della=20DeepCopy=20su=20libreria=20Config=20delle=20strateg?= =?UTF-8?q?ie=20-=20se=20strategia=20forzata,=20si=20salva=20solo=20l'id.?= =?UTF-8?q?=20I=20parametri=20verranno=20letti=20dopo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LuaLibs/BeamExec.lua | 27 +++------- LuaLibs/BeamLib.lua | 69 +++++++++++++------------ Strategies/Standard/HEADCUT/HEADCUT.lua | 9 ++-- Strategies/Standard/STR0001/STR0001.lua | 3 +- Strategies/Standard/STR0002/STR0002.lua | 3 +- Strategies/Standard/STR0003/STR0003.lua | 3 +- Strategies/Standard/STR0004/STR0004.lua | 3 +- Strategies/Standard/STR0005/STR0005.lua | 3 +- Strategies/Standard/STR0006/STR0006.lua | 3 +- Strategies/Standard/TAILCUT/TAILCUT.lua | 9 ++-- 10 files changed, 59 insertions(+), 73 deletions(-) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 9655cdb..874126f 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -577,25 +577,14 @@ local function GetFeatureForcedStrategy( Proc) return nil end - -- si copiano i dati - local UpdatedParamList = BeamLib.TableCopyDeep( StrategyData) - -- salvo che questa strategia è stata forzata, e che quindi ho già letto il file config con i parametri di default - -- quando si calcolerà la lavorazione non servirà leggere/riverificare i parametri di default - UpdatedParamList.bForcedStrategy = true - - -- cerco e aggiorno i parametri come sono settati nel processing - for i = 1, #UpdatedParamList.Parameters do - local sParameterToRead = UpdatedParamList.sStrategyId .. '_' .. UpdatedParamList.Parameters[i].sNameNge - local sForcedParameterForProc = EgtGetInfo( Proc.id, sParameterToRead, 's') - -- se ho trovato il valore, lo sovrascrivo al default - if sForcedParameterForProc then - UpdatedParamList.Parameters[i].sValue = sForcedParameterForProc - end - end + -- si prepara tabella strategia. In questa fase si salva solo id strategia e il fatto che è stata forzata. I parametri forzati vengono letti all'esecuzioen della strategia + local StrategyToProc = {} + local ParamList = {} + ParamList.bForcedStrategy = true + ParamList.sStrategyId = sStrategyId -- ritorno la lista strategia con parametri - local StrategyToProc = {} - table.insert( StrategyToProc, UpdatedParamList) + table.insert( StrategyToProc, ParamList) return StrategyToProc end return nil @@ -895,7 +884,7 @@ local function CalculateStrategies( vProcSingleRot, Part) -- controllo che le librerie siano state effettivamente caricate if CurrentStrategy.Config and CurrentStrategy.Script then -- eseguo la strategia solo come calcolo fattibilità e voto. Non si applicano le lavorazioni. Si passa la Proc e i parametri personalizzati - _, Proc.AvailableStrategies[nIndexCurrentStrategy].Result = CurrentStrategy.Script.Make( false, Proc, Part, Proc.AvailableStrategies[nIndexCurrentStrategy].Parameters) + _, Proc.AvailableStrategies[nIndexCurrentStrategy].Result = CurrentStrategy.Script.Make( false, Proc, Part, Proc.AvailableStrategies[nIndexCurrentStrategy]) Proc.AvailableStrategies[nIndexCurrentStrategy].Result = FeatureLib.CalculateCompositeRating( Proc.AvailableStrategies[nIndexCurrentStrategy].Result) -- se scelta strategia in modalità base o standard, esco subito alla prima che trovo completa @@ -1022,7 +1011,7 @@ local function CalculateMachinings( vProc, Part) local StrategyScriptName = Proc.ChosenStrategy.sStrategyId .. '\\' .. Proc.ChosenStrategy.sStrategyId local StrategyScript = require( StrategyScriptName) -- eseguo la strategia e si applicano le lavorazioni. Si passa la Proc e i parametri personalizzati - _, _ = StrategyScript.Make( true, Proc, Part, Proc.ChosenStrategy.Parameters) + _, _ = StrategyScript.Make( true, Proc, Part, Proc.ChosenStrategy) else -- se non esiste una strategia scelta (non dovrebbe mai succedere) cancello da lista generale PROCESSINGS[Proc.nIndexPartInParts].Rotation[Proc.nIndexRotation][Proc.nIndexInVProc].ChosenStrategy = nil diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index d94f64d..f4d189b 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -380,48 +380,53 @@ function BeamLib.GetMaxNzDefault( b3Raw, vtNFace, vtToolDirection) end ------------------------------------------------------------------------------------------------------------- --- sovrascrivo i parametri personalizzati salvati su Proc a quelli di default dalla strategia --- N.B. : I parametri personalizzati non più presenti tra i default della strategia, verranno ignorati. Quelli extra avranno valore di default --- Il controllo deve essere fatto SEMPRE all'inizio di ogni strategia, per controllare conformità parametri custom -function BeamLib.GetUpdateCustomParameters( CustomStrategyParamList, DefaultStrategyParamList) - local UpdatedParamList = BeamLib.TableCopyDeep( DefaultStrategyParamList) - -- se esistono i parametri di default (normalmente ce n'è sempre almeno uno) - if UpdatedParamList then - for i = 1, #UpdatedParamList do - table.insert( UpdatedParamList, UpdatedParamList[i]) - if CustomStrategyParamList then - for j = 1, #CustomStrategyParamList do - if UpdatedParamList[i].sName == CustomStrategyParamList[j].sName then - UpdatedParamList[i].sValue = CustomStrategyParamList[j].sValue +-- si traduce la tabella dei parametri con tutte le informazioni in una lista contenente i parametri utilizzabili con accesso diretto +function BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, DefaultStrategyParamList) + local UpdatedParameters = {} + -- TODO serve controllare se campo 'sStrategyId' congruente tra il Config (DefaultStrategyParamList) e i parametri custom (CustomParameters)? + if DefaultStrategyParamList.Parameters and #DefaultStrategyParamList.Parameters > 0 then + for i=1, #DefaultStrategyParamList.Parameters do + local xParameterValue = nil + -- se strategia forzata, leggo eventuali parametri nelle info + if CustomParameters and CustomParameters.bForcedStrategy then + local sParameterToRead = DefaultStrategyParamList.sStrategyId .. '_' .. DefaultStrategyParamList.Parameters[i].sNameNge + local sForcedParameterForProc = EgtGetInfo( Proc.id, sParameterToRead, 's') + -- se ho trovato il valore, lo sovrascrivo al default + if sForcedParameterForProc then + xParameterValue = sForcedParameterForProc + end + -- altrimenti i parametri custom si trovano già su questa lista + elseif CustomParameters and CustomParameters.Parameters then + for j=1, #CustomParameters.Parameters do + if CustomParameters.Parameters[j].sName == DefaultStrategyParamList.Parameters[i].sName or + CustomParameters.Parameters[j].sName == DefaultStrategyParamList.Parameters[i].sNameNge then + xParameterValue = CustomParameters.Parameters[j].sValue + break end end end - end - end - return UpdatedParamList -end + -- se non arriva forzato da strategia, oppure se non è stato configurato da cliente, si prende default + if not xParameterValue then + xParameterValue = DefaultStrategyParamList.Parameters[i].sValue + end -------------------------------------------------------------------------------------------------------------- --- si traduce la tabella dei parametri con tutte le informazioni in una lista contenente i parametri utilizzabili con accesso diretto -function BeamLib.LoadCustomParametersInStrategy( CustomParameters) - local Parameters = {} - if CustomParameters and #CustomParameters > 0 then - for i=1, #CustomParameters do - if CustomParameters[i].sType == 'b' then - Parameters[CustomParameters[i].sName] = CustomParameters[i].sValue == 'true' - elseif CustomParameters[i].sType == 'd' then - if #CustomParameters[i].sValue > 0 then - Parameters[CustomParameters[i].sName] = tonumber( CustomParameters[i].sValue) + if DefaultStrategyParamList.Parameters[i].sType == 'b' then + UpdatedParameters[DefaultStrategyParamList.Parameters[i].sName] = xParameterValue == 'true' + elseif DefaultStrategyParamList.Parameters[i].sType == 'd' then + if #DefaultStrategyParamList.Parameters[i].sValue > 0 then + UpdatedParameters[DefaultStrategyParamList.Parameters[i].sName] = tonumber( xParameterValue) -- stringa vuota equivale a non passare alcun valore (deciderà la strategia) else - Parameters[CustomParameters[i].sName] = nil + UpdatedParameters[DefaultStrategyParamList.Parameters[i].sName] = nil end - else --CustomParameters[i].sType == 's' or CustomParameters[i].sType == 'combo' - Parameters[CustomParameters[i].sName] = CustomParameters[i].sValue + else --DefaultStrategyParamList[i].sType == 's' or DefaultStrategyParamList[i].sType == 'combo' + UpdatedParameters[DefaultStrategyParamList.Parameters[i].sName] = xParameterValue end + end end - return Parameters + + return UpdatedParameters end --------------------------------------------------------------------- diff --git a/Strategies/Standard/HEADCUT/HEADCUT.lua b/Strategies/Standard/HEADCUT/HEADCUT.lua index 36c283c..0d0e301 100644 --- a/Strategies/Standard/HEADCUT/HEADCUT.lua +++ b/Strategies/Standard/HEADCUT/HEADCUT.lua @@ -22,12 +22,11 @@ local HEADCUT = {} local Strategy = {} ------------------------------------------------------------------------------------------------------------- -local function LoadStrategyParameters( CustomParameters) +local function LoadStrategyParameters( Proc, CustomParameters) local StrategyLib = {} StrategyLib.Config = require( 'HEADCUT\\HEADCUTConfig') Strategy.sName = StrategyLib.Config.sStrategyId - CustomParameters = BeamLib.GetUpdateCustomParameters( CustomParameters, StrategyLib.Config.Parameters) - Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( CustomParameters) + Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, StrategyLib.Config) Strategy.Result = {} Strategy.Machining = {} Strategy.Result.sInfo = '' @@ -54,7 +53,7 @@ end local function GetSplitStrategy( Proc, Part) -- se non sono stati caricati i parametri, si ricaricano if not Strategy.Parameters then - Strategy = LoadStrategyParameters() + Strategy = LoadStrategyParameters( Proc, _) end -- separazione solo se esiste grezzo successivo con pezzi o scaricabile @@ -223,7 +222,7 @@ end ------------------------------------------------------------------------------------------------------------- function HEADCUT.Make( bAddMachining, Proc, Part, CustomParameters) - Strategy = LoadStrategyParameters( CustomParameters) + Strategy = LoadStrategyParameters( Proc, CustomParameters) local bAreAllMachiningsAdded = true local Splitting = {} local AuxiliaryData = {} diff --git a/Strategies/Standard/STR0001/STR0001.lua b/Strategies/Standard/STR0001/STR0001.lua index b313298..6dcf0bc 100644 --- a/Strategies/Standard/STR0001/STR0001.lua +++ b/Strategies/Standard/STR0001/STR0001.lua @@ -200,8 +200,7 @@ function STR0001.Make( bAddMachining, Proc, Part, CustomParameters) local StrategyLib = {} StrategyLib.Config = require( 'STR0001\\STR0001Config') Strategy.sName = StrategyLib.Config.sStrategyId - CustomParameters = BeamLib.GetUpdateCustomParameters( CustomParameters, StrategyLib.Config.Parameters) - Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( CustomParameters) + Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, StrategyLib.Config) Strategy.Machining = {} Strategy.Result = {} diff --git a/Strategies/Standard/STR0002/STR0002.lua b/Strategies/Standard/STR0002/STR0002.lua index 6177c7e..bdd506e 100644 --- a/Strategies/Standard/STR0002/STR0002.lua +++ b/Strategies/Standard/STR0002/STR0002.lua @@ -407,8 +407,7 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters) local StrategyLib = {} StrategyLib.Config = require( 'STR0002\\STR0002Config') Strategy.sName = StrategyLib.Config.sStrategyId - CustomParameters = BeamLib.GetUpdateCustomParameters( CustomParameters, StrategyLib.Config.Parameters) - Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( CustomParameters) + Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, StrategyLib.Config) Strategy.Machining = {} Strategy.Result = {} diff --git a/Strategies/Standard/STR0003/STR0003.lua b/Strategies/Standard/STR0003/STR0003.lua index d2e0175..c38e384 100644 --- a/Strategies/Standard/STR0003/STR0003.lua +++ b/Strategies/Standard/STR0003/STR0003.lua @@ -198,8 +198,7 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) local StrategyLib = {} StrategyLib.Config = require( 'STR0003\\STR0003Config') Strategy.sName = StrategyLib.Config.sStrategyId - CustomParameters = BeamLib.GetUpdateCustomParameters( CustomParameters, StrategyLib.Config.Parameters) - Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( CustomParameters) + Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, StrategyLib.Config) Strategy.Result = {} Strategy.Result.sInfo = '' Blade.Result = {} diff --git a/Strategies/Standard/STR0004/STR0004.lua b/Strategies/Standard/STR0004/STR0004.lua index 4a79b2b..72e8842 100644 --- a/Strategies/Standard/STR0004/STR0004.lua +++ b/Strategies/Standard/STR0004/STR0004.lua @@ -118,8 +118,7 @@ function STR0004.Make( bAddMachining, Proc, Part, CustomParameters) local StrategyLib = {} StrategyLib.Config = require( 'STR0004\\STR0004Config') Strategy.sName = StrategyLib.Config.sStrategyId - CustomParameters = BeamLib.GetUpdateCustomParameters( CustomParameters, StrategyLib.Config.Parameters) - Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( CustomParameters) + Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, StrategyLib.Config) Strategy.Result = {} Strategy.Result.sInfo = '' Chainsaw.Result = {} diff --git a/Strategies/Standard/STR0005/STR0005.lua b/Strategies/Standard/STR0005/STR0005.lua index 489e959..b845430 100644 --- a/Strategies/Standard/STR0005/STR0005.lua +++ b/Strategies/Standard/STR0005/STR0005.lua @@ -92,8 +92,7 @@ function STR0005.Make( bAddMachining, Proc, Part, CustomParameters) local StrategyLib = {} StrategyLib.Config = require( 'STR0005\\STR0005Config') Strategy.sName = StrategyLib.Config.sStrategyId - CustomParameters = BeamLib.GetUpdateCustomParameters( CustomParameters, StrategyLib.Config.Parameters) - Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( CustomParameters) + Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, StrategyLib.Config) Strategy.Result = {} Strategy.Result.sInfo = '' Blade.Result = {} diff --git a/Strategies/Standard/STR0006/STR0006.lua b/Strategies/Standard/STR0006/STR0006.lua index bcd182e..ddecfa5 100644 --- a/Strategies/Standard/STR0006/STR0006.lua +++ b/Strategies/Standard/STR0006/STR0006.lua @@ -155,8 +155,7 @@ function STR0006.Make( bAddMachining, Proc, Part, CustomParameters) local StrategyLib = {} StrategyLib.Config = require( 'STR0006\\STR0006Config') Strategy.sName = StrategyLib.Config.sStrategyId - CustomParameters = BeamLib.GetUpdateCustomParameters( CustomParameters, StrategyLib.Config.Parameters) - Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( CustomParameters) + Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( CustomParameters, StrategyLib.Config) Strategy.Machining = {} Strategy.Result = {} local Results = {} diff --git a/Strategies/Standard/TAILCUT/TAILCUT.lua b/Strategies/Standard/TAILCUT/TAILCUT.lua index a27e6fb..b20ff5c 100644 --- a/Strategies/Standard/TAILCUT/TAILCUT.lua +++ b/Strategies/Standard/TAILCUT/TAILCUT.lua @@ -22,11 +22,10 @@ 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) + 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 = {}