-rw-r--r-- | mold.scad | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/mold.scad b/mold.scad new file mode 100644 index 0000000..7d94337 --- a/dev/null +++ b/mold.scad @@ -0,0 +1,48 @@ +module mold( + size, /* mold inner size */ + s=1, /* shell thickness */ + h_protrude=5, /* how far to protrude outside horizontally */ + v_protrude=10, /* and vertically */ + l_intrude=0, /* how far to intrude on the left */ + r_intrude=0, /* how far to intrude on the right */ + f_intrude=0, /* how far to intrude on the front */ + introffset, /* offset from the front of the left and right intrusions */ + chamfer=1 +) { + difference() { + cube(size=[size[0]+2*s,size[1]+2*s,size[2]+s]); + translate([s,s,s]) { + hull() { + translate([chamfer,0,chamfer]) + cube(size=[size[0]-2*chamfer,size[1],size[2]-2*chamfer]); + translate([0,chamfer,chamfer]) + cube(size=[size[0],size[1]-2*chamfer,size[2]-2*chamfer]); + translate([chamfer,chamfer,0]) + cube(size=[size[0]-2*chamfer,size[1]-2*chamfer,size[2]+1]); + } + } + } + gw = 3*s; // guide width, in case I'll want to change it. + module trusion(in) { + translate([-gw/2,0,s+size[2]]) union() { + hull() { + translate([0,0,in]) + cube(size=[gw,in+s,v_protrude-in]); + cube(size=[gw,s,in]); + } + hull() { + translate([0,0,-v_protrude]) + cube(size=[gw,s,v_protrude+h_protrude]); + translate([0,-h_protrude,0]) + cube(size=[gw,s+h_protrude,v_protrude]); + } + } + } + /* frontal guide */ + translate([s+size[0]/2,0,]) trusion(in=f_intrude); + /* left guide */ + translate([0,s+introffset,0]) rotate([0,0,-90]) trusion(in=l_intrude); + /* right guide */ + translate([size[0]+2*s,s+introffset,0]) rotate([0,0,90]) trusion(in=r_intrude); +} +/* vim:set ai sw=1: */ |