chiark / gitweb /
quacks-ingredients: reverse order of priming towers
[reprap-play.git] / quacks-ingredients.scad
1 // -*- C -*-
2
3 token_dia = 21;
4 spot_dia = 4.5;
5 spot_gap = spot_dia / 3.0;
6
7 thick = 1.5;
8
9 multicolour_gap = 0.15; // each side
10 initial_layer_thick = 0.400;
11 initial_layer_width = 0.750;
12 final_layer_thick = 0.250;
13 multicolour_post = 4;
14
15 $nspots = 3;
16 $spots_absent = false;
17 $spots_plusgap = false;
18
19 $fs=0.1;
20 $fa=1;
21
22 module Spots_Extrude_Lower(){
23   d = $spots_plusgap ? 1 : 0;
24   translate([0,0,-d])
25     linear_extrude(height= initial_layer_thick + d)
26     children(0);
27 }
28
29 module Spots_Extrude_Upper(){
30   d = $spots_plusgap ? 1 : 0;
31   translate([0,0, thick + d])
32     mirror([0,0, 1])
33     linear_extrude(height= final_layer_thick + d)
34     children(0);
35 }
36
37 module SpotAt(condition, xy) {
38   if (condition == !$spots_absent) {
39     translate(xy * (spot_gap + spot_dia) * sqrt(0.5))
40       circle(r= spot_dia/2 +
41              ($spots_plusgap ? multicolour_gap : 0));
42   }
43 }
44
45 module Token_Spots(){
46   SpotAt(($nspots % 2) > 0,  [0,0]);
47   SpotAt($nspots >= 2, [ 1, 1]);
48   SpotAt($nspots >= 2, [-1,-1]);
49   SpotAt($nspots >= 4, [ 1,-1]);
50   SpotAt($nspots >= 4, [-1, 1]);
51 }
52
53 module Token_Spots_All(){
54   $nspots = 5;
55   Token_Spots();
56 }
57
58 module Token_L1(){
59   Spots_Extrude_Lower()
60     Token_Spots();
61 }
62
63 module Token_L2(){
64   $spots_absent = true;
65   Spots_Extrude_Lower()
66     Token_Spots();
67 }
68
69 module Token_L3(){
70   $spots_plusgap = true;
71   difference(){
72     linear_extrude(height=thick)
73       circle(r=token_dia/2);
74     Spots_Extrude_Lower() Token_Spots_All();
75     Spots_Extrude_Upper() Token_Spots_All();
76   }
77 }
78
79 module Token_L4(){
80   $spots_absent = true;
81   Spots_Extrude_Upper()
82     Token_Spots();
83 }
84
85 module Token_L5(){
86   Spots_Extrude_Upper()
87     Token_Spots();
88 }
89
90 module Demo(){ ////toplevel
91   color("red") { Token_L3(); }
92   color("white") { Token_L1(); Token_L5(); }
93   color("black") { Token_L2(); Token_L4(); }
94 }
95
96 module Frame(phase) {
97   zs = [ initial_layer_thick,
98          initial_layer_thick,
99          thick,
100          thick,
101          thick ];
102
103   base_sz = token_dia * [ 6, 1.5 ];
104   sz = base_sz + phase * initial_layer_width * 2 * [1,1];
105   linear_extrude(height= initial_layer_thick) {
106     difference(){
107       square(center=true, sz + initial_layer_width * 2 * [1,1]);
108       square(center=true, sz);
109     }
110   }
111   // Priming tower
112   translate([-base_sz[0]/2, (3-phase)*(multicolour_post + multicolour_gap)])
113     linear_extrude(height= zs[phase-1])
114     square(multicolour_post);
115 }
116
117 module Tests(){
118   for ($nspots = [1,2,3,4]) {
119     translate(($nspots - 2) * (token_dia + 3) * [1,0])
120       children();
121   }
122 }
123
124 module Test_L1(){ ////toplevel
125   Frame(1); Tests() Token_L1();
126 }
127 module Test_L2(){ ////toplevel
128   Frame(2); Tests() Token_L2();
129 }
130 module Test_L3(){ ////toplevel
131   Frame(3); Tests() Token_L3();
132 }
133 module Test_L4(){ ////toplevel
134   Frame(4); Tests() Token_L4();
135 }
136 module Test_L5(){ ////toplevel
137   Frame(5); Tests() Token_L5();
138 }
139
140 //Demo();