summaryrefslogtreecommitdiff
path: root/mold.scad
Side-by-side diff
Diffstat (limited to 'mold.scad') (more/less context) (ignore whitespace changes)
-rw-r--r--mold.scad48
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: */