author | Michael Krelin <hacker@klever.net> | 2016-06-13 14:10:26 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2016-06-13 14:10:26 (UTC) |
commit | 96c68b7fc20735d0cacb027827282f070403d885 (patch) (side-by-side diff) | |
tree | fd4adc6046f2b8b3d2e01b9ea415fbb9f96b3726 | |
parent | 2d09f1c09a64adab3a756e5d7108a2138682a2f3 (diff) | |
download | fanductory-96c68b7fc20735d0cacb027827282f070403d885.zip fanductory-96c68b7fc20735d0cacb027827282f070403d885.tar.gz fanductory-96c68b7fc20735d0cacb027827282f070403d885.tar.bz2 |
dualism: the duct
-rw-r--r-- | fanduct.scad | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/fanduct.scad b/fanduct.scad index 3e2a15e..b9689c9 100644 --- a/fanduct.scad +++ b/fanduct.scad @@ -25,24 +25,33 @@ inlet_h = 17; // inlet height inlet_short_l = 7; // inlet length of protrusion (or depth of intrusion:)) inlet_away = 15; // how far away inlet is inlet_long_l = inlet_short_l+inlet_h; hotend_clearance = heater_clearance; +nozzles_apart = 18; // distance between nozzles for dual hotend +space_behind_nozzle = 15; // space behind the nozzle where we're allowed to go + // without the fear of hitting carriage + snapper_d = 8; snapper_overlap=0.2; // snip snap smooth_f = 120; -type="3jets"; // "3jets" ; // circular|3jets +type="circular"; // circular|3jets ductshape="square"; // square|round +dual=true; // dual or single +to_midduct = fanduct_ir+fanduct_shell+fanduct_w/2; +dual_spots = [ [+space_behind_nozzle, -(to_midduct+nozzles_apart/2)], + [- to_midduct, -(to_midduct+nozzles_apart/2)], + [- to_midduct, 0] ]; -module fanduct(type=type,ductshape=ductshape) { - +module fanduct(type=type,ductshape=ductshape,dual=dual) { // *** duct is all around! module duct(what) { + module single() { if(what=="in") { sh = fanduct_w+2*fanduct_shell; sv = fanduct_h+2*fanduct_shell; smax = max(sh,sv); rotate_extrude($fn=smooth_f) if(ductshape=="round") translate([sh/2+fanduct_ir,sv/2]) @@ -66,12 +75,39 @@ module fanduct(type=type,ductshape=ductshape) { translate([sh/2,sv/2]) scale([sh/smax,sv/smax]) circle(d=smax,$fn=36); } } } + module dual() { + module hulls(spots=dual_spots) { + for(my=[0,1]) mirror([0,my,0]) for(pn=[0:1:len(spots)-2]) hull() { + for(p=[spots[pn],spots[pn+1]]) translate(p) children(); + } + } + if(what=="in") { + hulls() cylinder(d=fanduct_w+2*fanduct_shell,h=fanduct_h+2*fanduct_shell); + }else if(what=="out") { + sh = fanduct_w; sv = fanduct_h; + smax = max(sh,sv); + translate([0,0,fanduct_shell]) hulls() { + cylinder(d=fanduct_w,h=fanduct_h/2); + translate([0,0,fanduct_h/2]) + scale([sh/smax,sh/smax,sv/smax]) + intersection() { + sphere(d=smax,$fn=36); + translate([0,0,-1]) + cylinder(d=smax+2,h=smax+2,$fn=36); + } + } + } + } + + if(dual) dual(); + else single(); + } // *** bumps for easier position adjustments in line with hotend module marks(what) { if(what=="in") { for(y=[-1,1]) hull() for(z=[0,-fanduct_shell-fanduct_h/2]) |