1459253e57
- modifiche e correzioni per Costolature (Setti -> Ribs).
193 lines
7.6 KiB
Lua
193 lines
7.6 KiB
Lua
-- RunViewManager.lua by Egaltech s.r.l. 2022/07/03
|
|
-- Gestione visualizzazione per Stampa 3d
|
|
|
|
-- Tabella per definizione modulo
|
|
local RunViewManager = {}
|
|
|
|
-- Intestazioni
|
|
require( 'EgtBase')
|
|
|
|
EgtOutLog( ' RunViewManager started', 1)
|
|
|
|
-- Costanti generali
|
|
local AMD = require( 'AddManData')
|
|
|
|
---------------------------------------------------------------------
|
|
local function CalcShow( nShellView, nType)
|
|
if nShellView == SHELL_VIEW_TYPE.OUTER then
|
|
return ( nType == TYPE.OUTER_SHELL)
|
|
elseif nShellView == SHELL_VIEW_TYPE.INNER then
|
|
return ( nType == TYPE.INNER_SHELL)
|
|
elseif nShellView == SHELL_VIEW_TYPE.INFILL then
|
|
return ( nType == TYPE.INFILL)
|
|
else --nShellView == SHELL_VIEW_TYPE.ALL
|
|
return true
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
local function CalcType( nEntId, nOldType)
|
|
local nType = EgtGetInfo( nEntId, KEY_TYPE, 'i')
|
|
if not nType or nType == TYPE.LINK or nType == TYPE.COASTING or nType == TYPE.WIPE then
|
|
nType = nOldType
|
|
end
|
|
if nType == TYPE.RIB then
|
|
nType = TYPE.INFILL
|
|
end
|
|
return nType
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
function RunViewManager.Exec()
|
|
local nVisibilityMode = LAYER_VIEW_TYPE.ALL -- 1 = All, 2 = Till Selected, 3 = Only Selected, 4 = From Selected
|
|
local nShellType = SHELL_VIEW_TYPE.ALL -- 1 = All, 2 = Outer, 3 = Inner, 4 = infill
|
|
local nOldSelLayerId = GDB_ID.NULL
|
|
|
|
-- leggo ultimi valori
|
|
local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS)
|
|
if nViewId then
|
|
nVisibilityMode = EgtGetInfo( nViewId, KEY_LAYER_VIEW, 'i')
|
|
nShellType = EgtGetInfo( nViewId, KEY_SHELL_VIEW, 'i')
|
|
nOldSelLayerId = EgtGetInfo( nViewId, KEY_SEL_LAYER, 'i') or GDB_ID.NULL
|
|
end
|
|
local sLayerViewCombo = ''
|
|
if nVisibilityMode == LAYER_VIEW_TYPE.TILL_SEL then
|
|
sLayerViewCombo = 'CB:All,*Till Selected,Only Selected,From Selected'
|
|
elseif nVisibilityMode == LAYER_VIEW_TYPE.ONLY_SEL then
|
|
sLayerViewCombo = 'CB:All,Till Selected,*Only Selected,From Selected'
|
|
elseif nVisibilityMode == LAYER_VIEW_TYPE.FROM_SEL then
|
|
sLayerViewCombo = 'CB:All,Till Selected,Only Selected,*From Selected'
|
|
else
|
|
sLayerViewCombo = 'CB:*All,Till Selected,Only Selected,From Selected'
|
|
end
|
|
local sShellViewCombo = ''
|
|
if nShellType == SHELL_VIEW_TYPE.OUTER then
|
|
sShellViewCombo = 'CB:All,*Outer,Inner,Infill'
|
|
elseif nShellType == SHELL_VIEW_TYPE.INNER then
|
|
sShellViewCombo = 'CB:All,Outer,*Inner,Infill'
|
|
elseif nShellType == SHELL_VIEW_TYPE.INFILL then
|
|
sShellViewCombo = 'CB:All,Outer,Inner,*Infill'
|
|
else
|
|
sShellViewCombo = 'CB:*All,Outer,Inner,Infill'
|
|
end
|
|
|
|
ViewValues = EgtDialogBox( 'Slicing visibility manager', { 'Visibility Mode', sLayerViewCombo},
|
|
{ 'Shell type', sShellViewCombo})
|
|
if not ViewValues or #ViewValues < 2 then return end
|
|
|
|
if ViewValues[1] == 'All' then
|
|
nVisibilityMode = LAYER_VIEW_TYPE.ALL
|
|
elseif ViewValues[1] == 'Till Selected' then
|
|
nVisibilityMode = LAYER_VIEW_TYPE.TILL_SEL
|
|
elseif ViewValues[1] == 'Only Selected' then
|
|
nVisibilityMode = LAYER_VIEW_TYPE.ONLY_SEL
|
|
elseif ViewValues[1] == 'From Selected' then
|
|
nVisibilityMode = LAYER_VIEW_TYPE.FROM_SEL
|
|
end
|
|
if ViewValues[2] == 'All' then
|
|
nShellType = SHELL_VIEW_TYPE.ALL
|
|
elseif ViewValues[2] == 'Outer' then
|
|
nShellType = SHELL_VIEW_TYPE.OUTER
|
|
elseif ViewValues[2] == 'Inner' then
|
|
nShellType = SHELL_VIEW_TYPE.INNER
|
|
elseif ViewValues[2] == 'Infill' then
|
|
nShellType = SHELL_VIEW_TYPE.INFILL
|
|
end
|
|
|
|
-- Recupero ultimo layer selezionato
|
|
-- verifico sia un pezzo valido
|
|
local sSelLayerName = ''
|
|
local bFound = false
|
|
local nSelLayerId = EgtGetLastSelectedObj()
|
|
while nSelLayerId do
|
|
local sSelLayerName = EgtGetName( nSelLayerId)
|
|
if sSelLayerName and ( sSelLayerName:sub(1, 5) == SLICE_LAYER or sSelLayerName:sub(3, 7) == SLICE_LAYER) then
|
|
bFound = true
|
|
break
|
|
end
|
|
nSelLayerId = EgtGetParent( nSelLayerId)
|
|
end
|
|
if not bFound then
|
|
if nOldSelLayerId and nOldSelLayerId ~= GDB_ID.NULL then
|
|
nSelLayerId = nOldSelLayerId
|
|
else
|
|
if nVisibilityMode ~= LAYER_VIEW_TYPE.ALL then
|
|
EgtOutBox( 'No selected element!', 'Warning', 'WARNING')
|
|
return
|
|
else
|
|
nSelLayerId = GDB_ID.NULL
|
|
sSelLayerName = ''
|
|
end
|
|
end
|
|
end
|
|
|
|
-- ciclo sui pezzi
|
|
local nPartIndex = 1
|
|
local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex)
|
|
while nPartId do
|
|
-- ciclo sui layer per dis/attivare il resto
|
|
local nLayerIndex = 1
|
|
local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) or EgtGetFirstNameInGroup( nPartId, "__" .. SLICE_LAYER .. nLayerIndex)
|
|
while nLayerId do
|
|
if nVisibilityMode == LAYER_VIEW_TYPE.ALL then
|
|
EgtSetStatus( nLayerId, GDB_ST.ON)
|
|
elseif nVisibilityMode == LAYER_VIEW_TYPE.TILL_SEL then
|
|
EgtSetStatus( nLayerId, EgtIf( nLayerId <= nSelLayerId, GDB_ST.ON, GDB_ST.OFF))
|
|
elseif nVisibilityMode == LAYER_VIEW_TYPE.ONLY_SEL then
|
|
EgtSetStatus( nLayerId, EgtIf( nLayerId == nSelLayerId, GDB_ST.ON, GDB_ST.OFF))
|
|
elseif nVisibilityMode == LAYER_VIEW_TYPE.FROM_SEL then
|
|
EgtSetStatus( nLayerId, EgtIf( nLayerId >= nSelLayerId, GDB_ST.ON, GDB_ST.OFF))
|
|
end
|
|
local nCrvId = EgtGetFirstGroupInGroup( nLayerId)
|
|
while nCrvId do
|
|
----
|
|
local nOldType = TYPE.OUTER_SHELL
|
|
local nPathId = EgtGetFirstNameInGroup( nCrvId, PATH_GRP)
|
|
local nShellId = EgtGetFirstInGroup( nPathId)
|
|
while nShellId do
|
|
local nType = CalcType( nShellId, nOldType)
|
|
nOldType = nType
|
|
EgtSetStatus( nShellId, EgtIf( CalcShow( nShellType, nType), GDB_ST.ON, GDB_ST.OFF))
|
|
nShellId = EgtGetNext( nShellId)
|
|
end
|
|
----
|
|
nOldType = TYPE.OUTER_SHELL
|
|
local nSolidId = EgtGetFirstNameInGroup( nCrvId, SOLID_GRP)
|
|
local nSurfId = EgtGetFirstInGroup( nSolidId)
|
|
while nSurfId do
|
|
local nType = CalcType( nSurfId, nOldType)
|
|
nOldType = nType
|
|
EgtSetStatus( nSurfId, EgtIf( CalcShow( nShellType, nType), GDB_ST.ON, GDB_ST.OFF))
|
|
nSurfId = EgtGetNext( nSurfId)
|
|
end
|
|
----
|
|
nOldType = TYPE.OUTER_SHELL
|
|
local nToolPathId = EgtGetFirstNameInGroup( nCrvId, TOOLPATH_GRP)
|
|
nShellId = EgtGetFirstInGroup( nToolPathId)
|
|
while nShellId do
|
|
local nType = CalcType( nShellId, nOldType)
|
|
nOldType = nType
|
|
EgtSetStatus( nShellId, EgtIf( CalcShow( nShellType, nType), GDB_ST.ON, GDB_ST.OFF))
|
|
nShellId = EgtGetNext( nShellId)
|
|
end
|
|
nCrvId = EgtGetNext( nCrvId)
|
|
end
|
|
nLayerIndex = nLayerIndex + 1
|
|
nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) or EgtGetFirstNameInGroup( nPartId, "__" .. SLICE_LAYER .. nLayerIndex)
|
|
end
|
|
nPartIndex = nPartIndex + 1
|
|
nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex)
|
|
end
|
|
|
|
-- riporto impostazioni in gruppo apposito
|
|
EgtSetInfo( nViewId, KEY_LAYER_VIEW, nVisibilityMode)
|
|
EgtSetInfo( nViewId, KEY_SHELL_VIEW, nShellType)
|
|
EgtSetInfo( nViewId, KEY_SEL_LAYER, nSelLayerId)
|
|
|
|
EgtDraw()
|
|
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
return RunViewManager
|