// Doggie // 29/08/2012 // Trev Moseley // Change Log // 29/09/2012 sylefeb: changed ball joint for easier mounting/manipulation $fn = 50; Mult = 1; scl = 2; hdScl = 1.5; ball = 1.9; sck = 2; dome = 2.9; supp = 0.25; //half_dog(); //flegconn(); //blegconn(); //head(); //body(); //fleg(); //bleg(); //heads(); //dog(); print(); module heads() { head(); translate([25,0,0]) head(); } module print() { hyp = sqrt(pow(3.1*scl*Mult,2)+pow(2*scl*Mult,2)); scale(Mult) { body(); translate([12,-13,0]) rotate([0,0,90]) head(); translate([-3,-25,0]) rotate([0,0,45]) fleg(); translate([12,-25,0]) rotate([0,0,-45]) mirror([1,0,0]) fleg(); translate([-3,-40,0]) mirror([1,0,0]) bleg(); translate([12,-40,0]) bleg(); // translate([-10,-70,0]) cube([30,80,40.1]); } if (supp>0) { // rear leg ball supports translate([0,-supp,0]) rotate([0,0,30]) cube([hyp+(supp*2),supp*4,supp*4+1]); translate([0,-supp,supp*4]) rotate([180,0,150]) translate([0,0,-1]) cube([hyp+(supp*2),supp*4,supp*4+1]); // front leg ball supports translate([0,-supp,(14-dome-1)*scl*Mult]) rotate([0,0,30]) cube([hyp+(supp*4),supp*4,(dome-ball)*scl*Mult*4]); translate([0,supp*4,(14-dome-1)*scl*Mult]) rotate([0,0,150]) cube([hyp+(supp*2),supp*4,(dome-ball)*scl*Mult*4]); // head ball support translate([-supp*2,-4*scl*Mult,(16-4)*scl*Mult]) rotate([45,0,0]) cube([supp*4,2*scl*Mult,3.6*scl*Mult]); // front foot supports // translate([0,-25*Mult,0]) translate([(-4.5-1)*scl*Mult,-7.5*scl*Mult,0]) brace(); // translate([14*Mult,-6*Mult,0]) translate([(4.5-1)*scl*Mult,-7.5*scl*Mult,0]) brace(); // rear foot supports // translate([15*Mult,-22*Mult,0]) translate([-2.5*scl*Mult,-10.3*scl*Mult,0]) brace(); // translate([30*Mult,-15*Mult,0]) translate([0.5*scl*Mult,-10.3*scl*Mult,0]) brace(); } } module brace() { translate([0,-1.5*scl*Mult,0]) cube([2*scl*Mult,3*scl*Mult,supp]); // foot translate([0,-0.5*scl*Mult,0]) cube([2*scl*Mult,0.5*scl*Mult,5*scl*Mult]); // thick brace cube([2*scl*Mult,supp,8*scl*Mult]); // thin brace translate([0,-0.5*scl*Mult,0]) cube([2*scl*Mult,supp,8*scl*Mult]); // thin brace } module half_dog() { difference() { dog(); scale(Mult) translate([0,-40,-5]) cube([40,100,70]); } } module flegconn() { difference() { dog(); scale(scl) translate([-40,-40,14]) cube([80,80,70]); } } module blegconn() { difference() { dog(); scale(scl) translate([-40,-40,2]) cube([80,80,70]); } } module dog() { scale(Mult) { body(); translate([0,-15.0,48.4]) rotate([0,180,0]) head(); translate([-4.6,3.2,28]) rotate([30,90,180]) fleg(); translate([4.6,3.2,28]) mirror([1,0,0]) rotate([30,90,180]) fleg(); translate([-4.5,3,4]) rotate([30,90,180]) bleg(); translate([4.5,3,4]) mirror([1,0,0]) rotate([30,90,180]) bleg(); } } module fleg() { scale(scl) { difference() { union() { translate([0,0,dome-sck]) sphere(r=dome,center=true); // shoulder translate([0.1,-1,1.5]) rotate([50,-20,-20]) { cylinder(r1 = 1.5,r2 = 1, h = 10); // leg translate([0,0,10]) sphere(1.5); // foot } } translate([-4,-4,-8]) cube(8); // cut in half translate([0,0,sck/2]) sphere(sck); // socket translate([0,-0.5,-1]) rotate([0,0,-15]) cube([4,4,4]); // slice for easier fit } } } module bleg() { scale(scl) { difference() { union() { translate([0,0,dome-sck]) sphere(r=dome,center=true); // shoulder translate([-1.0,0,1]) rotate([60,10,20]) { cylinder(r1 = 1.7,r2 = 1.4, h = 6); //thigh translate([0,0,6]) sphere(1.4); //knee translate([0,0,6]) rotate([0,-45,0]) { cylinder(r1=1.4,r2=1,,h=7); translate([0,0,7]) sphere(1.5); } } } translate([-4,-4,-8]) cube(8); // cut in half translate([0,0,sck/2]) sphere(sck); // socket translate([0,-0.75,-1]) rotate([0,0,-15]) cube([4,1.5,4]); // slice for easier fit } } } module body() { scale(scl) { difference() { union() { cylinder(r1=3,r2=5,h=12.5); //body translate([0,0,13]) sphere(r=5); //chest translate([0,-5.5,16]) sphere(r=ball); //neck // tail difference() { translate([-1,-5,4]) rotate([0,90,0]) cylinder(r=4,h=2); translate([-2,-5,6]) rotate([0,90,0]) cylinder(r=4,h=4); translate([-2,-10,3.5]) cube([4,4,4]); } } translate([-3.5,2,14]) rotate([30,90,0]) cylinder(r=dome+0.5,h=3,center=true); translate([3.5,2,14]) rotate([-30,90,0]) cylinder(r=dome+0.5,h=3,center=true); translate([-3.5,2,2]) rotate([30,90,0]) cylinder(r=dome+0.5,h=3.7,center=true); translate([3.5,2,2]) rotate([-30,90,0]) cylinder(r=dome+0.5,h=3.7,center=true); } // leg joints translate([-3.1,2,14]) sphere(r=ball); translate([3.1,2,14]) sphere(r=ball); translate([-3.1,2,ball]) sphere(r=ball); translate([3.1,2,ball]) sphere(r=ball); //translate([-3.1,1.5,0]) cube([6.2,1,0.1]); } } module head() { scale(hdScl) { difference() { union() { translate([0,0,9.5]) sphere(r=5); //round head cylinder(r1 = 2, r2 = 5, h = 9); //snout translate([-4.3,-3,9]) rotate([35,0,50]) cube([1,5,5]); //left ear translate([3.5,-2.5,9]) rotate([35,0,-50]) cube([1,5,5]); //right ear } translate([-3,-4,7]) sphere(r=2); //left eye translate([3,-4,7]) sphere(r=2); //right eye translate([0,2.6,10.9]) sphere(r=(sck/hdScl*scl)); //neck hole } translate([-2.5,-1.9,8]) sphere(r=1); //left eye translate([2.5,-1.9,8]) sphere(r=1); //right eye } }