chiark / gitweb /
quacks-ingredients: multicolour gap
[reprap-play.git] / quacks-ingredients.scad
1 // -*- C -*-
2
3 token_dia = 18;
4 spot_dia = 4;
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
14 $nspots = 3;
15 $spots_absent = false;
16 $spots_plusgap = false;
17
18 $fs=0.1;
19 $fa=1;
20
21 module Spots_Extrude_Lower(){
22   d = $spots_plusgap ? 1 : 0;
23   translate([0,0,-d])
24     linear_extrude(height= initial_layer_thick + d)
25     children(0);
26 }
27
28 module Spots_Extrude_Upper(){
29   d = $spots_plusgap ? 1 : 0;
30   translate([0,0, thick + d])
31     mirror([0,0, 1])
32     linear_extrude(height= final_layer_thick + d)
33     children(0);
34 }
35
36 module SpotAt(condition, xy) {
37   if (condition == !$spots_absent) {
38     echo(condition, $spots_absent, "Y");
39     translate(xy * (spot_gap + spot_dia) * sqrt(0.5))
40       circle(r= spot_dia/2 +
41              ($spots_plusgap ? multicolour_gap : 0));
42   } else {
43     echo(condition, $spots_absent, "N");
44   }
45 }
46
47 module Token_Spots(){
48   SpotAt(($nspots % 2) > 0,  [0,0]);
49   SpotAt($nspots >= 2, [ 1, 1]);
50   SpotAt($nspots >= 2, [-1,-1]);
51   SpotAt($nspots >= 4, [ 1,-1]);
52   SpotAt($nspots >= 4, [-1, 1]);
53 }
54
55 module Token_Spots_All(){
56   $nspots = 5;
57   Token_Spots();
58 }
59
60 module Token_L1(){
61   Spots_Extrude_Lower()
62     Token_Spots();
63 }
64
65 module Token_L2(){
66   $spots_absent = true;
67   Spots_Extrude_Lower()
68     Token_Spots();
69 }
70
71 module Token_L3(){
72   $spots_plusgap = true;
73   difference(){
74     linear_extrude(height=thick)
75       circle(r=token_dia/2);
76     Spots_Extrude_Lower() Token_Spots_All();
77     Spots_Extrude_Upper() Token_Spots_All();
78   }
79 }
80
81 module Token_L4(){
82   $spots_absent = true;
83   Spots_Extrude_Upper()
84     Token_Spots();
85 }
86
87 module Token_L5(){
88   Spots_Extrude_Upper()
89     Token_Spots();
90 }
91
92 module Demo(){ ////toplevel
93   color("red") { Token_L3(); }
94   color("white") { Token_L1(); Token_L5(); }
95   color("black") { Token_L2(); Token_L4(); }
96 }
97
98 module Tests(){
99   for ($nspots = [1,2,3,4]) {
100     translate(($nspots - 2) * (token_dia + 3) * [1,0])
101       children();
102   }
103 }
104
105 module Test_L1(){ ////toplevel
106   Tests() Token_L1();
107 }
108 module Test_L2(){ ////toplevel
109   Tests() Token_L2();
110 }
111 module Test_L3(){ ////toplevel
112   Tests() Token_L3();
113 }
114 module Test_L4(){ ////toplevel
115   Tests() Token_L4();
116 }
117 module Test_L5(){ ////toplevel
118   Tests() Token_L5();
119 }
120
121 //Demo();