- Aggiornamento macchina con ultima configurazione che aveva il cliente
- NGE con solidi di collisione - Aggiunta controllo collisione con nuovi oggetti
This commit is contained in:
+75
-8
@@ -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',
|
||||
|
||||
+52
-30
@@ -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
|
||||
|
||||
Binary file not shown.
+18
-9
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user