Archive for October 26th, 2015
Our Larval Engineer asked for help with an OpenSCAD model of a 3D printable claw that, she says, has nothing at all to do with the upcoming Night of Little Horrors. Not having had an excuse to fiddle with the new (and lightly documented)
sweep() functions, I gnawed on the
sweep-drop.scad example until this popped out:
That might be too aggressively sloped up near the top, but it’s a start.
The OpenSCAD source code:
use <sweep.scad> use <scad-utils/transformations.scad> function shape() = [[0,-25],[0,25],[100,0]]; function path(t) = [100*(1+sin(-90-t*90)), 0, (100 * t)]; step = 0.01; path_transforms = [for (t=[0:step:1-step]) translation(path(t)) * scaling([0.5*(1-t) + 0.1,0.75*(1-t) + 0.1,1])]; sweep(shape(), path_transforms);
It’s perfectly manifold and slices just as you’d expect; you could affix it to a mounting bracket easily enough.
Some notes on what’s going on…
t index determines all the other values as a function of the layer from the base at
t=0 to the top at
shape() defines the overall triangular blade cross-section at the base; change the points / size to make it look like you want.
path() defines the XYZ translation of each slab that’s extruded from the shape() cross-section. I think the Z value sets the offset & thickness of each slab. The constant 100 in the X value interacts with the overall size of the
shape(). The 90 values inside the
sin() function set the phase & scale
t so the claw bends the right way; that took some fiddling.
The parameters in
scaling() determine how the
shape() shrinks along the path() as a function of the
t parameter. The 0.1 Finagle Constants prevent the claw from tapering to a non-printable point at the tip. I think the Z value must be 1.000 to avoid weird non-manifold issues: the slabs must remain whatever thickness the sweep functions set them to be.
It compiles & renders almost instantly: much faster than I expected from the demos.
The folks who can (and do!) figure that kind of model (and the libraries behind it) from first principles have my undying admiration!