summaryrefslogtreecommitdiff
path: root/mold.scad
Unidiff
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 @@
1module mold(
2 size, /* mold inner size */
3 s=1, /* shell thickness */
4 h_protrude=5,/* how far to protrude outside horizontally */
5 v_protrude=10,/* and vertically */
6 l_intrude=0,/* how far to intrude on the left */
7 r_intrude=0,/* how far to intrude on the right */
8 f_intrude=0,/* how far to intrude on the front */
9 introffset,/* offset from the front of the left and right intrusions */
10 chamfer=1
11) {
12 difference() {
13 cube(size=[size[0]+2*s,size[1]+2*s,size[2]+s]);
14 translate([s,s,s]) {
15 hull() {
16 translate([chamfer,0,chamfer])
17 cube(size=[size[0]-2*chamfer,size[1],size[2]-2*chamfer]);
18 translate([0,chamfer,chamfer])
19 cube(size=[size[0],size[1]-2*chamfer,size[2]-2*chamfer]);
20 translate([chamfer,chamfer,0])
21 cube(size=[size[0]-2*chamfer,size[1]-2*chamfer,size[2]+1]);
22 }
23 }
24 }
25 gw = 3*s; // guide width, in case I'll want to change it.
26 module trusion(in) {
27 translate([-gw/2,0,s+size[2]]) union() {
28 hull() {
29 translate([0,0,in])
30 cube(size=[gw,in+s,v_protrude-in]);
31 cube(size=[gw,s,in]);
32 }
33 hull() {
34 translate([0,0,-v_protrude])
35 cube(size=[gw,s,v_protrude+h_protrude]);
36 translate([0,-h_protrude,0])
37 cube(size=[gw,s+h_protrude,v_protrude]);
38 }
39 }
40 }
41 /* frontal guide */
42 translate([s+size[0]/2,0,]) trusion(in=f_intrude);
43 /* left guide */
44 translate([0,s+introffset,0]) rotate([0,0,-90]) trusion(in=l_intrude);
45 /* right guide */
46 translate([size[0]+2*s,s+introffset,0]) rotate([0,0,90]) trusion(in=r_intrude);
47}
48/* vim:set ai sw=1: */