Files
DataBeam/ShowSolid.lua
T
Dario Sassi 8ce7008a76 DataBeam :
- aggiunto calcolo del solido della trave tramite operatori booleani su Stm.
2019-11-23 17:53:31 +00:00

66 lines
2.2 KiB
Lua

-- ShowSolid.lua by Egaltech s.r.l. 2019/11/22
-- Gestione calcolo solido di una Trave
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
-- Funzione per visualizzazione del solido o standard
local function Show( PartId, bSolid)
local BoxLy = EgtGetFirstNameInGroup( PartId, 'Box')
EgtSetStatus( BoxLy or GDB_ID.NULL, EgtIf( bSolid, GDB_ST.OFF, GDB_ST.ON))
local OutlineLy = EgtGetFirstNameInGroup( PartId, 'Outline')
EgtSetStatus( OutlineLy or GDB_ID.NULL, EgtIf( bSolid, GDB_ST.OFF, GDB_ST.ON))
local ProcessingsLy = EgtGetFirstNameInGroup( PartId, 'Processings')
EgtSetStatus( ProcessingsLy or GDB_ID.NULL, EgtIf( bSolid, GDB_ST.OFF, GDB_ST.ON))
local SolidLy = EgtGetFirstNameInGroup( PartId, 'Solid')
EgtSetStatus( SolidLy or GDB_ID.NULL, EgtIf( bSolid, GDB_ST.ON, GDB_ST.OFF))
end
-- Recupero il pezzo del primo oggetto selezionato
local ObjId = EgtGetFirstSelectedObj()
local PartId = EgtGetParent( EgtGetParent( ObjId or GDB_ID.NULL) or GDB_ID.NULL)
if not PartId or not EgtIsPart( PartId) then
EgtOutBox( 'Nessuna trave selezionata', 'Show Solid', 'ERROR')
return
end
EgtDeselectAll()
-- Recupero il Box
local BoxLy = EgtGetFirstNameInGroup( PartId, 'Box')
local BoxId = EgtGetFirstNameInGroup( BoxLy or GDB_ID.NULL, 'Box')
if not BoxId then
EgtOutBox( 'Trave senza Box', 'Show Solid', 'ERROR')
return
end
-- Verifico esistenza del solido
local SolidLy = EgtGetFirstNameInGroup( PartId, 'Solid')
if not SolidLy then
SolidLy = EgtGroup( PartId)
EgtSetName( SolidLy, 'Solid')
end
local SolidId = EgtGetFirstNameInGroup( SolidLy, 'Solid')
if not SolidId then
SolidId = EgtCopyGlob( BoxId, SolidLy)
EgtSetName( SolidId, 'Solid')
EgtSetAlpha( SolidId, 100)
Show( PartId, true)
else
Show( PartId, ( EgtGetStatus( SolidLy) == GDB_ST.OFF))
EgtDraw()
return
end
-- Ciclo sulle features
local ProcLy = EgtGetFirstNameInGroup( PartId, 'Processings')
local ProcId = EgtGetFirstInGroup( ProcLy)
while ProcId do
if EgtGetInfo( ProcId, 'DO', 'i') ~= 0 and EgtGetType( ProcId) == GDB_TY.SRF_MESH then
EgtSurfTmIntersect( SolidId, ProcId)
end
ProcId = EgtGetNext( ProcId)
end
EgtDraw()