1 // source: http://www.thingiverse.com/thing:18148
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
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);
13 // Simple creeper body
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]);
20 // The negative space to hollow out the creeper body
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);
26 // The body with a neck added and the tummy removed
28 layer=0.6; // Layer thickness used to make thin disks for support
32 translate([2*b,4*b,12*b-w]) cylinder(r=2*b,h=w+3*b);
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);
42 // The negative space to make the creeper 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]);
53 // Simple creeper head
62 module spring_hole() {
63 assign(d_in = 7, d_out = 12, d_w = 1) {
65 cylinder(r = d_out/2, h = 7*b + eps);
67 cylinder(r = d_in/2 + d_w, h = 6*b - d_w);
68 translate([0, 0, -eps])
69 cylinder(r = d_in/2, h = 6*b - d_w + 2*eps);
70 rotate([0, 0, 135]) translate([0, 0, -eps])
74 for (a = [-25, 25]) rotate([0, 0, -90+a])
75 translate([-d_w/2, d_in/2, 0])
76 cube([d_w, d_out, 6*b - d_w + eps]);
81 translate([d_in/2, -infty/2, -eps])
83 cube([d_w, infty, 7*b-d_w]);
86 translate([d_s/2-d_in/2 , 0, 0]) difference() {
87 cylinder(r = d_w + d_s/2, h = 7*b + eps);
88 translate([0, 0, -eps])
89 cylinder(r = d_s/2, h = 7*b + 3*eps);
98 // Head with a hole for the neck
102 // translate([4*b,4*b,-1]) cylinder(r=2*b+t,h=7*b+1);
103 translate([4*b,4*b,-eps]) spring_hole();
107 // Show the assembled creeper
110 translate([-2*b,0,12*b]) head2();
119 // These next lines show both pieces in print orientation
120 // translate([0,-b,8*b]) rotate([0,-180,90]) head2();
121 // translate([2*b,2*b,0]) rotate([90,0,0]) body2();
123 // Make a small piece to print an overhang test
125 translate([-2*b, 12*b,0]) difference() {
126 rotate([90,0,0]) tummy2();
127 translate([-5*b,-10*b,-b]) cube([14*b, 24*b, 10*b]); // Just leave the neck
128 //translate([-5*b,-16*b,4*b]) cube([14*b, 24*b, 10*b]); // Cross section