Hi
while the supports of IceSL are efficient, they are usually not that easy to remove. Cura and S3D typically print a continues zig-zag for the support, that is easy to remove.
I tried to add my own support, somewhat successful but far from perfect (see code below).
I'd love to see such a support in IceSL, native. And yes, it's not rocket science or science at all, it's just a quick and dirty hack, but it works quite well.
Regards
maze
--lib_support.lua
-- Simple support like S3D, often easy to remove in one piece.
function support(dx,dy,h)
local walls = {} --support walls
local nozzle = 0.4 --support walls width
local step = 2 --support walls spacing
local j = 1 --helper (+/-) to create support walls connectors
if dx<2*step then return {} end --min size check
if dy<2*step then return {} end --min size check
dx = math.ceil(dx) --convert to integer, round up
dy = math.ceil(dy) --convert to integer, round up
--generate support walls
for i=0,dx-1,step do
table.insert(walls, translate(i,0,0)*cube(nozzle,dy,h))
table.insert(walls, translate(i+step/2,j*(dy/2-nozzle/2),0)*cube(step,nozzle,h))
j = -1 * j
end
table.insert(walls,translate(step*math.ceil(dx/step),0,0)*cube(nozzle,dy,h))
return translate(-dx/2,0,0)*union(walls)
end
--
--basic usage
--[[--
Including:
--dofile('lib_support.lua')
Emit the support with brush 0, the actual part with brush 1.
For that brush:
-reduce the flow mulitplier to 70% (optional, saves material)
-set shells to 1 shell
-set perimenter to false
-disable support (global option)
Tips:
Leave an empty, non-printed layer between the support and the object. E.g. for 0.2 layer height: leave 0.2mm between the support and the object. Use a difference function to do so.
--]]--
--
--if called via dofile stop here - do not emit anything
--
if pcall(getfenv, 4) then
return
end
--Show examples
--emit a supported box
emit(translate(0,0, 0)*rotate(0,0,0)*support(10,10,9.8),0)
emit(translate(0,0,10)*rotate(0,0,0)*cube(10,10,1),1)
--emit a supported sphere at h=2
r=10
h=2
emit(translate(20,20,0)*rotate(0,0,0)*difference {
support(2*r, 2*r, r+h),
translate(0,0,r+h-0.2)*sphere(r),
}, 0)
emit(translate(20,20,r+h)*rotate(0,0,0)*sphere(r), 1)
set_setting_value('flow_multiplier_1', 0.9*0.7)