summaryrefslogtreecommitdiff
path: root/mixing.scad
blob: fae9d52ad4614ffe086e9ffaef6a473ec11e0461 (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
50
51
52
53
54
55
56
57
s=2;				/* shell thickness */
defaultvolume=20*10*20;		/* volume for testing */

/* side of the cube, containing half the volume */
function mixing_hvs(volume=defaultvolume) = pow(volume/2,1/3);
/* vessel dimensions */
function mixing_size(volume=defaultvolume) = let(hvs = mixing_hvs(volume=volume)) [2*hvs+3*s,hvs+2*s,hvs+3*s];

module mixing(
	volume=defaultvolume,	/* volume in cubic mm */
	what="altogethernow"	/* vessel|splitter|altogethernow */
) {
 g=1;				/* guide diameter */
 hvs = mixing_hvs(volume=volume);
 sz = mixing_size(volume=volume);
 if(what=="vessel") {
  translate([-sz[0]/2,-sz[1]/2,0]) difference() {
   cube(size=sz);
   translate([s,s,s])
   cube(size=[2*hvs+s,hvs,sz[2]+1]);
  }
  for(mx=[0,1]) mirror([mx,0,0]) {
   // horizontal guide
   translate([s/2+g/2,0,s]) rotate([90,0,0]) cylinder(d=g,h=hvs+s,center=true,$fn=12);
   for(my=[0,1]) mirror([0,my,0]) {
    // vertical guide + crowning sphere
    translate([s/2+g/2,hvs/2,0]) {
     cylinder(d=g,h=sz[2]-g/2,$fn=12);
     translate([0,0,sz[2]-g/2]) sphere(d=g,$fn=12);
    }
   }
   // level
   translate([0,0,s+hvs]) {
    translate([s/2+hvs,0,0]) rotate([90,0,0]) cylinder(d=g,h=hvs+s,center=true,$fn=12);
    for(my=[0,1]) mirror([0,my,0]) {
     translate([s/2+g/2,hvs/2,0]) rotate([0,90,0]) cylinder(d=g,h=hvs-g/2+s/2,$fn=12);
    }
   }
  }
 }else if(what=="splitter") {
  z1 = sz[2]; z2 = 2*z1;
  hull() {
   translate([-s/2,-hvs/2,0]) cube(size=[s,hvs,z1]);
   cd=hvs/2;
   for(yz=[ [0,z2], [-hvs/2+cd/2,z1], [hvs/2-cd/2,z1] ])
   translate([0,yz[0],yz[1]])
   rotate([0,90,0]) cylinder(d=cd,h=s,$fn=60,center=true);
  }
  translate([0,0,z2]) sphere(d=2*s,$fn=30);
 }else if(what=="altogethernow") {
  mixing(volume=volume,what="vessel");
  translate([0,0,s]) mixing(volume=volume,what="splitter");
 }
}

color("salmon",0.7) mixing(what="altogethernow");
/* vim:set ai sw=1: */