Files
3dprinting/LuaLibs/RunSliceAdvancement.lua
T
2022-04-12 15:51:41 +02:00

109 lines
4.0 KiB
Lua

-- RunSliceAdvancement.lua by Egaltech s.r.l. 2022/04/05
-- Gestione visualizzazione per Stampa 3d
-- Tabella per definizione modulo
local RunSliceAdvancement = {}
-- Intestazioni
require( 'EgtBase')
EgtOutLog( ' RunSliceAdvancement started', 1)
-- Costanti generali
local AMD = require( 'AddManData')
local function ManageSegmentVisibility( SegmentList, nLastActiveIndex, ToHideList)
for Index = 1, #SegmentList do
EgtSetStatus( SegmentList[Index], EgtIf( Index <= nLastActiveIndex, GDB_ST.ON, GDB_ST.OFF))
end
if ToHideList and #ToHideList > 0 then
for Index = 1, #ToHideList do
EgtSetStatus( ToHideList[Index], GDB_ST.OFF)
end
end
end
function RunSliceAdvancement.Exec()
ViewValues = EgtDialogBox( 'Slice advancement', { 'Type', 'CB:*All,Only Outer,Only Inner,Only Infill'},
{ 'Percentage (0-100)', '30'})
if not ViewValues or #ViewValues < 1 then return end
local nAdvancementType = 1 -- 1 = All, 2 = Only Outer, 3 = Only Inner, 4 = Only Infill
if ViewValues[1] == 'All' then
nAdvancementType = 1
elseif ViewValues[1] == 'Only Outer' then
nAdvancementType = 2
elseif ViewValues[1] == 'Only Inner' then
nAdvancementType = 3
elseif ViewValues[1] == 'Only Infill' then
nAdvancementType = 4
end
local nPercentage = tonumber( ViewValues[2])
local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) or GDB_ID.NULL
local nPrintOrder = EgtGetInfo( nParamsGrp, KEY_PRINT_ORDER, 'i')
-- 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)
while nLayerId do
local nCrvId = EgtGetFirstGroupInGroup( nLayerId)
while nCrvId do
local nSolidId = EgtGetFirstNameInGroup( nCrvId, SOLID_GRP)
local ShellList = { {}, {}}
local nSurfId = EgtGetFirstInGroup( nSolidId)
local nOldType = 0
while nSurfId do
local nType = EgtGetInfo( nSurfId, KEY_TYPE, 'i')
if not nType or ( nType ~= 0 and nType ~= 1) then nType = nOldType end
nOldType = nType
table.insert( ShellList[nType + 1], nSurfId)
nSurfId = EgtGetNext( nSurfId)
end
local nSegmentQty = 1
local SegmentList
local ToHideList
if nAdvancementType == 1 then
nSegmentQty = #ShellList[1] + #ShellList[2]
if nPrintOrder == PRINT_ORDER.EXT_INT_INF then
SegmentList = ShellList[1]
for i = 1, #ShellList[2] do
SegmentList[#SegmentList + 1] = ShellList[2][i]
end
else
SegmentList = ShellList[2]
for i = 1, #ShellList[1] do
SegmentList[#SegmentList + 1] = ShellList[1][i]
end
end
elseif nAdvancementType == 2 then
nSegmentQty = #ShellList[1]
SegmentList = ShellList[1]
ToHideList = ShellList[2]
elseif nAdvancementType == 3 then
nSegmentQty = #ShellList[2]
SegmentList = ShellList[2]
ToHideList = ShellList[1]
end
local nLastActiveIndex = ceil( nSegmentQty * nPercentage / 100)
ManageSegmentVisibility( SegmentList, nLastActiveIndex, ToHideList)
nCrvId = EgtGetNext( nCrvId)
end
nLayerIndex = nLayerIndex + 1
nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex)
end
nPartIndex = nPartIndex + 1
nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex)
end
EgtDraw()
end
---------------------------------------------------------------------
return RunSliceAdvancement