This commit is contained in:
luca.mazzoleni
2025-03-13 16:54:39 +01:00
3 changed files with 46 additions and 31 deletions
+36 -27
View File
@@ -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])
+8 -2
View File
@@ -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
-------------------------------------------------------------------------------------------------------------
+2 -2
View File
@@ -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