diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index fda8bc3..d9eeb9a 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -37,8 +37,6 @@ -- 2022/08/18 Aggiunta gestione macchine con testa da sotto con lama da sotto disabilitata. -- 2022/09/21 Nella funzione di ordinamento il foro del birdsmouth viene sempre fatto prima della lavorazione stessa -- 2022/09/28 I fori vengono sempre fatti prima delle tacche. --- 2022/09/29 Aggiunta la ricerca di feature specchiate, al momento solo per DtMortise, con le relative funzioni. - -- Tabella per definizione modulo local BeamExec = {} @@ -1370,109 +1368,6 @@ local function MoveDrillsOnTenon( vProc) end end -------------------------------------------------------------------------------------------------------------- --- Estrazione parametri P da lavorazioni di tipo DtMortise -local function GetPParametersDtMortise( Proc) - local vPParameters = { - { 'P01', 'd'}, - { 'P02', 'd'}, - { 'P03', 'd'}, - { 'P04', 'i'}, - { 'P05', 'i'}, - { 'P06', 'd'}, - { 'P07', 'd'}, - { 'P09', 'd'}, - { 'P10', 'd'}, - { 'P11', 'd'}, - { 'P12', 'd'}, - { 'P13', 'd'}, - { 'P14', 'd'}, - { 'P15', 'd'} - } - for i = 1, #vPParameters do - vPParameter = vPParameters[i] - vPParameter[3] = EgtGetInfo( Proc.Id, vPParameter[1], vPParameter[2]) - end - return vPParameters -end - -------------------------------------------------------------------------------------------------------------- --- Controlla se la feature ProcMirror รจ la specchiata di Proc, per feature di tipo DtMortise -local function CheckMirrorDtMortise( Proc, ProcMirror, dHBeam) - local bIsMirror = true - local vPParametersProc = GetPParametersDtMortise( Proc) - local vPParametersMirror = GetPParametersDtMortise( ProcMirror) - local nP02, nP06 = 2, 6 - -- controllo che i parametri P delle due feature, tranne P02 e P06, siano uguali - for i = 1, #vPParametersProc do - local vPParameterProc = vPParametersProc[i] - local vPParameterMirror = vPParametersMirror[i] - if vPParameterProc[1] ~= 'P02' and vPParameterProc[1] ~= 'P06'then - bIsMirror = ( abs( vPParameterProc[3] - vPParameterMirror[3]) < 100 * GEO.EPS_SMALL) - if bIsMirror == false then break end - elseif vPParameterProc[1] == 'P02' then - nP02 = i - elseif vPParameterProc[1] == 'P06' then - nP06 = i - end - end - -- se gli altri parametri P sono uguali, verifico che P02 e P06 siano compatibili con feature specchiate - if bIsMirror == true then - bIsMirror = ( ( vPParametersProc[nP02][3] == 0 and abs( vPParametersMirror[nP02][3] - dHBeam) < 100 * GEO.EPS_SMALL) and - ( vPParametersProc[nP06][3] == 90 and vPParametersMirror[nP06][3] == -90)) or - ( ( vPParametersMirror[nP02][3] == 0 and abs( vPParametersProc[nP02][3] - dHBeam) < 100 * GEO.EPS_SMALL) and - ( vPParametersMirror[nP06][3] == 90 and vPParametersProc[nP06][3] == -90)) - end - return bIsMirror -end - -------------------------------------------------------------------------------------------------------------- --- Cerca se esiste una feature specchiata di Proc e nel caso ne restituisce la posizione in vProc -local function FindMirrorFeature( vProc, Proc, sFeatureType, dHBeam) - local nProcMirror - -- se mortasa a coda di rondine - if sFeatureType == 'DtMortise' then - Proc.Side = EgtGetInfo( Proc.Id, 'SIDE', 'i') - if Proc.Side == 1 or Proc.Side == 3 then - for i = 1, #vProc do - local ProcMirror = vProc[i] - if DtMortise.SideIdentify(ProcMirror) then - ProcMirror.Side = EgtGetInfo( ProcMirror.Id, 'SIDE', 'i') - if ( Proc.Side == 1 and ProcMirror.Side == 3) or ( Proc.Side == 3 and ProcMirror.Side == 1) then - local bIsMirror = CheckMirrorDtMortise( Proc, ProcMirror, dHBeam) - if bIsMirror then nProcMirror = i end - end - end - end - end - end - -- se foratura (da implementare) - return nProcMirror -end - -------------------------------------------------------------------------------------------------------------- --- Cerca in vProc la presenza di feature specchiate. Se le trova scrive in Proc e nelle info l'Id della specchiata. -local function SetMirroredFeatures( vProc, dHBeam) - for i = 1, #vProc do - local Proc = vProc[i] - local sFeatureType - if DtMortise.SideIdentify(Proc) then - sFeatureType = 'DtMortise' - elseif Drill.Identify(Proc) then - sFeatureType = 'Drill' - end - if ( sFeatureType == 'DtMortise' or sFeatureType == 'Drill') and not Proc.MirrorId then - local nProcMirror = FindMirrorFeature( vProc, Proc, sFeatureType, dHBeam) - if nProcMirror then - Proc.MirrorId = vProc[nProcMirror].Id - vProc[nProcMirror].MirrorId = Proc.Id - EgtSetInfo( Proc.Id, 'MIRRORID', vProc[nProcMirror].Id) - EgtSetInfo( vProc[nProcMirror].Id, 'MIRRORID', Proc.Id) - end - end - end -end - ------------------------------------------------------------------------------------------------------------- -- verifica se ci sono forature da lavorare dopo tagli di testa o coda e nel caso le classifica come Head o Tail e gli assegna l'Id della rispettiva feature di taglio local function SetDrillingsToMachineAfterHeadOrTailCut( vProc, vMachineBeforeIntersectingDrillings) @@ -1567,11 +1462,6 @@ function BeamExec.ProcessFeatures() if BD.IMPROVE_HEAD_TAIL_DRILLINGS then SetDrillingsToMachineAfterHeadOrTailCut( vProc, vMachineBeforeIntersectingDrillings) end - -- verifica presenza di feature specchiate per eventuali lavorazioni simultanee - local bConcurrentDoubleHead = BD.DOUBLE_HEAD_MIRRORED_FEATURES and ( BD.TWO_EQUAL_HEADS or BD.TWO_UP_DOWN_HEADS) - if bConcurrentDoubleHead then - SetMirroredFeatures( vProc, EgtGetRawPartBBox( nRawId):getDimZ()) - end -- le ordino lungo X OrderFeatures( vProc, b3Raw) -- le classifico diff --git a/LuaLibs/ProcessDtMortise.lua b/LuaLibs/ProcessDtMortise.lua index e7ebb09..def01c1 100644 --- a/LuaLibs/ProcessDtMortise.lua +++ b/LuaLibs/ProcessDtMortise.lua @@ -7,7 +7,6 @@ -- 2021/12/01 Se frontale aggiungo taglio con Grp e Proc di vero taglio (per aggiornare ingombro di testa /coda). -- 2022/06/01 Modifiche per evitare di entrare nel legno con mortase parziali. -- 2022/08/18 Migliorato calcolo dello step. --- 2022/09/29 Aggiunto riconoscimento della sola feature laterale. -- Tabella per definizione modulo local ProcessDtMortise = {} @@ -40,12 +39,6 @@ function ProcessDtMortise.FrontIdentify( Proc) return (( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 56) end ---------------------------------------------------------------------- --- Riconoscimento della sola feature laterale -function ProcessDtMortise.SideIdentify( Proc) - return (( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 55) -end - --------------------------------------------------------------------- -- Verifica se feature di coda function ProcessDtMortise.IsTailFeature( Proc, b3Raw) diff --git a/NestProcess.lua b/NestProcess.lua index 745d7d3..0025ac2 100644 --- a/NestProcess.lua +++ b/NestProcess.lua @@ -1,5 +1,6 @@ -- BeamNestProcess.lua by Egaltech s.r.l. 2021/06/14 -- Gestione nesting automatico travi +-- 2022/10/05 Piccole modifiche per far funzionare correttamente i compilati -- Intestazioni require( 'EgtBase') @@ -211,7 +212,10 @@ for ShortIndex = 1, #ShortList do ShortCount = ShortCount + ShortList[ShortIndex].Cnt end local ShortForRaw = floor( ShortCount / MediumRawQty) -local ExtraShortForRaw = fmod( ShortCount, MediumRawQty) +local ExtraShortForRaw = 0 +if MediumRawQty > 0 then + ExtraShortForRaw = fmod( ShortCount, MediumRawQty) +end -- creo lista pezzi corti singoli local SingleShortList = {} for ShortIndex = 1, #ShortList do @@ -329,7 +333,7 @@ while nMachGroup do if EgtGetInfo( nMachGroup, "AUTONEST",'i') == 1 then EgtRemoveInfo( nMachGroup, "AUTONEST") EgtSetInfo( nMachGroup, "UPDATEUI", 1) - local bOk, sErr = pcall( dofile, EgtGetSourceDir() .. "BatchProcessNew.lua") + local bOk, sErr = pcall( dofile, BEAM.BASEDIR .. "\\BatchProcessNew.lua") if not bOk then EgtOutLog( 'Error in BatchProcessNew.lua call (' .. ( sErr or '') ..')') end