$fn = 100; eps = 0.01; board = true; stripes = true; fans = true; only = "*"; if (board && (only == "*" || only == "b")) { color("red") difference() { difference() { union() { board(); tail(); } stripes(); } antiboard(); } } if (stripes && (only == "*" || only == "s")) { color("white") difference() { translate([0, 0, eps]) intersection() { board(); stripes(); } antiboard(); } } if (fans && (only == "*" || only == "f")) { color("silver") fans(); } module board() { cube([100, 20, 4]); translate([100, 10, 0]) cylinder(h=4, d=20); translate([0, 0, 2]) rotate([0, 90, 0]) cylinder(h=100, d=4); translate([0, 20, 2]) rotate([0, 90, 0]) cylinder(h=100, d=4); translate([100, 10, 2]) torus(or=12, ir=8); translate([0, 0, 2]) rotate([-90, 0, 0]) cylinder(h=20, d=4); translate([0, 0, 2]) sphere(d=4); translate([0, 20, 2]) sphere(d=4); } module antiboard() { translate([90, 10, -1]) cylinder(h=6, d=16); translate([90, 10, 1]) cylinder(h=2, d=18); translate([55, 10, -1]) cylinder(h=6, d=16); translate([55, 10, 1]) cylinder(h=2, d=18); translate([20, 10, -1]) cylinder(h=6, d=16); translate([20, 10, 1]) cylinder(h=2, d=18); } module stripes() { o = 6; difference() { union() { translate([-5, 4, -1]) cube([120, 4, 6]); translate([-5, 12, -1]) cube([120, 4, 6]); difference() { translate([o + 0, 4, 1]) cube([10, 12, 2]); translate([-8, 0, 0]) cube([10, 14, 4]); } translate([o + 20, 4, 1]) cube([10, 12, 2]); translate([o + 40, 4, 1]) cube([10, 12, 2]); translate([o + 60, 4, 1]) cube([10, 12, 2]); translate([o + 80, 4, 1]) cube([10, 12, 2]); difference() { translate([o + 100, 4, 1]) cube([10, 12, 2]); translate([108, 0, 0]) cube([10, 14, 4]); } } difference() { translate([o - 10, 3, 1]) cube([10, 14, 2]); translate([-8, 0, 0]) cube([10, 16, 4]); } translate([o + 10, 3, 1]) cube([10, 14, 2]); translate([o + 30, 3, 1]) cube([10, 14, 2]); translate([o + 50, 3, 1]) cube([10, 14, 2]); translate([o + 70, 3, 1]) cube([10, 14, 2]); translate([o + 90, 3, 1]) cube([10, 14, 2]); } } module fans() { translate([90, 10, 0]) fan(); translate([55, 10, 0]) fan(); translate([20, 10, 0]) fan(); } module fan() { difference() { cylinder(h=4, d=16); translate([0, 0, -1]) cylinder(h=6, d=15); } difference() { cylinder(h=4, d=12); translate([0, 0, -1]) cylinder(h=6, d=11); } difference() { cylinder(h=4, d=8); translate([0, 0, -1]) cylinder(h=6, d=7); } translate([0, 0, 1]) difference() { cylinder(h=2, d=18); translate([0, 0, -1]) cylinder(h=4, d=15); } translate([0, 0, 2]) rotate([0, 0, 0]) cube([16, 0.5, 4], center=true); translate([0, 0, 2]) rotate([0, 0, 90]) cube([16, 0.5, 4], center=true); translate([0, 0, 2]) rotate([0, 0, 45]) cube([16, 0.5, 4], center=true); translate([0, 0, 2]) rotate([0, 0, -45]) cube([16, 0.5, 4], center=true); } module tail() { intersection() { union() { translate([0, 8, 0]) cube([10, 4, 16]); translate([0, 10, 2]) cylinder(h=10, d=4); } translate([0, 10, 2]) resize([20, 4, 20]) sphere(d=20); } translate([0, 12, 2]) rotate([90, 0, 0]) cylinder(h=4, d=4); } module torus(or, ir) { r = (or - ir) / 2; rotate_extrude() translate([ir + r, 0, 0]) circle(r); }