// source: http://www.thingiverse.com/thing:18148 eps=0.01; infty = 100; b=2; // Scale factor. A creeper is 24 of these high w=3; // Wall thickness in mm t=0.5; // Tolerance between neck and head echo("Total body height is",5*b+12*b+3*b); echo("Total head height is",8*b); echo("Total width is",8*b); // Simple creeper body module body() { cube([4*b,8*b,12*b]); translate([-4*b,0,-5*b]) cube([4*b,8*b,6*b]); translate([4*b,0,-5*b]) cube([4*b,8*b,6*b]); } // The negative space to hollow out the creeper body module tummy() { translate([w,w,w]) cube([4*b-2*w,8*b-2*w,12*b-2*w]); translate([2*b,4*b,12*b-w]) cylinder(r=2*b-w,h=w+4*b); } // The body with a neck added and the tummy removed module body2() { layer=0.6; // Layer thickness used to make thin disks for support difference() { union() { body(); translate([2*b,4*b,12*b-w]) cylinder(r=2*b,h=w+3*b); } tummy(); } // Some discs for support //translate([2*b,4*b,12*b-w]) cylinder(r=2*b,h=layer); //translate([2*b,4*b,13.5*b+layer]) cylinder(r=2*b,h=layer); //translate([2*b,4*b,15*b-layer]) cylinder(r=2*b,h=layer); } // The negative space to make the creeper face module face(){ translate([7*b,0,0]) union() { translate([0,2*b-eps,1*b-eps]) cube([3*b,1*b+2*eps,2*b+2*eps]); translate([0,5*b-eps,1*b-eps]) cube([3*b,1*b+2*eps,2*b+2*eps]); translate([0.5*b,3*b-eps,2*b-eps]) cube([2.5*b,2*b+2*eps,2*b+2*eps]); translate([0,5*b-eps,4.5*b-eps]) cube([3*b,1.5*b+2*eps,1.5*b+2*eps]); translate([0,1.5*b-eps,4.5*b-eps]) cube([3*b,1.5*b+2*eps,1.5*b+2*eps]); } } // Simple creeper head module head(){ difference() { cube([8*b,8*b,8*b]); face(); } } module spring_hole() { assign(d_in = 8, d_out = 13, d_w = 1, h = 9, h_c = 7) { difference() { cylinder(r = d_out/2, h = h + eps); translate([d_in/2, -infty/2, -infty/2]) cube(infty); difference() { cylinder(r = d_in/2 + d_w, h = h_c); translate([0, 0, -eps]) cylinder(r = d_in/2, h = h_c + 2*eps); rotate([0, 0, 135]) translate([0, 0, -eps]) cube(infty); }; /* for (a = [-25, 25]) rotate([0, 0, -90+a]) translate([-d_w/2, d_in/2, 0]) cube([d_w, d_out, 6*b - d_w + eps]); */ /* for (a = [0:120:360]) rotate([0, 0, a]) translate([d_in/2, -infty/2, -eps]) rotate([0, -1, 0]) cube([d_w, infty, 7*b-d_w]); */ /* translate([d_s/2-d_in/2 , 0, 0]) difference() { cylinder(r = d_w + d_s/2, h = 7*b + eps); translate([0, 0, -eps]) cylinder(r = d_s/2, h = 7*b + 3*eps); }; */ } } } // Head with a hole for the neck module head2(){ difference(){ head(); // translate([4*b,4*b,-1]) cylinder(r=2*b+t,h=7*b+1); translate([4*b,4*b,-eps]) spring_hole(); } } // Show the assembled creeper module creeper() { body2(); translate([-2*b,0,12*b]) head2(); } module rocket_body() { cylinder(r = 8, h = 9.5, $fn = 18); translate([0, 0, 9.5-eps]) cylinder(r1 = 8, r2 = 7.5, h = 4+eps, $fn = 18); translate([0, 0, 13.5-eps]) cylinder(r1 = 7.5, r2 = 6.5, h = 4+eps, $fn = 18); translate([0, 0, 17.5-eps]) cylinder(r1 = 6.5, r2 = 5.0, h = 4+eps, $fn = 18); translate([0, 0, 21.5-eps]) cylinder(r1 = 5.0, r2 = 3.0, h = 4+eps, $fn = 18); translate([0, 0, 23.8-eps]) sphere(r = 3.5, $fn = 18); // translate([0, 0, 25.5-eps]) cylinder(r1 = 3.0, r2 = 1.0, h = 4+eps, $fn = 18); for (a = [0, 120, 240]) rotate([0, 0, a]) hull() { translate([7, -2, 0]) cube([eps, 4, 12]); translate([12, -1, 0]) cube([eps, 2, 2]); } } module rocket() { difference() { rocket_body(); translate([0, 0, -eps]) spring_hole(); } } module rocket_tail_body() { cylinder(r = 8, h = 12, $fn = 18); for (a = [0, 120, 240]) rotate([0, 0, a]) hull() { translate([7, -3, 0]) cube([eps, 6, 12]); translate([14, -1, 12]) cube([eps, 2, 2]); } } module rocket_tail() { difference() { rocket_tail_body(); translate([0, 0, -eps]) spring_hole(); } } module heart_body() { for (i = [-1, 1]) hull() { // translate([4.5*i, -3, 12]) rotate([-90, 0, 0]) cylinder(r=5, h = 6, $fn = 32); // translate([4.5*i, -7, 12]) rotate([-90, 0, 0]) cylinder(r=4.5, h = 14, $fn = 32); translate([4.5*i, -6, 12]) rotate([-90, 0, 0]) cylinder(r=5.5, h = 12, $fn = 32); translate([4.5*i, -8, 12]) rotate([-90, 0, 0]) cylinder(r=4.5, h = 16, $fn = 32); // translate([4.5*i, 0, 12]) sphere(9); cylinder(r = 8, h = eps); } } module heart() { difference() { heart_body(); translate([0, 0, -eps]) spring_hole(); } } //body(); //tummy(); // head2(); // rocket_tail(); // heart(); translate([4, 4, 0]) head2(); translate([-12, 12, 0]) heart(); // translate([-12, -12, 0]) rocket(); // translate([12, -12, 0]) rocket_tail(); translate([0, -8, 0]) rotate([0, 0, 30]) rocket_tail(); //body2(); //creeper(); // These next lines show both pieces in print orientation // translate([0,-b,8*b]) rotate([0,-180,90]) head2(); // translate([2*b,2*b,0]) rotate([90,0,0]) body2(); // Make a small piece to print an overhang test /* translate([-2*b, 12*b,0]) difference() { rotate([90,0,0]) tummy2(); translate([-5*b,-10*b,-b]) cube([14*b, 24*b, 10*b]); // Just leave the neck //translate([-5*b,-16*b,4*b]) cube([14*b, 24*b, 10*b]); // Cross section } */