-- RunViewManager.lua by Egaltech s.r.l. 2022/04/05 -- Gestione visualizzazione per Stampa 3d -- Tabella per definizione modulo local RunViewManager = {} -- Intestazioni require( 'EgtBase') EgtOutLog( ' RunViewManager started', 1) -- Costanti generali local AMD = require( 'AddManData') function RunViewManager.Exec() local nVisibilityMode = LAYER_VIEW_TYPE.ALL -- 1 = All, 2 = Till Selected, 3 = Only 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' elseif nVisibilityMode == LAYER_VIEW_TYPE.ONLY_SEL then sLayerViewCombo = 'CB:All,Till Selected,*Only Selected' else sLayerViewCombo = 'CB:*All,Till Selected,Only 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 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)) end local nCrvId = EgtGetFirstGroupInGroup( nLayerId) while nCrvId do local nPathId = EgtGetFirstNameInGroup( nCrvId, PATH_GRP) local nShellId = EgtGetFirstInGroup( nPathId) while nShellId do local nType = EgtGetInfo( nShellId, KEY_TYPE, 'i') EgtSetStatus( nShellId, EgtIf( nShellType == SHELL_VIEW_TYPE.ALL or ( nShellType == SHELL_VIEW_TYPE.OUTER and nType == TYPE.OUTER_SHELL) or (nShellType == SHELL_VIEW_TYPE.INNER and nType == TYPE.INNER_SHELL), GDB_ST.ON, GDB_ST.OFF)) nShellId = EgtGetNext( nShellId) end local nSolidId = EgtGetFirstNameInGroup( nCrvId, SOLID_GRP) local nSurfId = EgtGetFirstInGroup( nSolidId) while nSurfId do local nType = EgtGetInfo( nSurfId, KEY_TYPE, 'i') EgtSetStatus( nSurfId, EgtIf( nShellType == SHELL_VIEW_TYPE.ALL or ( nShellType == SHELL_VIEW_TYPE.OUTER and nType == TYPE.OUTER_SHELL) or (nShellType == SHELL_VIEW_TYPE.INNER and nType == TYPE.INNER_SHELL), GDB_ST.ON, GDB_ST.OFF)) nSurfId = EgtGetNext( nSurfId) end local nToolPathId = EgtGetFirstNameInGroup( nCrvId, TOOLPATH_GRP) nShellId = EgtGetFirstInGroup( nToolPathId) while nShellId do local nType = EgtGetInfo( nShellId, KEY_TYPE, 'i') EgtSetStatus( nShellId, EgtIf( nType and ( nShellType == SHELL_VIEW_TYPE.ALL or ( nShellType == SHELL_VIEW_TYPE.OUTER and nType == TYPE.OUTER_SHELL) or (nShellType == SHELL_VIEW_TYPE.INNER and nType == TYPE.INNER_SHELL)), 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