-rw-r--r-- | fanduct.scad | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/fanduct.scad b/fanduct.scad index 1090e95..fc57c57 100644 --- a/fanduct.scad +++ b/fanduct.scad | |||
@@ -245,100 +245,104 @@ module fanduct(type=type,ductshape=ductshape,dual=dual) { | |||
245 | 245 | ||
246 | // ***air intake | 246 | // ***air intake |
247 | module intake(what) { | 247 | module intake(what) { |
248 | module placeit() { | 248 | module placeit() { |
249 | translate([-fanduct_ir-2*fanduct_shell-fanduct_w-inlet_away,0,fanduct_shell]) | 249 | translate([-fanduct_ir-2*fanduct_shell-fanduct_w-inlet_away,0,fanduct_shell]) |
250 | rotate([0,-90,0]) | 250 | rotate([0,-90,0]) |
251 | children(); | 251 | children(); |
252 | } | 252 | } |
253 | if(what=="in") { | 253 | if(what=="in") { |
254 | placeit() translate([0,-inlet_w/2,0]) { | 254 | placeit() translate([0,-inlet_w/2,0]) { |
255 | difference() { | 255 | difference() { |
256 | cube(size=[inlet_h,inlet_w,inlet_long_l+fanduct_shell]); | 256 | cube(size=[inlet_h,inlet_w,inlet_long_l+fanduct_shell]); |
257 | translate([inlet_h+fanduct_shell,0,inlet_long_l+fanduct_shell]) | 257 | translate([inlet_h+fanduct_shell,0,inlet_long_l+fanduct_shell]) |
258 | rotate([-90,0,0]) | 258 | rotate([-90,0,0]) |
259 | translate([0,0,-1]) | 259 | translate([0,0,-1]) |
260 | cylinder(r=inlet_h,h=inlet_w+2*fanduct_shell+2,$fn=inlet_h*4); | 260 | cylinder(r=inlet_h,h=inlet_w+2*fanduct_shell+2,$fn=inlet_h*4); |
261 | } | 261 | } |
262 | // supports | 262 | // supports |
263 | for(i=[-1,0,1]) | 263 | for(i=[-1,0,1]) |
264 | translate([-fanduct_shell, | 264 | translate([-fanduct_shell, |
265 | (i+1)*(inlet_w-extrusion_width)/2, | 265 | (i+1)*(inlet_w-extrusion_width)/2, |
266 | -inlet_away-fanduct_w/2]) | 266 | -inlet_away-fanduct_w/2]) |
267 | cube(size=[fanduct_shell, | 267 | cube(size=[fanduct_shell, |
268 | extrusion_width, | 268 | extrusion_width, |
269 | inlet_long_l+fanduct_shell+inlet_away+fanduct_w/2]); | 269 | inlet_long_l+fanduct_shell+inlet_away+fanduct_w/2]); |
270 | } | 270 | } |
271 | hull() { | 271 | hull() { |
272 | placeit() translate([-fanduct_shell,-inlet_w/2-fanduct_shell,0]) | 272 | placeit() translate([-fanduct_shell,-inlet_w/2-fanduct_shell,0]) |
273 | cube(size=[inlet_h+2*fanduct_shell,inlet_w+2*fanduct_shell,fanduct_shell]); | 273 | cube(size=[inlet_h+2*fanduct_shell,inlet_w+2*fanduct_shell,fanduct_shell]); |
274 | translate([-fanduct_ir-fanduct_shell-fanduct_w/2,0,0]) | 274 | translate([-fanduct_ir-fanduct_shell-fanduct_w/2,0,0]) |
275 | translate([0,-inlet_w/2-fanduct_shell/2,0]) | 275 | translate([0,-inlet_w/2-fanduct_shell/2,0]) |
276 | cube(size=[1,inlet_w+fanduct_shell,fanduct_shell*2+fanduct_h]); | 276 | cube(size=[1,inlet_w+fanduct_shell,fanduct_shell*2+fanduct_h]); |
277 | } | 277 | } |
278 | }else if(what=="out") { | 278 | }else if(what=="out") { |
279 | placeit() translate([fanduct_shell,-inlet_w/2+fanduct_shell,0]) | 279 | placeit() translate([fanduct_shell,-inlet_w/2+fanduct_shell,0]) |
280 | cube(size=[inlet_h-2*fanduct_shell,inlet_w-2*fanduct_shell,inlet_long_l+fanduct_shell+1]); | 280 | cube(size=[inlet_h-2*fanduct_shell,inlet_w-2*fanduct_shell,inlet_long_l+fanduct_shell+1]); |
281 | hull() { | 281 | hull() { |
282 | placeit() translate([fanduct_shell,-inlet_w/2+fanduct_shell,0]) | 282 | placeit() translate([fanduct_shell,-inlet_w/2+fanduct_shell,0]) |
283 | cube(size=[inlet_h-2*fanduct_shell,inlet_w-2*fanduct_shell,fanduct_shell]); | 283 | cube(size=[inlet_h-2*fanduct_shell,inlet_w-2*fanduct_shell,fanduct_shell]); |
284 | translate([-fanduct_ir-fanduct_shell-fanduct_w/2,0,fanduct_shell]) | 284 | translate([-fanduct_ir-fanduct_shell-fanduct_w/2,0,fanduct_shell]) |
285 | translate([0,-inlet_w/2+fanduct_shell,0]) | 285 | translate([0,-inlet_w/2+fanduct_shell,0]) |
286 | cube(size=[1,inlet_w-2*fanduct_shell,fanduct_h]); | 286 | cube(size=[1,inlet_w-2*fanduct_shell,fanduct_h]); |
287 | } | 287 | } |
288 | } | 288 | } |
289 | } | 289 | } |
290 | 290 | ||
291 | // ***DUCT TAILS!!! WOO-OO! (every day they're out there making duct tails…) | 291 | // ***DUCT TAILS!!! WOO-OO! (every day they're out there making duct tails…) |
292 | module tails(what) { | 292 | module tails(what) { |
293 | if(what=="in") { | 293 | if(dual) { |
294 | for(mx=[0,1]) mirror([mx,0,0]) | 294 | // XXX: not sure if it will ever be |
295 | translate([fanduct_ir+fanduct_shell+fanduct_w/2,0,fanduct_shell+fanduct_h/2]) | 295 | }else{ |
296 | rotate([90,0,90]) | 296 | if(what=="in") { |
297 | translate([0,0,-snapper_d/2]) | 297 | for(mx=[0,1]) mirror([mx,0,0]) |
298 | snapper(d=snapper_d,o=snapper_overlap,side=0,l=fanduct_h*3/2+fanduct_shell); | 298 | translate([fanduct_ir+fanduct_shell+fanduct_w/2,0,fanduct_shell+fanduct_h/2]) |
299 | rotate([90,0,90]) | ||
300 | translate([0,0,-snapper_d/2]) | ||
301 | snapper(d=snapper_d,o=snapper_overlap,side=0,l=fanduct_h*3/2+fanduct_shell); | ||
302 | } | ||
299 | } | 303 | } |
300 | } | 304 | } |
301 | 305 | ||
302 | module parts(what) { | 306 | module parts(what) { |
303 | union() { | 307 | union() { |
304 | duct(what); | 308 | duct(what); |
305 | marks(what); | 309 | marks(what); |
306 | output(what); | 310 | output(what); |
307 | intake(what); | 311 | intake(what); |
308 | tails(what); | 312 | tails(what); |
309 | } | 313 | } |
310 | } | 314 | } |
311 | 315 | ||
312 | difference() { | 316 | difference() { |
313 | parts("in"); | 317 | parts("in"); |
314 | parts("out"); | 318 | parts("out"); |
315 | } | 319 | } |
316 | intersection() { | 320 | intersection() { |
317 | union() { | 321 | union() { |
318 | output("airguides"); | 322 | output("airguides"); |
319 | sphere(d=epsilon); | 323 | sphere(d=epsilon); |
320 | } | 324 | } |
321 | union() { | 325 | union() { |
322 | duct("in"); output("in"); intake("in"); | 326 | duct("in"); output("in"); intake("in"); |
323 | } | 327 | } |
324 | } | 328 | } |
325 | } | 329 | } |
326 | 330 | ||
327 | view="*"; // hcut|vcut|* | 331 | view="*"; // hcut|vcut|* |
328 | 332 | ||
329 | hinfinity=4*(fanduct_ir+fanduct_shell*2+fanduct_w+inlet_away); | 333 | hinfinity=4*(fanduct_ir+fanduct_shell*2+fanduct_w+inlet_away); |
330 | vinfinity=2*(fanduct_shell*2+fanduct_h+inlet_h); | 334 | vinfinity=2*(fanduct_shell*2+fanduct_h+inlet_h); |
331 | if(view=="hcut") { | 335 | if(view=="hcut") { |
332 | difference() { | 336 | difference() { |
333 | fanduct(); | 337 | fanduct(); |
334 | translate([-hinfinity/2,-hinfinity/2,fanduct_shell+fanduct_h/2]) | 338 | translate([-hinfinity/2,-hinfinity/2,fanduct_shell+fanduct_h/2]) |
335 | cube(size=[hinfinity,hinfinity,vinfinity]); | 339 | cube(size=[hinfinity,hinfinity,vinfinity]); |
336 | } | 340 | } |
337 | }else if(view=="vcut") { | 341 | }else if(view=="vcut") { |
338 | difference() { | 342 | difference() { |
339 | fanduct(); | 343 | fanduct(); |
340 | translate([-hinfinity/2,0,-vinfinity/2]) | 344 | translate([-hinfinity/2,0,-vinfinity/2]) |
341 | cube(size=[hinfinity,hinfinity,vinfinity]); | 345 | cube(size=[hinfinity,hinfinity,vinfinity]); |
342 | } | 346 | } |
343 | }else fanduct(); | 347 | }else fanduct(); |
344 | /* vim:set sw=1 ai: */ | 348 | /* vim:set sw=1 ai: */ |