diff --git a/Essetre-90480025.mlde b/Essetre-90480025.mlde index 7a80d8d..91d6bbf 100644 --- a/Essetre-90480025.mlde +++ b/Essetre-90480025.mlde @@ -1,12 +1,15 @@ --- Descrizione macchina Essetre-WALL by EgalTech s.r.l. 2024/09/23 +-- Descrizione macchina Essetre-WALL by EgalTech s.r.l. 2022/07/19 -- Cliente PodBau +-- 2022/07/19 Ver.2.4g1 DS Aggiunti 9 utensili (T10-T18) rinominati quelli che collidevano come T. +-- 2024/09/25 Ver.2.6i1 AV NGE con solidi di collisione +-- Aggiunta controllo collisione con nuovi oggetti require( 'EmtGenerator') EgtEnableDebug( false) if not EmtModifyHeadAuxDirection then error( 'A newer version of the program is required (minimum 2.3j5)') end -PP_VER = '2.6i1' -PP_NVER = '2.6.9.1' +PP_VER = '2.6i2' +PP_NVER = '2.6.9.2' -- Parametri macchina NumericalControl = 'NUM' -- NUM o TPA @@ -54,10 +57,10 @@ Nail14DeltaZ = 37.0 Orig2DeltaX = 0 Orig2DeltaY = -4000 Orig2DeltaZ = 0 -Orig3DeltaX = 41770 +Orig3DeltaX = 41550 Orig3DeltaY = 0 Orig3DeltaZ = 0 -Orig4DeltaX = 41770 +Orig4DeltaX = 41550 Orig4DeltaY = -4000 Orig4DeltaZ = 0 Orig5DeltaX = 27000 @@ -66,7 +69,7 @@ Orig5DeltaZ = 0 Orig6DeltaX = 27000 Orig6DeltaY = -4000 Orig6DeltaZ = 0 -DimTabX = 41770.0 +DimTabX = 41550.0 DimTabY = 4000.0 DeltaTabX = 809.65 DeltaTabY = -5290.0 @@ -175,7 +178,7 @@ local BaseId = EmtBase { Name = 'Base', Geo='BASE/GEO', Aux={'BASE/LOAD', 'BASE/MOD01', 'BASE/MOD02', 'BASE/MOD03', 'BASE/MOD04', 'BASE/MOD05', 'BASE/MOD06', 'BASE/MOD07', 'BASE/FLIPDEVICE', - 'BASE/MOD08', 'BASE/MOD09', 'BASE/MOD10', 'BASE/MOD11', 'BASE/MOD12', 'BASE/MOD13', 'BASE/MOD14', 'BASE/COLLISION'}} + 'BASE/MOD08', 'BASE/MOD09', 'BASE/MOD10', 'BASE/MOD11', 'BASE/MOD12', 'BASE/MOD13', 'BASE/MOD14', 'BASE/REF', 'BASE/COLLISION'}} local vtMove = Vector3d( DeltaTabX - 809.65, DeltaTabY + 5290.0, DeltaTabZ + 990) EgtMove( BaseId, vtMove, GDB_RT.GLOB) -- Tavola @@ -184,7 +187,7 @@ EmtTable { Parent = 'Base', Type = MCH_TT.FLAT, Ref1 = Point3d( DeltaTabX, DeltaTabY, DeltaTabZ), - Scale = {DimTabX/41770, DimTabY/4000, 1}, + Scale = {DimTabX/41550, DimTabY/4000, 1}, Geo = 'TABLE/GEO'} -- Traversa EmtAxis { @@ -435,6 +438,70 @@ EmtTcPos { TDir = -Y_AX(), ADir = X_AX(), Geo = 'Y_AXIS/TA9'} +local ptTcB = Point3d( -370.6,-4226.7,17.0) +EmtTcPos { + Name = 'T10', + Parent = 'Y', + Pos = ptTcB, + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB1'} +EmtTcPos { + Name = 'T11', + Parent = 'Y', + Pos = ptTcB + 120 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB2'} +EmtTcPos { + Name = 'T12', + Parent = 'Y', + Pos = ptTcB + 240 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB3'} +EmtTcPos { + Name = 'T13', + Parent = 'Y', + Pos = ptTcB + 360 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB4'} +EmtTcPos { + Name = 'T14', + Parent = 'Y', + Pos = ptTcB + 480 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB5'} +EmtTcPos { + Name = 'T15', + Parent = 'Y', + Pos = ptTcB + 600 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB6'} +EmtTcPos { + Name = 'T16', + Parent = 'Y', + Pos = ptTcB + 720 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB7'} +EmtTcPos { + Name = 'T17', + Parent = 'Y', + Pos = ptTcB + 840 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB8'} +EmtTcPos { + Name = 'T18', + Parent = 'Y', + Pos = ptTcB + 960 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB9'} EmtTcPos { Name = 'T101', Parent = 'Y', diff --git a/Essetre-WALL.mlpe b/Essetre-WALL.mlpe index 014274a..d473b05 100644 --- a/Essetre-WALL.mlpe +++ b/Essetre-WALL.mlpe @@ -1,10 +1,13 @@ --- Processore macchina Essetre-WALL by EgalTech s.r.l. 2020/10/22 +-- Processore macchina Essetre-WALL by EgalTech s.r.l. 2022/03/08 -- Funzioni generiche indipendenti dal controllo -- 2020/07/21 ver 2.3g5 DS Modificata ExecScrapRemove per maggiore precisione nel riconoscere i veri sfridi. -- 2020/09/16 ver 2.3i1 DS Correzione a ExecScrapRemove per evitare crash (va approfondita). -- 2020/09/16 ver 2.3i2 DS Riportato ExecScrapRemove e gestione collisioni da Wall_90480026 (cliente portoghese). -- 2020/10/22 ver 2.3j4 DS Corretto problema mancato posizionamento B1=90 e C1=90 quando si seleziona H14. +-- 2022/01/20 ver 2.4a3 DS In ExecScrapRemove migliorato calcolo centro di ogni parte del Vmill. +-- 2022/01/20 ver 2.4a3 DS Aggiunta gestione ingombri riferimenti per collisioni. +-- 2022/03/08 ver 2.4c1 DS In ExecScrapRemove si accettano pezzi fino a 19% dell'originale. -- Intestazioni require( 'EmtGenerator') @@ -66,11 +69,31 @@ function OnSimulStart() DumpCollisionCheck( EMT.COLLOBJ, 'Collision Objects :', 4) -- Preparo lista solidi macchina con cui possono collidere gli oggetti sopra riportati (in aggiunta a VMill) EMT.MCODET = {} - EMT.MCODET[1] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'STM') - EMT.MCODET[2] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'Y'), 'COLLISION'), 'TRAV') - EMT.MCODET[3] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'Y'), 'COLLISION'), 'COL1') - EMT.MCODET[4] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'Y'), 'COLLISION'), 'COL2') - EMT.MCODET[5] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'X1'), 'COLLISION'), 'TRAV') + EMT.MCODET[1] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'Y'), 'COLLISION'), 'TRAV') + EMT.MCODET[2] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'Y'), 'COLLISION'), 'COL1') + EMT.MCODET[3] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'Y'), 'COLLISION'), 'COL2') + EMT.MCODET[4] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'Y'), 'COLLISION'), 'TC1') + EMT.MCODET[5] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'Y'), 'COLLISION'), 'TC2') + EMT.MCODET[6] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'Y'), 'COLLISION'), 'TC3') + EMT.MCODET[7] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'Y'), 'COLLISION'), 'TC4') + EMT.MCODET[8] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'X1'), 'COLLISION'), 'TRAV') + EMT.MCODET[9] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'STM') + EMT.MCODET[10] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'Ref1_1') + EMT.MCODET[11] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'Ref1_2') + EMT.MCODET[12] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'Ref1_3') + EMT.MCODET[13] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'Ref1_4') + EMT.MCODET[14] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'Ref1_5') + EMT.MCODET[15] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'Ref3_1') + EMT.MCODET[16] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'Ref3_2') + EMT.MCODET[17] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'Ref3_3') + EMT.MCODET[18] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'Ref3_4') + EMT.MCODET[19] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'Ref3_5') + for i = #EMT.MCODET, 1, -1 do + if not EMT.MCODET[i] then + table.remove( EMT.MCODET, i) + EgtOutLog( 'Warning : MCODET element (' .. tostring( i) .. ') is null') + end + end -- Preparo lista collisioni vuota EMT.COLLIDE = {} end @@ -505,7 +528,7 @@ function ExecScrapRemove() end -- verifico se sono molto probabilmente valide for j = 1, #vPart do - if bToRemove and ( OverlapsXY( vVmPart[i].Box, vPart[j].Box) and vVmPart[i].Area > 0.49 * vPart[j].Area) then + if bToRemove and ( OverlapsXY( vVmPart[i].Box, vPart[j].Box) and vVmPart[i].Area > 0.19 * vPart[j].Area) then bToRemove = false break end @@ -517,10 +540,6 @@ function ExecScrapRemove() table.remove( vVmPart, i) end end - ---- Se il numero delle parti non supera il numero dei pezzi, ho finito - if #vVmPart <= #vPart then - return - end -- Se il numero delle parti sicuramente valide uguaglia il numero dei pezzi, elimino le altre ed ho finito if nValidCnt == #vPart then for i = #vVmPart, 1, -1 do @@ -534,13 +553,14 @@ function ExecScrapRemove() -- Calcolo punti interni alle parti di Vmill non già dichiarate valide for i = 1, #vVmPart do if not vVmPart[i].Part then - local ptP = vVmPart[i].Box:getCenter() - Y_AX() * vVmPart[i].Box:getDimY() - local bOk, vIntType, vIntDist = EgtLineVolZmapInters( ptP, Y_AX(), EMT.VMILL, GDB_RT.GLOB) + local vtDir = VectorFromRotated( X_AX(), Z_AX(), 45) + local ptP = vVmPart[i].Box:getCenter() - vtDir * ( vVmPart[i].Box:getRadius() + 10) + local bOk, vIntType, vIntDist = EgtLineVolZmapInters( ptP, vtDir, EMT.VMILL, GDB_RT.GLOB) if bOk then for j = 1, #vIntType do -- se la corrente entra ed esiste la successiva che esce if vIntType[j] == GDB_SLT.IN and j + 1 <= #vIntType and vIntType[j + 1] == GDB_SLT.OUT then - local ptC = ptP + Y_AX() * (( vIntDist[j] + vIntDist[j + 1]) / 2) + local ptC = ptP + vtDir * (( vIntDist[j] + vIntDist[j + 1]) / 2) local nPart = EgtVolZmapGetPartMinDist( EMT.VMILL, ptC, GDB_RT.GLOB) if nPart == i - 1 then vVmPart[i].Cen = ptC @@ -553,26 +573,28 @@ function ExecScrapRemove() end -- Verifico le parti di Vmill non già dichiarate valide for i = #vVmPart, 1, -1 do - if not vVmPart[i].Part and vVmPart[i].Cen then + if not vVmPart[i].Part then local bToRemove = true - for j = 1, #vPart do - if EnclosesPointXY( vPart[j].Box, vVmPart[i].Cen) then - bToRemove = false - break - end - end - for j = 1, #vVmPart do - if j ~= i then - local vExpBox = BBox3d( vVmPart[j].Box) - -- lo espando in XY per sicurezza - vExpBox:Add( vExpBox:getMin() - Vector3d( 100, 100, 0)) - vExpBox:Add( vExpBox:getMax() + Vector3d( 100, 100, 0)) - -- verifico contenimento - if EnclosesXY( vExpBox, vVmPart[i].Box) then - bToRemove = true + if vVmPart[i].Cen then + for j = 1, #vPart do + if EnclosesPointXY( vPart[j].Box, vVmPart[i].Cen) then + bToRemove = false break end end + for k = 1, #vVmPart do + if k ~= i then + local vExpBox = BBox3d( vVmPart[k].Box) + -- lo espando in XY per sicurezza + vExpBox:Add( vExpBox:getMin() - Vector3d( 100, 100, 0)) + vExpBox:Add( vExpBox:getMax() + Vector3d( 100, 100, 0)) + -- verifico contenimento + if EnclosesXY( vExpBox, vVmPart[i].Box) then + bToRemove = true + break + end + end + end end -- se richiesta eliminazione, la eseguo if bToRemove then diff --git a/Essetre-WALL.nge b/Essetre-WALL.nge index 68631b7..7ecc901 100644 Binary files a/Essetre-WALL.nge and b/Essetre-WALL.nge differ diff --git a/Scripts/SetUp.lua b/Scripts/SetUp.lua index 13f76bb..a376b01 100644 --- a/Scripts/SetUp.lua +++ b/Scripts/SetUp.lua @@ -37,15 +37,24 @@ local PositionTable={{Pos = "Pos1", TcPos = "T1", Head = "H1", Group = "G1"}, {Pos = "Pos7", TcPos = "T7", Head = "H1", Group = "G1"}, {Pos = "Pos8", TcPos = "T8", Head = "H1", Group = "G1"}, {Pos = "Pos9", TcPos = "T9", Head = "H1", Group = "G1"}, - {Pos = "Pos10", TcPos = "T101", Head = "H3", Group = "G2"}, - {Pos = "Pos11", TcPos = "T201", Head = "H1", Group = "G2"}, - {Pos = "Pos12", TcPos = "T202", Head = "H1", Group = "G2"}, - {Pos = "Pos13", TcPos = "T203", Head = "H1", Group = "G2"}, - {Pos = "Pos14", TcPos = "T42", Head = "H2", Group = "G4"}, - {Pos = "Pos15", TcPos = "T11", Head = "H21", Group = "G4"}, - {Pos = "Pos16", TcPos = "T12", Head = "H22", Group = "G4"}, - {Pos = "Pos17", TcPos = "T13", Head = "H23", Group = "G4"}, - {Pos = "Pos18", TcPos = "T14", Head = "H14", Group = "G3"}} + {Pos = "Pos10", TcPos = "T10", Head = "H1", Group = "G2"}, + {Pos = "Pos11", TcPos = "T11", Head = "H1", Group = "G2"}, + {Pos = "Pos12", TcPos = "T12", Head = "H1", Group = "G2"}, + {Pos = "Pos13", TcPos = "T13", Head = "H1", Group = "G2"}, + {Pos = "Pos14", TcPos = "T14", Head = "H1", Group = "G2"}, + {Pos = "Pos15", TcPos = "T15", Head = "H1", Group = "G2"}, + {Pos = "Pos16", TcPos = "T16", Head = "H1", Group = "G2"}, + {Pos = "Pos17", TcPos = "T17", Head = "H1", Group = "G2"}, + {Pos = "Pos18", TcPos = "T18", Head = "H1", Group = "G2"}, + {Pos = "Pos19", TcPos = "T101", Head = "H3", Group = "G3"}, + {Pos = "Pos20", TcPos = "T201", Head = "H1", Group = "G3"}, + {Pos = "Pos21", TcPos = "T202", Head = "H1", Group = "G3"}, + {Pos = "Pos22", TcPos = "T203", Head = "H1", Group = "G3"}, + {Pos = "Pos23", TcPos = "T42", Head = "H2", Group = "G3"}, + {Pos = "Pos24", TcPos = "T31", Head = "H21", Group = "G4"}, + {Pos = "Pos25", TcPos = "T32", Head = "H22", Group = "G4"}, + {Pos = "Pos26", TcPos = "T33", Head = "H23", Group = "G4"}, + {Pos = "Pos27", TcPos = "T34", Head = "H14", Group = "G4"}} local UsePositionHead = true diff --git a/Wall/SurfacingData.lua b/Wall/SurfacingData.lua new file mode 100644 index 0000000..3dc1213 --- /dev/null +++ b/Wall/SurfacingData.lua @@ -0,0 +1,11 @@ +-- SurfacingData.lua by Egaltech s.r.l. 29.09.2022 10:44:49 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local SurfacingData = { + { On = true, Name = 'Surffinishing', Type = 'Finishing'}, + { On = true, Name = 'Surffinishing_DIA', Type = 'Finishing'} +} + +--------------------------------------------------------------------- +return SurfacingData