1459253e57
- modifiche e correzioni per Costolature (Setti -> Ribs).
166 lines
6.6 KiB
Lua
166 lines
6.6 KiB
Lua
-- RunSliceAdvancement.lua by Egaltech s.r.l. 2022/06/28
|
|
-- 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
|
|
|
|
---------------------------------------------------------------------
|
|
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 RunSliceAdvancement.Exec()
|
|
-- verifico ci sia almeno uno slice
|
|
local nFirstPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. 1)
|
|
if not nFirstPartId then
|
|
EgtOutBox( 'No sliced part in this project!', 'Error', 'ERROR')
|
|
return
|
|
else
|
|
local nLayerId = EgtGetFirstNameInGroup( nFirstPartId, SLICE_LAYER .. 1) or EgtGetFirstNameInGroup( nFirstPartId, "__" .. SLICE_LAYER .. 1)
|
|
if not nLayerId then
|
|
EgtOutBox( 'No sliced part in this project!', 'Error', 'ERROR')
|
|
return
|
|
end
|
|
end
|
|
local nAdvancementType = 1 -- 1 = All, 2 = Only Outer, 3 = Only Inner, 4 = Only Infill
|
|
local nPercentage = 30
|
|
-- leggo ultimi valori
|
|
local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS)
|
|
if nViewId then
|
|
nAdvancementType = EgtGetInfo( nViewId, KEY_SLICE_ADV_MODE, 'i') or SLICE_ADV_TYPE.ALL
|
|
nPercentage = EgtGetInfo( nViewId, KEY_SLICE_ADV_PERC, 'i') or 30
|
|
end
|
|
local sAdvTypeCombo = ''
|
|
if nAdvancementType == SLICE_ADV_TYPE.ALL then
|
|
sAdvTypeCombo = 'CB:*All,Only Outer,Only Inner,Only Infill'
|
|
elseif nAdvancementType == SLICE_ADV_TYPE.OUTER then
|
|
sAdvTypeCombo = 'CB:All,*Only Outer,Only Inner,Only Infill'
|
|
elseif nAdvancementType == SLICE_ADV_TYPE.INNER then
|
|
sAdvTypeCombo = 'CB:All,Only Outer,*Only Inner,Only Infill'
|
|
elseif nAdvancementType == SLICE_ADV_TYPE.INFILL then
|
|
sAdvTypeCombo = 'CB:All,Only Outer,Only Inner,*Only Infill'
|
|
end
|
|
ViewValues = EgtDialogBox( 'Slice advancement', { 'Type', sAdvTypeCombo},
|
|
{ 'Percentage (0-100)', tostring( nPercentage)})
|
|
if not ViewValues or #ViewValues < 1 then return end
|
|
|
|
if ViewValues[1] == 'All' then
|
|
nAdvancementType = SLICE_ADV_TYPE.ALL
|
|
elseif ViewValues[1] == 'Only Outer' then
|
|
nAdvancementType = SLICE_ADV_TYPE.OUTER
|
|
elseif ViewValues[1] == 'Only Inner' then
|
|
nAdvancementType = SLICE_ADV_TYPE.INNER
|
|
elseif ViewValues[1] == 'Only Infill' then
|
|
nAdvancementType = SLICE_ADV_TYPE.INFILL
|
|
end
|
|
nPercentage = tonumber( ViewValues[2])
|
|
|
|
-- ciclo sui pezzi
|
|
local nPartIndex = 1
|
|
local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex)
|
|
while nPartId do
|
|
local nPrintOrder = EgtGetInfo( nPartId, KEY_PRINT_ORDER, 'i')
|
|
-- 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
|
|
local nCrvId = EgtGetFirstGroupInGroup( nLayerId)
|
|
while nCrvId do
|
|
local nSolidId = EgtGetFirstNameInGroup( nCrvId, SOLID_GRP)
|
|
local ShellList = { {}, {}, {}}
|
|
local nSurfId = EgtGetFirstInGroup( nSolidId)
|
|
local nOldType = TYPE.OUTER_SHELL
|
|
while nSurfId do
|
|
local nType = CalcType( nSurfId, nOldType)
|
|
nOldType = nType
|
|
table.insert( ShellList[nType], nSurfId)
|
|
nSurfId = EgtGetNext( nSurfId)
|
|
end
|
|
local nSegmentQty = 1
|
|
local SegmentList
|
|
local ToHideList
|
|
if nAdvancementType == SLICE_ADV_TYPE.ALL then
|
|
nSegmentQty = #ShellList[1] + #ShellList[2] + #ShellList[3]
|
|
if nPrintOrder == PRINT_ORDER.EXT_INT_INF then
|
|
SegmentList = ShellList[1]
|
|
for i = 1, #ShellList[2] do
|
|
SegmentList[#SegmentList + 1] = ShellList[2][i]
|
|
end
|
|
for i = 1, #ShellList[3] do
|
|
SegmentList[#SegmentList + 1] = ShellList[3][i]
|
|
end
|
|
else
|
|
SegmentList = ShellList[3]
|
|
for i = 1, #ShellList[2] do
|
|
SegmentList[#SegmentList + 1] = ShellList[2][i]
|
|
end
|
|
for i = 1, #ShellList[1] do
|
|
SegmentList[#SegmentList + 1] = ShellList[1][i]
|
|
end
|
|
end
|
|
elseif nAdvancementType == SLICE_ADV_TYPE.OUTER then
|
|
nSegmentQty = #ShellList[1]
|
|
SegmentList = ShellList[1]
|
|
ToHideList = ShellList[2]
|
|
elseif nAdvancementType == SLICE_ADV_TYPE.INNER then
|
|
nSegmentQty = #ShellList[2]
|
|
SegmentList = ShellList[2]
|
|
ToHideList = ShellList[1]
|
|
elseif nAdvancementType == SLICE_ADV_TYPE.INFILL then
|
|
nSegmentQty = 1
|
|
SegmentList = {}
|
|
ToHideList = ShellList[1]
|
|
for i = 1, #ShellList[2] do
|
|
ToHideList[#ToHideList + 1] = ShellList[2][i]
|
|
end
|
|
end
|
|
local nLastActiveIndex = ceil( nSegmentQty * nPercentage / 100)
|
|
ManageSegmentVisibility( SegmentList, nLastActiveIndex, ToHideList)
|
|
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_SLICE_ADV_MODE, nAdvancementType)
|
|
EgtSetInfo( nViewId, KEY_SLICE_ADV_PERC, nPercentage)
|
|
|
|
EgtDraw()
|
|
|
|
end
|
|
|
|
---------------------------------------------------------------------
|
|
return RunSliceAdvancement
|