eps = 0.01; infty = 100; base_d = 20; wall = 1.5; base_wall = 2.5; center_d = 8 + 0.3; foam_horiz = 6 + 0.3; foam_vert = 6 + 0.6; support_h = 50; top_d = foam_horiz + 8; side_w = 40; screw_dist = 31.5; screw_d = 3; // half of the diamond diagonals diamond_x = 12; diamond_y = 32; diamond_wall_h = 4; diamond_x1 = 9; diamond_y1 = 27; diamond_x2 = 7; diamond_y2 = 21; module body() { // base circle cylinder(r = base_d/2, h = base_wall); // diamond front scale([1, diamond_y/diamond_x, 1]) cylinder(r = diamond_x, h = base_wall, $fn = 4); difference() { scale([1, diamond_y1/diamond_x1, 1]) cylinder(r = diamond_x1, h = base_wall + diamond_wall_h, $fn = 4); translate([0, 0, base_wall]) scale([1, diamond_y2/diamond_x2, 1]) cylinder(r = diamond_x2, h = diamond_wall_h+eps, $fn = 4); } // wing front translate([-side_w/2, -foam_horiz/2-wall, 0]) cube([side_w, foam_horiz+2*wall, base_wall]); for (x = [-1, 1]) scale([x, 1, 1]) hull() { translate([base_d/2, -foam_horiz/2-wall, 0]) cube([side_w/2-base_d/2, foam_horiz+2*wall, eps]); translate([base_d*.9, -foam_horiz/2-wall, 20]) cube([side_w/2-base_d*.55, foam_horiz+2*wall, eps]); } } difference() { body(); // screw holes for (angle = [0:90:360]) rotate([0, 0, angle]) translate([screw_dist/2, 0, -eps]) cylinder(r = screw_d/2, h = base_wall + 2*eps); // tube hole translate([0, 0, -eps]) cylinder(r = center_d/2, h = base_wall + 2*eps); // horizontal foam difference() { translate([-infty/2, -foam_horiz/2, base_wall]) cube([infty, foam_horiz, support_h + eps]); translate([-diamond_x1, 0, base_wall]) cube([2*diamond_x1, foam_horiz/2, support_h + eps]); } // cable hole translate([6, 6, -eps]) rotate([0, 0, -45]) scale([1, 1/2, 1]) cylinder(r = 4, h = support_h + base_wall + 2*eps); // vertical foam // translate([-foam_vert/2, -side_w/2-eps, base_wall]) // cube([foam_vert, side_w + 2*eps, support_h + eps]); }