cc55202ec5
- primo commit con versione corrente.
484 lines
21 KiB
Lua
484 lines
21 KiB
Lua
--
|
|
-- EEEEEEEEEE GGGGGG wwww wwww
|
|
-- EEEEEEEEEE GGGGGGGGGG wwww wwww
|
|
-- EEEE GGGG GGGG wwww wwww wwww
|
|
-- EEEE GGGG wwww wwww wwww
|
|
-- EEEEEEE GGGG GGGGGGG wwww wwwwww wwww
|
|
-- EEEEEEE GGGG GGGGGGG wwww wwwwww wwww
|
|
-- EEEE GGGG GGGG wwww wwwwwwww wwww
|
|
-- EEEE GGGG GGGG wwww wwww wwww wwww
|
|
-- EEEEEEEEEE GGGGGGGGGG wwwwwwww wwwwwwww
|
|
-- EEEEEEEEEE GGGGGG wwwwwww wwwwwww
|
|
--
|
|
-- AssemblyDisp.lua by EgalWare s.r.l. 2017.11.14
|
|
-- disposizione assemblato a raggruppamento
|
|
|
|
-- Tavola per definizione modulo (serve ma non usata)
|
|
local AssemblyDisp = {}
|
|
|
|
EgtEnableDebug( false)
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetFromPos( nIdPiece)
|
|
|
|
local pPosPlaced = EgtGetInfo( nIdPiece, 'MoveedTo', 'p')
|
|
return pPosPlaced
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetPosToMove( nIdPiece)
|
|
|
|
local pPosFrom = EgtGetInfo( nIdPiece, 'PosFromDoor', 'p')
|
|
return pPosFrom
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetTypePiece( nIdPiece)
|
|
|
|
local nTypePiece = EgtGetInfo( nIdPiece, 'Piece Type', 'i')
|
|
local sAssembType = EgtGetInfo( nIdPiece, 'Assembly', 's') or ''
|
|
|
|
-- se non trovate note esco con errore
|
|
if not ( nTypePiece and sAssembType) then
|
|
return
|
|
end
|
|
|
|
-- comparo i valori per trovare corrispondenza certa
|
|
if nTypePiece == 1 and sAssembType == 'first' then
|
|
return nTypePiece
|
|
elseif nTypePiece == 2 and sAssembType == 'second' then
|
|
return nTypePiece
|
|
elseif nTypePiece == 3 and sAssembType == 'framesx' then
|
|
return nTypePiece
|
|
elseif nTypePiece == 4 and sAssembType == 'framedx' then
|
|
return nTypePiece
|
|
elseif nTypePiece == 5 and sAssembType == 'frametop' then
|
|
return nTypePiece
|
|
elseif nTypePiece == 6 and sAssembType == 'framebot' then
|
|
return nTypePiece
|
|
else
|
|
return
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function MovePieceOfAssemb( Pz, nPrevDisp, nDispose, dExtraMove, dSecondDoorGap)
|
|
|
|
local bTypePiece = GetTypePiece( Pz)
|
|
local pPosAct = GetFromPos( Pz)
|
|
local pPosToMove = GetPosToMove( Pz)
|
|
local pCalcPos
|
|
|
|
-- se manca qualche dato non faccio nulla
|
|
if not ( bTypePiece and pPosAct and pPosToMove) then
|
|
return
|
|
end
|
|
|
|
-- se le disposizioni sono uguali non faccio nulla
|
|
if nPrevDisp == nDispose then
|
|
return
|
|
end
|
|
|
|
if nDispose == 0 then -- se devo disporre come presentato dal Door
|
|
|
|
if bTypePiece == 2 then -- se porta secondaria
|
|
|
|
if nPrevDisp == 1 then -- se disposizione attuale raggruppata
|
|
pCalcPos = pPosToMove
|
|
elseif nPrevDisp == 2 then -- se disposizione attuale esplosa
|
|
pCalcPos = pPosToMove + Vector3d( dSecondDoorGap,0,0)
|
|
end
|
|
|
|
-- movimento
|
|
EgtMove( Pz, pPosAct - pCalcPos, GDB_RT.GRID)
|
|
-- assegno nota disposizione
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
else
|
|
|
|
if bTypePiece == 3 then -- se frame sx
|
|
|
|
-- acquisisco le misure del pezzo relative al tipo di pezzo
|
|
local dWidthPiece = EgtGetInfo( Pz, 'T', 'd')
|
|
local dLengthPiece = EgtGetInfo( Pz, 'H', 'd')
|
|
local dThickPiece = EgtGetInfo( Pz, 'W', 'd')
|
|
|
|
if nPrevDisp == 1 then -- se disposizione attuale raggruppata
|
|
pCalcPos = pPosToMove
|
|
elseif nPrevDisp == 2 then -- se disposizione attuale esplosa
|
|
pCalcPos = pPosToMove + Vector3d(-dExtraMove,0,0)
|
|
end
|
|
|
|
-- porto il pezzo a zero
|
|
EgtMove( Pz, ORIG() - pCalcPos, GDB_RT.GRID)
|
|
-- riporto il pezzo nella posizione originaria
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.FRONT))
|
|
EgtRotate( Pz, Point3d(0,0,0), Z_AX(), 90, GDB_RT.GRID) -- ruoto su faccia frontale
|
|
EgtMove( Pz, Point3d(dThickPiece,0,0) - ORIG(), GDB_RT.GRID)
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
-- muovo a posizione disposta
|
|
EgtMove( Pz, pPosAct - ORIG(), GDB_RT.GRID)
|
|
-- assegno nota disposta
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
elseif bTypePiece == 4 then -- se frame dx
|
|
|
|
-- acquisisco le misure del pezzo relative al tipo di pezzo
|
|
local dWidthPiece = EgtGetInfo( Pz, 'T', 'd')
|
|
local dLengthPiece = EgtGetInfo( Pz, 'H', 'd')
|
|
local dThickPiece = EgtGetInfo( Pz, 'W', 'd')
|
|
|
|
if nPrevDisp == 1 then -- se disposizione attuale raggruppata
|
|
pCalcPos = pPosToMove
|
|
elseif nPrevDisp == 2 then -- se disposizione attuale esplosa
|
|
pCalcPos = pPosToMove + Vector3d( ( dExtraMove + dSecondDoorGap),0,0)
|
|
end
|
|
|
|
-- porto il pezzo a zero
|
|
EgtMove( Pz, ORIG() - pCalcPos, GDB_RT.GRID)
|
|
-- riporto il pezzo nella posizione originaria
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.FRONT))
|
|
EgtRotate( Pz, Point3d(dWidthPiece,0,0), Z_AX(), -90, GDB_RT.GRID) -- ruoto su faccia frontale
|
|
EgtMove( Pz, Point3d(-dWidthPiece,0,0) - ORIG(), GDB_RT.GRID)
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
-- muovo a posizione disposta
|
|
EgtMove( Pz, pPosAct - ORIG(), GDB_RT.GRID)
|
|
-- assegno nota disposta
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
elseif bTypePiece == 5 then -- se frame top
|
|
|
|
-- acquisisco le misure del pezzo relative al tipo di pezzo
|
|
local dWidthPiece = EgtGetInfo( Pz, 'H', 'd')
|
|
local dLengthPiece = EgtGetInfo( Pz, 'T', 'd')
|
|
local dThickPiece = EgtGetInfo( Pz, 'W', 'd')
|
|
|
|
if nPrevDisp == 1 then -- se disposizione attuale raggruppata
|
|
pCalcPos = pPosToMove
|
|
elseif nPrevDisp == 2 then -- se disposizione attuale esplosa
|
|
pCalcPos = pPosToMove + Vector3d( (dSecondDoorGap/2), dExtraMove,0)
|
|
end
|
|
|
|
-- porto il pezzo a zero
|
|
EgtMove( Pz, ORIG() - pCalcPos, GDB_RT.GRID)
|
|
-- riporto il pezzo nella posizione originaria
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT))
|
|
EgtRotate( Pz, Point3d(-dLengthPiece,0,0), Z_AX(), 90, GDB_RT.GRID) -- ruoto su faccia sinistra
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
EgtMove( Pz, Point3d(0,-dLengthPiece,0) - ORIG(), GDB_RT.GRID)
|
|
EgtRotate( Pz, Point3d(0,0,0), Z_AX(), 90, GDB_RT.GRID) -- ruoto su faccia sinistra
|
|
EgtMove( Pz, Point3d(dThickPiece,0,0) - ORIG(), GDB_RT.GRID)
|
|
-- muovo a posizione disposta
|
|
EgtMove( Pz, pPosAct - ORIG(), GDB_RT.GRID)
|
|
-- assegno nota disposta
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
elseif bTypePiece == 6 then -- se frame bottom
|
|
|
|
-- acquisisco le misure del pezzo relative al tipo di pezzo
|
|
local dWidthPiece = EgtGetInfo( Pz, 'H', 'd')
|
|
local dLengthPiece = EgtGetInfo( Pz, 'T', 'd')
|
|
local dThickPiece = EgtGetInfo( Pz, 'W', 'd')
|
|
|
|
if nPrevDisp == 1 then -- se disposizione attuale raggruppata
|
|
pCalcPos = pPosToMove
|
|
elseif nPrevDisp == 2 then -- se disposizione attuale esplosa
|
|
pCalcPos = pPosToMove + Vector3d( (dSecondDoorGap/2), -dExtraMove,0)
|
|
end
|
|
|
|
-- porto il pezzo a zero
|
|
EgtMove( Pz, ORIG() - pCalcPos, GDB_RT.GRID)
|
|
-- riporto il pezzo nella posizione originaria
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT))
|
|
EgtRotate( Pz, Point3d(0,0,0), Z_AX(), -90, GDB_RT.GRID) -- ruoto su faccia sinistra
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
EgtRotate( Pz, Point3d(0,0,0), Z_AX(), 90, GDB_RT.GRID) -- ruoto su faccia sinistra
|
|
-- muovo a posizione disposta
|
|
EgtMove( Pz, pPosAct - ORIG(), GDB_RT.GRID)
|
|
-- assegno nota disposta
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
end
|
|
end
|
|
elseif nDispose == 1 then -- se devo disporre raggruppato
|
|
|
|
if bTypePiece == 2 then -- se porta secondaria
|
|
|
|
if nPrevDisp == 0 then -- se disposizione attuale disposta come door
|
|
pCalcPos = pPosAct
|
|
elseif nPrevDisp == 2 then -- se disposizione attuale esplosa
|
|
pCalcPos = pPosToMove + Vector3d( dSecondDoorGap,0,0)
|
|
end
|
|
|
|
EgtMove( Pz, pPosToMove - pCalcPos, GDB_RT.GRID)
|
|
-- assegno nota raggruppata
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
else
|
|
|
|
if bTypePiece == 3 then -- se frame sx
|
|
|
|
-- acquisisco le misure del pezzo relative al tipo di pezzo
|
|
local dWidthPiece = EgtGetInfo( Pz, 'T', 'd')
|
|
local dLengthPiece = EgtGetInfo( Pz, 'H', 'd')
|
|
local dThickPiece = EgtGetInfo( Pz, 'W', 'd')
|
|
|
|
if nPrevDisp == 0 then -- se disposizione attuale disposta come door
|
|
pCalcPos = pPosAct
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, Point3d( -dThickPiece,0,0) - pCalcPos, GDB_RT.GRID)
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.FRONT))
|
|
EgtRotate( Pz, Point3d(0,0,0), Z_AX(), -90, GDB_RT.GRID) -- ruoto su faccia frontale
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
elseif nPrevDisp == 2 then -- se disposizione attuale esplosa
|
|
pCalcPos = pPosToMove + Vector3d(-dExtraMove,0,0)
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, ORIG() - pCalcPos, GDB_RT.GRID)
|
|
end
|
|
|
|
-- movimento a nuova posizione
|
|
EgtMove( Pz, pPosToMove - ORIG(), GDB_RT.GRID)
|
|
-- assegno nota raggruppata
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
elseif bTypePiece == 4 then -- se frame dx
|
|
|
|
-- acquisisco le misure del pezzo relative al tipo di pezzo
|
|
local dWidthPiece = EgtGetInfo( Pz, 'T', 'd')
|
|
local dLengthPiece = EgtGetInfo( Pz, 'H', 'd')
|
|
local dThickPiece = EgtGetInfo( Pz, 'W', 'd')
|
|
|
|
if nPrevDisp == 0 then -- se disposizione attuale disposta come door
|
|
pCalcPos = pPosAct
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, Point3d( dWidthPiece,0,0) - pCalcPos, GDB_RT.GRID)
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.FRONT))
|
|
EgtRotate( Pz, Point3d( dWidthPiece,0,0), Z_AX(), 90, GDB_RT.GRID) -- ruoto su faccia frontale
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
elseif nPrevDisp == 2 then -- se disposizione attuale esplosa
|
|
pCalcPos = pPosToMove + Vector3d( ( dExtraMove + dSecondDoorGap),0,0)
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, ORIG() - pCalcPos, GDB_RT.GRID)
|
|
end
|
|
|
|
-- movimento a nuova posizione
|
|
EgtMove( Pz, pPosToMove - ORIG(), GDB_RT.GRID)
|
|
-- assegno nota raggruppata
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
elseif bTypePiece == 5 then -- se frame top
|
|
|
|
-- acquisisco le misure del pezzo relative al tipo di pezzo
|
|
local dWidthPiece = EgtGetInfo( Pz, 'H', 'd')
|
|
local dLengthPiece = EgtGetInfo( Pz, 'T', 'd')
|
|
local dThickPiece = EgtGetInfo( Pz, 'W', 'd')
|
|
|
|
if nPrevDisp == 0 then -- se disposizione attuale disposta come door
|
|
pCalcPos = pPosAct
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, Point3d( -dThickPiece,0,0) - pCalcPos, GDB_RT.GRID)
|
|
EgtRotate( Pz, Point3d(0,0,0), Z_AX(), -90, GDB_RT.GRID) -- ruoto su faccia top
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT))
|
|
EgtRotate( Pz, Point3d(0,0,0), Z_AX(), -90, GDB_RT.GRID) -- ruoto su faccia left
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
EgtMove( Pz, Point3d(0,dLengthPiece,0) - ORIG(), GDB_RT.GRID)
|
|
elseif nPrevDisp == 2 then -- se disposizione attuale esplosa
|
|
pCalcPos = pPosToMove + Vector3d( (dSecondDoorGap/2), dExtraMove,0)
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, ORIG() - pCalcPos, GDB_RT.GRID)
|
|
end
|
|
|
|
-- movimento a nuova posizione
|
|
EgtMove( Pz, pPosToMove - ORIG(), GDB_RT.GRID)
|
|
-- assegno nota raggruppata
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
elseif bTypePiece == 6 then -- se frame bottom
|
|
|
|
-- acquisisco le misure del pezzo relative al tipo di pezzo
|
|
local dWidthPiece = EgtGetInfo( Pz, 'H', 'd')
|
|
local dLengthPiece = EgtGetInfo( Pz, 'T', 'd')
|
|
local dThickPiece = EgtGetInfo( Pz, 'W', 'd')
|
|
|
|
if nPrevDisp == 0 then -- se disposizione attuale disposta come door
|
|
pCalcPos = pPosAct
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, ORIG() - pCalcPos, GDB_RT.GRID)
|
|
EgtRotate( Pz, Point3d(0,0,0), Z_AX(), -90, GDB_RT.GRID) -- ruoto su faccia top
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT))
|
|
EgtRotate( Pz, Point3d(0,0,0), Z_AX(), 90, GDB_RT.GRID) -- ruoto su faccia left
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
elseif nPrevDisp == 2 then -- se disposizione attuale esplosa
|
|
pCalcPos = pPosToMove + Vector3d( (dSecondDoorGap/2), -dExtraMove,0)
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, ORIG() - pCalcPos, GDB_RT.GRID)
|
|
end
|
|
|
|
-- movimento a nuova posizione
|
|
EgtMove( Pz, pPosToMove - ORIG(), GDB_RT.GRID)
|
|
-- assegno nota raggruppata
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
end
|
|
end
|
|
elseif nDispose == 2 then -- se devo disporre esploso
|
|
|
|
if bTypePiece == 2 then -- se porta secondaria
|
|
|
|
if nPrevDisp == 0 then -- se disposizione attuale disposta come door
|
|
pCalcPos = pPosAct
|
|
elseif nPrevDisp == 1 then -- se disposizione attuale raggruppata
|
|
pCalcPos = pPosToMove
|
|
end
|
|
|
|
EgtMove( Pz, ( pPosToMove + Vector3d( dSecondDoorGap,0,0)) - pCalcPos, GDB_RT.GRID)
|
|
-- assegno nota raggruppata
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
else
|
|
|
|
if bTypePiece == 3 then -- se frame sx
|
|
|
|
-- acquisisco le misure del pezzo relative al tipo di pezzo
|
|
local dWidthPiece = EgtGetInfo( Pz, 'T', 'd')
|
|
local dLengthPiece = EgtGetInfo( Pz, 'H', 'd')
|
|
local dThickPiece = EgtGetInfo( Pz, 'W', 'd')
|
|
|
|
if nPrevDisp == 0 then -- se disposizione attuale disposta come door
|
|
pCalcPos = pPosAct
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, Point3d( -dThickPiece,0,0) - pCalcPos, GDB_RT.GRID)
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.FRONT))
|
|
EgtRotate( Pz, Point3d(0,0,0), Z_AX(), -90, GDB_RT.GRID) -- ruoto su faccia frontale
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
elseif nPrevDisp == 1 then -- se disposizione attuale raggruppata
|
|
pCalcPos = pPosToMove
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, ORIG() - pCalcPos, GDB_RT.GRID)
|
|
end
|
|
|
|
-- movimento a nuova posizione
|
|
EgtMove( Pz, ( pPosToMove + Vector3d( -dExtraMove,0,0)) - ORIG(), GDB_RT.GRID)
|
|
-- assegno nota raggruppata
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
elseif bTypePiece == 4 then -- se frame dx
|
|
|
|
-- acquisisco le misure del pezzo relative al tipo di pezzo
|
|
local dWidthPiece = EgtGetInfo( Pz, 'T', 'd')
|
|
local dLengthPiece = EgtGetInfo( Pz, 'H', 'd')
|
|
local dThickPiece = EgtGetInfo( Pz, 'W', 'd')
|
|
|
|
if nPrevDisp == 0 then -- se disposizione attuale disposta come door
|
|
pCalcPos = pPosAct
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, Point3d( dWidthPiece,0,0) - pCalcPos, GDB_RT.GRID)
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.FRONT))
|
|
EgtRotate( Pz, Point3d( dWidthPiece,0,0), Z_AX(), 90, GDB_RT.GRID) -- ruoto su faccia frontale
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
elseif nPrevDisp == 1 then -- se disposizione attuale raggruppata
|
|
pCalcPos = pPosToMove
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, ORIG() - pCalcPos, GDB_RT.GRID)
|
|
end
|
|
|
|
-- movimento a nuova posizione
|
|
EgtMove( Pz, ( pPosToMove + Vector3d( ( dExtraMove + dSecondDoorGap),0,0)) - ORIG(), GDB_RT.GRID)
|
|
-- assegno nota raggruppata
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
elseif bTypePiece == 5 then -- se frame top
|
|
|
|
-- acquisisco le misure del pezzo relative al tipo di pezzo
|
|
local dWidthPiece = EgtGetInfo( Pz, 'H', 'd')
|
|
local dLengthPiece = EgtGetInfo( Pz, 'T', 'd')
|
|
local dThickPiece = EgtGetInfo( Pz, 'W', 'd')
|
|
|
|
if nPrevDisp == 0 then -- se disposizione attuale disposta come door
|
|
pCalcPos = pPosAct
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, Point3d( -dThickPiece,0,0) - pCalcPos, GDB_RT.GRID)
|
|
EgtRotate( Pz, Point3d(0,0,0), Z_AX(), -90, GDB_RT.GRID) -- ruoto su faccia top
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT))
|
|
EgtRotate( Pz, Point3d(0,0,0), Z_AX(), -90, GDB_RT.GRID) -- ruoto su faccia left
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
EgtMove( Pz, Point3d(0,dLengthPiece,0) - ORIG(), GDB_RT.GRID)
|
|
elseif nPrevDisp == 1 then -- se disposizione attuale raggruppata
|
|
pCalcPos = pPosToMove
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, ORIG() - pCalcPos, GDB_RT.GRID)
|
|
end
|
|
|
|
-- movimento a nuova posizione
|
|
EgtMove( Pz, ( pPosToMove + Vector3d( (dSecondDoorGap/2), dExtraMove,0)) - ORIG(), GDB_RT.GRID)
|
|
-- assegno nota raggruppata
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
elseif bTypePiece == 6 then -- se frame bottom
|
|
|
|
-- acquisisco le misure del pezzo relative al tipo di pezzo
|
|
local dWidthPiece = EgtGetInfo( Pz, 'H', 'd')
|
|
local dLengthPiece = EgtGetInfo( Pz, 'T', 'd')
|
|
local dThickPiece = EgtGetInfo( Pz, 'W', 'd')
|
|
|
|
if nPrevDisp == 0 then -- se disposizione attuale disposta come door
|
|
pCalcPos = pPosAct
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, ORIG() - pCalcPos, GDB_RT.GRID)
|
|
EgtRotate( Pz, Point3d(0,0,0), Z_AX(), -90, GDB_RT.GRID) -- ruoto su faccia top
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT))
|
|
EgtRotate( Pz, Point3d(0,0,0), Z_AX(), 90, GDB_RT.GRID) -- ruoto su faccia left
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
elseif nPrevDisp == 1 then -- se disposizione attuale raggruppata
|
|
pCalcPos = pPosToMove
|
|
-- prima devo portare il pezzo a zero e ruotarlo come originale
|
|
EgtMove( Pz, ORIG() - pCalcPos, GDB_RT.GRID)
|
|
end
|
|
|
|
-- movimento a nuova posizione
|
|
EgtMove( Pz, ( pPosToMove + Vector3d( (dSecondDoorGap/2), -dExtraMove,0)) - ORIG(), GDB_RT.GRID)
|
|
-- assegno nota raggruppata
|
|
EgtSetInfo( Pz, 'DisposeAssembly', nDispose)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
function AssemblyDisp.AssemblyDispose( nDisposeMain)
|
|
|
|
-- ciclo per leggere i pezzi
|
|
local dExtraMove = 100
|
|
local dSecondDoorGap = 0
|
|
local Pz = EgtGetFirstPart()
|
|
|
|
while Pz do
|
|
local bTypePiece = GetTypePiece( Pz)
|
|
if bTypePiece and bTypePiece == 2 then
|
|
dSecondDoorGap = dExtraMove / 2
|
|
Pz = nil
|
|
else
|
|
-- passo al pezzo successivo
|
|
Pz = EgtGetNextPart( Pz)
|
|
end
|
|
end
|
|
|
|
Pz = EgtGetFirstPart()
|
|
local nDispose
|
|
|
|
while Pz do
|
|
|
|
local nPrevDisp = EgtGetInfo( Pz, 'DisposeAssembly', 'i')
|
|
if nPrevDisp == nil then
|
|
nDispose = 1
|
|
nPrevDisp = 0
|
|
elseif nPrevDisp == 0 then
|
|
nDispose = 1
|
|
elseif nPrevDisp == 1 then
|
|
nDispose = 2
|
|
elseif nPrevDisp == 2 then
|
|
nDispose = 0
|
|
end
|
|
|
|
-- se il flag passato dal main non è nil prendo questo valore
|
|
if nDisposeMain ~= nil then nDispose = nDisposeMain end
|
|
|
|
-- muovo il pezzo
|
|
MovePieceOfAssemb( Pz, nPrevDisp, nDispose, dExtraMove, dSecondDoorGap)
|
|
|
|
-- passo al pezzo successivo
|
|
Pz = EgtGetNextPart( Pz)
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
return AssemblyDisp
|
|
|