diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index ee152da..077c296 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -251,6 +251,27 @@ function BeamExec.GetStrategiesFromJSONinBD( sAISetupConfigName) end end +------------------------------------------------------------------------------------------------------------- +local function GetRotationName( nRotIndex, nInvertIndex) + local sRotation = '' + + if nRotIndex == 1 then + sRotation = '0' + elseif nRotIndex == 2 then + sRotation = '90' + elseif nRotIndex == 3 then + sRotation = '180' + elseif nRotIndex == 4 then + sRotation = '270' + end + + if nInvertIndex > 1 then + sRotation = sRotation .. 'INV' + end + + return sRotation +end + -- TODO prevedere parametri per preferire carico del pezzo verticale oppure orizzontale? ------------------------------------------------------------------------------------------------------------- -- funzione che controlla validità delle combinazioni proposte @@ -927,29 +948,27 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part) HeadProc.AvailableStrategies = GetStrategies( HeadProc, Part.sAISetupConfig) TailProc.AvailableStrategies = GetStrategies( TailProc, Part.sAISetupConfig) -- per nesting, si settano come info gli offset X degli estremi dei tagli + local HeadcutInfo = {} local PtSortedHead = BeamLib.GetSortedVertices( HeadProc) - local PtSortedTail = BeamLib.GetSortedVertices( TailProc) if PtSortedHead then - local HeadVertexOffsetX = {} + HeadcutInfo.OffsetX = {} for i = 1, #PtSortedHead do - table.insert( HeadVertexOffsetX, Part.b3Part:getMax():getX() - PtSortedHead[i]:getX()) + table.insert( HeadcutInfo.OffsetX, Part.b3Part:getMax():getX() - PtSortedHead[i]:getX()) end - local sInfo = table.concat( HeadVertexOffsetX, ',') - EgtSetInfo( Part.id, 'HEADOFFSETX', sInfo) end + local TailcutInfo = {} + local PtSortedTail = BeamLib.GetSortedVertices( TailProc) if PtSortedTail then - local TailVertexOffsetX = {} + TailcutInfo.OffsetX = {} for i = 1, #PtSortedHead do - table.insert( TailVertexOffsetX, Part.b3Part:getMin():getX() - PtSortedTail[i]:getX()) + table.insert( TailcutInfo.OffsetX, Part.b3Part:getMin():getX() - PtSortedTail[i]:getX()) end - local sInfo = table.concat( TailVertexOffsetX, ',') - EgtSetInfo( Part.id, 'TAILOFFSETX', sInfo) end -- per nesting, si settano come info le normali delle facce di taglio - EgtSetInfo( Part.id, 'HEADVTN', tostring( HeadProc.Faces[1].vtN)) - EgtSetInfo( Part.id, 'TAILVTN', tostring( TailProc.Faces[1].vtN)) + HeadcutInfo.vtN = HeadProc.Faces[1].vtN + TailcutInfo.vtN = TailProc.Faces[1].vtN - return vProcSingleRot + return vProcSingleRot, HeadcutInfo, TailcutInfo end ------------------------------------------------------------------------------------------------------------- @@ -1368,12 +1387,15 @@ function BeamExec.GetProcessings( PARTS, bIsFlipRot) -- se è prerotazione, oltre al ciclo normale, si devono verificare anche invertiti local bCalcInverted = bIsFlipRot and PARTS[nPart].GeneralParameters.GEN_bAllowPieceInversion local nCycles = EgtIf( bCalcInverted, 2, 1) + PARTS[nPart].HeadcutInfo = {} + PARTS[nPart].TailcutInfo = {} -- per ogni inversione for nInvertIndex = 1, nCycles do -- per ogni rotazione for nRotIndex = 1, 4 do local nOffsetIndex = EgtIf( nInvertIndex == 2, 4, 0) local nIndex = nRotIndex + nOffsetIndex + local HeadcutInfo, TailcutInfo -- si calcolano le feature solo se la rotazione può essere presa in considerazione if PARTS[nPart].CombinationList.Rotations[nRotIndex] == 1 then -- recupero le feature di lavorazione della trave @@ -1381,11 +1403,24 @@ function BeamExec.GetProcessings( PARTS, bIsFlipRot) -- recupero informazioni ausiliarie feature e dipendenze tra feature stesse -- TODO le dipendenze cambiano in base alla rotazione del pezzo? probabilmente no - vProcRot[nIndex] = GetFeatureInfoAndDependency( vProcRot[nIndex], PARTS[nPart]) + vProcRot[nIndex], HeadcutInfo, TailcutInfo = GetFeatureInfoAndDependency( vProcRot[nIndex], PARTS[nPart]) else -- inserisco una tabella vuota table.insert( vProcRot, {}) end + local sRotation = GetRotationName( nRotIndex, nInvertIndex) + if HeadcutInfo then + PARTS[nPart].HeadcutInfo[sRotation] = { + OffsetX = HeadcutInfo.OffsetX, + vtN = HeadcutInfo.vtN + } + end + if TailcutInfo then + PARTS[nPart].TailcutInfo[sRotation] = { + OffsetX = TailcutInfo.OffsetX, + vtN = TailcutInfo.vtN + } + end -- rotazione pezzo di 90° per volta BeamLib.RotateRawPart( PARTS[nPart], 1) -- aggiorno info pezzo @@ -2451,6 +2486,9 @@ function BeamExec.ProcessAlternatives( PARTS) -- TEST BEAM.INFONGEPART = { 'TEST=666,999,666,999', 'TEST2=44444444444', 'TEST3=sksksk'} + + -- local sHeadVtN = ( tostring( HeadProc.Faces[1].vtN)):gsub("^%(", ""):gsub("%)$", "") + -- local sTailVtN = ( tostring( TailProc.Faces[1].vtN)):gsub("^%(", ""):gsub("%)$", "") -- TEST