DataWall :
- prima versione che inserisce alcune lavorazioni.
This commit is contained in:
+55
-86
@@ -1,4 +1,4 @@
|
||||
-- Process.lua by Egaltech s.r.l. 2020/04/06
|
||||
-- Process.lua by Egaltech s.r.l. 2020/04/25
|
||||
-- Gestione calcolo disposizione e lavorazioni per Pareti
|
||||
-- Si opera sulla macchina corrente
|
||||
|
||||
@@ -30,8 +30,8 @@ EgtAddToPackagePath( sMachDir .. '\\Wall\\?.lua')
|
||||
EgtOutLog( '*** Wall Process Start ***', 1)
|
||||
|
||||
-- Carico le librerie
|
||||
--_G.package.loaded.BeamExec = nil
|
||||
--local BE = require( 'BeamExec')
|
||||
_G.package.loaded.WallExec = nil
|
||||
local WE = require( 'WallExec')
|
||||
--local BL = require( 'BeamLib')
|
||||
|
||||
-- Carico i dati globali
|
||||
@@ -76,7 +76,7 @@ local function MyProcessInputData()
|
||||
EgtOutLog( 'Pareti selezionate : ' .. sOut, 1)
|
||||
end
|
||||
|
||||
-- Ne recupero e verifico le dimensioni
|
||||
-- Ne recupero le dimensioni
|
||||
for i = 1, #vWall do
|
||||
local Ls = EgtGetFirstNameInGroup( vWall[i].Id, 'Box')
|
||||
local b3Solid = EgtGetBBoxGlob( Ls or GDB_ID.NULL, GDB_BB.STANDARD)
|
||||
@@ -87,6 +87,37 @@ local function MyProcessInputData()
|
||||
vWall[i].Box = b3Solid
|
||||
end
|
||||
end
|
||||
|
||||
-- Ne recupero la posizione
|
||||
local CurrX = 100
|
||||
for i = 1, #vWall do
|
||||
local PosX = EgtGetInfo( vWall[i].Id, 'POSX', 'd')
|
||||
if not PosX then PosX = CurrX end
|
||||
vWall[i].PosX = PosX
|
||||
CurrX = CurrX + vWall[i].Box:getDimX() + 50
|
||||
local PosZ = EgtGetInfo( vWall[i].Id, 'POSZ', 'd') or 100
|
||||
vWall[i].PosZ = PosZ
|
||||
end
|
||||
|
||||
-- Eseguo eventuali rotazioni e inversioni testa-coda
|
||||
for i = 1, #vWall do
|
||||
local b3Solid = vWall[i].Box
|
||||
-- rotazione
|
||||
local dRotAng = EgtGetInfo( vWall[i].Id, 'ROTATED', 'd') or 0
|
||||
if dRotAng and abs( dRotAng) > GEO.EPS_ANG_SMALL then
|
||||
local ptRotCen = b3Solid:getCenter()
|
||||
EgtRotate( vWall[i].Id, ptRotCen, X_AX(), dRotAng, GDB_RT.GLOB)
|
||||
b3Solid:rotate( ptRotCen, X_AX(), dRotAng)
|
||||
end
|
||||
-- inversione
|
||||
local dInvAng = 180 - ( EgtGetInfo( vWall[i].Id, 'INVERTED', 'd') or 180)
|
||||
if abs( dInvAng) > GEO.EPS_ANG_SMALL then
|
||||
local ptInvCen = b3Solid:getCenter()
|
||||
EgtRotate( vWall[i].Id, ptInvCen, Z_AX(), dInvAng, GDB_RT.GLOB)
|
||||
end
|
||||
end
|
||||
|
||||
-- Ne verifico le dimensioni
|
||||
dRawH = vWall[1].Box:getDimZ()
|
||||
local vWallErr = {}
|
||||
for i = 2, #vWall do
|
||||
@@ -117,28 +148,27 @@ end
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
local function MyProcessWalls()
|
||||
|
||||
-- Lunghezza totale delle pareti
|
||||
local dTotLen = 0
|
||||
for i = 1, #vWall - 1 do
|
||||
dTotLen = dTotLen + vWall[i].Box:getDimX()
|
||||
end
|
||||
dTotLen = dTotLen + max( vWall[#vWall].Box:getDimX(), WD.MIN_LENGTH)
|
||||
local dAddLen = WD.OVM_HEAD + ( #vWall - 1) * WD.OVM_MID
|
||||
EgtOutLog( 'Ltot : ' .. EgtNumToString( dTotLen, 1) .. ' Lagg : '.. EgtNumToString( dAddLen, 1), 1)
|
||||
|
||||
-- Larghezza massima delle pareti
|
||||
local dMaxWid = 0
|
||||
-- Ingombro totale delle pareti
|
||||
local b3Tot = BBox3d( ORIG())
|
||||
for i = 1, #vWall do
|
||||
if vWall[i].Box:getDimY() > dMaxWid then
|
||||
dMaxWid = dMaxWid + vWall[i].Box:getDimY()
|
||||
end
|
||||
local ptMin = Point3d( - vWall[i].PosX - vWall[i].Box:getDimX(), vWall[i].PosZ, 0)
|
||||
local ptMax = Point3d( - vWall[i].PosX, vWall[i].PosZ + vWall[i].Box:getDimY(), 0)
|
||||
b3Tot:Add( ptMin)
|
||||
b3Tot:Add( ptMax)
|
||||
end
|
||||
local dBoxL = b3Tot:getDimX()
|
||||
local dBoxW = b3Tot:getDimY()
|
||||
EgtOutLog( 'Ltot : ' .. EgtNumToString( dBoxL, 1) .. ' Wtot : '.. EgtNumToString( dBoxW, 1), 1)
|
||||
|
||||
-- Eventuali dimensioni predefinite del pannello
|
||||
local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or GDB_ID.NULL
|
||||
local dPanelLen = EgtGetInfo( BtlInfoId, 'PANELLEN', 'd') or WD.STD_RAW_LENGTH
|
||||
local dPanelWidth = EgtGetInfo( BtlInfoId, 'PANELWIDTH', 'd') or WD.STD_RAW_WIDTH
|
||||
|
||||
-- Richiedo lunghezza del grezzo e sovramateriale di testa
|
||||
local vsVal = EgtDialogBox( 'Lavora Pareti' .. ' (Ltot='.. EgtNumToString( dTotLen + dAddLen + 0.5, 0) .. ', Wmax=' .. EgtNumToString( dMaxWid + 0.5, 0) .. ')',
|
||||
{'Lunghezza grezzo', EgtNumToString( WD.STD_RAW_LENGTH, 0)},
|
||||
{'Larghezza grezzo', EgtNumToString( WD.STD_RAW_WIDTH, 0)},
|
||||
{'Sovramateriale', EgtNumToString( WD.OVM_HEAD, 0)})
|
||||
local vsVal = EgtDialogBox( 'Lavora Pareti' .. ' (Ltot='.. EgtNumToString( dBoxL + 0.5, 0) .. ', Wtot=' .. EgtNumToString( dBoxW + 0.5, 0) .. ')',
|
||||
{'Lunghezza grezzo', EgtNumToString( dPanelLen, 0)},
|
||||
{'Larghezza grezzo', EgtNumToString( dPanelWidth, 0)})
|
||||
if not vsVal then
|
||||
EgtDraw()
|
||||
return
|
||||
@@ -161,14 +191,6 @@ local function MyProcessWalls()
|
||||
return false
|
||||
end
|
||||
dRawW = min( dRawW, WD.MAX_WIDTH )
|
||||
local dOvmHead = EgtEvalNumExpr( vsVal[3])
|
||||
if not dOvmHead then
|
||||
local sOut = 'Sovramateriale di testa errato : ' .. vsVal[3]
|
||||
EgtOutLog( sOut)
|
||||
EgtOutBox( sOut, 'Lavora Pareti', 'WARNING')
|
||||
EgtDraw()
|
||||
return false
|
||||
end
|
||||
|
||||
-- Verifico dimensioni massime grezzo
|
||||
if dRawL > WD.MAX_LENGTH + 10 * GEO.EPS_SMALL or dRawW > WD.MAX_WIDTH + 10 * GEO.EPS_SMALL or dRawH > WD.MAX_HEIGHT + 10 * GEO.EPS_SMALL then
|
||||
@@ -191,60 +213,7 @@ local function MyProcessWalls()
|
||||
end
|
||||
|
||||
-- Sistemo le pareti nel grezzo
|
||||
-- Creazione nuovo gruppo di lavoro
|
||||
local sMgName = EgtGetMachGroupNewName( 'Mach')
|
||||
local NewMgId = EgtAddMachGroup( sMgName)
|
||||
if not NewMgId then
|
||||
local sOut = 'Errore nella creazione del gruppo di lavoro ' .. sMgName
|
||||
return false, sOut
|
||||
end
|
||||
-- Impostazione della tavola
|
||||
EgtSetTable( 'Tab')
|
||||
-- Area tavola
|
||||
local b3Tab = EgtGetTableArea()
|
||||
-- Calcolo posizione estremo TR della tavola rispetto a sua origine in BL
|
||||
WD.OriTR = Point3d( b3Tab:getDimX(), b3Tab:getDimY(), 0)
|
||||
-- Impostazione dell'attrezzaggio di default
|
||||
EgtImportSetup()
|
||||
-- Creazione del grezzo e suo posizionamento in macchina
|
||||
local nRaw = EgtAddRawPart( Point3d(0,0,0), dRawL, dRawW, dRawH, WD.RAWCOL)
|
||||
EgtMoveToCornerRawPart( nRaw, WD.OriTR, MCH_CR.TR)
|
||||
-- Inserimento dei pezzi nel grezzo
|
||||
local Cnt = 0
|
||||
local Len = dRawL
|
||||
local DeltaS = dOvmHead
|
||||
local DeltaE = WD.OVM_MID
|
||||
for i = 1, #vWall do
|
||||
-- assegno identificativo pezzo
|
||||
local Pz = vWall[i].Id
|
||||
-- dati del pezzo
|
||||
local b3Part = EgtGetBBoxGlob( Pz or GDB_ID.NULL, GDB_BB.EXACT)
|
||||
local b3Solid = vWall[i].Box
|
||||
if b3Part:isEmpty() or b3Solid:isEmpty() then break end
|
||||
-- se spessore compatibile e lunghezza disponibile sufficiente
|
||||
local PartLen = b3Solid:getDimX()
|
||||
local PartWidth = b3Solid:getDimY()
|
||||
local PartHeight = b3Solid:getDimZ()
|
||||
local NextLen = Len - DeltaS - PartLen - DeltaE
|
||||
if ( dRawW > PartWidth - 10 * GEO.EPS_SMALL and abs( PartHeight - dRawH) < 10 * GEO.EPS_SMALL) and NextLen + DeltaE >= 0 then
|
||||
-- eventuale sovramateriale di testa
|
||||
if vWall[i].PosX then
|
||||
DeltaS = max( vWall[i].PosX - ( dRawL - Len), 0)
|
||||
end
|
||||
-- dimensioni del grezzo
|
||||
local CrawLen = min( PartLen + DeltaS + DeltaE, Len)
|
||||
local Delta = Len - PartLen - DeltaS
|
||||
-- inserisco il pezzo nel grezzo
|
||||
EgtDeselectPartObjs( Pz)
|
||||
local ptPos = b3Part:getMin() - b3Solid:getMin() + Vector3d( Delta, dRawW - PartWidth - dOvmHead, ( dRawH - PartHeight) / 2)
|
||||
EgtAddPartToRawPart( Pz, ptPos, nRaw)
|
||||
-- aggiorno la lunghezza residua della barra
|
||||
Len = Len - CrawLen
|
||||
end
|
||||
DeltaS = 0
|
||||
end
|
||||
|
||||
return true
|
||||
return WE.ProcessWalls( dRawL, dRawW, dRawH, vWall)
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
@@ -252,7 +221,7 @@ end
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
local function MyProcessFeatures()
|
||||
|
||||
local bOk, Stats = BE.ProcessFeatures()
|
||||
local bOk, Stats = WE.ProcessFeatures()
|
||||
local nErrCnt = 0
|
||||
local nWarnCnt = 0
|
||||
local sOutput = ''
|
||||
@@ -289,4 +258,4 @@ if not MyProcessWalls() then return end
|
||||
-- Abilito Vmill
|
||||
EgtSetInfo( EgtGetCurrMachGroup(), 'Vm', '1')
|
||||
|
||||
--if not MyProcessFeatures() then return end
|
||||
if not MyProcessFeatures() then return end
|
||||
|
||||
Reference in New Issue
Block a user