diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 8e72d5a..42e56ca 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -15,7 +15,7 @@ local BeamData = require( 'BeamData') local BeamLib = require( 'BeamLib') local ID = require( 'Identity') local BCS = require( 'BasicCustomerStrategies') -local FeatureData = require( 'FeatureData') +local FeatureLib = require( 'FeatureLib') local FaceData = require( 'FaceData') local MachiningLib = require( 'MachiningLib') @@ -500,16 +500,16 @@ local function CollectFeatures( Part) -- se foro calcolo altri dati if ID.IsDrilling( Proc) then -- assegno diametro e facce di ingresso e uscita (dati tabelle sempre per riferimento) - Proc.dDiam, Proc.dLen, Proc.nFcs, Proc.nFce = FeatureData.GetDrillingData( Proc) + Proc.dDiam, Proc.dLen, Proc.nFcs, Proc.nFce = FeatureLib.GetDrillingData( Proc) end -- informazioni facce e topologia Proc.AffectedFaces = BeamLib.GetAffectedFaces( Proc, Part) -- calcolo topologia solo se necessario, altrimenti si sfruttano le informazioni della feature BTL Proc.Topology = {} - if FeatureData.NeedTopologyFeature( Proc) then + if FeatureLib.NeedTopologyFeature( Proc) then Proc.AdjacencyMatrix = FaceData.GetAdjacencyMatrix( Proc) Proc.Faces = FaceData.GetFacesInfo( Proc, Part) - Proc.Topology = FeatureData.ClassifyTopology( Proc, Part) + Proc.Topology = FeatureLib.ClassifyTopology( Proc, Part) else Proc.Topology.sFamily = 'FEATURE' Proc.Topology.sName = 'FEATURE' @@ -755,7 +755,7 @@ local function CalculateStrategies( vProcSingleRot, Part) -- 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 = FeatureData.CalculateCompositeRating( Proc.AvailableStrategies[nIndexCurrentStrategy].Result) + 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 -- TODO serve paraemtro da Beam&Wall ( oppure da confirgurazione) !!!!!!!! if BEAM.GetFirstCompletedStrategy and Proc.AvailableStrategies[nIndexCurrentStrategy].Result.sStatus == 'Complete' then diff --git a/LuaLibs/FaceData.lua b/LuaLibs/FaceData.lua index 11c3caa..5c29aef 100644 --- a/LuaLibs/FaceData.lua +++ b/LuaLibs/FaceData.lua @@ -81,7 +81,7 @@ end function FaceData.GetFacesByAdjacencyNumber( Proc) -- se la feature ha una sola faccia, esco subito if Proc.nFct <= 1 then - return + return {} end local FacesByAdjacencyNumber = {} diff --git a/LuaLibs/FeatureData.lua b/LuaLibs/FeatureLib.lua similarity index 96% rename from LuaLibs/FeatureData.lua rename to LuaLibs/FeatureLib.lua index 0489858..5d077a7 100644 --- a/LuaLibs/FeatureData.lua +++ b/LuaLibs/FeatureLib.lua @@ -1,9 +1,9 @@ --- FeatureData.lua by Egalware s.r.l. 2024/04/02 +-- FeatureLib.lua by Egalware s.r.l. 2024/04/02 -- Libreria lettura o calcolo dati e proprietà della feature -- 2024/04/02 PRIMA VERSIONE CALCOLO LAVORAZIONI CON STRATEGIE -- Tabella per definizione modulo -local FeatureData = {} +local FeatureLib = {} -- Carico i dati globali local BeamData = require( 'BeamData') @@ -16,7 +16,7 @@ local ID = require( 'Identity') ------------------------------------------------------------------------------------------------------------- -- recupero topologia della feature -function FeatureData.NeedTopologyFeature( Proc) +function FeatureLib.NeedTopologyFeature( Proc) -- features tipo taglio if ID.IsCut( Proc) then return true @@ -134,7 +134,7 @@ end --------------------------------------------------------------------- -- recupera topologia feature -function FeatureData.ClassifyTopology( Proc, Part) +function FeatureLib.ClassifyTopology( Proc, Part) local FeatureTopology = {} if not Proc.AffectedFaces then Proc.AffectedFaces = BeamLib.GetAffectedFaces( Proc, Part) end @@ -213,7 +213,7 @@ end ------------------------------------------------------------------------------------------------------------- -- Recupero dati foro e adattamento se speciale -function FeatureData.GetDrillingData( Proc) +function FeatureLib.GetDrillingData( Proc) local AuxId = EgtGetInfo( Proc.id, 'AUXID', 'i') -- verifico se foro da adattare @@ -234,7 +234,7 @@ end ------------------------------------------------------------------------------------------------------------- -- funzione che restituisce indice di completamento in base alla percentuale di volume lavorato -function FeatureData.GetFeatureCompletionIndex( dCompletionPercentage) +function FeatureLib.GetFeatureCompletionIndex( dCompletionPercentage) -- indice di completamento local nCompletionIndex = 0 @@ -257,7 +257,7 @@ end ------------------------------------------------------------------------------------------------------------- -- funzione che restituisce qualità della lavorazione in base agli utensili utilizzati -function FeatureData.GetFeatureQuality( sTypeTools) +function FeatureLib.GetFeatureQuality( sTypeTools) local nQuality = 5 local TypeTools = EgtSplitString( sTypeTools) @@ -283,7 +283,7 @@ end ------------------------------------------------------------------------------------------------------------- -- funzione che calcola il 'CompositeRating' di ogni strategia -function FeatureData.CalculateCompositeRating( StrategyResult) +function FeatureLib.CalculateCompositeRating( StrategyResult) -- se ho tutti i dati che mi servono calcolo il rating della strategia applicato alla feature if StrategyResult and StrategyResult.nQuality and StrategyResult.nCompletionIndex and StrategyResult.dMRR then StrategyResult.dCompositeRating = ceil( StrategyResult.nQuality * StrategyResult.nCompletionIndex * StrategyResult.dMRR) @@ -295,4 +295,4 @@ function FeatureData.CalculateCompositeRating( StrategyResult) end ------------------------------------------------------------------------------------------------------------- -return FeatureData \ No newline at end of file +return FeatureLib \ No newline at end of file diff --git a/Process.lua b/Process.lua index 1d345f8..3b1808e 100644 --- a/Process.lua +++ b/Process.lua @@ -39,7 +39,7 @@ _G.package.loaded.BeamLib = nil _G.package.loaded.BeamData = nil _G.package.loaded.Identity = nil _G.package.loaded.BasicCustomerStrategies = nil -_G.package.loaded.FeatureData = nil +_G.package.loaded.FeatureLib = nil _G.package.loaded.FaceData = nil _G.package.loaded.MachiningLib = nil -- strategie di base sempre presenti diff --git a/Strategies/Standard/HEADCUT/HEADCUT.lua b/Strategies/Standard/HEADCUT/HEADCUT.lua index d1485a9..4e0270e 100644 --- a/Strategies/Standard/HEADCUT/HEADCUT.lua +++ b/Strategies/Standard/HEADCUT/HEADCUT.lua @@ -7,7 +7,7 @@ local BeamLib = require( 'BeamLib') local BeamData = require( 'BeamData') local MachiningLib = require( 'MachiningLib') -local FeatureData = require( 'FeatureData') +local FeatureLib = require( 'FeatureLib') -- strategie di base local SlotByBlade = require( 'SLOTBYBLADE') local SlotByChainSaw = require( 'SLOTBYCHAINSAW') diff --git a/Strategies/Standard/SPLITCUT/SPLITCUT.lua b/Strategies/Standard/SPLITCUT/SPLITCUT.lua index 02a46a1..d12eefb 100644 --- a/Strategies/Standard/SPLITCUT/SPLITCUT.lua +++ b/Strategies/Standard/SPLITCUT/SPLITCUT.lua @@ -7,7 +7,7 @@ local BeamLib = require( 'BeamLib') local BeamData = require( 'BeamData') local MachiningLib = require( 'MachiningLib') -local FeatureData = require( 'FeatureData') +local FeatureLib = require( 'FeatureLib') -- strategie di base local FaceByBlade = require('FACEBYBLADE') @@ -141,7 +141,7 @@ local function GetSplitStrategy( Proc, Part) -- setto valori di default. Impossibile che taglio di separazione sia incompleto Strategy.Result.sStatus = 'Completed' - Strategy.Result.nCompletionIndex = FeatureData.GetFeatureCompletionIndex( 100) + Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) Strategy.Result.dMRR = 1 -- correzioni sul massimo materiale lama, considerando ingombri vari @@ -187,7 +187,7 @@ local function GetSplitStrategy( Proc, Part) -- TODO considerare di tagliare con il massimo materiale possibile per non salire troppo in Z (macchine tipo PF), oppure non scendere troppo (tipo Kairos) -- BladeSideSingle (taglio di lama singolo di fianco) if Machining[1].bIsApplicable and ( dMaxMatBladeSideSingle - BeamData.CUT_EXTRA) > Part.dWidth + 10 * GEO.EPS_SMALL then - Strategy.Result.nQuality = FeatureData.GetFeatureQuality( 'Blade') + Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Blade') Machining.sTypeMachining = 'BladeSideSingle' Machining[2].bIsApplicable = false Machining[3].bIsApplicable = false @@ -196,7 +196,7 @@ local function GetSplitStrategy( Proc, Part) -- TODO considerare di tagliare con il massimo materiale possibile per non salire troppo in Z (macchine tipo PF), oppure non scendere troppo (tipo Kairos) -- BladeSideDouble (taglio di lama doppio di fianco) elseif Machining[1].bIsApplicable and ( dMaxMatBladeSideDouble - BeamData.CUT_EXTRA) > Part.dWidth + 10 * GEO.EPS_SMALL then - Strategy.Result.nQuality = FeatureData.GetFeatureQuality( 'Blade') + Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Blade') Strategy.Result.dMRR = Strategy.Result.dMRR/2 Machining.sTypeMachining = 'BladeSideDouble' Machining[2].bIsApplicable = false @@ -205,7 +205,7 @@ local function GetSplitStrategy( Proc, Part) return Machining -- BladeHorizontalSingle (taglio di lama singolo orizzontale) elseif Machining[1].bIsApplicable and ( dMaxMatBladeHorizontalSingle - BeamData.CUT_EXTRA) > Part.dHeight + 10 * GEO.EPS_SMALL then - Strategy.Result.nQuality = FeatureData.GetFeatureQuality( 'Blade') + Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Blade') Machining.sTypeMachining = 'BladeHorizontalSingle' Machining[2].bIsApplicable = false Machining[3].bIsApplicable = false @@ -214,7 +214,7 @@ local function GetSplitStrategy( Proc, Part) -- BladeHorizontalDouble (taglio di lama doppio orizzontale) elseif Machining[1].bIsApplicable and Machining[2].bIsApplicable and ( dMaxMatBladeHorizontalSingle + dMaxMatBladeHorizontalDouble - BeamData.CUT_EXTRA) > Part.dHeight + 10 * GEO.EPS_SMALL then - Strategy.Result.nQuality = FeatureData.GetFeatureQuality( 'Blade') + Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Blade') Strategy.Result.dMRR = Strategy.Result.dMRR/2 Machining.sTypeMachining = 'BladeHorizontalDouble' Machining[3].bIsApplicable = false diff --git a/Strategies/Standard/STR0002/STR0002.lua b/Strategies/Standard/STR0002/STR0002.lua index b480ca0..4f55ada 100644 --- a/Strategies/Standard/STR0002/STR0002.lua +++ b/Strategies/Standard/STR0002/STR0002.lua @@ -19,7 +19,7 @@ local BeamLib = require( 'BeamLib') local BeamData = require( 'BeamData') local MachiningLib = require( 'MachiningLib') -local FeatureData = require( 'FeatureData') +local FeatureLib = require( 'FeatureLib') -- Tabella per definizione modulo local STR0002 = {} @@ -88,7 +88,7 @@ local function GetBestPocketingStrategy( Proc) local ToolSearchParameters = {} ToolSearchParameters.sMillShape = 'STANDARD' Machining.sTypeMachining = 'None' -- Bottom-Side1-Side2\ Bottom-Side1\ Bottom-Side2\ Side1-Side2\ Bottom\ Side1 \ Side2 \ None - Strategy.Result.nQuality = FeatureData.GetFeatureQuality( 'Mill') + Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Mill') -- caso speciale Tunnel che non ha faccia bottom if Proc.Topology.sName == 'Tunnel-4-Through' then @@ -136,7 +136,7 @@ local function GetBestPocketingStrategy( Proc) if Milling.ToolInfo.nToolIndex then -- se utensile scelto è su aggregato, ricalcolo la qualità if TOOLS[Milling.ToolInfo.nToolIndex].SetupInfo.bToolOnAggregate then - Strategy.Result.nQuality = FeatureData.GetFeatureQuality( 'MillOnAggregate') + Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'MillOnAggregate') end Milling.bIsApplicable = true local ParametersMRR = {} @@ -246,7 +246,7 @@ local function GetBestPocketingStrategy( Proc) if Machining[1].bIsApplicable and Machining[1].ToolInfo.dResidualDepth < 10 * GEO.EPS_SMALL then Machining.sTypeMachining = 'Bottom' Strategy.Result.sStatus = 'Completed' - Strategy.Result.nCompletionIndex = FeatureData.GetFeatureCompletionIndex( 100) + Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) Strategy.Result.dMRR = Machining[1].dMRR Machining[1].ToolInfo.dResidualDepth = 0 Machining[2].bIsApplicable = false @@ -257,7 +257,7 @@ local function GetBestPocketingStrategy( Proc) elseif Proc.Topology.sName == 'Rabbet-2-Through' and Machining[2].bIsApplicable and Machining[2].ToolInfo.dResidualDepth < 10 * GEO.EPS_SMALL then Machining.sTypeMachining = 'Bottom2' Strategy.Result.sStatus = 'Completed' - Strategy.Result.nCompletionIndex = FeatureData.GetFeatureCompletionIndex( 100) + Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) Strategy.Result.dMRR = Machining[2].dMRR Machining[2].ToolInfo.dResidualDepth = 0 Machining[1].bIsApplicable = false @@ -268,7 +268,7 @@ local function GetBestPocketingStrategy( Proc) elseif Machining[3].bIsApplicable and Machining[3].ToolInfo.dResidualDepth < 10 * GEO.EPS_SMALL then Machining.sTypeMachining = 'Side1' Strategy.Result.sStatus = 'Completed' - Strategy.Result.nCompletionIndex = FeatureData.GetFeatureCompletionIndex( 100) + Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) Strategy.Result.dMRR = Machining[3].dMRR if Proc.MainFaces.TunnelAddedFaces then Machining[3].ToolInfo.dResidualDepth = -( Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation + BeamData.MILL_OVERLAP) @@ -283,7 +283,7 @@ local function GetBestPocketingStrategy( Proc) elseif Machining[4].bIsApplicable and Machining[4].ToolInfo.dResidualDepth < 10 * GEO.EPS_SMALL then Machining.sTypeMachining = 'Side2' Strategy.Result.sStatus = 'Completed' - Strategy.Result.nCompletionIndex = FeatureData.GetFeatureCompletionIndex( 100) + Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) Strategy.Result.dMRR = Machining[4].dMRR if Proc.MainFaces.TunnelAddedFaces then Machining[4].ToolInfo.dResidualDepth = -( Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation + BeamData.MILL_OVERLAP) @@ -301,7 +301,7 @@ local function GetBestPocketingStrategy( Proc) Strategy.Result.sStatus = 'Completed' Machining[3].ToolInfo.dResidualDepth = Machining[3].ToolInfo.dResidualDepth - Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation Machining[4].ToolInfo.dResidualDepth = -Machining[3].ToolInfo.dResidualDepth - BeamData.MILL_OVERLAP - Strategy.Result.nCompletionIndex = FeatureData.GetFeatureCompletionIndex( 100) + Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100) Strategy.Result.dMRR = ( Machining[3].dMRR + Machining[4].dMRR) / 2 Machining[1].bIsApplicable = false Machining[2].bIsApplicable = false @@ -334,7 +334,7 @@ local function GetBestPocketingStrategy( Proc) end local dMachinedPrercentage = CalcMachinedPercentage( Proc, Machining) - Strategy.Result.nCompletionIndex = FeatureData.GetFeatureCompletionIndex( dMachinedPrercentage) + Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dMachinedPrercentage) Strategy.Result.sInfo = 'Machining not complete, left ' .. tostring( 100 - ceil( dMachinedPrercentage)) .. '%' -- se non ho trovato neanche una lavorazione diff --git a/Strategies/Standard/STR0003/STR0003.lua b/Strategies/Standard/STR0003/STR0003.lua index 1138bc2..a5da175 100644 --- a/Strategies/Standard/STR0003/STR0003.lua +++ b/Strategies/Standard/STR0003/STR0003.lua @@ -7,7 +7,7 @@ local BeamLib = require( 'BeamLib') local BeamData = require( 'BeamData') local MachiningLib = require( 'MachiningLib') -local FeatureData = require( 'FeatureData') +local FeatureLib = require( 'FeatureLib') -- strategie di base local SlotByBlade = require( 'SLOTBYBLADE') local SlotByChainSaw = require( 'SLOTBYCHAINSAW') @@ -256,8 +256,8 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) end if not Strategy.Parameters.bFinishWithChainSaw then - Strategy.Result.nCompletionIndex = FeatureData.GetFeatureCompletionIndex( dFinalCompletionPercentage) - Strategy.Result.nQuality = FeatureData.GetFeatureQuality( 'Blade') + Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dFinalCompletionPercentage) + Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Blade') local MRRParametersBlade = { dStep = TOOLS[Cutting.nToolIndex].dThickness, dSideStep = min( TOOLS[Cutting.nToolIndex].dSideStep, Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1].dLength), @@ -471,8 +471,8 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters) else Strategy.Result.sStatus = 'Not-Applicable' end - Strategy.Result.nCompletionIndex = FeatureData.GetFeatureCompletionIndex( dFinalCompletionPercentage) - Strategy.Result.nQuality = FeatureData.GetFeatureQuality( 'Chainsaw') + Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dFinalCompletionPercentage) + Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Chainsaw') local MRRParametersBlade = { dStep = TOOLS[Cutting.nToolIndex].dThickness, dSideStep = min( TOOLS[Cutting.nToolIndex].dSideStep, Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1].dLength), diff --git a/Strategies/Standard/STR0004/STR0004.lua b/Strategies/Standard/STR0004/STR0004.lua index 304acdb..5e9a065 100644 --- a/Strategies/Standard/STR0004/STR0004.lua +++ b/Strategies/Standard/STR0004/STR0004.lua @@ -7,7 +7,7 @@ local BeamLib = require( 'BeamLib') local BeamData = require( 'BeamData') local MachiningLib = require( 'MachiningLib') -local FeatureData = require( 'FeatureData') +local FeatureLib = require( 'FeatureLib') -- strategie di base local SlotByChainSaw = require( 'SLOTBYCHAINSAW') @@ -134,7 +134,7 @@ function STR0004.Make( bAddMachining, Proc, Part, CustomParameters) return false, Strategy.Result end - -- sega a catena - calcolo lavorazioni + -- calcolo lavorazioni local Mortising = {} OptionalParameters = {} if Proc.Topology.sName == 'Groove-4-Blind' or Proc.Topology.sName == 'Pocket-5-Blind' then @@ -194,7 +194,7 @@ function STR0004.Make( bAddMachining, Proc, Part, CustomParameters) Chainsaw.AddResult( Mortising) end end - -- sega a catena - aggiunta lavorazioni + -- aggiunta lavorazioni local nIsApplicableCount = 0 local dFinalCompletionPercentage = 100 local bAreAllMachiningsAdded = true @@ -245,8 +245,8 @@ function STR0004.Make( bAddMachining, Proc, Part, CustomParameters) else Strategy.Result.sStatus = 'Not-Applicable' end - Strategy.Result.nCompletionIndex = FeatureData.GetFeatureCompletionIndex( dFinalCompletionPercentage) - Strategy.Result.nQuality = FeatureData.GetFeatureQuality( 'Chainsaw') + Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( dFinalCompletionPercentage) + Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Chainsaw') local MRRParametersChainsaw = { dStep = min( TOOLS[Mortising.nToolIndex].dStep, Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1].dLength), dSideStep = TOOLS[Mortising.nToolIndex].dThickness,