include ; hb_w = 16; // width (along X axis) hb_l = 20; // length (along Y axis) hb_h = 11.5; // height (guess!) hb_d = 6; // heatbreak diameter n_offset_w = 8; // nozzle offset from the left n_offset_l = 4.5; // nozzle offset from the front n_d = 7/cos(30); // nozzle (outermost) diameter hs_offset_w = 8; // heater screw offset from the left hs_offset_l = 17.5; // heater screw offset from the front hs_d = 5.7; // heater screw diameter hs_t = 1.5; // heater screw head thickness ts_offset_l = 3.5; // thermistor screw offset from the front ts_offset_h = 4.8; // thermistor screw offset from the bottom ts_d = 7; // thermistor screw diameter ts_t = 2.6; // thermistor screw head thickness c_offset_l = 11.5; // cartrdige offset from the from c_offset_h = 4; // cartridge offset from the bottom c_d = 6.1; // cartrdige diameter c_t = 1.7; // cartridge protrusion length (thickness) c_tw = 4.3; // thickness of the other cartridge end with wires sv=hs_t+ss; the_w = ss + max(c_tw,ts_t)+hb_w+c_t + ss; the_l = ss + hb_l + ss; the_h = sv + hb_h + ss; /* Nozzle stuff */ n_protrude = 0.4; // nozzle tip protrusion from silicone n_h1 = 3.6; // nozzle cone base from the heater body (minimal) n_cone_h = 2; // nozzle cone height n_cone_d2 = 1; // pad diameter of the 0.4 nozzle (works up to 0.6); see // http://wiki.e3d-online.com/images/3/3a/V6-NOZZLE-ALL.pdf n_cone_d1 = n_cone_h * tan(40) * 2 + n_cone_d2; codpiece_h = n_h1 + n_cone_h - n_protrude; use ; module heatershape(bubbled=true, codpiece=false) { m = n_offset_l-hb_d/2; module topholes(h) { hull() { for(sx=[-1,1]) for(sy=[-1,1]) translate([hb_w/2+sx*(hb_w/2-m-hb_d/2),hb_l/2+sy*(hb_l/2-m-hb_d/2),0]) cylinder(d=hb_d,h=h,$fn=24); } translate([-c_tw,c_offset_l-c_d/2,0]) cube(size=[hb_w/2+c_tw,c_d,h]); } // main body and protrusion // body cube(size=[hb_w,hb_l,hb_h]); // protrusion translate([0,0,hb_h]) { // irrelevant, because we print upside-down: mo = m+max(c_t,c_tw)+ss; th=3*ss; mo = protrude/4; th = protrude/2; translate([0,0,-1]) topholes(h=ss+th); if (!abro) translate([0,0,ss+protrude-mo-th]) hull() { topholes(h=layer_height); translate([-c_tw-ss,-ss,mo]) cube(size=[the_w,the_l,th]); } else translate([-c_tw-ss,-ss,ss]) cube(size=[the_w,the_l,th]); } // nozzle translate([n_offset_w,n_offset_l,1]) mirror([0,0,1]) if (codpiece) { mc_d2 = n_cone_d2 + n_protrude * tan(40) * 2; intersection() { cylinder(d = n_d, h = n_h1 + 1 + epsilon, $fn=24); cylinder(d1 = n_d * 2, d2 = 0, h = n_h1 * 2 + 1, $fn=24); } translate([0, 0, n_h1 + 1]) cylinder(h = n_cone_h - n_protrude, d1 = n_cone_d1, d2 = mc_d2, $fn = 32); } else cylinder(d=n_d,h=sv+1,$fn=24); // heater screw translate([hs_offset_w,hs_offset_l,1]) mirror([0,0,1]) cylinder(d=hs_d,h=hs_t+1,$fn=24); // thermistor screw translate([1,ts_offset_l,ts_offset_h]) rotate([0,-90,0]) cylinder(d=ts_d,h=ts_t+1,$fn=24); // cartridge on the right translate([hb_w-1,c_offset_l,c_offset_h]) rotate([0,90,0]) cylinder(d=c_d,h=c_t+1,$fn=24); // cartrdige on the left translate([1,c_offset_l,c_offset_h]) rotate([0,-90,0]) cylinder(d=c_d,h=c_tw+1,$fn=24); translate([-c_tw,c_offset_l-c_d/2,c_offset_h]) cube(size=[c_tw+1,c_d,hb_h-c_offset_h]); if(bubbled) { for(y=[0,hb_l]) translate([0,y,0]) bubbles(size=[hb_w,ss/2,hb_h]); rotate([0,0,90]) bubbles(size=[hb_l,(c_tw+ss)/2,hb_h],d=(c_tw+ss)/2,s=1.1*(c_tw+ss)/2); translate([hb_w,0,0]) rotate([0,0,90]) bubbles(size=[hb_l,(c_t+ss)/2,hb_h],d=(c_t+ss),s=1.1*(c_t+ss)); rotate([-90,0,0]) bubbles(size=[hb_w,sv/2,hb_l]); } } function vc(d,h) = PI*pow(d/2,2)*h; // cylinder volume vol_ = the_w*the_l*the_h - hb_w*hb_l*hb_h // heater block - vc(d=n_d,h=sv) // nozzle - vc(d=hs_d,h=hs_t) // heater screw - vc(d=ts_d,h=ts_t) // thermistor_screw - vc(d=c_d,h=c_t) // cartridge on the right - vc(d=c_d,h=c_tw)/2 - c_d*c_tw*(hb_h-c_offset_h) // cartridge on the left ; vol = vol_*1.2; echo("volume",vol); use ; use ; codpiece = true; view="inner"; view(view=view,volume=vol) { cp_h = codpiece ? codpiece_h - sv : 0; prt = abro ? protrude / 2 : protrude; difference() { union() { mold(size=[the_w,the_l,the_h],s=ms,v_protrude=prt,introffset=ss+c_offset_l); if (codpiece) translate([0, 0, -cp_h]) cube([the_w + ms * 2, the_l + ms * 2, cp_h + epsilon]); } if (codpiece) translate([ms + c_tw + ss + n_offset_w, ms + ss + n_offset_l, ms]) { scale([1, 1, codpiece_h / (n_d + 2)]) sphere(d = n_d + 2, $fn = 64); } } translate([ms+c_tw+ss,ms+ss,ms+sv]) heatershape(true, codpiece); translate([ms+epsilon,ms+epsilon,ms+epsilon - cp_h]) cube(size=[the_w-2*epsilon,the_l-2*epsilon,the_h-2*epsilon + cp_h]); } /* vim:set ai sw=1: */