// Tux-Spardose // Forked from runeman.org/3d/tux // Modified by Kreativmonkey 04.2018 // // Licence: GPLv3 ///////////////////////////////////////////////////////////////////////// ////////////////// VARIABLES //////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// ///// Render // lock // tux // moneybox minimum height 200mm // dev renderer = "moneybox"; // Dimention in mm // For moneybox the minimal height is: // euro = 150mm // dollar = 170mm // sterling = 190mm height=150; wall=5; // currency for the coinhole // Options: // - euro // - dollar // - pfund (without Ten Pounds) currency="euro"; // Numb of Fragments // Set $fn to ~100 for rendering the print objekt $fn=50; ////////////////////////////////////////////////////////////////////////// ////////////////// RENDERS /////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// if (renderer == "lock") { translate([0,0, height*0.06]) rotate([180,0,0]) lock(height); } if (renderer == "tux") { difference(){ tux(height); } } if ( renderer == "moneybox") { difference(){ tux(height, true); cutLock(height); coinhole(height, currency); } } if (renderer == "dev"){ difference(){ tux(height, true); cutLock(height); coinhole(height, currency); translate([-height/2, 0, 0]) cube(height); } } //////////////////////////////////////////////////////////////////////// /////////////////// MODULES //////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// module lock(size){ translate([0,0,size*0.05]) cube([size*0.4, size*0.05, size*0.02], center=true); difference(){ union(){ // body translate([0, 0, size*0.01]) cylinder(r=size*0.18, h=size*0.05); // bottom cylinder(r1=size*0.21, r2=size*0.18 , h=size*0.015); } cylinder(r1=size*0.16, r2=size*0.14 , h=size*0.02); } translate([0,0,size*0.022/2]) cube([size*0.322, size*0.032, size*0.022], center=true); } module coinhole(size, currency = "euro") { // Dimension Dollar "Half Dollar": r=30.61mm h=2.15mm // Dimension Euro "2 Euro": r=25.75mm h=2.2mm // Dimension Sterling "Ten pounds": r=65mm h=2.5mm if( currency == "euro" ) { if(size < 170) echo("The minimal height is 150mm"); translate([0,size*0.05,size*0.95]) rotate([0,0,90]) cube([3, 30, size*0.3], center=true); translate([0, 0, size*0.60]) cylinder(d=35, h=size*0.18); } if( currency == "dollar" ) { if(size < 170) echo("The minimal height is 170mm"); translate([0,size*0.05,size*0.95]) rotate([0,0,90]) cube([3, 35, size*0.3], center=true); translate([0, 0, size*0.60]) cylinder(d=40, h=size*0.18); } if( currency == "sterling" ) { if(size < 190) echo("The minimal height is 190mm"); translate([0,size*0.05,size*0.95]) rotate([0,0,90]) cube([4, 43, size*0.3], center=true); translate([0, 0, size*0.60]) cylinder(d=45, h=size*0.18); } } module cutLock(size){ translate([0,0,size*0.04]) cylinder(r=size*0.21, h=size*0.022); // Verschluss mit aussparungen. lock(size*1.01); translate([0, 0, size*0.02]) cube([size*0.06, size*0.41, size*0.07], center=true); translate([0, 0, size*0.04]) cube([size*0.41, size*0.06, size*0.006], center=true); cylinder(r=size*0.18, h=size*0.025); } module tux(size, inside = false){ difference(){ union(){ arm(size, "right"); arm(size, "left"); foot(size, "right"); foot(size, "left"); } if( inside == true ){ body(size, wall); arm(size, "right", wall); arm(size, "left", wall); foot(size, "right", wall); foot(size, "left", wall); } } difference(){ union(){ body(size); head(size); } if( inside == true ){ body(size, wall+5); head(size, wall+5); } translate([0,0,-size*0.7]) cube([size*1.4,size*1.4,size*1.4], center=true); } // Botton resize(newsize=[size*0.59,size*0.515,0]) cylinder(r2=size*0.14, r1=size*0.13, h=size*0.06); } module head(size, wthikness = 0){ if( wthikness == 0){ difference(){ union(){ // HEAD translate([0,1,size*0.82]) rotate([30,0,0]) resize(newsize=[size*0.36-wthikness,size*0.34-wthikness,size*0.34-wthikness]) sphere(size*0.16-wthikness); } // Eyeholes translate([-size*0.07,-size*0.19+wthikness,size*0.85]) rotate([80,-5,-10]) resize(newsize=[size*0.1, size*0.15, size*0.12]) cylinder(r=size*0.12, h=size*0.01, center=true); translate([size*0.07,-size*0.19+wthikness,size*0.85]) rotate([80,5,10]) resize(newsize=[size*0.1, size*0.15, size*0.12]) cylinder(r=size*0.12, h=size*0.01, center=true); translate([0,-size*0.155+wthikness,size*0.85]) rotate([-10,0,0]) resize(newsize=[size*0.15, size*0.02,size*0.15])sphere(size*0.02); } } else { difference(){ union(){ // HEAD translate([0,1,size*0.82]) rotate([30,0,0]) resize(newsize=[size*0.36-wthikness,size*0.34-wthikness,size*0.34-wthikness]) sphere(size*0.16-wthikness); } translate([0,-size*0.135,size*0.85]) rotate([-10,0,0]) cube([size*0.25, size*0.05, size*0.25], center=true); } } // Pupills translate([size*0.05,-size*0.13,size*0.83]) rotate([0,7,0]) resize(newsize=[size*0.075-wthikness, size*0.044-wthikness, size*0.1-wthikness]) sphere(3); translate([-size*0.05,-size*0.13,size*0.83]) rotate([0,-7,0]) resize(newsize=[size*0.075-wthikness, size*0.044-wthikness, size*0.1-wthikness]) sphere(3); // beak if(wthikness ==0){ hull(){ // tip translate([0,-size*0.22,size*0.74]) resize(newsize=[size*0.11-wthikness,size*0.15-wthikness,size*0.044-wthikness]) sphere(2); //chin translate([0,-size*0.05,size*0.73]) resize(newsize=[size*0.25-wthikness,size*0.03-wthikness,size*0.22-wthikness]) sphere(2); //nose translate([0,-10,size*0.77]) rotate([5,0,0]) resize(newsize=[size*0.01-wthikness,size*0.22-wthikness,size*0.044-wthikness]) sphere(2); } } } // BODY module body(size, wthikness = 0){ // body difference(){ hull(){ translate([0,0,15]) resize(newsize=[size*0.60-wthikness,size*0.52-wthikness,size*0.60-wthikness]) sphere((size*0.60+wthikness)/2, center=true); //neck translate([0,1.5,size*0.60]) sphere(size*0.17-wthikness/2); //back top translate([0,size*0.11,size*0.52]) rotate([20,0,0]) resize(newsize=[size*0.34-wthikness,size*0.22-wthikness,size*0.40-wthikness]) sphere(2); //back bottom translate([0,size*0.22,size*0.30]) rotate([10,0,0]) resize(newsize=[size*0.22-wthikness,size*0.11-wthikness,size*0.44-wthikness]) sphere(2); } translate([0,0,-size*0.35+wthikness]) cube([size*1.40-wthikness,size*1.40-wthikness,size*0.70-wthikness], center=true); } //tail if( wthikness == 0){ translate([0,size*0.24,size*0.09]) sphere(size*0.09); } } // ARMS module arm(size, side, wthikness = 0){ if(side == "right"){ hull(){ translate([-size*0.21,0,size*0.45]) rotate([-20,110,0]) resize(newsize=[size*0.30-wthikness,size*0.22-wthikness,size*0.15-wthikness]) sphere(2); translate([-size*0.19,-size*0.15,size*0.30]) rotate([60,70,100]) resize(newsize=[size*0.22-wthikness,size*0.30-wthikness,size*0.10-wthikness]) sphere(2); } } if(side == "left"){ // left arm hull(){ translate([size*0.21,0,size*0.45]) rotate([20,70,0]) resize(newsize=[size*0.30-wthikness,size*0.22-wthikness,size*0.15-wthikness]) sphere(2); translate([size*0.27,-size*0.22,size*0.30]) rotate([80,20,30]) resize(newsize=[size*0.15-wthikness,size*0.25-wthikness,size*0.10-wthikness]) sphere(2); } } } // FOOT module foot(size, side="none", wthikness = 0){ if(side == "right"){ translate([-size*0.20,-size*0.25,size*0.074]) rotate([85,30,140]) complete(); } // left foot if(side == "left"){ translate([size*0.20,-size*0.25,size*0.074]) rotate([85,-30,220]) complete(); } if(side == "none"){ complete(); } module complete(){ hull(){ union(){ translate([0,-1.8,size*0.074]) sphere(size*0.074-wthikness); } finger(); } rotate([0,0,30]) finger(); rotate([0,0,-30]) finger(); } module finger(){ hull(){ resize(newsize=[size*0.15-wthikness,size*0.15-wthikness,size*0.074-wthikness]) sphere(2); translate([0,size*0.20,0]) resize(newsize=[size*0.18-wthikness,size*0.22-wthikness,size*0.074-wthikness]) sphere(2); } } }