Merge branch 'develop' into feature/DoubleCut

This commit is contained in:
luca.mazzoleni
2025-04-29 15:06:52 +02:00
3 changed files with 61 additions and 14 deletions
+46 -3
View File
@@ -261,8 +261,8 @@ if bToProcess then
local b3Raw = EgtGetRawPartBBox( nRawId)
-- Calcolo posizione estremo TR o BR della tavola rispetto a sua origine in BL
local dPosY = EgtIf( BeamData.CENTER_BEAM, ( b3Tab:getDimY() + b3Raw:getDimY() * EgtIf( BeamData.RIGHT_LOAD, -1, 1)) / 2, EgtIf( BeamData.RIGHT_LOAD, 0, b3Tab:getDimY()))
BeamData.OriXR = Point3d( b3Tab:getDimX(), dPosY, 0)
BeamData.PosXR = EgtIf( BeamData.RIGHT_LOAD, MCH_CR.BR, MCH_CR.TR)
BeamData.ptOriXR = Point3d( b3Tab:getDimX(), dPosY, 0)
BeamData.dPosXR = EgtIf( BeamData.RIGHT_LOAD, MCH_CR.BR, MCH_CR.TR)
-- Calcolo minimo grezzo scaricabile
BeamExec.CalcMinUnloadableRaw( b3Raw:getDimY(), b3Raw:getDimZ())
-- altrimenti devo recuperare i pezzi per creare la barra
@@ -489,7 +489,50 @@ if bToProcess then
if not vVal or #vVal < 2 then break end
local nPartId = tonumber( vVal[1])
local dPosX = tonumber( vVal[2])
table.insert( PARTS, { id = nPartId, dPosX = dPosX, sName = ( EgtGetName( nPartId) or ( 'Id=' .. tonumber( nPartId)))})
table.insert( PARTS, { nInd = #PARTS + 1, id = nPartId, dPosX = dPosX, sName = ( EgtGetName( nPartId) or ( 'Id=' .. tonumber( nPartId)))})
end
-- se lunghezza barra non settata, la leggo ora
if not dBarLen then
dBarLen = EgtGetInfo( nMGrpId, 'BARLEN', 'd')
end
-- Recupero tutte le informazioni dei pezzi
local dLen = dBarLen
for i = 1, #PARTS do
-- aggiorno grezzo precedente
PARTS[i].idRaw = EgtGetRawPartFromPart( PARTS[i].id)
PARTS[i].bIsLastPart = ( i == #PARTS)
-- dimensioni del grezzo ( comprende sovramateriale di testa e lavorazione di coda per separazione)
PARTS[i].b3Raw = EgtGetRawPartBBox( PARTS[i].idRaw)
PARTS[i].dRawLength = PARTS[i].b3Raw:getDimX()
PARTS[i].dRawWidth = PARTS[i].b3Raw:getDimY()
PARTS[i].dRawHeight = PARTS[i].b3Raw:getDimZ()
-- dimensione pezzo finito
PARTS[i].b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( PARTS[i].id, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD)
PARTS[i].dLength = PARTS[i].b3Part:getDimX()
PARTS[i].dWidth = PARTS[i].b3Part:getDimY()
PARTS[i].dHeight = PARTS[i].b3Part:getDimZ()
PARTS[i].bSquareSection = abs( PARTS[i].dWidth - PARTS[i].dHeight) < 100 * GEO.EPS_SMALL
PARTS[i].nIndexInParts = i
PARTS[i].CombinationList = BeamExec.GetAvailableCombinations( PARTS[i])
PARTS[i].SplittingPoints = BeamLib.GetPartSplittingPoints( PARTS[i])
-- sovramateriale in testa al pezzo
local dDeltaS = max( PARTS[i].dPosX - ( dBarLen - dLen), 0)
-- lunghezza grezzo (comprende sovramateriale di testa e mm tagliati in coda dalla lavorazione, tipicamente 5.4mm dello spessore lama)
local dCrawLen = PARTS[i].dRawLength
-- materiale tolto in coda dalla lavorazione di separazione
local dDeltaE = dCrawLen - PARTS[i].dLength - dDeltaS
local dDeltaNextPiece
if PARTS[i+1] then
dDeltaNextPiece = PARTS[i+1].dPosX - ( dBarLen - dLen) - dCrawLen + dDeltaE
else
dDeltaNextPiece = 10000
end
PARTS[i].dDistanceToNextPiece = dDeltaNextPiece
-- aggiorno la lunghezza residua della barra
dLen = dLen - dCrawLen
PARTS[i].dRestLength = dLen
end
end
+11 -11
View File
@@ -309,7 +309,7 @@ local function IsCombinationAvailable( sCombination, nUnloadPos, bSquareSection)
end
-------------------------------------------------------------------------------------------------------------
local function GetAvailableCombinations( PartInfo)
function BeamExec.GetAvailableCombinations( PartInfo)
local CombinationList = {}
CombinationList.Rotations = {0, 0, 0, 0} -- indice rotazione attiva, per calcolo collect feature
@@ -482,7 +482,7 @@ function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, dOvmMid, PARTS, b
PARTS[i].bSquareSection = abs( PARTS[i].dWidth - PARTS[i].dHeight) < 100 * GEO.EPS_SMALL
PARTS[i].b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( PARTS[i].id, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD)
PARTS[i].nIndexInParts = i
PARTS[i].CombinationList = GetAvailableCombinations( PARTS[i])
PARTS[i].CombinationList = BeamExec.GetAvailableCombinations( PARTS[i])
PARTS[i].SplittingPoints = BeamLib.GetPartSplittingPoints( PARTS[i])
else
local sOut = 'Error: part L(' .. EgtNumToString( dPartLen, 1) .. ') too big for raw part L(' .. EgtNumToString( dLen - 0.1, 1) .. ')'
@@ -1078,9 +1078,12 @@ local function AddFeatureResultToGlobalList( Proc, OptionalParameters)
nCompletionIndex = nCompletionIndex,
dCompositeRating = dCompositeRating,
sInfo = sInfo
},
AvailableStrategies = BeamLib.TableCopyDeep( Proc.AvailableStrategies)
}
}
-- scrivo le strategie disponibili solo se ne esistono
if Proc.AvailableStrategies then
RESULT[#RESULT].AvailableStrategies = BeamLib.TableCopyDeep( Proc.AvailableStrategies)
end
return RESULT
end
@@ -1133,16 +1136,13 @@ local function CalculateMachinings( vProc, Part, nInitialRotation)
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)
-- se tutte le strategie disponibili non sono applicabili
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
-- se taglio testa o coda, per il momento dico che è ok. Poi serve messaggio apposito
if ID.IsHeadCut( Proc) or ID.IsTailCut( Proc) then
-- TODO dare messaggio separazione impossibile
else
error( 'UNEXPECTED ERROR: Standard feature MUST HAVE ChosenStrategy')
bAreAllApplyOk = false
end
-- TODO dare messaggio che la feature non 0è stata eseguita nonostante la presenza di strategie disponibili
end
end
-- scrivo risultato in tabella globale
+4
View File
@@ -572,6 +572,10 @@ end
--- copia una tabella lua in modo ricorsivo, ossia mantiene indipendenti anche tutte le sottotabelle
--- ATTENZIONE: in caso di modifiche vanno gestiti anche i tipi custom; sarebbe meglio metterla nel LuaLibs
function BeamLib.TableCopyDeep( OriginalTable)
-- controllo se oggetto passato è valido, altrimenti errore. Non deve mai succedere
if not OriginalTable then
error( "TableCopyDeep : can't copy nil object")
end
local CopiedTable = {}
for key, value in pairs( OriginalTable) do
if type( value) == "table" then