// allviews display extruder printer bed frame movie // allviews scene1 scene1-end scene2 // allviews installation1 installation2 layers nozzle // testviews test include frameh=200; framew=200+30+30; displayh=40; displayw=100; bedw=160; bedh=5; bedy=20; extruderw=100; extruderh=70; module display(selection,lines){ translate([-displayw/2,-displayh/2,0]){ square ([displayw,displayh]); //color("blue") translate([0,0,1]) square ([20,100]); if (len(lines)>0){ for (i=[1:len(lines)]){ l=i-1; color("green") translate([5,l*8,1]){ text (lines[l],8); } } } } } module arrow(){ square([1,20]); rotate([0,0,45]) square([1,5]); rotate([0,0,-45]) square([1,5]); } module extruder(sensorpos,height,showdim,sensoron){ translate([-extruderw/2,-extruderh/2,1]){ translate([10,30,0]) color("black") square([extruderw,extruderh-30]); sensory=5+sensorpos; translate([0,sensory,1]) color("red"){ square([20,35]); if (!sensoron){ translate([10,0,0]) rotate([0,0,180]){ color("yellow"){ square([0.5,7]); rotate([0,0,30]) square([0.5,7]); rotate([0,0,-30]) square([0.5,7]); } } } } path=[[0,0],[-5,5],[-5,7],[-10,7],[-10,17],[-3,17], [-3,30],[3,30],[3,17],[10,17],[10,7], [5,7],[5,5],[0,0]]; translate([50,0,0]) color("gray") polygon(path); if (sensoron){ translate([5,30,2]) color("orange") circle(r=3); } if (showdim){ color("blue"){ translate ([-55,-40,0]) text ("Dectection point"); translate([-55,sensory,0]) square([50,1]); translate([-30,sensory+2,0]){ arrow(); translate([0,-sensory-2-height-2-bedh,0]) rotate([0,0,180]){ arrow(); } } translate([extruderw-20,5,0]) text ("Z offset"); translate([extruderw-40+5,0,0]) square([50+40,1]); translate([extruderw+30,2,0]){ arrow(); translate([0,-2-height-2-bedh,0]) rotate([0,0,180]){ arrow(); } } } } } } module bed(){ translate([-bedw/2,-bedh/2,0]){ color("black") square([bedw,bedh]); } } module frame(){ color("black"){ square ([30,frameh]); translate([framew-30,0]) square([30,frameh]); translate([0,frameh-50]) square([framew,50]); } } module printer(tt){ frame(); translate([framew/2,frameh-displayh/2-5,2]) display(0,[]); translate([framew/2,bedy,0]) bed(); // We position the extruder between 2 and 22 mm above // the bed trans=tt > 1 ? 1 : tt; translate([framew/2,bedy+bedh/2+20-trans*20+extruderh/2+2,0]){ color("silver"){ translate([-125,0,1]) square([250,8]); translate([-125,30,1]) square([250,8]); } translate([0,0,2]) extruder (0,0,tt==1,tt > 0.8); } } module scene1(tt){ if (tt<0.2){ printer(tt/0.2); }else{ printer (1); //factor=(tt-0.5)/0.5; //translate([-framew/2*factor,-30*factor,0]) // scale([1+factor,1+factor,0]) printer(1); } } module scene2(tt){ scale([2,2,0]) printer(tt); } module nozzle_one(low){ color("gray"){ path=[[0,0],[-4,4],[-4,6],[7,6],[7,4],[3,0],[0,0]]; translate([-1.5,0,0]) polygon(path); } color("red"){ if (low==1){ translate([0,-1.5,0]) circle(1.5,$fn=20); translate([3,-1.5,0]) circle(1.5,$fn=20); }else if (low==2){ factor=2.5/3; translate([0,-1.5*factor,0]) scale([1.4,factor]) circle(1.5,$fn=20); translate([3,-1.5*factor,0]) scale([1.4,factor]) circle(1.5,$fn=20); }else if (low==3){ translate([0,-1.5/2,0]) difference(){ scale([1.8,0.7]) circle(1.5,$fn=20); union(){ translate([-5,-1.5-1.1,0]) square([10,2]); translate([-3/2,0.4,0]) square([3,2]); } } translate([3,-1.5/2,0]) difference(){ scale([1.8,0.7]) circle(1.5,$fn=20); union(){ translate([-5,-1.5-1.1,0]) square([10,2]); translate([-3/2,0.4,0]) square([3,2]); } } } } } module nozzle(low){ if (low==1){ translate([0,3,0]) nozzle_one(low); }else if (low==2){ translate([0,2.5,0]) nozzle_one(low); }else if (low==3){ translate([0,1.5,0]) nozzle_one(low); } } module pipe(l,r) { distance=l-2*r; hull() { translate([0,0,0]) sphere(r=r); translate([0,0,distance]) sphere(r=r); } } module test(){ union() { pipe(l=20, r=5); rotate([90,0,0]) pipe(l=20, r=5); } } module layers_high(){ color("blue") translate([-2,25,0]) scale(0.25) text ("Too high"); for(x=[0:5]){ translate([0,2+4*x,0]) circle(r=2,$fn=20); } } module layers_low(){ color("blue") translate([-2,25,0]) scale(0.25) text ("Too low"); for(x=[0:5]){ translate([0,1+1.5*x,0]) scale([1.5,0.5]) circle(r=2,$fn=20); } } module layers_ok(){ color("blue") translate([-2,25,0]) scale(0.25) text ("Ok"); for(x=[0:5]){ translate([0,1.5+2*x,0]) scale([1,0.75]) circle(r=2,$fn=20); } } if (view=="display"){ display(2,["main","x=0","y=0"]); }else if (view=="extruder"){ extruder(4,1,true,true); }else if (view=="bed"){ bed(); }else if (view=="frame"){ frame(); }else if (view=="printer"){ printer(0); }else if (view=="installation1"){ //extruder(3,1,false,true); printer(2); translate([framew/2,bedy+bedh/2,4]){ color("brown"){ translate([-12.5,0,0]) square([25,1]); x=-extruderw/2-3; translate([x,0,0]) square([25,1]); translate([x,2,0]) square([25,1]); translate([x,4,0]) square([25,1]); } } }else if (view=="installation2"){ printer(0); }else if (view=="scene1"){ scene1($t); }else if (view=="scene1-end"){ scene1(1); }else if (view=="scene2"){ scene2($t); }else if (view=="layers"){ color("black") square([100,3]); translate([5,3,0]) layers_high(); translate([25,3,0]) layers_low(); translate([45,3,0]) layers_ok(); }else if (view=="nozzle"){ translate([0,0,0]) nozzle(1); translate([20,0,0]) nozzle(2); translate([40,0,0]) nozzle(3); }else if (view=="movie"){ translate([$t*100,0,0]) extruder(0,0,false,false); }else if (view=="test"){ test(); }