97 lines
2.6 KiB
Lua
97 lines
2.6 KiB
Lua
-- CompactId.lua 2018/04/21
|
|
-- Non funziona in presenza di lavorazioni
|
|
|
|
-- Intestazioni
|
|
require( 'EgtBase')
|
|
_ENV = EgtProtectGlobal()
|
|
EgtEnableDebug( false)
|
|
|
|
|
|
-- funzione per spostare gli Id
|
|
local function ChangeAllId( nBase, nFirstId, vTab)
|
|
local nNewId = nFirstId
|
|
local nId = EgtGetFirstInGroup( nBase)
|
|
while nId do
|
|
EgtChangeId( nId, nNewId)
|
|
vTab[nId] = nNewId
|
|
nId = nNewId
|
|
nNewId = nNewId + 1
|
|
if EgtGetType( nId) == GDB_TY.GROUP then
|
|
nNewId = ChangeAllId( nId, nNewId, vTab)
|
|
end
|
|
nId = EgtGetNext( nId)
|
|
end
|
|
return nNewId
|
|
end
|
|
|
|
-- funzione per aggiornare un riferimento agli Id
|
|
local function UpdateRefId( nId, sKey, vTab)
|
|
local sVal = EgtGetInfo( nId, sKey)
|
|
if sVal then
|
|
local sNewVal = ''
|
|
local vVal = EgtSplitString( sVal, ',')
|
|
for i = 1, #vVal do
|
|
local nRefId = tonumber( vVal[i])
|
|
local nNewRefId = vTab[nRefId]
|
|
sNewVal = sNewVal .. EgtIf( i > 1, ',', '') .. tostring( nNewRefId)
|
|
end
|
|
EgtSetInfo( nId, sKey, sNewVal)
|
|
end
|
|
end
|
|
|
|
-- funzione per aggiornare riferimenti agli Id
|
|
local function UpdateAllRefId( nBase, vTab)
|
|
local nId = EgtGetFirstInGroup( nBase)
|
|
while nId do
|
|
UpdateRefId( nId, '!SOU', vTab)
|
|
UpdateRefId( nId, '!BAS', vTab)
|
|
UpdateRefId( nId, '!LST', vTab)
|
|
if EgtGetType( nId) == GDB_TY.GROUP then
|
|
UpdateAllRefId( nId, vTab)
|
|
end
|
|
nId = EgtGetNext( nId)
|
|
end
|
|
end
|
|
|
|
-- funzione per aggiornare gli identificativi dei grezzi nelle disposizioni
|
|
-- DA FARE : manca funzione Egt per cambiare id grezzi disposizioni
|
|
|
|
-- funzione per aggiornare i riferimenti geometrici delle lavorazioni
|
|
-- DA FARE
|
|
|
|
-- devo essere in modalità disegno
|
|
if EgtGetCurrMachGroup() then
|
|
EgtOutBox( 'Non è possibile compattare gli Id in LAVORA', 'CompactId', 'WARNING')
|
|
return
|
|
end
|
|
|
|
-- per ora richiedo non ci siano gruppi di lavorazione
|
|
if EgtGetMachGroupCount() > 0 then
|
|
EgtOutBox( 'Non è possibile compattare gli Id in progetti con Gruppi di Lavoro', 'CompactId', 'WARNING')
|
|
return
|
|
end
|
|
|
|
-- elimino l'eventuale gruppo delle macchine
|
|
EgtErase( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'MachAux') or GDB_ID.NULL)
|
|
|
|
-- recupero Id Max
|
|
local nNextId = EgtGetNewId()
|
|
|
|
-- sposto tutti gli Id dal Max in su
|
|
local vTab = {}
|
|
ChangeAllId( GDB_ID.ROOT, nNextId, vTab)
|
|
|
|
-- sposto gli Id in basso
|
|
local vTab2 = {}
|
|
ChangeAllId( GDB_ID.ROOT, 1, vTab2)
|
|
for k, v in pairs( vTab) do
|
|
vTab[k] = vTab2[v]
|
|
end
|
|
|
|
-- aggiorno i riferimenti agli Id nelle Info
|
|
UpdateAllRefId( GDB_ID.ROOT, vTab)
|
|
|
|
-- aggiorni i roferimenti agli Id nelle disposizioni
|
|
|
|
-- aggiorno i riferimenti agli Id nelle lavorazioni
|