-rw-r--r-- | multimixer.scad | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/multimixer.scad b/multimixer.scad new file mode 100644 index 0000000..88fd6bf --- a/dev/null +++ b/multimixer.scad @@ -0,0 +1,79 @@ +layer_height=.2; extrusion_width=.5; +epsilon=.01; + +use <pushfittery.scad>; +include <pushfit_data.scad>; + +module multimixer( + filament_d = 1.75, + liner_od = 4, liner_id = 2, + angle = 15, // to the vertical (output) axis + inputs = 4, + minshell = 2*extrusion_width, + shell = 5*extrusion_width, + pf = pushfit_embeddest, + debug = true +) { + fnd = 4*PI; fnr = 2*fnd; + + pushfit_d = pf_d(pf); + pushfit_h = pf_h(pf); + + angular_step = 360/inputs; + inputogon_angle = 180*(inputs-2)/inputs; + + sinsin = sin(angle)*sin(angular_step/2); + function l_to(d) = d*cos(asin(sinsin))/sinsin; + l_output = liner_od; + l_input = l_to(pushfit_d/2+minshell); + l_fork = l_to(liner_id/2); + l_narrow = l_to(liner_od/2+minshell); + + module forinputs() { + for(zr=[0:angular_step:359]) rotate([0,0,zr]) rotate([0,angle,0]) children(); + }//forinputs module + module foroutput() { + rotate([180,0,0]) children(); + } + + //translate([pf_d(pf)/2+shell,0,0]) + //translate([0,0,l_output+pushfit_h]) + difference() { + hull() { + forinputs() + translate([0,0,l_input+pushfit_h]) mirror([0,0,1]) + cylinder(d=pushfit_d+shell*2,h=epsilon,$fn=pushfit_d*fnd); + foroutput() + translate([0,0,l_output+pushfit_h]) { + cylinder(d=pushfit_d+shell*2,h=epsilon,$fn=pushfit_d*fnd); + } + } + forinputs() { + translate([0,0,l_input]) pushfit(pf); + translate([0,0,l_narrow]) { + cylinder(d=liner_od,h=l_input+1-l_narrow,$fn=liner_od*fnd); + mirror([0,0,1]) translate([0,0,-epsilon]) + cylinder(d1=(liner_id+liner_od)/2,d2=liner_id,h=liner_id,$fn=liner_od*fnd); + } + cylinder(d=liner_id,h=l_input+epsilon,$fn=liner_id*fnd); + } + foroutput() { + translate([0,0,l_output]) pushfit(pf); + cylinder(d=liner_od,h=l_input+1,$fn=liner_od*fnd); + } + hull() { + forinputs() + translate([0,0,l_fork]) cylinder(d=liner_id,h=epsilon,$fn=liner_id*fnd); + foroutput() + cylinder(d=liner_id,h=epsilon,$fn=liner_id*fnd); + } + if(debug) { + translate([0,0,-20/*TODO:*/]) + rotate_extrude(angle=angular_step) + square([50,100]/*TODO:*/); + } + } + +} + +multimixer(debug=true); |