From 62efd89018c0a7880a6350f79c57f1333b93a224 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Thu, 13 Mar 2025 15:17:54 +0100 Subject: [PATCH] - Corretto valore default per MinNz e MaxNx - Corretto scelta utensile che considera deviazione angolare massima - Migliorata gestione calcolo strategie --- LuaLibs/BeamExec.lua | 63 +++++++++++++++++++++++----------------- LuaLibs/BeamLib.lua | 10 +++++-- LuaLibs/MachiningLib.lua | 4 +-- 3 files changed, 46 insertions(+), 31 deletions(-) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index afadcb8..562448b 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -122,7 +122,7 @@ function BeamExec.GetToolsFromDB() Tool.SetupInfo = {} Tool.SetupInfo = BeamData.GetSetupInfo( Tool.sHead) if not Tool.SetupInfo.GetMinNzDownUp then - Tool.SetupInfo.GetMinNzDownUp = BeamLib.GetMinNzDefault + Tool.SetupInfo.GetMinNzDownUp = BeamLib.GetMinNzDownUpDefault end if not Tool.SetupInfo.GetMinNz then Tool.SetupInfo.GetMinNz = BeamLib.GetMinNzDefault @@ -997,28 +997,35 @@ local function CalculateMachinings( vProc, Part) for i = 1, #vProc do -- processo tutte le feature attive applicando le lavorazioni local Proc = vProc[i] - -- si sistemano i pezzi per le rotazioni - if Proc.bDown and CurrRotation ~= 3 then - BeamLib.RotatePart( Part, 3 - CurrRotation) - CurrRotation = 3 - elseif Proc.bSide and CurrRotation ~= 2 then - BeamLib.RotatePart( Part, 2 - CurrRotation) - CurrRotation = 2 - elseif CurrRotation ~= 1 and not( Proc.bSide) and not( Proc.bDown) then - BeamLib.RotatePart( Part, 1 - CurrRotation) - CurrRotation = 1 - end - -- aggiorno info pezzo - Part.b3Raw = EgtGetRawPartBBox( Part.idRaw) - Part.b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( Part.id, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD) + -- se la feature deve essere processata + if Proc.nFlg ~= 0 then + -- si sistemano i pezzi per le rotazioni + if Proc.bDown and CurrRotation ~= 3 then + BeamLib.RotatePart( Part, 3 - CurrRotation) + CurrRotation = 3 + elseif Proc.bSide and CurrRotation ~= 2 then + BeamLib.RotatePart( Part, 2 - CurrRotation) + CurrRotation = 2 + elseif CurrRotation ~= 1 and not( Proc.bSide) and not( Proc.bDown) then + BeamLib.RotatePart( Part, 1 - CurrRotation) + CurrRotation = 1 + end + -- aggiorno info pezzo + Part.b3Raw = EgtGetRawPartBBox( Part.idRaw) + Part.b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( Part.id, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD) - -- si applicano le strategie - if Proc.nFlg ~= 0 and Proc.ChosenStrategy then - -- carico file script strategia (non serve verificare presenza del file perchè già fatto durante scelta strategia) - 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 - bAreAllApplyOk, _ = StrategyScript.Make( true, Proc, Part, Proc.ChosenStrategy.Parameters) + -- si applicano le strategie + if Proc.ChosenStrategy then + -- carico file script strategia (non serve verificare presenza del file perchè già fatto durante scelta strategia) + 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) + 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 + bAreAllApplyOk = false + end end end @@ -1030,7 +1037,7 @@ local function CalculateMachinings( vProc, Part) Part.b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( Part.id, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD) CurrRotation = 1 end - return MACHININGS + return MACHININGS, bAreAllApplyOk end ------------------------------------------------------------------------------------------------------------- @@ -1264,6 +1271,7 @@ local function GetBestResultFromCombinationsMatrix( ProcessingsOnPart, PartInfo) -- se la feature può essere lavorata in almeno una rotazione if #ResultsList > 0 then local Proc, Data = GetProcBestMachRotationFromList( ResultsList) + Proc.nIndexRotation = Data.nIndexRotation -- inserisco la Proc nell'apposita lista if Data.nIndexRotation == nUnloadPos then table.insert( SingleCombination.Rot0, Proc) @@ -1387,7 +1395,9 @@ function BeamExec.ProcessMachinings( PARTS) vProc = OrderFeatures( vProc) -- esegue le strategie migliori che ha precedentemente scelto e salva le lavorazioni nella lista globale - MACHININGS = CalculateMachinings( vProc, PARTS[nPart]) + local bAllStrategiesApplied = false + MACHININGS, bAllStrategiesApplied = CalculateMachinings( vProc, PARTS[nPart]) + bIsCombinationMachinable = bAllStrategiesApplied -- se la posizione iniziale non è calcolata, significa che non ci sono feature da eseguire. Solo taglio testa/coda if not MatrixResult.nInitialPosition then @@ -1395,7 +1405,6 @@ function BeamExec.ProcessMachinings( PARTS) MACHININGS.Info.nHeadCutRotation = 1 MACHININGS.Info.nSplitCutRotation = 1 end - -- TODO applicare taglio testa e coda. DA COMPLETARE -- aggiunge tagli testa e coda in fasi opportune local nRotHeadCut = MatrixResult.nInitialPosition + MACHININGS.Info.nHeadCutRotation - 1 if nRotHeadCut > 4 then @@ -1423,8 +1432,8 @@ function BeamExec.ProcessMachinings( PARTS) table.insert( vProcHeadTail, PROCESSINGS[nPart].Rotation[nRotHeadCut][MatrixResult.nIndexHeadCutInVProc]) table.insert( vProcHeadTail, PROCESSINGS[nPart].Rotation[nRotSplitCut][MatrixResult.nIndexTailCutInVProc]) - MACHININGS = CalculateMachinings( vProcHeadTail, PARTS[nPart]) - bIsCombinationMachinable = true + MACHININGS, bAllStrategiesApplied = CalculateMachinings( vProcHeadTail, PARTS[nPart]) + bIsCombinationMachinable = bIsCombinationMachinable and bAllStrategiesApplied end -- ordinamento lavorazioni MACHININGS = MachiningLib.PrepareMachiningsForSorting( PARTS[nPart]) diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index ed24487..73c7ae4 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -363,14 +363,20 @@ end ------------------------------------------------------------------------------------------------------------- -- funzione con valore di default in caso la GetSetupInfo della testa della macchina non avesse la funzione definita -function BeamLib.GetMinNzDefault( b3Raw, vtNFace, vtToolDirection) +function BeamLib.GetMinNzDownUpDefault( b3Raw, vtNFace, vtToolDirection) return -2 end +------------------------------------------------------------------------------------------------------------- +-- funzione con valore di default in caso la GetSetupInfo della testa della macchina non avesse la funzione definita +function BeamLib.GetMinNzDefault( b3Raw, vtNFace, vtToolDirection) + return 0 +end + ------------------------------------------------------------------------------------------------------------- -- funzione con valore di default in caso la GetSetupInfo della testa della macchina non avesse la funzione definita function BeamLib.GetMaxNzDefault( b3Raw, vtNFace, vtToolDirection) - return 2 + return 0 end ------------------------------------------------------------------------------------------------------------- diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 4ec51cd..75e4831 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -216,9 +216,9 @@ function MachiningLib.FindMill( Proc, ToolSearchParameters) -- controlli standard elseif ToolSearchParameters.dMaxToolDiameter and TOOLS[i].dDiameter > ToolSearchParameters.dMaxToolDiameter then bIsToolCompatible = false - elseif ToolSearchParameters.vtToolDirection:getZ() < TOOLS[i].SetupInfo.GetMinNz( ToolSearchParameters.vtToolDirection) - GEO.EPS_ZERO then + elseif ToolSearchParameters.vtToolDirection:getZ() < TOOLS[i].SetupInfo.GetMinNz( ToolSearchParameters.vtToolDirection) - GEO.EPS_ZERO and TOOLS[i].SetupInfo.HeadType.bTop then bIsToolCompatible = false - elseif ToolSearchParameters.vtToolDirection:getZ() > TOOLS[i].SetupInfo.GetMaxNz( ToolSearchParameters.vtToolDirection) + GEO.EPS_ZERO then + elseif ToolSearchParameters.vtToolDirection:getZ() > TOOLS[i].SetupInfo.GetMaxNz( ToolSearchParameters.vtToolDirection) + GEO.EPS_ZERO and TOOLS[i].SetupInfo.HeadType.bBottom then bIsToolCompatible = false elseif ToolSearchParameters.sMillShape == 'STANDARD' and ( TOOLS[i].dSideAngle ~= 0 or TOOLS[i].bIsPen) then bIsToolCompatible = false