Files
masterwood-project265/Scripts/InitDisp.lua
T
andrea.villa 6f41b04fce Prima bozza macchina (NON FUNZIONANTE):
- 3D completo
- tavola caricata correttamente
- ventosa e riferimento
2025-01-24 13:14:25 +01:00

297 lines
9.5 KiB
Lua

-- 2024/10/10 10:00:00
-- Disposition Init for Cms-PK_PL machine
-- Intestazioni
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
--------------------------------------------------------------------------------
-- Colore del grezzo
local ColA = Color3d( 255, 165, 0, 30)
--------------------------------------------------------------------------------
-- * Verifica esistenza MachGroup *
if not EgtGetCurrMachGroup() then
local sErr = 'InitDisp for Cms-PK_PL : missing CurrMachGroup'
EgtOutLog( sErr)
EgtOutText( sErr)
DISP.ERR = 1
return
end
--------------------------------------------------------------------------------
-- *** Disposizione ***
-- Scelta della tavola
local sTab = 'Tab'
EgtSetTable( sTab)
local frTab = Frame3d( EgtGetTableRef())
-- Se pezzo non definito, esco senza errore (modalità test macchina)
local Pz = DISP.PARTID
if not Pz or Pz == GDB_ID.NULL then
DISP.ERR = 0
return
end
-- Recupero i dati del pezzo
local Ls = EgtGetFirstNameInGroup( Pz, 'SOLID')
local Er = EgtGetFirstNameInGroup( Ls or GDB_ID.NULL, 'RAW')
local b3Part = EgtGetBBoxGlob( Pz or GDB_ID.NULL, GDB_BB.STANDARD)
local b3Solid = EgtGetBBoxGlob( Ls or GDB_ID.NULL, GDB_BB.STANDARD)
-- Se pezzo vuoto, non devo fare alcunchè
if b3Part:isEmpty() then
local sErr = 'InitDisp for Cms-PK_PL : empty part'
EgtOutLog( sErr)
EgtOutText( sErr)
DISP.ERR = 2
return
end
-- Recupero ingombro di grezzi già inseriti
local b3PrevRaw = BBox3d()
local nPrevRawId = EgtGetFirstRawPart()
while nPrevRawId do
local b3Raw = EgtGetRawPartBBox( nPrevRawId)
b3PrevRaw:Add( b3Raw)
nPrevRawId = EgtGetNextRawPart( nPrevRawId)
end
b3PrevRaw:toLoc( frTab)
-- Richiesta posizione rispetto allo Zero tavola
local dOverMatXY = 5
local sOverMatXY = EgtNumToString( EgtToUiUnits( dOverMatXY), 0)
local dOverMatZ = 0
local sOverMatZ = EgtNumToString( EgtToUiUnits( dOverMatZ), 0)
local dSafeDist = 20
local sSafeDist = EgtNumToString( EgtToUiUnits( dSafeDist), 0)
local vVal = EgtDialogBox( 'Dati di disposizione', {'Y Position', 'CB:Front,MediumFront,MediumBack,Back'},
{'X Position', 'CB:Left,Right'},
{'Safe Dist', sSafeDist},
{'Sovramateriale XY', sOverMatXY},
{'Sovramateriale Z', sOverMatZ})
if not vVal or #vVal < 5 then
DISP.ERR = 100
return
end
local sRefY = 'B'
local vYPos = { Front='B', MediumFront='M', MediumBack='N', Back='T'}
sRefY = vYPos[vVal[1]]
local sRefX = 'L'
local vXPos = { Left='L', Right='R'}
sRefX = vXPos[vVal[2]]
dSafeDist = EgtFromUiUnits( tonumber( vVal[3]))
dOverMatXY = EgtFromUiUnits( tonumber( vVal[4]))
dOverMatZ = EgtFromUiUnits( tonumber( vVal[5]))
-- Definizione e posizionamento del grezzo
local nRaw
if Er then
nRaw = EgtAddRawPartWithPart( Pz, Er, 0, ColA)
EgtSetStatus( Er, GDB_ST.ON)
else
nRaw = EgtAddRawPartWithPart( Pz, GDB_ID.NULL, dOverMatXY, ColA)
if nRaw and dOverMatZ > 10 * GEO.EPS_SMALL then
local b3Raw = EgtGetRawPartBBox( nRaw)
local dRawH = b3Raw:getDimZ() + dOverMatZ
EgtModifyRawPartHeight( nRaw, dRawH)
end
end
if not nRaw then
local sErr = 'InitDisp for Cms-PK_PL : error defining raw part'
EgtOutLog( sErr)
EgtOutText( sErr)
DISP.ERR = 3
return
end
local b3Raw = EgtGetRawPartBBox( nRaw)
local bVac = ( b3Raw:getDimY() >= 120)
local vtOffs, nCorn
if sRefY == 'B' and sRefX == 'L' then
vtOffs = Vector3d( 0, 0, 30)
nCorn = MCH_CR.BL
elseif sRefY == 'B' and sRefX == 'R' then
vtOffs = Vector3d( 1700, 0, 30)
nCorn = MCH_CR.BR
elseif sRefY == 'M' and sRefX == 'L' then
vtOffs = Vector3d( 0, 675-10, 30)
nCorn = MCH_CR.TL
elseif sRefY == 'M' and sRefX == 'R' then
vtOffs = Vector3d( 1700, 675-10, 30)
nCorn = MCH_CR.TR
elseif sRefY == 'N' and sRefX == 'L' then
vtOffs = Vector3d( 0, 675+10, 30)
nCorn = MCH_CR.BL
elseif sRefY == 'N' and sRefX == 'R' then
vtOffs = Vector3d( 1700, 675+10, 30)
nCorn = MCH_CR.BR
elseif sRefY == 'T' and sRefX == 'L' then
vtOffs = Vector3d( 0, 1350, 30)
nCorn = MCH_CR.TL
elseif sRefY == 'T' and sRefX == 'R' then
vtOffs = Vector3d( 1700, 1350, 30)
nCorn = MCH_CR.TR
end
if not bVac then
if sRefY == 'B' or sRefY == 'N' then
vtOffs = vtOffs + 60 * Y_AX()
else
vtOffs = vtOffs - 60 * Y_AX()
end
end
if not EgtMoveToCornerRawPart( nRaw, vtOffs, nCorn) then
local sErr = 'InitDisp for Cms-PK_PL : error positioning raw part on table'
EgtOutLog( sErr)
EgtOutText( sErr)
DISP.ERR = 4
return
end
-- Posizionamento dei piani di lavoro, carrelli e ventose
local DIMT_X = 120
local OFFS_MIN_T = 200
local DIMV_Y = 100
local OFFS_MIN_V = 120
local SAFE_DIST = dSafeDist + dOverMatXY
b3Raw = EgtGetRawPartBBox( nRaw)
b3Raw:toLoc( frTab)
-- barre (4)
local vbT = { false, false, false, false}
local vsNamT = { 'T1', 'T2', 'T3', 'T4'}
local vdPosT = { EgtGetAxisHomePos( 'T1'), EgtGetAxisHomePos( 'T2'), EgtGetAxisHomePos( 'T3'), EgtGetAxisHomePos( 'T4')}
if b3Raw:getDimX() < 300 then
if sRefX == 'L' then
vbT[1] = true
vdPosT[1] = b3Raw:getCenter():getX() - DIMT_X / 2
else
vbT[4] = true
vdPosT[2] = vdPosT[1] + OFFS_MIN_T
vdPosT[3] = vdPosT[2] + OFFS_MIN_T
vdPosT[4] = b3Raw:getCenter():getX() - DIMT_X / 2
end
elseif b3Raw:getDimX() < 650 then
if sRefX == 'L' then
vbT[1] = true ; vbT[2] = true
vdPosT[1] = b3Raw:getMin():getX() + SAFE_DIST
vdPosT[2] = b3Raw:getMax():getX() - SAFE_DIST - DIMT_X
else
vbT[3] = true ; vbT[4] = true
vdPosT[2] = vdPosT[1] + OFFS_MIN_T
vdPosT[3] = b3Raw:getMin():getX() + SAFE_DIST
vdPosT[4] = b3Raw:getMax():getX() - SAFE_DIST - DIMT_X
end
elseif b3Raw:getDimX() < 1000 then
if sRefX == 'L' then
vbT[1] = true ; vbT[2] = true ; vbT[3] = true
vdPosT[1] = b3Raw:getMin():getX() + SAFE_DIST
vdPosT[3] = b3Raw:getMax():getX() - SAFE_DIST - DIMT_X
vdPosT[2] = ( vdPosT[1] + vdPosT[3]) / 2
else
vbT[2] = true ; vbT[3] = true ; vbT[4] = true
vdPosT[2] = b3Raw:getMin():getX() + SAFE_DIST
vdPosT[4] = b3Raw:getMax():getX() - SAFE_DIST - DIMT_X
vdPosT[3] = ( vdPosT[2] + vdPosT[4]) / 2
end
else
vbT[1] = true ; vbT[2] = true ; vbT[3] = true ; vbT[4] = true
vdPosT[1] = b3Raw:getMin():getX() + SAFE_DIST
vdPosT[4] = b3Raw:getMax():getX() - SAFE_DIST - DIMT_X
vdPosT[2] = 0.666 * vdPosT[1] + 0.334 * vdPosT[4]
vdPosT[3] = 0.334 * vdPosT[1] + 0.666 * vdPosT[4]
end
for i = 1, #vbT do
EgtMoveDispAxis( vsNamT[i], vdPosT[i])
end
-- carrelli per ventose o morse (3)
local vbV = { false, false, false}
local vdPosV = { EgtGetAxisHomePos( 'T11'), EgtGetAxisHomePos( 'T12'), EgtGetAxisHomePos( 'T13')}
if not bVac then
if sRefY == 'B' then
vbV[1] = true
vdPosV[1] = b3Raw:getMin():getY() - DIMV_Y / 2 - 10
elseif sRefY == 'M' then
vbV[2] = true
vdPosV[2] = b3Raw:getMax():getY() - DIMV_Y / 2 + 10
elseif sRefY == 'N' then
vbV[2] = true
vdPosV[2] = b3Raw:getMin():getY() - DIMV_Y / 2 - 10
elseif sRefY == 'T' then
vbV[3] = true
vdPosV[2] = vdPosV[1] + OFFS_MIN_V
vdPosV[3] = b3Raw:getMax():getY() - DIMV_Y / 2 + 10
end
elseif b3Raw:getDimY() < 260 then
if b3Raw:getMin():getY() < 675 then
vbV[1] = true
vdPosV[1] = b3Raw:getCenter():getY() - DIMV_Y / 2
else
vbV[3] = true
vdPosV[2] = vdPosV[1] + OFFS_MIN_V
vdPosV[3] = b3Raw:getCenter():getY() - DIMV_Y / 2
end
elseif b3Raw:getDimY() < 450 then
if b3Raw:getMin():getY() < 675 then
vbV[1] = true ; vbV[2] = true
vdPosV[1] = b3Raw:getMin():getY() + SAFE_DIST
vdPosV[2] = b3Raw:getMax():getY() - SAFE_DIST - DIMV_Y
else
vbV[2] = true ; vbV[3] = true
vdPosV[2] = b3Raw:getMin():getY() + SAFE_DIST
vdPosV[3] = b3Raw:getMax():getY() - SAFE_DIST - DIMV_Y
end
else
vbV[1] = true ; vbV[2] = true ; vbV[3] = true
vdPosV[1] = b3Raw:getMin():getY() + SAFE_DIST
vdPosV[3] = b3Raw:getMax():getY() - SAFE_DIST - DIMV_Y
vdPosV[2] = ( vdPosV[1] + vdPosV[3]) / 2
end
for i = 1, #vbT do
if vbT[i] then
for j = 1, #vbV do
local sVac = vsNamT[ i] .. tostring( j)
EgtMoveDispAxis( sVac, vdPosV[j])
end
end
end
-- ventose o morse
for i = 1, #vbT do
if vbT[i] then
local dPosX = vdPosT[i] + DIMT_X / 2
for j = 1, #vbV do
if vbV[j] then
if bVac then
EgtAddFixture( 'Vac120x100H30', Point3d( dPosX, vdPosV[j] + DIMV_Y / 2, 0))
else
EgtAddFixture( 'ViseH30', Point3d( dPosX, vdPosV[j] + DIMV_Y / 2, 0), 0, b3Raw:getDimZ())
end
end
end
end
end
-- riferimenti
local dRefX = EgtIf( sRefX == 'L', -10, 1710)
if sRefY == 'B' then
EgtAddFixture( 'RefD20', Point3d( dRefX, 100, 0))
for i = 1, #vbT do
if bVac and vbT[i] then EgtAddFixture( 'RefD20', Point3d( vdPosT[i] + DIMT_X / 2, -10, 0)) end
end
elseif sRefY == 'M' then
EgtAddFixture( 'RefD20', Point3d( dRefX, 675-110, 0))
for i = 1, #vbT do
if bVac and vbT[i] then EgtAddFixture( 'RefD20', Point3d( vdPosT[i] + DIMT_X / 2, 675, 0)) end
end
elseif sRefY == 'N' then
EgtAddFixture( 'RefD20', Point3d( dRefX, 675+110, 0))
for i = 1, #vbT do
if bVac and vbT[i] then EgtAddFixture( 'RefD20', Point3d( vdPosT[i] + DIMT_X / 2, 675, 0)) end
end
elseif sRefY == 'T' then
EgtAddFixture( 'RefD20', Point3d( dRefX, 1350-100, 0))
for i = 1, #vbT do
if bVac and vbT[i] then EgtAddFixture( 'RefD20', Point3d( vdPosT[i] + DIMT_X / 2, 1350+10, 0)) end
end
end
DISP.ERR = 0