summaryrefslogtreecommitdiff
path: root/mold.scad
blob: e4f93fc5870d68dda0cbc9f5b40b4423b7f02453 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
module mold(
	size,		/* mold inner size */
	s=1,		/* shell thickness */
	h_protrude=-1,	/* how far to protrude outside horizontally, default is size[2] */
	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.
 h_protrude_ = h_protrude<0 ? size[2] : h_protrude;
 module trusion(in,gw=gw,h_protrude=h_protrude_) {
  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,-h_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: */