]> www.fi.muni.cz Git - things.git/blob - pencil-toppers.scad
switch holder.scad
[things.git] / pencil-toppers.scad
1 // source: http://www.thingiverse.com/thing:18148
2
3 eps=0.01;
4 infty = 100;
5 b=2;   // Scale factor. A creeper is 24 of these high
6 w=3;   // Wall thickness in mm
7 t=0.5; // Tolerance between neck and head
8
9 echo("Total body height is",5*b+12*b+3*b);
10 echo("Total head height is",8*b);
11 echo("Total width is",8*b);
12
13 // Simple creeper body
14 module body() {
15     cube([4*b,8*b,12*b]);
16     translate([-4*b,0,-5*b]) cube([4*b,8*b,6*b]);
17     translate([4*b,0,-5*b]) cube([4*b,8*b,6*b]);
18
19
20 // The negative space to hollow out the creeper body
21 module tummy() {
22     translate([w,w,w]) cube([4*b-2*w,8*b-2*w,12*b-2*w]);
23     translate([2*b,4*b,12*b-w]) cylinder(r=2*b-w,h=w+4*b);
24 }
25
26 // The body with a neck added and the tummy removed
27 module body2() {
28     layer=0.6; // Layer thickness used to make thin disks for support
29     difference() {
30         union() {
31             body();
32             translate([2*b,4*b,12*b-w]) cylinder(r=2*b,h=w+3*b);
33         }
34         tummy();
35     }
36     // Some discs for support
37     //translate([2*b,4*b,12*b-w]) cylinder(r=2*b,h=layer);
38     //translate([2*b,4*b,13.5*b+layer]) cylinder(r=2*b,h=layer);
39     //translate([2*b,4*b,15*b-layer]) cylinder(r=2*b,h=layer);
40 }
41
42 // The negative space to make the creeper face
43 module face(){
44     translate([7*b,0,0]) union() {
45         translate([0,2*b-eps,1*b-eps]) cube([3*b,1*b+2*eps,2*b+2*eps]);
46         translate([0,5*b-eps,1*b-eps]) cube([3*b,1*b+2*eps,2*b+2*eps]);
47         translate([0.5*b,3*b-eps,2*b-eps]) cube([2.5*b,2*b+2*eps,2*b+2*eps]);
48         translate([0,5*b-eps,4.5*b-eps]) cube([3*b,1.5*b+2*eps,1.5*b+2*eps]);
49         translate([0,1.5*b-eps,4.5*b-eps]) cube([3*b,1.5*b+2*eps,1.5*b+2*eps]);    
50     }
51 }
52
53 // Simple creeper head
54 module head(){
55     difference() {
56         cube([8*b,8*b,8*b]);
57         face();
58     }
59 }
60
61
62 module spring_hole() {
63         assign(d_in = 8, d_out = 13, d_w = 1, h = 9, h_c = 7) {
64         difference() {
65                 cylinder(r = d_out/2, h = h + eps);
66                 translate([d_in/2, -infty/2, -infty/2])
67                         cube(infty);
68                 difference() {
69                         cylinder(r = d_in/2 + d_w, h = h_c);
70                         translate([0, 0, -eps])
71                         cylinder(r = d_in/2,       h = h_c + 2*eps);
72                         rotate([0, 0, 135]) translate([0, 0, -eps])
73                         cube(infty);
74                         
75                 };
76 /*
77                 for (a = [-25, 25]) rotate([0, 0, -90+a])
78                         translate([-d_w/2, d_in/2, 0])
79                         cube([d_w, d_out, 6*b - d_w + eps]);
80 */
81                 
82 /*
83                 for (a = [0:120:360])
84                         rotate([0, 0, a])
85                         translate([d_in/2, -infty/2, -eps])
86                         rotate([0, -1, 0])
87                                 cube([d_w, infty, 7*b-d_w]);
88 */
89 /*
90                 translate([d_s/2-d_in/2 , 0, 0]) difference() {
91                         cylinder(r = d_w + d_s/2, h = 7*b + eps);
92                         translate([0, 0, -eps])
93                         cylinder(r = d_s/2, h = 7*b + 3*eps);
94                 };
95 */
96                         
97         }
98         }
99 }
100
101         
102 // Head with a hole for the neck
103 module head2(){
104     difference(){
105         head();
106         // translate([4*b,4*b,-1]) cylinder(r=2*b+t,h=7*b+1);
107         translate([4*b,4*b,-eps]) spring_hole();
108     }
109 }
110
111 // Show the assembled creeper
112 module creeper() {
113     body2();
114     translate([-2*b,0,12*b]) head2();
115 }
116
117 module rocket_body() {
118         cylinder(r = 8, h = 9.5, $fn = 18);
119         translate([0, 0, 9.5-eps])  cylinder(r1 = 8,   r2 = 7.5, h = 4+eps, $fn = 18);
120         translate([0, 0, 13.5-eps]) cylinder(r1 = 7.5, r2 = 6.5, h = 4+eps, $fn = 18);
121         translate([0, 0, 17.5-eps]) cylinder(r1 = 6.5, r2 = 5.0, h = 4+eps, $fn = 18);
122         translate([0, 0, 21.5-eps]) cylinder(r1 = 5.0, r2 = 3.0, h = 4+eps, $fn = 18);
123         translate([0, 0, 23.8-eps]) sphere(r = 3.5, $fn = 18);
124         // translate([0, 0, 25.5-eps]) cylinder(r1 = 3.0, r2 = 1.0, h = 4+eps, $fn = 18);
125         for (a = [0, 120, 240]) rotate([0, 0, a]) hull() {
126                 translate([7, -2, 0]) 
127                         cube([eps, 4, 12]);
128                 translate([12, -1, 0]) 
129                         cube([eps, 2, 2]);
130         }
131 }
132
133 module rocket() {
134         difference() {
135                 rocket_body();
136                 translate([0, 0, -eps]) spring_hole();
137         }
138 }
139
140 module rocket_tail_body() {
141         cylinder(r = 8, h = 12, $fn = 18);
142         for (a = [0, 120, 240]) rotate([0, 0, a]) hull() {
143                 translate([7, -3, 0]) 
144                         cube([eps, 6, 12]);
145                 translate([14, -1, 12]) 
146                         cube([eps, 2, 2]);
147         }
148 }
149
150 module rocket_tail() {
151         difference() {
152                 rocket_tail_body();
153                 translate([0, 0, -eps]) spring_hole();
154         }
155 }
156
157 module heart_body() {
158         for (i = [-1, 1]) hull() {
159                 // translate([4.5*i, -3, 12]) rotate([-90, 0, 0]) cylinder(r=5, h = 6, $fn = 32);
160                 // translate([4.5*i, -7, 12]) rotate([-90, 0, 0]) cylinder(r=4.5, h = 14, $fn = 32);
161                 translate([4.5*i, -6, 12]) rotate([-90, 0, 0]) cylinder(r=5.5, h = 12, $fn = 32);
162                 translate([4.5*i, -8, 12]) rotate([-90, 0, 0]) cylinder(r=4.5, h = 16, $fn = 32);
163                 // translate([4.5*i, 0, 12]) sphere(9);
164                 cylinder(r = 8, h = eps);
165         }
166 }
167
168 module heart() {
169         difference() {
170                 heart_body();
171                 translate([0, 0, -eps]) spring_hole();
172         }
173 }
174
175 //body();
176 //tummy();
177 // head2();
178 // rocket_tail();
179 // heart();
180
181 translate([4, 4, 0]) head2();
182 translate([-12, 12, 0]) heart();
183 // translate([-12, -12, 0]) rocket();
184 // translate([12, -12, 0]) rocket_tail();
185 translate([0, -8, 0]) rotate([0, 0, 30]) rocket_tail();
186
187 //body2();
188 //creeper();
189
190 // These next lines show both pieces in print orientation
191 // translate([0,-b,8*b]) rotate([0,-180,90]) head2();
192 // translate([2*b,2*b,0]) rotate([90,0,0]) body2();
193
194 // Make a small piece to print an overhang test
195 /*
196 translate([-2*b, 12*b,0]) difference() {
197   rotate([90,0,0]) tummy2();
198   translate([-5*b,-10*b,-b]) cube([14*b, 24*b, 10*b]); // Just leave the neck
199   //translate([-5*b,-16*b,4*b]) cube([14*b, 24*b, 10*b]); // Cross section
200 }
201 */
202