summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--fanduct.scad14
1 files changed, 7 insertions, 7 deletions
diff --git a/fanduct.scad b/fanduct.scad
index fa14b7a..75a3bb1 100644
--- a/fanduct.scad
+++ b/fanduct.scad
@@ -47,211 +47,211 @@ module fanduct(type=type,ductshape=ductshape) {
47 translate([sh/2+fanduct_ir,sv/2]) 47 translate([sh/2+fanduct_ir,sv/2])
48 scale([sh/smax,sv/smax]) 48 scale([sh/smax,sv/smax])
49 circle(d=smax,$fn=4*smax); 49 circle(d=smax,$fn=4*smax);
50 else if(ductshape=="square") 50 else if(ductshape=="square")
51 translate([fanduct_ir,0]) 51 translate([fanduct_ir,0])
52 square([sh,sv]); 52 square([sh,sv]);
53 }else if(what=="out") { 53 }else if(what=="out") {
54 sh = fanduct_w; sv = fanduct_h; 54 sh = fanduct_w; sv = fanduct_h;
55 smax = max(sh,sv); 55 smax = max(sh,sv);
56 rotate_extrude($fn=smooth_f) 56 rotate_extrude($fn=smooth_f)
57 if(ductshape=="round") 57 if(ductshape=="round")
58 translate([sh/2+fanduct_shell+fanduct_ir,sv/2+fanduct_shell]) 58 translate([sh/2+fanduct_shell+fanduct_ir,sv/2+fanduct_shell])
59 scale([sh/smax,sv/smax]) 59 scale([sh/smax,sv/smax])
60 circle(d=smax,$fn=4*smax); 60 circle(d=smax,$fn=4*smax);
61 else if(ductshape=="square") 61 else if(ductshape=="square")
62 translate([fanduct_ir+fanduct_shell,fanduct_shell]) 62 translate([fanduct_ir+fanduct_shell,fanduct_shell])
63 union() { 63 union() {
64 square([sh,sv/2]); 64 square([sh,sv/2]);
65 translate([sh/2,sv/2]) 65 translate([sh/2,sv/2])
66 scale([sh/smax,sv/smax]) 66 scale([sh/smax,sv/smax])
67 circle(d=smax,$fn=36); 67 circle(d=smax,$fn=36);
68 } 68 }
69 } 69 }
70 } 70 }
71 71
72 // ***bumps for easier position adjustments in line with hotend 72 // ***bumps for easier position adjustments in line with hotend
73 module marks(what) { 73 module marks(what) {
74 if(what=="in") { 74 if(what=="in") {
75 for(y=[-1,1]) 75 for(y=[-1,1])
76 hull() for(z=[0,-fanduct_shell-fanduct_h/2]) 76 hull() for(z=[0,-fanduct_shell-fanduct_h/2])
77 translate([0,y*(fanduct_ir+fanduct_shell+fanduct_w/2),fanduct_shell*2+fanduct_h+z]) 77 translate([0,y*(fanduct_ir+fanduct_shell+fanduct_w/2),fanduct_shell*2+fanduct_h+z])
78 rotate([90,0,0]) { 78 rotate([90,0,0]) {
79 cylinder(r=fanduct_shell,h=fanduct_w,center=true,$fn=30); 79 cylinder(r=fanduct_shell,h=fanduct_w,center=true,$fn=30);
80 for(z=[-1,1]) translate([0,0,z*fanduct_w/2]) 80 for(z=[-1,1]) translate([0,0,z*fanduct_w/2])
81 sphere(r=fanduct_shell,$fn=30); 81 sphere(r=fanduct_shell,$fn=30);
82 } 82 }
83 } 83 }
84 } 84 }
85 85
86 // ***output 86 // ***output
87 module output(what,type=type) { 87 module output(what,type=type) {
88 module guideline(xyxy) { 88 module guideline(xyxy) {
89 module pin(xy) { 89 module pin(xy) {
90 translate([xy[0],xy[1],0]) 90 translate([xy[0],xy[1],0])
91 cylinder(d=2*extrusion_width,h=2*fanduct_shell+inlet_h,$fn=6); 91 cylinder(d=2*extrusion_width,h=2*fanduct_shell+inlet_h,$fn=6);
92 } 92 }
93 xyxyxy=concat(xyxy,[[0,0]]); 93 xyxyxy=concat(xyxy,[[0,0]]);
94 for(i=[0:1:len(xyxyxy)-2]) 94 for(i=[0:1:len(xyxyxy)-2])
95 hull() for(j=[i,i+1]) pin(xyxyxy[j]); 95 hull() for(j=[i,i+1]) pin(xyxyxy[j]);
96 } 96 }
97 97
98 module circus(what) { 98 module circus(what) {
99 if(what=="in") { 99 if(what=="in") {
100 difference() { 100 difference() {
101 rotate_extrude($fn=smooth_f) 101 rotate_extrude($fn=smooth_f)
102 polygon([ 102 polygon([
103 [0,-fanduct_elevation+fanduct_blowtarget+epsilon], 103 [0,-fanduct_elevation+fanduct_blowtarget+epsilon],
104 [fanduct_ir+fanduct_shell,fanduct_shell+fanduct_h/2], 104 [fanduct_ir+fanduct_shell,fanduct_shell+fanduct_h/2],
105 [fanduct_ir+fanduct_shell+fanduct_w/2,0], 105 [fanduct_ir+fanduct_shell+fanduct_w/2,0],
106 [0,-fanduct_elevation+fanduct_blowtarget-epsilon]]); 106 [0,-fanduct_elevation+fanduct_blowtarget-epsilon]]);
107 translate([0,0,-1]) 107 translate([0,0,-1])
108 cylinder(r=hotend_clearance,h=fanduct_h+2*fanduct_shell+2,$fn=smooth_f); 108 cylinder(r=hotend_clearance,h=fanduct_h+2*fanduct_shell+2,$fn=smooth_f);
109 mirror([0,0,1]) 109 mirror([0,0,1])
110 translate([0,0,-epsilon]) 110 translate([0,0,-epsilon])
111 cylinder(r=fanduct_ir+fanduct_shell+1,h=fanduct_elevation+.1+2); 111 cylinder(r=fanduct_ir+fanduct_shell+1,h=fanduct_elevation+.1+2);
112 } 112 }
113 }else if(what=="out") { 113 }else if(what=="out") {
114 rotate_extrude($fn=smooth_f) 114 rotate_extrude($fn=smooth_f)
115 polygon([ 115 polygon([
116 [0,-fanduct_elevation+fanduct_blowtarget+epsilon], 116 [0,-fanduct_elevation+fanduct_blowtarget+epsilon],
117 [fanduct_ir+fanduct_shell+1,fanduct_h/2], 117 [fanduct_ir+fanduct_shell+1,fanduct_h/2],
118 [fanduct_ir+fanduct_w/2+fanduct_shell+1,fanduct_shell], 118 [fanduct_ir+fanduct_w/2+fanduct_shell+1,fanduct_shell],
119 [0,-fanduct_elevation+fanduct_blowtarget-epsilon]]); 119 [0,-fanduct_elevation+fanduct_blowtarget-epsilon]]);
120 }else if(what=="airguides") { 120 }else if(what=="airguides") {
121 inr = fanduct_ir+fanduct_shell; our = inr+fanduct_w; 121 inr = fanduct_ir+fanduct_shell; our = inr+fanduct_w;
122 union() { 122 union() {
123 for(my=[0,1]) mirror([0,my,0]) { 123 for(my=[0,1]) mirror([0,my,0]) {
124 guideline([ 124 guideline([
125 [-our,inlet_w/6], 125 [-our,inlet_w/6],
126 [-inr*sin(60),inr*cos(60)] 126 [-inr*sin(60),inr*cos(60)]
127 ]); 127 ]);
128 a0=30; as=15; a1=180; 128 a0=30; as=15; a1=180;
129 for(a=[a0+as:as:a1]) { 129 for(a=[a0+as:as:a1]) {
130 f = as/(a1-a+as); 130 f = as/(a1-a+as);
131 rotate([0,0,a]) guideline([[-inr-fanduct_w*f,0]]); 131 rotate([0,0,a]) guideline([[-inr-fanduct_w*f,0]]);
132 } 132 }
133 guideline([ 133 guideline([
134 [-our+fanduct_w*cos(30)*3/4,fanduct_w*sin(30)*3/4], 134 [-our+fanduct_w*cos(30)*3/4,fanduct_w*sin(30)*3/4],
135 [-inr*cos(10),inr*sin(10)] 135 [-inr*cos(10),inr*sin(10)]
136 ]); 136 ]);
137 } 137 }
138 }/*union*/ 138 }/*union*/
139 }/*airguides*/ 139 }/*airguides*/
140 } 140 }
141 141
142 module jets(what) { 142 module jets(what) {
143 od = fanduct_h/2+fanduct_shell; 143 od = fanduct_h*2/3+fanduct_shell;
144 md = fanduct_ir+fanduct_shell+fanduct_w/2; 144 md = fanduct_ir+fanduct_shell+fanduct_w/2;
145 jww = 2*md*sin(jet_angle/2); 145 jww = 2*md*sin(jet_angle/2);
146 render(convexity=8) difference() { 146 difference() {
147 for(a=[0:120:359]) rotate([0,0,a]) { 147 for(a=[0:120:359]) rotate([0,0,a]) {
148 if(what=="in") { 148 if(what=="in") {
149 hull() { 149 hull() {
150 render(convexity=4) intersection() { 150 intersection() {
151 translate([md-fanduct_shell-fanduct_w/2,-jww/2,0]) 151 translate([md-fanduct_w/2,-jww/2,0])
152 cube(size=[fanduct_shell+fanduct_w/2,jww,od]); 152 cube(size=[fanduct_shell+fanduct_w/2,jww,od]);
153 duct(what=what); 153 duct(what=what);
154 } 154 }
155 translate([0,0,-fanduct_elevation]) sphere(r=.5); 155 translate([0,0,-fanduct_elevation]) sphere(r=.5);
156 } 156 }
157 }else if(what=="out") { 157 }else if(what=="out") {
158 hull() { 158 hull() {
159 render(convexity=4) intersection() { 159 intersection() {
160 translate([md-fanduct_w/2-fanduct_shell,-jww/2+fanduct_shell,fanduct_shell]) 160 translate([md-fanduct_w/2,-jww/2+fanduct_shell,fanduct_shell])
161 cube(size=[fanduct_w/2+fanduct_shell,jww-2*fanduct_shell,od-2*fanduct_shell]); 161 cube(size=[fanduct_w/2,jww-2*fanduct_shell,od-2*fanduct_shell]);
162 duct(what=what); 162 duct(what=what);
163 } 163 }
164 translate([0,0,-fanduct_elevation]) sphere(r=.2); 164 translate([0,0,-fanduct_elevation]) sphere(r=.2);
165 } 165 }
166 } 166 }
167 } 167 }
168 if(what=="in") { 168 if(what=="in") {
169 translate([0,0,-fanduct_elevation-2+epsilon]) 169 translate([0,0,-fanduct_elevation-2+epsilon])
170 cylinder(r=fanduct_ir+fanduct_shell*2+fanduct_w+1,h=fanduct_elevation+2); 170 cylinder(r=fanduct_ir+fanduct_shell*2+fanduct_w+1,h=fanduct_elevation+2);
171 translate([0,0,-hotend_clearance]) 171 translate([0,0,-hotend_clearance])
172 rotate([0,0,30]) 172 rotate([0,0,30])
173 cylinder(r1=hotend_clearance*2,r2=0,h=hotend_clearance*2,$fn=6); 173 cylinder(r1=hotend_clearance*2,r2=0,h=hotend_clearance*2,$fn=6);
174 } 174 }
175 } 175 }
176 } 176 }
177 177
178 if(type=="circular") circus(what); 178 if(type=="circular") circus(what);
179 else if(type=="3jets") jets(what); 179 else if(type=="3jets") jets(what);
180 } 180 }
181 181
182 // ***air intake 182 // ***air intake
183 module intake(what) { 183 module intake(what) {
184 module placeit() { 184 module placeit() {
185 translate([-fanduct_ir-2*fanduct_shell-fanduct_w-inlet_away,0,fanduct_shell]) 185 translate([-fanduct_ir-2*fanduct_shell-fanduct_w-inlet_away,0,fanduct_shell])
186 rotate([0,-90,0]) 186 rotate([0,-90,0])
187 children(); 187 children();
188 } 188 }
189 if(what=="in") { 189 if(what=="in") {
190 placeit() translate([0,-inlet_w/2,0]) { 190 placeit() translate([0,-inlet_w/2,0]) {
191 cube(size=[inlet_h,inlet_w,inlet_l+fanduct_shell]); 191 cube(size=[inlet_h,inlet_w,inlet_l+fanduct_shell]);
192 // supports 192 // supports
193 for(i=[-1,0,1]) 193 for(i=[-1,0,1])
194 translate([-fanduct_shell, 194 translate([-fanduct_shell,
195 (i+1)*(inlet_w-extrusion_width)/2, 195 (i+1)*(inlet_w-extrusion_width)/2,
196 -inlet_away-fanduct_w/2]) 196 -inlet_away-fanduct_w/2])
197 cube(size=[fanduct_shell, 197 cube(size=[fanduct_shell,
198 extrusion_width, 198 extrusion_width,
199 inlet_l+fanduct_shell+inlet_away+fanduct_w/2]); 199 inlet_l+fanduct_shell+inlet_away+fanduct_w/2]);
200 } 200 }
201 hull() { 201 hull() {
202 placeit() translate([-fanduct_shell,-inlet_w/2-fanduct_shell,0]) 202 placeit() translate([-fanduct_shell,-inlet_w/2-fanduct_shell,0])
203 cube(size=[inlet_h+2*fanduct_shell,inlet_w+2*fanduct_shell,fanduct_shell]); 203 cube(size=[inlet_h+2*fanduct_shell,inlet_w+2*fanduct_shell,fanduct_shell]);
204 translate([-fanduct_ir-fanduct_shell-fanduct_w/2,0,0]) 204 translate([-fanduct_ir-fanduct_shell-fanduct_w/2,0,0])
205 translate([0,-inlet_w/2-fanduct_shell/2,0]) 205 translate([0,-inlet_w/2-fanduct_shell/2,0])
206 cube(size=[1,inlet_w+fanduct_shell,fanduct_shell*2+fanduct_h]); 206 cube(size=[1,inlet_w+fanduct_shell,fanduct_shell*2+fanduct_h]);
207 } 207 }
208 }else if(what=="out") { 208 }else if(what=="out") {
209 placeit() translate([fanduct_shell,-inlet_w/2+fanduct_shell,0]) 209 placeit() translate([fanduct_shell,-inlet_w/2+fanduct_shell,0])
210 cube(size=[inlet_h-2*fanduct_shell,inlet_w-2*fanduct_shell,inlet_l+fanduct_shell+1]); 210 cube(size=[inlet_h-2*fanduct_shell,inlet_w-2*fanduct_shell,inlet_l+fanduct_shell+1]);
211 hull() { 211 hull() {
212 placeit() translate([fanduct_shell,-inlet_w/2+fanduct_shell,0]) 212 placeit() translate([fanduct_shell,-inlet_w/2+fanduct_shell,0])
213 cube(size=[inlet_h-2*fanduct_shell,inlet_w-2*fanduct_shell,fanduct_shell]); 213 cube(size=[inlet_h-2*fanduct_shell,inlet_w-2*fanduct_shell,fanduct_shell]);
214 translate([-fanduct_ir-fanduct_shell-fanduct_w/2,0,fanduct_shell]) 214 translate([-fanduct_ir-fanduct_shell-fanduct_w/2,0,fanduct_shell])
215 translate([0,-inlet_w/2+fanduct_shell,0]) 215 translate([0,-inlet_w/2+fanduct_shell,0])
216 cube(size=[1,inlet_w-2*fanduct_shell,fanduct_h]); 216 cube(size=[1,inlet_w-2*fanduct_shell,fanduct_h]);
217 } 217 }
218 } 218 }
219 } 219 }
220 220
221 // ***DUCT TAILS!!! WOO-OO! (every day they're out there making duct tails…) 221 // ***DUCT TAILS!!! WOO-OO! (every day they're out there making duct tails…)
222 module tails(what) { 222 module tails(what) {
223 if(what=="in") { 223 if(what=="in") {
224 for(mx=[0,1]) mirror([mx,0,0]) 224 for(mx=[0,1]) mirror([mx,0,0])
225 translate([fanduct_ir+fanduct_shell+fanduct_w/2,0,fanduct_shell+fanduct_h/2]) 225 translate([fanduct_ir+fanduct_shell+fanduct_w/2,0,fanduct_shell+fanduct_h/2])
226 rotate([90,0,90]) 226 rotate([90,0,90])
227 translate([0,0,-snapper_d/2]) 227 translate([0,0,-snapper_d/2])
228 snapper(d=snapper_d,o=snapper_overlap,side=0,l=fanduct_h*3/2+fanduct_shell); 228 snapper(d=snapper_d,o=snapper_overlap,side=0,l=fanduct_h*3/2+fanduct_shell);
229 } 229 }
230 } 230 }
231 231
232 module parts(what) { 232 module parts(what) {
233 union() { 233 union() {
234 duct(what); 234 duct(what);
235 marks(what); 235 marks(what);
236 output(what); 236 output(what);
237 intake(what); 237 intake(what);
238 tails(what); 238 tails(what);
239 } 239 }
240 } 240 }
241 241
242 difference() { 242 difference() {
243 parts("in"); 243 parts("in");
244 parts("out"); 244 parts("out");
245 } 245 }
246 intersection() { 246 intersection() {
247 union() { 247 union() {
248 output("airguides"); 248 output("airguides");
249 sphere(d=epsilon); 249 sphere(d=epsilon);
250 } 250 }
251 union() { 251 union() {
252 duct("in"); output("in"); intake("in"); 252 duct("in"); output("in"); intake("in");
253 } 253 }
254 } 254 }
255} 255}
256 256
257view="vcut"; // hcut|vcut|* 257view="vcut"; // hcut|vcut|*